EasyTest is a simple testing toolkit for unit- and property-testing. It's based on the hedgehog property-testing system. Here's an example usage:
module Main where import EasyTest import qualified Hedgehog.Gen as Gen import qualified Hedgehog.Range as Range suite :: Test suite = tests [ scope "addition.ex1" $ unitTest $ 1 + 1 === 2 , scope "addition.ex2" $ unitTest $ 2 + 3 === 5 , scope "list.reversal" $ property $ do ns <- forAll $ Gen.list (Range.singleton 10) (Gen.int Range.constantBounded) reverse (reverse ns) === ns -- equivalent to `scope "addition.ex3"` , scope "addition" . scope "ex3" $ unitTest $ 3 + 3 === 6 , scope "always passes" $ unitTest success -- record a success result , scope "failing test" $ crash "oh noes!!" ] -- NB: `run suite` would run all tests, but we only run -- tests whose scopes are prefixed by "addition" main :: IO Summary main = runOnly "addition" suite
This generates the output:
━━━ runOnly "addition" ━━━ ✓ addition.ex1 passed 1 test. ✓ addition.ex2 passed 1 test. ⚐ list.reversal gave up after 1 discard, passed 0 tests. ✓ addition.ex3 passed 1 test. ⚐ always passes gave up after 1 discard, passed 0 tests. ⚐ failing test gave up after 1 discard, passed 0 tests. ⚐ 3 gave up, 3 succeeded.
We write tests with ordinary Haskell code, with control flow explicit and under programmer control.
- Switch backend of the library to build on the hedgehog library
* -> *to kind
*. See my note for motivation. In short, this fixes a lot of bugs and we now support property testing.
Test now has kind
*. It’s no longer a functor, applicative, monad, etc.
- You can build an atomic test with
- Also see
finallyfor tests with setup / teardown.
scopework as before. I mention them here because they’re the other way to build tests.
expectEq a b->
a === b
- Fix build errors for GHC 8.6, prevent building on GHC before 7.10
- Only print emojis for Unicode-capable terminals
expectRightNoShowreplicates the old functionality.
- Call stacks now longer show EasyTest porcelain.
expectRightnow return unit
- Add ghc 7.10.3 compatibility.
- allow async 2.2, ghc 8.4 compatibility
- build with latest stackage nightly