genvalidity-sydtest-0.0.0.0: src/Test/Syd/Validity/Property/Utils.hs
{-# LANGUAGE CPP #-}
module Test.Syd.Validity.Property.Utils
( forAllUnchecked,
forAllValid,
forAllInvalid,
shouldBeValid,
shouldBeInvalid,
(<==>),
(===>),
)
where
import Data.GenValidity
import Test.QuickCheck
import Test.Syd
#if !MIN_VERSION_base(4,8,0)
import Control.Applicative (pure)
#endif
forAllUnchecked ::
(Show a, GenUnchecked a, Testable prop) => (a -> prop) -> Property
forAllUnchecked = forAllShrink genUnchecked shrinkUnchecked
forAllValid :: (Show a, GenValid a, Testable prop) => (a -> prop) -> Property
forAllValid = forAllShrink genValid shrinkValid
forAllInvalid ::
(Show a, GenInvalid a, Testable prop) => (a -> prop) -> Property
forAllInvalid = forAllShrink genInvalid shrinkInvalid
(===>) :: Bool -> Bool -> Bool
(===>) a b = not a || b
(<==>) :: Bool -> Bool -> Bool
(<==>) a b = a ===> b && b ===> a
shouldBeValid :: (Show a, Validity a) => a -> Expectation
shouldBeValid a =
case prettyValidate a of
Right _ -> pure ()
Left err ->
expectationFailure $
unlines
[ "'validate' reported this value to be invalid: ",
show a,
"pretty version:",
ppShow a,
"with explanation:",
err,
""
]
shouldBeInvalid :: (Show a, Validity a) => a -> Expectation
shouldBeInvalid a =
case prettyValidate a of
Right _ ->
expectationFailure $
unlines
[ "'validate' reported this value to be valid: ",
show a,
"pretty version:",
ppShow a,
"where we expected it to be invalid"
]
Left _ -> pure ()