Blame tests/ErrorMessages.hs

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