{-# LANGUAGE MagicHash, OverloadedStrings, TemplateHaskell #-}
module Main where
import Test.Tasty
import Test.Tasty.TH
import Test.Tasty.HUnit
import Test.Tasty.QuickCheck
import Data.String (IsString (..))
import Data.BufferBuilder.Json
import Data.BufferBuilder.Aeson ()
import Data.ByteString (ByteString)
import qualified Data.ByteString as BS
import qualified Data.Attoparsec.ByteString as Atto
import qualified Data.Aeson.Parser as JsonParse
import qualified Data.Aeson as Aeson
import AesonQuickCheck ()
import Debug.Trace
ae :: String -> ByteString -> IO ()
ae expected actual = assertEqual expected (fromString expected) actual
decodeJsonFragment :: Aeson.FromJSON j => BS.ByteString -> Maybe j
decodeJsonFragment str = case parsed of
Right r -> case Aeson.fromJSON r of
Aeson.Success a -> Just a
_ -> Nothing
_ -> Nothing
where
parsed = Atto.parseOnly JsonParse.value' str
case_serialize_simple_things :: IO ()
case_serialize_simple_things = do
ae "false" (encodeJson $ Aeson.Bool False)
ae "true" (encodeJson $ Aeson.Bool True)
ae "null" (encodeJson $ Aeson.Null)
ae "9" (encodeJson $ Aeson.Number 9)
ae "-9" (encodeJson $ Aeson.Number (-9))
prop_matches_aeson :: Aeson.Value -> Bool
prop_matches_aeson value =
let encoded = encodeJson value
decoded = decodeJsonFragment encoded
in if decoded == Just value
then True
else trace (show (value, encoded, decoded)) False
tests :: TestTree
tests = $(testGroupGenerator)
main :: IO ()
main = defaultMain tests