hedgehog-extras-0.10.1.0: test/Hedgehog/Extras/Test/TestExpectFailure.hs
module Hedgehog.Extras.Test.TestExpectFailure where
import Prelude
import Hedgehog (property, Property, MonadTest, (===), success)
import Hedgehog.Extras.Test.Base (expectFailureWith, expectFailure)
import Hedgehog.Internal.Property (Failure (..), failWith)
import GHC.Stack (HasCallStack)
import Control.Monad.IO.Class (MonadIO)
hprop_expect_always_fails_prop :: Property
hprop_expect_always_fails_prop = property $ do
expectFailureWith failureCheck alwaysFailsProp
where
failureCheck :: (MonadTest m, HasCallStack) => Failure -> m ()
failureCheck (Failure _ reason _) =
reason === "This property always fails"
alwaysFailsProp :: (MonadTest m, HasCallStack) => m ()
alwaysFailsProp = failWith Nothing "This property always fails"
hprop_bad_expect_always_fails_fails_prop :: Property
hprop_bad_expect_always_fails_fails_prop = property $ do
expectFailure badExpectFailure
where
badExpectFailure :: (MonadIO m, MonadTest m, HasCallStack) => m ()
badExpectFailure = expectFailureWith badFailureCheck alwaysFailsProp
badFailureCheck :: (MonadTest m, HasCallStack) => Failure -> m ()
badFailureCheck (Failure _ reason _) =
reason === "This property sometimes fails"
alwaysFailsProp :: (MonadTest m, HasCallStack) => m ()
alwaysFailsProp = failWith Nothing "This property always fails"
hprop_bad_expect_failure_fails_prop :: Property
hprop_bad_expect_failure_fails_prop = property $ do
expectFailure (expectFailure success)