{-# LANGUAGE LambdaCase #-} {- Generate Test suites. Restricted version of hspec, introduction: http://hspec.github.io/getting-started.html -} module Test ( Spec, runTest, testMain, -- * Structure describe, it, -- * Expectations Expectation, testOk, testErr, shouldBe, shouldNotBe, shouldSatisfy, shouldNotSatisfy, -- * Setup & Teardown (hooks http://hspec.github.io/writing-specs.html#using-hooks) before, before_, beforeWith, beforeAll, beforeAll_, beforeAllWith, after, after_, afterAll, afterAll_, around, around_, aroundWith, aroundAll, aroundAllWith, -- * Common helpful predicates (use with 'shouldSatisfy') isRight, isLeft, -- * Pretty printing of errors errColored, module Pretty, ) where -- export more expectations if needed import Data.Either ( isLeft, isRight, ) import Pretty import Test.Hspec ( Expectation, HasCallStack, Spec, after, afterAll, afterAll_, after_, around, aroundAll, aroundAllWith, aroundWith, around_, before, beforeAll, beforeAllWith, beforeAll_, beforeWith, before_, describe, hspec, it, ) import Test.Hspec.Expectations.Pretty ( expectationFailure, shouldBe, shouldNotBe, shouldNotSatisfy, shouldSatisfy, ) -- | Run a test directly (e.g. from the repl) runTest :: Spec -> IO () runTest = hspec -- | Run a testsuite testMain :: -- | Name of the test suite String -> -- | The tests in this test module Spec -> IO () testMain testSuiteName tests = hspec $ describe testSuiteName tests -- | test successful testOk :: Expectation testOk = pure () -- | Abort the test with an error message. -- If you want to display a Haskell type, use `errColored`. testErr :: HasCallStack => String -> Expectation testErr = expectationFailure -- | Display a list of 'Err's as a colored error message -- and abort the test. errColored :: [Pretty.Err] -> Expectation errColored = testErr . Pretty.prettyErrs