{-# LANGUAGE AllowAmbiguousTypes #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE MonoLocalBinds #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} module Test.Cardano.Ledger.ShelleyMA.Serialisation.Roundtrip where import Cardano.Ledger.Allegra (AllegraEra) import Cardano.Ledger.Mary (MaryEra) import Cardano.Ledger.Shelley (ShelleyEra) import Cardano.Ledger.Shelley.API (ApplyTx, ApplyTxError) import Data.Proxy (Proxy (Proxy)) import Data.Typeable (typeRep) import Test.Cardano.Ledger.Binary.RoundTrip ( roundTripCborExpectation, ) import Test.Cardano.Ledger.Mary.Arbitrary () import Test.Cardano.Ledger.Shelley.Generator.TxAuxData () import Test.Cardano.Ledger.Shelley.Serialisation.Generators () import Test.Cardano.Ledger.ShelleyMA.Serialisation.Generators () import Test.QuickCheck (Arbitrary) import Test.Tasty (TestTree, testGroup) import Test.Tasty.QuickCheck (testProperty) eraRoundTripProps :: forall e. ( ApplyTx e , Arbitrary (ApplyTxError e) ) => TestTree eraRoundTripProps :: forall e. (ApplyTx e, Arbitrary (ApplyTxError e)) => TestTree eraRoundTripProps = String -> [TestTree] -> TestTree forall a. HasCallStack => String -> [SpecWith a] -> SpecWith a testGroup (TypeRep -> String forall a. Show a => a -> String show (TypeRep -> String) -> TypeRep -> String forall a b. (a -> b) -> a -> b $ Proxy e -> TypeRep forall {k} (proxy :: k -> *) (a :: k). Typeable a => proxy a -> TypeRep typeRep (forall t. Proxy t forall {k} (t :: k). Proxy t Proxy @e)) [ String -> (ApplyTxError e -> Expectation) -> TestTree forall prop. (HasCallStack, Testable prop) => String -> prop -> TestTree testProperty String "ApplyTxError" ((ApplyTxError e -> Expectation) -> TestTree) -> (ApplyTxError e -> Expectation) -> TestTree forall a b. (a -> b) -> a -> b $ forall t. (Show t, Eq t, EncCBOR t, DecCBOR t, HasCallStack) => t -> Expectation roundTripCborExpectation @(ApplyTxError e) ] allEraRoundtripTests :: TestTree allEraRoundtripTests :: TestTree allEraRoundtripTests = String -> [TestTree] -> TestTree forall a. HasCallStack => String -> [SpecWith a] -> SpecWith a testGroup String "All Era Roundtrip Tests" [ forall e. (ApplyTx e, Arbitrary (ApplyTxError e)) => TestTree eraRoundTripProps @ShelleyEra , forall e. (ApplyTx e, Arbitrary (ApplyTxError e)) => TestTree eraRoundTripProps @AllegraEra , forall e. (ApplyTx e, Arbitrary (ApplyTxError e)) => TestTree eraRoundTripProps @MaryEra ]