1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
import datetime
import ledgerhelpers.parser as parser
import tests.test_base as base
from unittest import TestCase as T
class TestParser(T):
def test_simple_transaction(self):
c = base.data("simple_transaction.dat")
items = parser.lex_ledger_file_contents(c)
self.assertEqual(len(items), 3)
for n, tclass in enumerate([
parser.TokenWhitespace,
parser.TokenTransaction,
parser.TokenWhitespace,
]):
self.assertIsInstance(items[n], tclass)
transaction = items[1]
self.assertEqual(transaction.date, datetime.date(2015, 3, 12))
self.assertEqual(transaction.clearing_date, datetime.date(2015, 3, 15))
self.assertEqual(transaction.payee, "beer")
for n, (ac, am) in enumerate([
("Accounts:Cash", "-6.00 CHF"),
("Expenses:Drinking", "6.00 CHF"),
]):
self.assertEqual(transaction.postings[n].account, ac)
self.assertEqual(transaction.postings[n].amount, am)
def test_no_end_value(self):
c = base.data("no_end_value.dat")
items = parser.lex_ledger_file_contents(c)
self.assertEqual(len(items), 5)
for n, tclass in enumerate([
parser.TokenWhitespace,
parser.TokenTransaction,
parser.TokenWhitespace,
parser.TokenTransaction,
parser.TokenWhitespace,
]):
self.assertIsInstance(items[n], tclass)
for transaction in (items[1], items[3]):
self.assertEqual(transaction.payee, "beer")
for n, (ac, am) in enumerate([
("Accounts:Cash", "-6.00 CHF"),
("Expenses:Drinking", ""),
]):
self.assertEqual(transaction.postings[n].account, ac)
self.assertEqual(transaction.postings[n].amount, am)
def test_with_comments(self):
c = base.data("with_comments.dat")
items = parser.lex_ledger_file_contents(c)
self.assertEqual(len(items), 3)
for n, tclass in enumerate([
parser.TokenWhitespace,
parser.TokenTransaction,
parser.TokenWhitespace,
]):
self.assertIsInstance(items[n], tclass)
transaction = items[1]
self.assertEqual(transaction.date, datetime.date(2011, 12, 25))
self.assertEqual(transaction.clearing_date, datetime.date(2011, 12, 25))
self.assertEqual(transaction.payee, "a gift!")
self.assertEqual(transaction.state, parser.STATE_CLEARED)
for n, (ac, am) in enumerate([
("Assets:Metals", "1 \"silver coin\" @ $55"),
("Income:Gifts", "$ -55"),
]):
self.assertEqual(transaction.postings[n].account, ac)
self.assertEqual(transaction.postings[n].amount, am)
def test_my_data_file(self):
try:
c = base.data("/home/user/.ledger")
except IOError:
return
items = parser.lex_ledger_file_contents(c)
|