"hledger test" now accepts ledger-style name patterns, to run a subset of tests
Eg: hledger test amount, hledger test -'balance report'
This commit is contained in:
parent
97fad8fa6f
commit
2711474bc9
1
NOTES
1
NOTES
@ -32,7 +32,6 @@ implementations were its consequences." --Niklaus Wirth
|
|||||||
*** test on more ledger files
|
*** test on more ledger files
|
||||||
*** speed regression tests
|
*** speed regression tests
|
||||||
*** more modular/scalable approach to test data ?
|
*** more modular/scalable approach to test data ?
|
||||||
*** individual test running
|
|
||||||
*** figure out reliable maintainable appropriate tests
|
*** figure out reliable maintainable appropriate tests
|
||||||
*** easy ledger compatibility testing
|
*** easy ledger compatibility testing
|
||||||
** docs
|
** docs
|
||||||
|
|||||||
40
Tests.hs
40
Tests.hs
@ -11,10 +11,44 @@ import PrintCommand
|
|||||||
import RegisterCommand
|
import RegisterCommand
|
||||||
|
|
||||||
|
|
||||||
runtests = do {putStrLn "Running tests.."; runTestTT $ tconcat [unittests, functests]}
|
runtests args = do
|
||||||
|
putStrLn $ printf "Running %d tests%s ..\n" n s
|
||||||
|
runTestTT flattests
|
||||||
|
where
|
||||||
|
tests = [unittests, functests]
|
||||||
|
deeptests = tfilter matchname $ TestList tests
|
||||||
|
flattests = TestList $ filter matchname $ concatMap tflatten tests
|
||||||
|
matchname = Tests.matchpats args . tname
|
||||||
|
n = length ts where (TestList ts) = flattests
|
||||||
|
s | null args = ""
|
||||||
|
| otherwise = printf " matching %s"
|
||||||
|
(intercalate ", " $ map (printf "\"%s\"") args)
|
||||||
|
|
||||||
tconcat :: [Test] -> Test
|
matchpats pats str = (null positives || any match positives) && (null negatives || not (any match negatives))
|
||||||
tconcat = foldr (\(TestList as) (TestList bs) -> TestList (as ++ bs)) (TestList [])
|
where
|
||||||
|
(negatives,positives) = partition isnegative pats
|
||||||
|
isnegative = (== [Ledger.negativepatternchar]) . take 1
|
||||||
|
match "" = True
|
||||||
|
match pat = containsRegex (mkRegexWithOpts pat' True True) str
|
||||||
|
where
|
||||||
|
pat' = if isnegative pat then drop 1 pat else pat
|
||||||
|
|
||||||
|
-- | Get a Test's label, or the empty string.
|
||||||
|
tname :: Test -> String
|
||||||
|
tname (TestLabel n _) = n
|
||||||
|
tname _ = ""
|
||||||
|
|
||||||
|
-- | Flatten a Test containing TestLists into a list of single tests.
|
||||||
|
tflatten :: Test -> [Test]
|
||||||
|
tflatten (TestLabel _ t@(TestList _)) = tflatten t
|
||||||
|
tflatten (TestList ts) = concatMap tflatten ts
|
||||||
|
tflatten t = [t]
|
||||||
|
|
||||||
|
-- | Filter any TestLists in a Test, recursively, preserving the structure.
|
||||||
|
tfilter :: (Test -> Bool) -> Test -> Test
|
||||||
|
tfilter p (TestList ts) = TestList $ filter (any p . tflatten) $ map (tfilter p) ts
|
||||||
|
tfilter p (TestLabel l t) = TestLabel l (tfilter p t)
|
||||||
|
tfilter _ t = t
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|||||||
@ -61,7 +61,7 @@ main = do
|
|||||||
| cmd `isPrefixOf` "balance" = parseLedgerAndDo opts args balance
|
| cmd `isPrefixOf` "balance" = parseLedgerAndDo opts args balance
|
||||||
| cmd `isPrefixOf` "print" = parseLedgerAndDo opts args print'
|
| cmd `isPrefixOf` "print" = parseLedgerAndDo opts args print'
|
||||||
| cmd `isPrefixOf` "register" = parseLedgerAndDo opts args register
|
| cmd `isPrefixOf` "register" = parseLedgerAndDo opts args register
|
||||||
| cmd `isPrefixOf` "test" = runtests >> return ()
|
| cmd `isPrefixOf` "test" = runtests args >> return ()
|
||||||
| otherwise = putStr usage
|
| otherwise = putStr usage
|
||||||
|
|
||||||
-- | parse the user's specified ledger file and do some action with it
|
-- | parse the user's specified ledger file and do some action with it
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user