{-# LANGUAGE TemplateHaskell #-}
module Test.FileLocation where

import qualified Test.HUnit as HUnit
import Language.Haskell.TH
import FileLocation (locationToString)
import Control.Monad.IO.Class (liftIO)

-- | A version of assertEqual that gives location information.
assertEq :: Q Exp
assertEq = do
  loc <- location
  let prefix = locationToString loc ++ " "
  [|(\x -> HUnit.assertEqual prefix x)|]

-- | a MonadIO version of assertBool that gives location information.
assertB :: Q Exp
assertB = do
  loc <- location
  let prefix = locationToString loc ++ "assertB "
  [|(HUnit.assertBool prefix)|]

-- | Same as 'assertEq', but uses 'liftIO'
assertEq' :: Q Exp
assertEq' = do
  loc <- location
  let prefix = locationToString loc ++ " "
  [|(\x -> liftIO . HUnit.assertEqual prefix x)|]

-- | Same as 'assertB, but uses 'liftIO'
assertB' :: Q Exp
assertB' = do
  loc <- location
  let prefix = locationToString loc ++ "assertB "
  [|(liftIO . HUnit.assertBool prefix)|]