packages feed

freckle-app-1.20.1.0: library/Freckle/App/Test/Hspec/AnnotatedException.hs

module Freckle.App.Test.Hspec.AnnotatedException
  ( unwrapAnnotatedHUnitFailure
  ) where

import Freckle.App.Prelude

import Control.Exception qualified
import Freckle.App.Exception (AnnotatedException (..))
import Test.HUnit.Lang (HUnitFailure)
import Test.Hspec

-- | An hspec hook that lets hspec catch and pretty-print 'HUnitFailure', the
--   exception that is thrown when a test assertion fails
--
-- Tests for any code that might throw 'AnnotatedException' (which includes anything
-- that uses freckle-app) should add this hook to their test suite. Without it, if
-- you end up with an @'AnnotatedException' 'HUnitFailure'@, hspec doesn't recognize
-- it as an assertion failure and you get ugly output instead of nice output.
unwrapAnnotatedHUnitFailure :: Spec -> Spec
unwrapAnnotatedHUnitFailure = around_ $
  Control.Exception.handle $ \AnnotatedException {exception = e} ->
    Control.Exception.throw (e :: HUnitFailure)