hledger/Tests.hs

323 lines
11 KiB
Haskell
Raw Normal View History

2007-02-09 04:23:12 +03:00
2007-02-10 20:36:50 +03:00
module Tests
where
2007-03-10 02:32:00 +03:00
import qualified Data.Map as Map
2007-02-10 20:36:50 +03:00
import Text.ParserCombinators.Parsec
2007-02-09 04:23:12 +03:00
import Options
2007-02-11 02:10:04 +03:00
import Models
2007-02-09 06:17:12 +03:00
import Parse
2007-03-12 12:38:02 +03:00
import Utils
2007-02-09 04:23:12 +03:00
-- sample data
2007-02-10 22:16:56 +03:00
transaction1_str = " expenses:food:dining $10.00\n"
2007-03-12 20:53:39 +03:00
transaction1 = Transaction "expenses:food:dining" (dollars 10)
2007-02-09 04:23:12 +03:00
2007-02-10 22:16:56 +03:00
entry1_str = "\
2007-02-09 04:23:12 +03:00
\2007/01/28 coopportunity\n\
\ expenses:food:groceries $47.18\n\
\ assets:checking\n\
\\n" --"
2007-02-10 22:16:56 +03:00
entry1 =
(Entry "2007/01/28" False "" "coopportunity"
2007-03-12 20:53:39 +03:00
[Transaction "expenses:food:groceries" (Amount (getcurrency "$") 47.18),
Transaction "assets:checking" (Amount (getcurrency "$") (-47.18))])
2007-02-10 22:16:56 +03:00
entry2_str = "\
\2007/01/27 * joes diner\n\
\ expenses:food:dining $10.00\n\
\ expenses:gifts $10.00\n\
\ assets:checking $-20.00\n\
\\n" --"
entry3_str = "\
2007-02-09 04:23:12 +03:00
\2007/01/01 * opening balance\n\
\ assets:cash $4.82\n\
\ equity:opening balances\n\
\\n\
\2007/01/01 * opening balance\n\
\ assets:cash $4.82\n\
\ equity:opening balances\n\
\\n\
\2007/01/28 coopportunity\n\
\ expenses:food:groceries $47.18\n\
\ assets:checking\n\
\\n" --"
2007-02-10 22:16:56 +03:00
periodic_entry1_str = "\
2007-02-09 04:23:12 +03:00
\~ monthly from 2007/2/2\n\
\ assets:saving $200.00\n\
\ assets:checking\n\
\\n" --"
2007-02-10 22:16:56 +03:00
periodic_entry2_str = "\
2007-02-09 04:23:12 +03:00
\~ monthly from 2007/2/2\n\
\ assets:saving $200.00 ;auto savings\n\
\ assets:checking\n\
\\n" --"
2007-02-10 22:16:56 +03:00
periodic_entry3_str = "\
2007-02-09 04:23:12 +03:00
\~ monthly from 2007/01/01\n\
\ assets:cash $4.82\n\
\ equity:opening balances\n\
\\n\
\~ monthly from 2007/01/01\n\
\ assets:cash $4.82\n\
\ equity:opening balances\n\
\\n" --"
2007-02-11 02:27:44 +03:00
ledger1_str = "\
2007-02-09 04:23:12 +03:00
\\n\
\2007/01/27 * joes diner\n\
\ expenses:food:dining $10.00\n\
\ expenses:gifts $10.00\n\
\ assets:checking $-20.00\n\
\\n\
\\n\
\2007/01/28 coopportunity\n\
\ expenses:food:groceries $47.18\n\
\ assets:checking $-47.18\n\
\\n\
\" --"
2007-02-10 22:16:56 +03:00
ledger2_str = "\
2007-02-09 04:23:12 +03:00
\;comment\n\
\2007/01/27 * joes diner\n\
\ expenses:food:dining $10.00\n\
\ assets:checking $-47.18\n\
\\n" --"
2007-02-10 22:16:56 +03:00
ledger3_str = "\
2007-02-09 04:23:12 +03:00
\2007/01/27 * joes diner\n\
\ expenses:food:dining $10.00\n\
\;intra-entry comment\n\
\ assets:checking $-47.18\n\
\\n" --"
2007-02-10 22:16:56 +03:00
ledger4_str = "\
2007-02-09 04:23:12 +03:00
\!include \"somefile\"\n\
\2007/01/27 * joes diner\n\
\ expenses:food:dining $10.00\n\
\ assets:checking $-47.18\n\
\\n" --"
2007-02-10 22:16:56 +03:00
ledger5_str = ""
2007-02-09 04:23:12 +03:00
2007-02-10 22:16:56 +03:00
ledger6_str = "\
2007-02-09 04:23:12 +03:00
\~ monthly from 2007/1/21\n\
\ expenses:entertainment $16.23 ;netflix\n\
\ assets:checking\n\
\\n\
\; 2007/01/01 * opening balance\n\
\; assets:saving $200.04\n\
\; equity:opening balances \n\
\\n" --"
2007-02-10 22:16:56 +03:00
ledger7_str = "\
\2007/01/01 * opening balance\n\
\ assets:cash $4.82\n\
\ equity:opening balances \n\
\\n\
\2007/01/01 * opening balance\n\
\ income:interest $-4.82\n\
\ equity:opening balances \n\
\\n\
\2007/01/02 * ayres suites\n\
\ expenses:vacation $179.92\n\
\ assets:checking \n\
\\n\
\2007/01/02 * auto transfer to savings\n\
\ assets:saving $200.00\n\
\ assets:checking \n\
\\n\
\2007/01/03 * poquito mas\n\
\ expenses:food:dining $4.82\n\
\ assets:cash \n\
\\n\
\2007/01/03 * verizon\n\
\ expenses:phone $95.11\n\
\ assets:checking \n\
\\n\
\2007/01/03 * discover\n\
\ liabilities:credit cards:discover $80.00\n\
\ assets:checking \n\
\\n\
\2007/01/04 * blue cross\n\
\ expenses:health:insurance $90.00\n\
\ assets:checking \n\
\\n\
\2007/01/05 * village market liquor\n\
\ expenses:food:dining $6.48\n\
\ assets:checking \n\
\\n" --"
l = ledger7
ledger7 = RawLedger
2007-02-11 02:32:45 +03:00
[]
[]
[
Entry {
edate="2007/01/01", estatus=False, ecode="*", edescription="opening balance",
etransactions=[
Transaction {taccount="assets:cash",
2007-03-12 20:53:39 +03:00
tamount=Amount {currency=(getcurrency "$"), quantity=4.82}},
Transaction {taccount="equity:opening balances",
2007-03-12 20:53:39 +03:00
tamount=Amount {currency=(getcurrency "$"), quantity=(-4.82)}}
]
}
,
Entry {
edate="2007/02/01", estatus=False, ecode="*", edescription="ayres suites",
etransactions=[
Transaction {taccount="expenses:vacation",
2007-03-12 20:53:39 +03:00
tamount=Amount {currency=(getcurrency "$"), quantity=179.92}},
Transaction {taccount="assets:checking",
2007-03-12 20:53:39 +03:00
tamount=Amount {currency=(getcurrency "$"), quantity=(-179.92)}}
]
}
,
Entry {
edate="2007/01/02", estatus=False, ecode="*", edescription="auto transfer to savings",
etransactions=[
Transaction {taccount="assets:saving",
2007-03-12 20:53:39 +03:00
tamount=Amount {currency=(getcurrency "$"), quantity=200}},
Transaction {taccount="assets:checking",
2007-03-12 20:53:39 +03:00
tamount=Amount {currency=(getcurrency "$"), quantity=(-200)}}
]
}
,
Entry {
edate="2007/01/03", estatus=False, ecode="*", edescription="poquito mas",
etransactions=[
Transaction {taccount="expenses:food:dining",
2007-03-12 20:53:39 +03:00
tamount=Amount {currency=(getcurrency "$"), quantity=4.82}},
Transaction {taccount="assets:cash",
2007-03-12 20:53:39 +03:00
tamount=Amount {currency=(getcurrency "$"), quantity=(-4.82)}}
]
}
,
Entry {
edate="2007/01/03", estatus=False, ecode="*", edescription="verizon",
etransactions=[
Transaction {taccount="expenses:phone",
2007-03-12 20:53:39 +03:00
tamount=Amount {currency=(getcurrency "$"), quantity=95.11}},
Transaction {taccount="assets:checking",
2007-03-12 20:53:39 +03:00
tamount=Amount {currency=(getcurrency "$"), quantity=(-95.11)}}
]
}
,
Entry {
edate="2007/01/03", estatus=False, ecode="*", edescription="discover",
etransactions=[
Transaction {taccount="liabilities:credit cards:discover",
2007-03-12 20:53:39 +03:00
tamount=Amount {currency=(getcurrency "$"), quantity=80}},
Transaction {taccount="assets:checking",
2007-03-12 20:53:39 +03:00
tamount=Amount {currency=(getcurrency "$"), quantity=(-80)}}
]
}
]
2007-03-12 03:13:53 +03:00
timelogentry1_str = "i 2007/03/11 16:19:00 hledger\n"
timelogentry1 = TimeLogEntry 'i' "2007/03/11 16:19:00" "hledger"
timelogentry2_str = "o 2007/03/11 16:30:00\n"
timelogentry2 = TimeLogEntry 'o' "2007/03/11 16:30:00" ""
2007-03-12 03:13:53 +03:00
timelog1_str = concat [
timelogentry1_str,
timelogentry2_str
]
timelog1 = TimeLog [
timelogentry1,
timelogentry2
]
2007-03-12 03:13:53 +03:00
2007-03-10 02:32:00 +03:00
2007-02-09 06:17:12 +03:00
-- utils
2007-02-09 04:23:12 +03:00
assertEqual' e a = assertEqual "" e a
parse' p ts = parse p "" ts
2007-02-09 06:17:12 +03:00
assertParseEqual :: (Show a, Eq a) => a -> (Either ParseError a) -> Assertion
assertParseEqual expected parsed =
case parsed of
Left e -> parseError e
Right v -> assertEqual " " expected v
2007-02-09 11:27:35 +03:00
parseEquals :: Eq a => (Either ParseError a) -> a -> Bool
parseEquals parsed other =
case parsed of
Left e -> False
Right v -> v == other
2007-02-09 11:27:35 +03:00
2007-02-09 06:17:12 +03:00
-- hunit tests
2007-03-12 12:38:02 +03:00
tests = runTestTT $ test [
test_ledgertransaction
, test_ledgerentry
, test_autofillEntry
, test_expandAccountNames
, test_ledgerAccountNames
2007-07-02 22:57:37 +04:00
, test_cacheLedger
2007-03-12 12:38:02 +03:00
, 2 @=? 2
2007-02-11 02:32:45 +03:00
]
test_ledgertransaction :: Assertion
test_ledgertransaction =
2007-02-10 22:16:56 +03:00
assertParseEqual transaction1 (parse' ledgertransaction transaction1_str)
2007-02-09 11:27:35 +03:00
test_ledgerentry =
2007-02-10 22:16:56 +03:00
assertParseEqual entry1 (parse' ledgerentry entry1_str)
2007-02-09 06:17:12 +03:00
test_autofillEntry =
assertEqual'
2007-03-12 20:53:39 +03:00
(Amount (getcurrency "$") (-47.18))
(tamount $ last $ etransactions $ autofillEntry entry1)
2007-02-09 06:17:12 +03:00
test_expandAccountNames =
assertEqual'
["assets","assets:cash","assets:checking","expenses","expenses:vacation"]
(expandAccountNames ["assets:cash","assets:checking","expenses:vacation"])
2007-02-09 06:17:12 +03:00
test_ledgerAccountNames =
assertEqual'
2007-02-16 14:51:30 +03:00
["assets","assets:cash","assets:checking","assets:saving","equity","equity:opening balances",
"expenses","expenses:food","expenses:food:dining","expenses:phone","expenses:vacation",
"liabilities","liabilities:credit cards","liabilities:credit cards:discover"]
2007-07-02 23:39:34 +04:00
(rawLedgerAccountNames ledger7)
2007-07-02 22:57:37 +04:00
test_cacheLedger =
2007-07-03 12:46:39 +04:00
assertEqual' 15 (length $ Map.keys $ accounts $ cacheLedger ledger7)
2007-07-02 22:57:37 +04:00
2007-02-09 06:32:07 +03:00
-- quickcheck properties
2007-02-09 04:23:12 +03:00
2007-03-12 12:38:02 +03:00
props = mapM quickCheck
[
2007-02-11 02:32:45 +03:00
parse' ledgertransaction transaction1_str `parseEquals`
2007-03-12 20:53:39 +03:00
(Transaction "expenses:food:dining" (Amount (getcurrency "$") 10))
,
2007-07-02 23:39:34 +04:00
rawLedgerAccountNames ledger7 ==
2007-02-16 14:51:30 +03:00
["assets","assets:cash","assets:checking","assets:saving","equity",
"equity:opening balances","expenses","expenses:food","expenses:food:dining",
"expenses:phone","expenses:vacation","liabilities","liabilities:credit cards",
"liabilities:credit cards:discover"]
,
parseLedgerPatternArgs [] == ([],[])
,parseLedgerPatternArgs ["a"] == (["a"],[])
,parseLedgerPatternArgs ["a","b"] == (["a","b"],[])
,parseLedgerPatternArgs ["a","b","--"] == (["a","b"],[])
,parseLedgerPatternArgs ["a","b","--","c","b"] == (["a","b"],["c","b"])
,parseLedgerPatternArgs ["--","c"] == ([],["c"])
,parseLedgerPatternArgs ["--"] == ([],[])
2007-03-12 03:13:53 +03:00
,parse' timelogentry timelogentry1_str `parseEquals` timelogentry1
,parse' timelogentry timelogentry2_str `parseEquals` timelogentry2
,parse' timelog timelog1_str `parseEquals` timelog1
]