refactor: move parse tests
This commit is contained in:
parent
903bf23afd
commit
f92270dfa8
58
Tests.hs
58
Tests.hs
@ -55,8 +55,8 @@ runtests opts args = do
|
|||||||
-- ts = tfilter matchname $ TestList tests -- show hierarchical test names
|
-- ts = tfilter matchname $ TestList tests -- show hierarchical test names
|
||||||
matchname = matchpats args . tname
|
matchname = matchpats args . tname
|
||||||
|
|
||||||
-- | hledger's unit tests, defined here and also (new) in the respective modules.
|
-- | unit tests, augmenting the ones defined in each module. Where that is
|
||||||
-- The latter is probably the way forward.
|
-- inconvenient due to import cycles or whatever, we define them here.
|
||||||
tests :: Test
|
tests :: Test
|
||||||
tests = TestList [
|
tests = TestList [
|
||||||
tests_Ledger,
|
tests_Ledger,
|
||||||
@ -413,28 +413,6 @@ tests = TestList [
|
|||||||
r <- journalFromString "" -- don't know how to get it from ledgerFile
|
r <- journalFromString "" -- don't know how to get it from ledgerFile
|
||||||
assertBool "ledgerFile parsing an empty file should give an empty ledger" $ null $ jtxns r
|
assertBool "ledgerFile parsing an empty file should give an empty ledger" $ null $ jtxns r
|
||||||
|
|
||||||
,"ledgerHistoricalPrice" ~:
|
|
||||||
assertParseEqual (parseWithCtx emptyCtx ledgerHistoricalPrice price1_str) price1
|
|
||||||
|
|
||||||
,"ledgerTransaction" ~: do
|
|
||||||
assertParseEqual (parseWithCtx emptyCtx ledgerTransaction entry1_str) entry1
|
|
||||||
assertBool "ledgerTransaction should not parse just a date"
|
|
||||||
$ isLeft $ parseWithCtx emptyCtx ledgerTransaction "2009/1/1\n"
|
|
||||||
assertBool "ledgerTransaction should require some postings"
|
|
||||||
$ isLeft $ parseWithCtx emptyCtx ledgerTransaction "2009/1/1 a\n"
|
|
||||||
let t = parseWithCtx emptyCtx ledgerTransaction "2009/1/1 a ;comment\n b 1\n"
|
|
||||||
assertBool "ledgerTransaction should not include a comment in the description"
|
|
||||||
$ either (const False) ((== "a") . tdescription) t
|
|
||||||
|
|
||||||
,"ledgeraccountname" ~: do
|
|
||||||
assertBool "ledgeraccountname parses a normal accountname" (isRight $ parsewith ledgeraccountname "a:b:c")
|
|
||||||
assertBool "ledgeraccountname rejects an empty inner component" (isLeft $ parsewith ledgeraccountname "a::c")
|
|
||||||
assertBool "ledgeraccountname rejects an empty leading component" (isLeft $ parsewith ledgeraccountname ":b:c")
|
|
||||||
assertBool "ledgeraccountname rejects an empty trailing component" (isLeft $ parsewith ledgeraccountname "a:b:")
|
|
||||||
|
|
||||||
,"ledgerposting" ~:
|
|
||||||
assertParseEqual (parseWithCtx emptyCtx ledgerposting rawposting1_str) rawposting1
|
|
||||||
|
|
||||||
,"normaliseMixedAmount" ~: do
|
,"normaliseMixedAmount" ~: do
|
||||||
normaliseMixedAmount (Mixed []) ~?= Mixed [nullamt]
|
normaliseMixedAmount (Mixed []) ~?= Mixed [nullamt]
|
||||||
|
|
||||||
@ -630,13 +608,6 @@ tests = TestList [
|
|||||||
|
|
||||||
,"show hours" ~: show (hours 1) ~?= "1.0h"
|
,"show hours" ~: show (hours 1) ~?= "1.0h"
|
||||||
|
|
||||||
,"someamount" ~: do
|
|
||||||
let -- | compare a parse result with a MixedAmount, showing the debug representation for clarity
|
|
||||||
assertMixedAmountParse parseresult mixedamount =
|
|
||||||
(either (const "parse error") showMixedAmountDebug parseresult) ~?= (showMixedAmountDebug mixedamount)
|
|
||||||
assertMixedAmountParse (parsewith someamount "1 @ $2")
|
|
||||||
(Mixed [Amount unknown 1 (Just $ Mixed [Amount dollar{precision=0} 2 Nothing])])
|
|
||||||
|
|
||||||
,"unicode in balance layout" ~: do
|
,"unicode in balance layout" ~: do
|
||||||
l <- ledgerFromStringWithOpts []
|
l <- ledgerFromStringWithOpts []
|
||||||
"2009/01/01 * медвежья шкура\n расходы:покупки 100\n актив:наличные\n"
|
"2009/01/01 * медвежья шкура\n расходы:покупки 100\n актив:наличные\n"
|
||||||
@ -726,11 +697,6 @@ tests = TestList [
|
|||||||
-- nullposting{lpdate=parsedate "2008/01/01",lpdescription="- 2008/12/31",lpaccount="",lpamount=Mixed [dollars 15]}
|
-- nullposting{lpdate=parsedate "2008/01/01",lpdescription="- 2008/12/31",lpaccount="",lpamount=Mixed [dollars 15]}
|
||||||
-- ]
|
-- ]
|
||||||
|
|
||||||
,"postingamount" ~: do
|
|
||||||
assertParseEqual (parseWithCtx emptyCtx postingamount " $47.18") (Mixed [dollars 47.18])
|
|
||||||
assertParseEqual (parseWithCtx emptyCtx postingamount " $1.")
|
|
||||||
(Mixed [Amount Commodity {symbol="$",side=L,spaced=False,comma=False,precision=0} 1 Nothing])
|
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@ -795,23 +761,6 @@ defaultyear_ledger_str = unlines
|
|||||||
|
|
||||||
write_sample_ledger = writeFile "sample.ledger" sample_ledger_str
|
write_sample_ledger = writeFile "sample.ledger" sample_ledger_str
|
||||||
|
|
||||||
rawposting1_str = " expenses:food:dining $10.00\n"
|
|
||||||
|
|
||||||
rawposting1 = Posting False "expenses:food:dining" (Mixed [dollars 10]) "" RegularPosting Nothing
|
|
||||||
|
|
||||||
entry1_str = unlines
|
|
||||||
["2007/01/28 coopportunity"
|
|
||||||
," expenses:food:groceries $47.18"
|
|
||||||
," assets:checking $-47.18"
|
|
||||||
,""
|
|
||||||
]
|
|
||||||
|
|
||||||
entry1 =
|
|
||||||
txnTieKnot $ Transaction (parsedate "2007/01/28") Nothing False "" "coopportunity" ""
|
|
||||||
[Posting False "expenses:food:groceries" (Mixed [dollars 47.18]) "" RegularPosting Nothing,
|
|
||||||
Posting False "assets:checking" (Mixed [dollars (-47.18)]) "" RegularPosting Nothing] ""
|
|
||||||
|
|
||||||
|
|
||||||
entry2_str = unlines
|
entry2_str = unlines
|
||||||
["2007/01/27 * joes diner"
|
["2007/01/27 * joes diner"
|
||||||
," expenses:food:dining $10.00"
|
," expenses:food:dining $10.00"
|
||||||
@ -1145,9 +1094,6 @@ timelogentry1 = TimeLogEntry In (parsedatetime "2007/03/11 16:19:00") "hledger"
|
|||||||
timelogentry2_str = "o 2007/03/11 16:30:00\n"
|
timelogentry2_str = "o 2007/03/11 16:30:00\n"
|
||||||
timelogentry2 = TimeLogEntry Out (parsedatetime "2007/03/11 16:30:00") ""
|
timelogentry2 = TimeLogEntry Out (parsedatetime "2007/03/11 16:30:00") ""
|
||||||
|
|
||||||
price1_str = "P 2004/05/01 XYZ $55.00\n"
|
|
||||||
price1 = HistoricalPrice (parsedate "2004/05/01") "XYZ" $ Mixed [dollars 55]
|
|
||||||
|
|
||||||
a1 = Mixed [(hours 1){price=Just $ Mixed [Amount (comm "$") 10 Nothing]}]
|
a1 = Mixed [(hours 1){price=Just $ Mixed [Amount (comm "$") 10 Nothing]}]
|
||||||
a2 = Mixed [(hours 2){price=Just $ Mixed [Amount (comm "EUR") 10 Nothing]}]
|
a2 = Mixed [(hours 2){price=Just $ Mixed [Amount (comm "EUR") 10 Nothing]}]
|
||||||
a3 = Mixed $ amounts a1 ++ amounts a2
|
a3 = Mixed $ amounts a1 ++ amounts a2
|
||||||
|
|||||||
@ -49,7 +49,7 @@ tests_Ledger = TestList
|
|||||||
-- ,Ledger.IO.tests_IO
|
-- ,Ledger.IO.tests_IO
|
||||||
,Ledger.Transaction.tests_Transaction
|
,Ledger.Transaction.tests_Transaction
|
||||||
-- ,Ledger.Ledger.tests_Ledger
|
-- ,Ledger.Ledger.tests_Ledger
|
||||||
-- ,Ledger.Parse.tests_Parse
|
,Ledger.Parse.tests_Parse
|
||||||
-- ,Ledger.Journal.tests_Journal
|
-- ,Ledger.Journal.tests_Journal
|
||||||
-- ,Ledger.Posting.tests_Posting
|
-- ,Ledger.Posting.tests_Posting
|
||||||
-- ,Ledger.TimeLog.tests_TimeLog
|
-- ,Ledger.TimeLog.tests_TimeLog
|
||||||
|
|||||||
@ -24,6 +24,7 @@ import Ledger.Amount
|
|||||||
import Ledger.Transaction
|
import Ledger.Transaction
|
||||||
import Ledger.Posting
|
import Ledger.Posting
|
||||||
import Ledger.Journal
|
import Ledger.Journal
|
||||||
|
import Ledger.Commodity (dollars,dollar,unknown)
|
||||||
import System.FilePath(takeDirectory,combine)
|
import System.FilePath(takeDirectory,combine)
|
||||||
|
|
||||||
|
|
||||||
@ -585,3 +586,59 @@ datedisplayexpr = do
|
|||||||
|
|
||||||
compareop = choice $ map (try . string) ["<=",">=","==","<","=",">"]
|
compareop = choice $ map (try . string) ["<=",">=","==","<","=",">"]
|
||||||
|
|
||||||
|
|
||||||
|
tests_Parse = TestList [
|
||||||
|
|
||||||
|
"ledgerHistoricalPrice" ~:
|
||||||
|
assertParseEqual (parseWithCtx emptyCtx ledgerHistoricalPrice price1_str) price1
|
||||||
|
|
||||||
|
,"ledgerTransaction" ~: do
|
||||||
|
assertParseEqual (parseWithCtx emptyCtx ledgerTransaction entry1_str) entry1
|
||||||
|
assertBool "ledgerTransaction should not parse just a date"
|
||||||
|
$ isLeft $ parseWithCtx emptyCtx ledgerTransaction "2009/1/1\n"
|
||||||
|
assertBool "ledgerTransaction should require some postings"
|
||||||
|
$ isLeft $ parseWithCtx emptyCtx ledgerTransaction "2009/1/1 a\n"
|
||||||
|
let t = parseWithCtx emptyCtx ledgerTransaction "2009/1/1 a ;comment\n b 1\n"
|
||||||
|
assertBool "ledgerTransaction should not include a comment in the description"
|
||||||
|
$ either (const False) ((== "a") . tdescription) t
|
||||||
|
|
||||||
|
,"ledgeraccountname" ~: do
|
||||||
|
assertBool "ledgeraccountname parses a normal accountname" (isRight $ parsewith ledgeraccountname "a:b:c")
|
||||||
|
assertBool "ledgeraccountname rejects an empty inner component" (isLeft $ parsewith ledgeraccountname "a::c")
|
||||||
|
assertBool "ledgeraccountname rejects an empty leading component" (isLeft $ parsewith ledgeraccountname ":b:c")
|
||||||
|
assertBool "ledgeraccountname rejects an empty trailing component" (isLeft $ parsewith ledgeraccountname "a:b:")
|
||||||
|
|
||||||
|
,"ledgerposting" ~:
|
||||||
|
assertParseEqual (parseWithCtx emptyCtx ledgerposting " expenses:food:dining $10.00\n")
|
||||||
|
(Posting False "expenses:food:dining" (Mixed [dollars 10]) "" RegularPosting Nothing)
|
||||||
|
|
||||||
|
,"someamount" ~: do
|
||||||
|
let -- | compare a parse result with a MixedAmount, showing the debug representation for clarity
|
||||||
|
assertMixedAmountParse parseresult mixedamount =
|
||||||
|
(either (const "parse error") showMixedAmountDebug parseresult) ~?= (showMixedAmountDebug mixedamount)
|
||||||
|
assertMixedAmountParse (parsewith someamount "1 @ $2")
|
||||||
|
(Mixed [Amount unknown 1 (Just $ Mixed [Amount dollar{precision=0} 2 Nothing])])
|
||||||
|
|
||||||
|
,"postingamount" ~: do
|
||||||
|
assertParseEqual (parseWithCtx emptyCtx postingamount " $47.18") (Mixed [dollars 47.18])
|
||||||
|
assertParseEqual (parseWithCtx emptyCtx postingamount " $1.")
|
||||||
|
(Mixed [Amount Commodity {symbol="$",side=L,spaced=False,comma=False,precision=0} 1 Nothing])
|
||||||
|
|
||||||
|
]
|
||||||
|
|
||||||
|
price1_str = "P 2004/05/01 XYZ $55.00\n"
|
||||||
|
price1 = HistoricalPrice (parsedate "2004/05/01") "XYZ" $ Mixed [dollars 55]
|
||||||
|
|
||||||
|
entry1_str = unlines
|
||||||
|
["2007/01/28 coopportunity"
|
||||||
|
," expenses:food:groceries $47.18"
|
||||||
|
," assets:checking $-47.18"
|
||||||
|
,""
|
||||||
|
]
|
||||||
|
|
||||||
|
entry1 =
|
||||||
|
txnTieKnot $ Transaction (parsedate "2007/01/28") Nothing False "" "coopportunity" ""
|
||||||
|
[Posting False "expenses:food:groceries" (Mixed [dollars 47.18]) "" RegularPosting Nothing,
|
||||||
|
Posting False "assets:checking" (Mixed [dollars (-47.18)]) "" RegularPosting Nothing] ""
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user