sandwich-0.3.0.5: test/Before.hs
{-# LANGUAGE DataKinds #-}
module Before where
import Control.Monad.IO.Class
import Control.Monad.Trans.Writer
import qualified Data.List as L
import GHC.Stack
import Test.Sandwich
import TestUtil
import UnliftIO.Exception
tests :: MonadIO m => WriterT [SomeException] m ()
tests = do
run beforeExceptionSafety
run beforeExceptionSafetyNested
main :: IO ()
main = mainWith tests
-- * Tests
beforeExceptionSafety :: (HasCallStack) => IO ()
beforeExceptionSafety = do
results <- runAndGetResults $ before "before label" throwSomeUserError $ do
it "does thing 1" $ return ()
it "does thing 2" $ return ()
results `mustBe` (Failure (GotException Nothing (Just "Exception in before 'before label' handler") someUserErrorWrapped)
: L.replicate 2 (Failure (GetContextException Nothing (SomeExceptionWithEq (toException $ GotException Nothing (Just "Exception in before 'before label' handler") someUserErrorWrapped)))))
beforeExceptionSafetyNested :: (HasCallStack) => IO ()
beforeExceptionSafetyNested = do
results <- runAndGetResults $ before "before label" throwSomeUserError $ do
it "does thing 1" $ return ()
it "does thing 2" $ return ()
describe "nested things" $ do
it "does nested thing 1" $ return ()
it "does nested thing 2" $ return ()
results `mustBe` (Failure (GotException Nothing (Just "Exception in before 'before label' handler") someUserErrorWrapped)
: L.replicate 5 (Failure (GetContextException Nothing (SomeExceptionWithEq (toException $ GotException Nothing (Just "Exception in before 'before label' handler") someUserErrorWrapped)))))