module Test.Example ( Example (..), testTextRep, testExampleProperty, ) where import Data.Text (Text) import Test.Tasty (TestTree) import Test.Tasty.HUnit (assertFailure, testCase, (@=?)) import Test.Tasty.QuickCheck (Property, testProperty) data Example a = Example { name :: String , text :: Text , script :: a } testTextRep :: (Eq a, Show a) => (Text -> Either String a) -> (a -> Text) -> Example a -> TestTree testTextRep parse encode e = testCase (name e) . either assertFailure parseSuccess $ parse (text e) where parseSuccess d = do d @=? script e encode d @=? text e testExampleProperty :: Example a -> Property -> TestTree testExampleProperty e = testProperty (name e)