hackport-0.5.5: cabal/cabal-testsuite/tests/fail.test.hs
{-# LANGUAGE ScopedTypeVariables #-}
import Test.Cabal.Prelude
import Data.IORef
import Control.Monad.IO.Class
import Control.Exception (ErrorCall)
import qualified Control.Monad.Catch as Catch
main = setupTest $ do
-- the following is a hack to check that `setup configure` indeed
-- fails: all tests use `assertFailure` which uses `error` if the fail
--
-- note: we cannot use `fails $ do ...` here since that only checks that all
-- assertions fail. If there is no assertion in `m`, then `fails m` will *succeed*.
-- That's not what we want. So `fails (return ())` for example succeeds, even though
-- `return ()` doesn't fail.
succeededRef <- liftIO $ newIORef True
setup "configure" [] `Catch.catch` \(_ :: ErrorCall) ->
liftIO $ writeIORef succeededRef False
succeeded <- liftIO $ readIORef succeededRef
assertBool "test should have failed, but succeeded instead (configure exits with failure)" $ not succeeded