genvalidity-property-0.2.0.1: src/Test/Validity/Property/Utils.hs
module Test.Validity.Property.Utils
( forAllUnchecked
, forAllValid
, forAllInvalid
, shouldBeValid
, shouldBeInvalid
, (<==>)
, (===>)
) where
import Control.Monad (unless)
import Test.Hspec
import Test.QuickCheck
import Data.GenValidity
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 = do
case prettyValidation a of
Right _ -> pure ()
Left err ->
expectationFailure $
unlines
[ "'validate' reported this value to be invalid: " ++ show a
, err
, ""
]
unless (isValid a) $
expectationFailure $
unlines
[ "isValid considered this value invalid: " ++ show a
, "This is odd because 'validate' reported no issues."
, "Are you sure 'Validity' is implemented correctly?"
]
shouldBeInvalid :: (Show a, Validity a) => a -> Expectation
shouldBeInvalid a = a `shouldNotSatisfy` isValid