{-# LANGUAGE PackageImports #-}
module Test.Tasty.HUnit
( testCase
, testCaseInfo
, testCaseSteps
, HUnit.assertFailure
, HUnit.assertBool
, HUnit.assertEqual
, (HUnit.@=?)
, (HUnit.@?=)
, (HUnit.@?)
, HUnit.AssertionPredicable(..)
, HUnit.Assertion
, HUnit.HUnitFailure
, HasCallStack
) where
import Control.Exception (handle, throwIO)
import GHC.Stack (HasCallStack)
import Test.HUnit (Assertion)
import qualified Test.HUnit as HUnit
import qualified Test.HUnit.Lang as HUnit
import Test.Tasty (TestName, TestTree)
import qualified "tasty-hunit" Test.Tasty.HUnit as Tasty.HUnit
adjustSuite :: IO a -> IO a
adjustSuite =
handle $ \(HUnit.HUnitFailure mloc reason) ->
let reason' = (HUnit.formatFailureReason reason)
in throwIO $ Tasty.HUnit.HUnitFailure mloc reason'
testCase :: TestName -> Assertion -> TestTree
testCase name = Tasty.HUnit.testCase name . adjustSuite
testCaseInfo :: TestName -> IO String -> TestTree
testCaseInfo name = Tasty.HUnit.testCaseInfo name . adjustSuite
testCaseSteps :: TestName -> ((String -> IO ()) -> Assertion) -> TestTree
testCaseSteps name f = testCaseSteps name (\step -> adjustSuite $ f step)