{-# LANGUAGE TemplateHaskell #-} module Shared where import Control.Exception import Data.Maybe (listToMaybe) import GHC.Stack (callStack) import GHC.Stack.Types (getCallStack) import Language.Haskell.TH import Test.Inspection import Test.Tasty.HUnit checkInspection :: HasCallStack => Result -> Assertion checkInspection Success{} = pure () checkInspection (Failure msg) = throwIO $ HUnitFailure (fmap snd $ listToMaybe $ getCallStack callStack) msg inspecting :: String -> Obligation -> Q Exp inspecting desc reg = [|testCase desc $ checkInspection $(inspectTest reg)|]