module Test.Cardano.Network.OrphanInstances.Tests (tests) where

import Data.Aeson

import Cardano.Network.OrphanInstances ()
import Ouroboros.Network.OrphanInstances ()
import Ouroboros.Network.Protocol.Handshake.Test hiding (tests)

import Test.QuickCheck
import Test.Tasty
import Test.Tasty.QuickCheck


tests :: TestTree
tests :: TestTree
tests = TestName -> [TestTree] -> TestTree
testGroup TestName
"Cardano.Network.OrphanInstances"
        [ TestName -> (ArbitraryNodeToNodeVersion -> Property) -> TestTree
forall a. Testable a => TestName -> a -> TestTree
testProperty TestName
"NodeToNodeVersion" ArbitraryNodeToNodeVersion -> Property
prop_json_NodeToNodeVersion
        , TestName -> (ArbitraryNodeToClientVersion -> Property) -> TestTree
forall a. Testable a => TestName -> a -> TestTree
testProperty TestName
"NodeToClientVersion" ArbitraryNodeToClientVersion -> Property
prop_json_NodeToClientVersion
        ]


prop_json_NodeToNodeVersion
  :: ArbitraryNodeToNodeVersion
  -> Property
prop_json_NodeToNodeVersion :: ArbitraryNodeToNodeVersion -> Property
prop_json_NodeToNodeVersion (ArbitraryNodeToNodeVersion NodeToNodeVersion
v) =
  case ByteString -> Either TestName NodeToNodeVersion
forall a. FromJSON a => ByteString -> Either TestName a
eitherDecode (NodeToNodeVersion -> ByteString
forall a. ToJSON a => a -> ByteString
encode NodeToNodeVersion
v) of
    Right NodeToNodeVersion
v' -> NodeToNodeVersion
v NodeToNodeVersion -> NodeToNodeVersion -> Property
forall a. (Eq a, Show a) => a -> a -> Property
=== NodeToNodeVersion
v'
    Left  TestName
e  -> TestName -> Bool -> Property
forall prop. Testable prop => TestName -> prop -> Property
counterexample TestName
e Bool
False


prop_json_NodeToClientVersion
  :: ArbitraryNodeToClientVersion
  -> Property
prop_json_NodeToClientVersion :: ArbitraryNodeToClientVersion -> Property
prop_json_NodeToClientVersion (ArbitraryNodeToClientVersion NodeToClientVersion
v) =
  case ByteString -> Either TestName NodeToClientVersion
forall a. FromJSON a => ByteString -> Either TestName a
eitherDecode (NodeToClientVersion -> ByteString
forall a. ToJSON a => a -> ByteString
encode NodeToClientVersion
v) of
    Right NodeToClientVersion
v' -> NodeToClientVersion
v NodeToClientVersion -> NodeToClientVersion -> Property
forall a. (Eq a, Show a) => a -> a -> Property
=== NodeToClientVersion
v'
    Left  TestName
e  -> TestName -> Bool -> Property
forall prop. Testable prop => TestName -> prop -> Property
counterexample TestName
e Bool
False