{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE UndecidableInstances #-}
module Main
( main
)
where
import Data.ByteString (ByteString)
import Data.ByteString qualified as BS
import Test.Daytripper (Expect, MonadExpect (..), daytripperMain, mkExpect, mkFileRT, mkPropRT, mkUnitRT, testRT)
import Test.Falsify.Generator qualified as Gen
import Test.Tasty (testGroup)
expec :: MonadExpect m => Expect m ByteString ByteString (Maybe ByteString)
expec = mkExpect enc dec
where
enc a = pure (a <> a)
dec b =
pure $
let a = BS.take (div (BS.length b) 2) b
in if b == a <> a
then Just a
else Nothing
main :: IO ()
main =
daytripperMain $
testGroup "Daytripper" $
fmap
testRT
[ mkPropRT "prop" expec (Gen.choose (pure "a") (pure "b"))
, mkUnitRT "unit" expec "a"
, mkFileRT "file just" expec "testdata/b.txt" (Just "b")
, mkFileRT "file nothing" expec "testdata/c.txt" Nothing
]