name: easytest category: Testing version: 0.1 license: MIT cabal-version: >= 1.8 license-file: LICENSE author: Joel Burget, Paul Chiusano maintainer: Joel Burget stability: provisional homepage: https://github.com/joelburget/easytest bug-reports: https://github.com/joelburget/easytest/issues copyright: Copyright (C) 2017-2018 Joel Burget, Copyright (C) 2016 Paul Chiusano and contributors synopsis: Simple, expressive testing library description: EasyTest is a simple testing toolkit, meant to replace most uses of QuickCheck, SmallCheck, HUnit, and frameworks like Tasty, etc. Here's an example usage: . > module Main where > > import EasyTest > import Control.Applicative > import Control.Monad > > suite :: Test () > suite = tests > [ scope "addition.ex1" $ expect (1 + 1 == 2) > , scope "addition.ex2" $ expect (2 + 3 == 5) > , scope "list.reversal" . fork $ do > -- generate lists from size 0 to 10, of Ints in (0,43) > -- shorthand: listsOf [0..10] (int' 0 43) > ns <- [0..10] `forM` \n -> replicateM n (int' 0 43) > ns `forM_` \ns -> expect (reverse (reverse ns) == ns) > -- equivalent to `scope "addition.ex3"` > , scope "addition" . scope "ex3" $ expect (3 + 3 == 6) > , scope "always passes" $ do > note "I'm running this test, even though it always passes!" > ok -- like `pure ()`, but records 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 = runOnly "addition" suite . This generates the output: . > Randomness seed for this run is 5104092164859451056 > Raw test output to follow ... > ------------------------------------------------------------ > OK addition.ex1 > OK addition.ex2 > OK addition.ex3 > ------------------------------------------------------------ > ✅ 3 tests passed, no failures! 👍 🎉 The idea here is to write tests with ordinary Haskell code, with control flow explicit and under programmer control. build-type: Simple extra-source-files: data-files: tested-with: GHC == 8.0.2, GHC == 8.2.1 source-repository head type: git location: git@github.com:joelburget/easytest.git -- `cabal install -foptimized` enables optimizations flag optimized manual: True default: False flag quiet manual: True default: False library hs-source-dirs: src exposed-modules: EasyTest EasyTest.Internal other-modules: EasyTest.Generators EasyTest.Porcelain -- these bounds could probably be made looser build-depends: async >= 2.1 && <= 2.2, base >= 4.5 && <= 5, mtl >= 2.0.1 && < 2.3, containers >= 0.4.0 && < 0.6, stm >= 2.4 && < 3, random >= 1.1 && < 2, text >= 1.2 && < 1.3 ghc-options: -Wall -fno-warn-name-shadowing if flag(optimized) ghc-options: -funbox-strict-fields -O2 if flag(quiet) ghc-options: -v0 -- I really have no idea why you'd ever use this, just use an executable as above test-suite tests type: exitcode-stdio-1.0 main-is: Suite.hs ghc-options: -w -threaded -rtsopts -with-rtsopts=-N -v0 hs-source-dirs: tests other-modules: build-depends: base, easytest