packages feed

ron-hs-0.4.0: test/Test.hs

module Main where

import Data.ByteString.Lazy (toStrict)
import Data.Ron.Deserialize (loads)
import Data.Ron.Serialize (dumps, compactStyle)
import Data.Ron.Value.Internal (similar')
import Test.Tasty (defaultMain, testGroup, localOption)
import Test.Tasty.QuickCheck (testProperty, QuickCheckMaxSize(..))

import ForExample (exampleTests)
import File (fileTests)
import Generic (genericsTests)
import GenericOptions (genericOptionsTests)
import DerivingVia (derivingViaTests)
import Values (valuesTests)

main = defaultMain $ setMaxSize $ testGroup "properties"
    [ always_decodes
    , derivingViaTests
    , exampleTests
    , fileTests
    , genericOptionsTests
    , genericsTests
    , loads_dumps
    , valuesTests
    ]

setMaxSize = localOption $ QuickCheckMaxSize 30

always_decodes = testProperty "isRight . loads . dumps arbStyle $ x" $
    \style value -> case loads . toStrict . dumps style $ value of
        Left _err -> False
        Right _val -> True

loads_dumps = testProperty "loads . dumps compactStyle = id" $
    \value -> case loads . toStrict . dumps compactStyle $ value of
        Left err -> False
        Right value' -> value `similar'` value'