hledger-0.14: Hledger/Cli/Tests.hs
{- |
This module contains hledger's unit tests. These are built in to hledger,
and can be run at any time by doing @hledger test@ (or, with a few more
options, by doing @make unittest@ in the hledger source tree.)
Other kinds of tests:
hledger's functional tests are a set of shell/command-line tests defined
by .test files in the tests\/ subdirectory. These can be run by doing
@make functest@ in the hledger source tree.
hledger's doctests are shell commands with expected output in literal
blocks in the haddock documentation, run by doing @make doctest@ in the
hledger source tree. They are hardly used, but here is an example:
@
$ bin/hledger -f data/sample.journal balance o
$1 expenses:food
$-2 income
$-1 gifts
$-1 salary
--------------------
$-1
@
-}
module Hledger.Cli.Tests
where
import System.Exit (exitFailure, exitWith, ExitCode(ExitSuccess)) -- base 3 compatible
import Hledger.Data -- including testing utils in Hledger.Data.Utils
import Hledger.Cli
-- | Run unit tests.
runtests :: [Opt] -> [String] -> IO ()
runtests _ args = do
(counts,_) <- liftM (flip (,) 0) $ runTestTT ts
if errors counts > 0 || (failures counts > 0)
then exitFailure
else exitWith ExitSuccess
where
ts = TestList $ filter matchname $ tflatten tests_Hledger_Cli -- show flat test names
-- ts = tfilter matchname $ TestList tests -- show hierarchical test names
matchname = matchpats args . tname