2007-02-09 04:23:12 +03:00
|
|
|
|
2007-02-10 20:36:50 +03:00
|
|
|
module Tests
|
|
|
|
where
|
|
|
|
|
|
|
|
import Text.ParserCombinators.Parsec
|
2007-02-10 22:16:56 +03:00
|
|
|
import Test.QuickCheck
|
|
|
|
import Test.HUnit
|
|
|
|
-- trying to make "*Tests> test" work
|
|
|
|
-- hiding (test)
|
|
|
|
--import qualified Test.HUnit (Test.HUnit.test)
|
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-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"
|
|
|
|
|
|
|
|
transaction1 = Transaction "expenses:food:dining" (Amount "$" 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"
|
|
|
|
[Transaction "expenses:food:groceries" (Amount "$" 47.18),
|
|
|
|
Transaction "assets:checking" (Amount "$" (-47.18))])
|
|
|
|
|
|
|
|
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-02-10 08:09:42 +03:00
|
|
|
\2007/01/01 * opening balance\n\
|
|
|
|
\ assets:cash $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" --"
|
|
|
|
|
2007-02-11 02:32:45 +03:00
|
|
|
ledger7 = Ledger
|
|
|
|
[]
|
|
|
|
[]
|
2007-02-10 08:09:42 +03:00
|
|
|
[
|
|
|
|
Entry {
|
2007-02-13 04:03:12 +03:00
|
|
|
edate="2007/01/01", estatus=False, ecode="*", edescription="opening balance",
|
|
|
|
etransactions=[
|
|
|
|
Transaction {taccount="assets:cash",
|
|
|
|
tamount=Amount {currency="$", quantity=4.82}},
|
|
|
|
Transaction {taccount="equity:opening balances",
|
|
|
|
tamount=Amount {currency="$", quantity=(-4.82)}}
|
2007-02-10 08:09:42 +03:00
|
|
|
]
|
|
|
|
},
|
|
|
|
Entry {
|
2007-02-13 04:03:12 +03:00
|
|
|
edate="2007/02/01", estatus=False, ecode="*", edescription="ayres suites",
|
|
|
|
etransactions=[
|
|
|
|
Transaction {taccount="expenses:vacation",
|
|
|
|
tamount=Amount {currency="$", quantity=179.92}},
|
|
|
|
Transaction {taccount="assets:checking",
|
|
|
|
tamount=Amount {currency="$", quantity=(-179.92)}}
|
2007-02-10 08:09:42 +03:00
|
|
|
]
|
|
|
|
}
|
|
|
|
]
|
|
|
|
|
2007-02-09 06:17:12 +03:00
|
|
|
-- utils
|
2007-02-09 04:23:12 +03:00
|
|
|
|
2007-02-11 02:24:33 +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
|
2007-02-11 02:24:33 +03:00
|
|
|
Right v -> assertEqual " " expected v
|
2007-02-09 11:27:35 +03:00
|
|
|
|
2007-02-11 02:24:33 +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-02-11 02:32:45 +03:00
|
|
|
tests = let t l f = TestLabel l $ TestCase f in TestList
|
|
|
|
[
|
|
|
|
t "test_ledgertransaction" test_ledgertransaction
|
|
|
|
, t "test_ledgerentry" test_ledgerentry
|
|
|
|
, t "test_autofillEntry" test_autofillEntry
|
|
|
|
, t "test_expandAccounts" test_expandAccounts
|
|
|
|
, t "test_accountTree" test_accountTree
|
|
|
|
]
|
|
|
|
|
|
|
|
tests2 = Test.HUnit.test
|
|
|
|
[
|
|
|
|
"test1" ~: assertEqual "2 equals 2" 2 2
|
|
|
|
]
|
2007-02-09 18:54:18 +03:00
|
|
|
|
2007-02-11 02:24:33 +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
|
|
|
|
2007-02-11 02:24:33 +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
|
|
|
|
2007-02-11 02:24:33 +03:00
|
|
|
test_autofillEntry =
|
2007-02-09 18:54:18 +03:00
|
|
|
assertEqual'
|
2007-02-11 02:24:33 +03:00
|
|
|
(Amount "$" (-47.18))
|
2007-02-13 04:03:12 +03:00
|
|
|
(tamount $ last $ etransactions $ autofillEntry entry1)
|
2007-02-09 06:17:12 +03:00
|
|
|
|
2007-02-11 02:24:33 +03:00
|
|
|
test_expandAccounts =
|
|
|
|
assertEqual'
|
|
|
|
["assets","assets:cash","assets:checking","expenses","expenses:vacation"]
|
|
|
|
(expandAccounts ["assets:cash","assets:checking","expenses:vacation"])
|
2007-02-09 06:17:12 +03:00
|
|
|
|
2007-02-11 02:24:33 +03:00
|
|
|
test_accountTree =
|
|
|
|
assertEqual'
|
|
|
|
["assets","assets:cash","assets:checking","equity","equity:opening balances","expenses","expenses:vacation"]
|
2007-02-13 04:03:12 +03:00
|
|
|
(ledgerAccountTree ledger7)
|
2007-02-11 02:24:33 +03:00
|
|
|
|
2007-02-09 06:32:07 +03:00
|
|
|
-- quickcheck properties
|
2007-02-09 04:23:12 +03:00
|
|
|
|
2007-02-11 02:24:33 +03:00
|
|
|
props =
|
|
|
|
[
|
2007-02-11 02:32:45 +03:00
|
|
|
parse' ledgertransaction transaction1_str `parseEquals`
|
2007-02-11 02:24:33 +03:00
|
|
|
(Transaction "expenses:food:dining" (Amount "$" 10))
|
|
|
|
,
|
2007-02-13 04:03:12 +03:00
|
|
|
ledgerAccountTree ledger7 ==
|
2007-02-11 02:24:33 +03:00
|
|
|
["assets","assets:cash","assets:checking","equity","equity:opening balances","expenses","expenses:vacation"]
|
2007-02-13 06:48:16 +03:00
|
|
|
,
|
|
|
|
ledgerPatternArgs [] == ([],[])
|
|
|
|
,ledgerPatternArgs ["a"] == (["a"],[])
|
|
|
|
,ledgerPatternArgs ["a","b"] == (["a","b"],[])
|
|
|
|
,ledgerPatternArgs ["a","b","--"] == (["a","b"],[])
|
|
|
|
,ledgerPatternArgs ["a","b","--","c","b"] == (["a","b"],["c","b"])
|
|
|
|
,ledgerPatternArgs ["--","c"] == ([],["c"])
|
|
|
|
,ledgerPatternArgs ["--"] == ([],[])
|
2007-02-11 02:24:33 +03:00
|
|
|
]
|
2007-02-13 06:48:16 +03:00
|
|
|
|