{-# LANGUAGE RankNTypes #-}
module Utils (
assertBool,
assertEqual,
assertFailure,
assertException,
) where
import GHC.Stack
import qualified Test.Tasty.HUnit as T
import Control.Exception
import Effectful
assertBool :: (HasCallStack, IOE :> es) => String -> Bool -> Eff es ()
assertBool msg p = liftIO $ T.assertBool msg p
assertEqual
:: (HasCallStack, Eq a, Show a, IOE :> es)
=> String
-> a
-> a
-> Eff es ()
assertEqual msg expected given = liftIO $ T.assertEqual msg expected given
assertFailure :: (HasCallStack, IOE :> es) => String -> Eff es a
assertFailure msg = liftIO $ T.assertFailure msg
assertException
:: forall e es a
. (HasCallStack, Exception e, IOE :> es)
=> IO a
-> (e -> Bool)
-> Eff es ()
assertException action expectedClassifier = do
r <- liftIO $ try action
case r of
Right _ ->
assertFailure "The action did not raise an exception"
Left e ->
assertBool "The expected exception doesn't match what was given" (expectedClassifier e)