hnix-store-remote-0.7.0.0: tests/Data/SerializerSpec.hs
module Data.SerializerSpec (spec) where
import Data.Some
import Data.Serializer
import Data.Serializer.Example
import Test.Hspec (Spec, describe, it, shouldBe)
import Test.Hspec.QuickCheck (prop)
spec :: Spec
spec = describe "Serializer" $ do
prop "Roundtrips GADT protocol" $ \someCmd ->
(runG cmdS
<$> (runP cmdS someCmd))
`shouldBe`
((pure $ pure someCmd) ::
Either MyPutError
(Either (GetSerializerError MyGetError)
(Some Cmd)))
it "Handles putS error" $
runP cmdSPutError (Some (Cmd_Bool True))
`shouldBe`
Left MyPutError_NoLongerSupported
it "Handles getS error" $
runG cmdSGetError (runPutSimple cmdS (Some (Cmd_Bool True)))
`shouldBe`
Left (SerializerError_Get MyGetError_Example)
it "Handles getS fail" $
runG cmdSGetFail (runPutSimple cmdS (Some (Cmd_Bool True)))
`shouldBe`
Left (SerializerError_GetFail @MyGetError "Failed reading: no parse\nEmpty call stack\n")
prop "Roundtrips elaborate example" $ \someCmd readerBool ->
(runGRest cmdSRest readerBool 0
<$> (runPRest cmdSRest readerBool 0 someCmd))
`shouldBe`
((pure $ pure $ someCmd) ::
Either MyPutError
(Either (GetSerializerError MyGetError)
(Some Cmd)))