Blame tests/UnitTests/NullaryConstructors.hs

Packit 9a2dfb
{-# LANGUAGE  OverloadedStrings #-}
Packit 9a2dfb
Packit 9a2dfb
{-# OPTIONS_GHC -fno-warn-deprecations #-}
Packit 9a2dfb
Packit 9a2dfb
module UnitTests.NullaryConstructors
Packit 9a2dfb
    (
Packit 9a2dfb
      nullaryConstructors
Packit 9a2dfb
    ) where
Packit 9a2dfb
Packit 9a2dfb
import Prelude ()
Packit 9a2dfb
import Prelude.Compat
Packit 9a2dfb
Packit 9a2dfb
import Data.Aeson (decode, eitherDecode, fromEncoding, Value)
Packit 9a2dfb
import Data.Aeson.Internal (IResult (..), iparse)
Packit 9a2dfb
import Data.Aeson.Types (Parser)
Packit 9a2dfb
import Data.ByteString.Builder (toLazyByteString)
Packit 9a2dfb
import Data.Maybe (fromJust)
Packit 9a2dfb
import Encoders
Packit 9a2dfb
import Test.HUnit ((@=?), Assertion)
Packit 9a2dfb
import Types
Packit 9a2dfb
import qualified Data.ByteString.Lazy.Char8 as L
Packit 9a2dfb
Packit 9a2dfb
nullaryConstructors :: [Assertion]
Packit 9a2dfb
nullaryConstructors =
Packit 9a2dfb
  [ dec "\"C1\""           @=? thNullaryToJSONString C1
Packit 9a2dfb
  , dec "\"C1\""           @=? gNullaryToJSONString C1
Packit 9a2dfb
  , dec "{\"c1\":[]}"      @=? thNullaryToJSONObjectWithSingleField C1
Packit 9a2dfb
  , dec "{\"c1\":[]}"      @=? gNullaryToJSONObjectWithSingleField C1
Packit 9a2dfb
  , dec "[\"c1\",[]]"      @=? gNullaryToJSON2ElemArray C1
Packit 9a2dfb
  , dec "[\"c1\",[]]"      @=? thNullaryToJSON2ElemArray C1
Packit 9a2dfb
  , dec "{\"tag\":\"c1\"}" @=? thNullaryToJSONTaggedObject C1
Packit 9a2dfb
  , dec "{\"tag\":\"c1\"}" @=? gNullaryToJSONTaggedObject C1
Packit 9a2dfb
Packit 9a2dfb
  , decE "\"C1\""           @=? enc (gNullaryToEncodingString C1)
Packit 9a2dfb
  , decE "\"C1\""           @=? enc (thNullaryToEncodingString C1)
Packit 9a2dfb
  , decE "[\"c1\",[]]"      @=? enc (gNullaryToEncoding2ElemArray C1)
Packit 9a2dfb
  , decE "[\"c1\",[]]"      @=? enc (thNullaryToEncoding2ElemArray C1)
Packit 9a2dfb
  , decE "{\"c1\":[]}"      @=? enc (thNullaryToEncodingObjectWithSingleField C1)
Packit 9a2dfb
  , decE "{\"c1\":[]}"      @=? enc (gNullaryToEncodingObjectWithSingleField C1)
Packit 9a2dfb
  , decE "{\"tag\":\"c1\"}" @=? enc (thNullaryToEncodingTaggedObject C1)
Packit 9a2dfb
  , decE "{\"tag\":\"c1\"}" @=? enc (gNullaryToEncodingTaggedObject C1)
Packit 9a2dfb
Packit 9a2dfb
  , ISuccess C1 @=? parse thNullaryParseJSONTaggedObject          (dec "{\"tag\":\"c1\"}")
Packit 9a2dfb
  , ISuccess C1 @=? parse gNullaryParseJSONTaggedObject           (dec "{\"tag\":\"c1\"}")
Packit 9a2dfb
Packit 9a2dfb
  , ISuccess C1 @=? parse thNullaryParseJSONString                (dec "\"C1\"")
Packit 9a2dfb
  , ISuccess C1 @=? parse gNullaryParseJSONString                 (dec "\"C1\"")
Packit 9a2dfb
  , ISuccess C1 @=? parse thNullaryParseJSON2ElemArray            (dec  "[\"c1\",[]]")
Packit 9a2dfb
  , ISuccess C1 @=? parse gNullaryParseJSON2ElemArray             (dec  "[\"c1\",[]]")
Packit 9a2dfb
  , ISuccess C1 @=? parse thNullaryParseJSONObjectWithSingleField (dec  "{\"c1\":[]}")
Packit 9a2dfb
  , ISuccess C1 @=? parse gNullaryParseJSONObjectWithSingleField  (dec  "{\"c1\":[]}")
Packit 9a2dfb
    -- Make sure that the old `"contents" : []' is still allowed
Packit 9a2dfb
  , ISuccess C1 @=? parse thNullaryParseJSONTaggedObject          (dec "{\"tag\":\"c1\",\"contents\":[]}")
Packit 9a2dfb
  , ISuccess C1 @=? parse gNullaryParseJSONTaggedObject           (dec "{\"tag\":\"c1\",\"contents\":[]}")
Packit 9a2dfb
  ]
Packit 9a2dfb
  where
Packit 9a2dfb
    enc = eitherDecode . toLazyByteString . fromEncoding
Packit 9a2dfb
    dec :: L.ByteString -> Value
Packit 9a2dfb
    dec = fromJust . decode
Packit 9a2dfb
    decE :: L.ByteString -> Either String Value
Packit 9a2dfb
    decE = eitherDecode
Packit 9a2dfb
    parse :: (a -> Parser b) -> a -> IResult b
Packit 9a2dfb
    parse parsejson v = iparse parsejson v