59 lines
1.8 KiB
Haskell
59 lines
1.8 KiB
Haskell
{- |
|
|
|
|
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 Control.Monad
|
|
import System.Exit
|
|
import Test.HUnit
|
|
|
|
import Hledger
|
|
import Hledger.Cli
|
|
|
|
|
|
-- | Run unit tests and exit with success or failure.
|
|
runtests :: CliOpts -> IO ()
|
|
runtests opts = do
|
|
(hunitcounts,_) <- runtests' opts
|
|
if errors hunitcounts > 0 || (failures hunitcounts > 0)
|
|
then exitFailure
|
|
else exitWith ExitSuccess
|
|
|
|
-- | Run unit tests and exit on failure.
|
|
runTestsOrExit :: CliOpts -> IO ()
|
|
runTestsOrExit opts = do
|
|
(hunitcounts,_) <- runtests' opts
|
|
when (errors hunitcounts > 0 || (failures hunitcounts > 0)) $ exitFailure
|
|
|
|
runtests' :: Num b => CliOpts -> IO (Counts, b)
|
|
runtests' opts = liftM (flip (,) 0) $ runTestTT ts
|
|
where
|
|
ts = TestList $ filter matchname $ tflatten tests_Hledger_Cli -- show flat test names
|
|
-- ts = tfilter matchname $ TestList tests -- show hierarchical test names
|
|
matchname = matchpats (patterns_ $ reportopts_ opts) . tname
|