|
Packit |
9a2dfb |
{-# LANGUAGE OverloadedStrings #-}
|
|
Packit |
9a2dfb |
{-# LANGUAGE ScopedTypeVariables #-}
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
module ErrorMessages
|
|
Packit |
9a2dfb |
(
|
|
Packit |
9a2dfb |
tests
|
|
Packit |
9a2dfb |
) where
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
import Prelude ()
|
|
Packit |
9a2dfb |
import Prelude.Compat
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
import Data.Aeson (FromJSON(..), eitherDecode)
|
|
Packit |
9a2dfb |
import Data.Proxy (Proxy(..))
|
|
Packit |
9a2dfb |
import Instances ()
|
|
Packit |
9a2dfb |
import Numeric.Natural (Natural)
|
|
Packit |
9a2dfb |
import Test.Framework (Test)
|
|
Packit |
9a2dfb |
import Test.Framework.Providers.HUnit (testCase)
|
|
Packit |
9a2dfb |
import Test.HUnit (Assertion, assertFailure, assertEqual)
|
|
Packit |
9a2dfb |
import qualified Data.ByteString.Lazy.Char8 as L
|
|
Packit |
9a2dfb |
import qualified Data.HashMap.Strict as HM
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
tests :: [Test]
|
|
Packit |
9a2dfb |
tests =
|
|
Packit |
9a2dfb |
[
|
|
Packit |
9a2dfb |
testCase "Int" int
|
|
Packit |
9a2dfb |
, testCase "Integer" integer
|
|
Packit |
9a2dfb |
, testCase "Natural" natural
|
|
Packit |
9a2dfb |
, testCase "String" string
|
|
Packit |
9a2dfb |
, testCase "HashMap" hashMap
|
|
Packit |
9a2dfb |
]
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
int :: Assertion
|
|
Packit |
9a2dfb |
int = do
|
|
Packit |
9a2dfb |
let t = test (Proxy :: Proxy Int)
|
|
Packit |
9a2dfb |
t "\"\"" $ expected "Int" "String"
|
|
Packit |
9a2dfb |
t "[]" $ expected "Int" "Array"
|
|
Packit |
9a2dfb |
t "{}" $ expected "Int" "Object"
|
|
Packit |
9a2dfb |
t "null" $ expected "Int" "Null"
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
integer :: Assertion
|
|
Packit |
9a2dfb |
integer = do
|
|
Packit |
9a2dfb |
let t = test (Proxy :: Proxy Integer)
|
|
Packit |
9a2dfb |
t "44.44" $ expected "Integer" "floating number 44.44"
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
natural :: Assertion
|
|
Packit |
9a2dfb |
natural = do
|
|
Packit |
9a2dfb |
let t = test (Proxy :: Proxy Natural)
|
|
Packit |
9a2dfb |
t "44.44" $ expected "Natural" "floating number 44.44"
|
|
Packit |
9a2dfb |
t "-50" $ expected "Natural" "negative number -50"
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
string :: Assertion
|
|
Packit |
9a2dfb |
string = do
|
|
Packit |
9a2dfb |
let t = test (Proxy :: Proxy String)
|
|
Packit |
9a2dfb |
t "1" $ expected "String" "Number"
|
|
Packit |
9a2dfb |
t "[]" $ expected "String" "Array"
|
|
Packit |
9a2dfb |
t "{}" $ expected "String" "Object"
|
|
Packit |
9a2dfb |
t "null" $ expected "String" "Null"
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
hashMap :: Assertion
|
|
Packit |
9a2dfb |
hashMap = do
|
|
Packit |
9a2dfb |
let t = test (Proxy :: Proxy (HM.HashMap String Int))
|
|
Packit |
9a2dfb |
t "\"\"" $ expected "HashMap k v" "String"
|
|
Packit |
9a2dfb |
t "[]" $ expected "HashMap k v" "Array"
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
expected :: String -> String -> String
|
|
Packit |
9a2dfb |
expected ex enc = "Error in $: expected " ++ ex ++ ", encountered " ++ enc
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
test :: forall a proxy . (FromJSON a, Show a) => proxy a -> L.ByteString -> String -> Assertion
|
|
Packit |
9a2dfb |
test _ v msg = case eitherDecode v of
|
|
Packit |
9a2dfb |
Left e -> assertEqual "Invalid error message" msg e
|
|
Packit |
9a2dfb |
Right (x :: a) -> assertFailure $ "Expected parsing to fail but it suceeded with: " ++ show x
|