packages feed

easytest-0.3: easytest.cabal

name:          easytest
category:      Testing
version:       0.3
license:       MIT
cabal-version: >= 1.8
license-file:  LICENSE
author:        Joel Burget, Paul Chiusano
maintainer:    Joel Burget <joelburget@gmail.com>
stability:     provisional
homepage:      https://github.com/joelburget/easytest
bug-reports:   https://github.com/joelburget/easytest/issues
copyright:     Copyright (C) 2017-2019 Joel Burget, Copyright (C) 2016 Paul Chiusano and contributors
synopsis:      Simple, expressive testing library
description:
  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.

build-type:         Simple
extra-source-files: CHANGES.md
tested-with:        GHC == 7.10.3, GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.3, GHC == 8.4.4, GHC == 8.6.3

source-repository head
  type: git
  location: git@github.com:joelburget/easytest.git

library
  hs-source-dirs: src

  exposed-modules:
    EasyTest
    EasyTest.Internal
    EasyTest.Internal.Hedgehog
    EasyTest.Prism

  build-depends:
    base                      >= 4.5      && <= 5,
    call-stack                >= 0.1,
    -- since we rely on a hedgehog internal module we need to maintain tight
    -- bounds (and test with all possible versions, ideally)
    hedgehog                  >= 0.6      && <= 0.6.1,
    stm,
    -- for splitOn:
    split                     >= 0.2.3,
    -- we need mtl and transformers only for the breaking down / building up we
    -- do of hedgehog properties. we leave their versions completely
    -- unconstrained so we can rely just on the relevant hedgehog version
    -- bounds.
    mtl,
    transformers,
    profunctors, tagged

  if !impl(ghc >= 8.0)
    build-depends: semigroups == 0.18.*

  ghc-options: -Wall

test-suite tests
  type:           exitcode-stdio-1.0
  main-is:        Suite.hs
  hs-source-dirs: tests
  build-depends:  base, easytest, hedgehog, unix, directory, profunctors, transformers