116 lines
2.1 KiB
Haskell
116 lines
2.1 KiB
Haskell
|
{-# 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
|