diff options
Diffstat (limited to 'tests')
41 files changed, 1645 insertions, 0 deletions
diff --git a/tests/amounts.h b/tests/amounts.h new file mode 100644 index 00000000..a72e57d2 --- /dev/null +++ b/tests/amounts.h @@ -0,0 +1,169 @@ +#ifndef __TESTAMOUNT_H +#define __TESTAMOUNT_H + +#include <cxxtest/TestSuite.h> + +#include <amount.h> + +using namespace ledger; + +class TestAmount : public CxxTest::TestSuite +{ +public: + void testCreateAmountWithoutCommodityFromInteger() + { + amount_t a((long int)42); + TS_ASSERT_EQUALS("", a.commodity().symbol()); + TS_ASSERT_EQUALS("", a.commodity().base_symbol()); + TS_ASSERT_EQUALS("42", a.quantity_string()); + } + + void testCreateAmountWithoutCommodity() + { + amount_t a("42"); + TS_ASSERT_EQUALS("", a.commodity().symbol()); + TS_ASSERT_EQUALS("", a.commodity().base_symbol()); + TS_ASSERT_EQUALS("42", a.quantity_string()); + } + + void testCreateAmountWithPrefixCommodity() + { + amount_t *a; + a = new amount_t("$ 42"); + TS_ASSERT_EQUALS("$", a->commodity().symbol()); + TS_ASSERT_EQUALS("$", a->commodity().base_symbol()); + TS_ASSERT_EQUALS("42", a->quantity_string()); + } + + void testCreateAmountWithPostfixCommodity() + { + amount_t *a; + a = new amount_t("42 GLD"); + TS_ASSERT_EQUALS("GLD", a->commodity().symbol()); + TS_ASSERT_EQUALS("GLD", a->commodity().base_symbol()); + TS_ASSERT_EQUALS("42", a->quantity_string()); + } + + void testCreateAmountWithPrefixCommodityContainingSpace() + { + amount_t *a; + a = new amount_t("\"one dollar\" 42"); + TS_ASSERT_EQUALS("\"one dollar\"", a->commodity().symbol()); + TS_ASSERT_EQUALS("one dollar", a->commodity().base_symbol()); + TS_ASSERT_EQUALS("42", a->quantity_string()); + } + + void testCreateAmountWithPostfixCommodityContainingSpace() + { + amount_t *a; + a = new amount_t("42 \"swedish crowns\""); + TS_ASSERT_EQUALS("\"swedish crowns\"", a->commodity().symbol()); + TS_ASSERT_EQUALS("swedish crowns", a->commodity().base_symbol()); + TS_ASSERT_EQUALS("42", a->quantity_string()); + } + + void testCreateAmountWithDirectPrefixCommodity() + { + amount_t *a; + a = new amount_t("$42"); + TS_ASSERT_EQUALS("$", a->commodity().symbol()); + TS_ASSERT_EQUALS("$", a->commodity().base_symbol()); + TS_ASSERT_EQUALS("42", a->quantity_string()); + } + + void testCreateAmountWithDirectPostfixCommodity() + { + amount_t *a; + a = new amount_t("42GLD"); + TS_ASSERT_EQUALS("GLD", a->commodity().symbol()); + TS_ASSERT_EQUALS("GLD", a->commodity().base_symbol()); + TS_ASSERT_EQUALS("42", a->quantity_string()); + } + + void testCannotCreateAmountWithoutQuantity() + { + TS_ASSERT_THROWS(new amount_t("$"), amount_error*); + } + + void testCreateBiiigIntegerAmount() + { + amount_t a("12345678901234567890123456789012345678901234567890"); + TS_ASSERT_EQUALS("12345678901234567890123456789012345678901234567890", + a.quantity_string()); + } + + void testCreateBiiigDecimalAmount() + { + amount_t a("12345678.901234567890123456789012345678901234567890"); + TS_ASSERT_EQUALS("12345678.901234567890123456789012345678901234567890", + a.quantity_string()); + } + + void testCreateCommodityAnnotatedWithEntry() + { + amount_t a("10 AAPL (entry 6)"); + TS_ASSERT_EQUALS("10", a.quantity_string()); + commodity_t c = a.commodity(); + TS_ASSERT_EQUALS("AAPL", c.symbol()); + TS_ASSERT_EQUALS("AAPL", c.base_symbol()); + TS_ASSERT(c.annotated); + //TODO: check entry annotation + } + + void testCreateCommodityAnnotatedWithEntry2() + { + amount_t *a = new amount_t("10 AAPL (entry 6)"); + TS_ASSERT_EQUALS("10", a->quantity_string()); + commodity_t c = a->commodity(); + TS_ASSERT_EQUALS("AAPL", c.symbol()); + TS_ASSERT_EQUALS("AAPL", c.base_symbol()); + TS_ASSERT(c.annotated); + //TODO: check entry annotation + } + + void testAddTwoAmountsWithoutCommodity() + { + amount_t a("6"); + amount_t b("9"); + TS_ASSERT_EQUALS(* new amount_t((long int)15), a+b); + } + + void testAddTwoAmountsWithSameCommodity() + { + amount_t a("$ 6"); + amount_t b("$ 9"); + TS_ASSERT_EQUALS(* new amount_t("$ 15"), a+b); + } + + void testCannotAddTwoAmountsWithDifferentCommodities() + { + amount_t a("$ 6"); + amount_t b("9 GLD"); + TS_ASSERT_THROWS(a+b, amount_error*); + } + + void testCompareTwoAmountsWithSameCommodity() + { + amount_t a("6 SCOX"); + amount_t b("9 SCOX"); + TS_ASSERT(a < b); + TS_ASSERT(a <= b); + TS_ASSERT(!(a > b)); + TS_ASSERT(!(a >= b)); + TS_ASSERT(!(a == b)); + } + + void testCannotCompareTwoAmountsWithDifferentCommodities() + { + amount_t a("$ 6"); + amount_t b("9 GLD"); + + TS_ASSERT_THROWS(a < b, amount_error*); + TS_ASSERT_THROWS(a <= b, amount_error*); + TS_ASSERT_THROWS(a > b, amount_error*); + TS_ASSERT_THROWS(a >= b, amount_error*); + TS_ASSERT(!(a == b)); + } +}; + +#endif // __TESTAMOUNT_H diff --git a/tests/baseline/.cvsignore b/tests/baseline/.cvsignore new file mode 100644 index 00000000..56015043 --- /dev/null +++ b/tests/baseline/.cvsignore @@ -0,0 +1,10 @@ +1 +10 +2 +3 +4 +5 +6 +7 +8 +9 diff --git a/tests/baseline/1001 b/tests/baseline/1001 new file mode 100644 index 00000000..f570768a --- /dev/null +++ b/tests/baseline/1001 @@ -0,0 +1 @@ +Error: "tests/cases/1001.dat", line 10: Only one transaction with null amount allowed per entry diff --git a/tests/baseline/1002 b/tests/baseline/1002 new file mode 100644 index 00000000..8ca4d8d4 --- /dev/null +++ b/tests/baseline/1002 @@ -0,0 +1,4 @@ + +2006/10/20 stock optionx + xgain -20 + Liabilities:MasterCard diff --git a/tests/baseline/1003 b/tests/baseline/1003 new file mode 100644 index 00000000..61e03c48 --- /dev/null +++ b/tests/baseline/1003 @@ -0,0 +1,4 @@ + +2006/10/20 stock optionx + xtime -20 + Liabilities:MasterCard diff --git a/tests/baseline/1004 b/tests/baseline/1004 new file mode 100644 index 00000000..dbbfea17 --- /dev/null +++ b/tests/baseline/1004 @@ -0,0 +1,4 @@ + +2006/10/20 stock optionx + xopti -20 + Liabilities:MasterCard diff --git a/tests/baseline/1005 b/tests/baseline/1005 new file mode 100644 index 00000000..8541a38d --- /dev/null +++ b/tests/baseline/1005 @@ -0,0 +1,4 @@ + +2006/10/20 stock optionx + xgain 0 + Liabilities:MasterCard diff --git a/tests/baseline/1006 b/tests/baseline/1006 new file mode 100644 index 00000000..0ea315f9 --- /dev/null +++ b/tests/baseline/1006 @@ -0,0 +1,4 @@ + +2006/10/20 stock optionx + xtime 0 + Liabilities:MasterCard diff --git a/tests/baseline/1007 b/tests/baseline/1007 new file mode 100644 index 00000000..40f2827a --- /dev/null +++ b/tests/baseline/1007 @@ -0,0 +1,4 @@ + +2006/10/20 stock optionx + xopti 0 + Liabilities:MasterCard diff --git a/tests/baseline/1008 b/tests/baseline/1008 new file mode 100644 index 00000000..385151b2 --- /dev/null +++ b/tests/baseline/1008 @@ -0,0 +1,4 @@ + +2006/10/20 Stock option vesting schedule + xgain $-20.00 + Equity:Options diff --git a/tests/baseline/1009 b/tests/baseline/1009 new file mode 100644 index 00000000..127ad02a --- /dev/null +++ b/tests/baseline/1009 @@ -0,0 +1,4 @@ + +2006/10/20 Stock option vesting schedule + xtime $-20.00 + Equity:Options diff --git a/tests/baseline/1010 b/tests/baseline/1010 new file mode 100644 index 00000000..e408036b --- /dev/null +++ b/tests/baseline/1010 @@ -0,0 +1,4 @@ + +2006/10/20 Stock option vesting schedule + xopti $-20.00 + Equity:Options diff --git a/tests/baseline/1011 b/tests/baseline/1011 new file mode 100644 index 00000000..9c70db18 --- /dev/null +++ b/tests/baseline/1011 @@ -0,0 +1,4 @@ + +2006/10/20 Stock option vesting schedule + xgain 0 + Equity:Options diff --git a/tests/baseline/1012 b/tests/baseline/1012 new file mode 100644 index 00000000..890005ab --- /dev/null +++ b/tests/baseline/1012 @@ -0,0 +1,4 @@ + +2006/10/20 Stock option vesting schedule + xtime 0 + Equity:Options diff --git a/tests/baseline/1013 b/tests/baseline/1013 new file mode 100644 index 00000000..1b7bb71e --- /dev/null +++ b/tests/baseline/1013 @@ -0,0 +1,4 @@ + +2006/10/20 Stock option vesting schedule + xopti 0 + Equity:Options diff --git a/tests/baseline/1014 b/tests/baseline/1014 new file mode 100644 index 00000000..384133b6 --- /dev/null +++ b/tests/baseline/1014 @@ -0,0 +1,4 @@ + +2006/10/20 stock optionx + Capital Gains $-20.00 + Liabilities:MasterCard diff --git a/tests/baseline/1015 b/tests/baseline/1015 new file mode 100644 index 00000000..46d5f454 --- /dev/null +++ b/tests/baseline/1015 @@ -0,0 +1,4 @@ + +2006/10/20 stock optionx + time -20 + Liabilities:MasterCard diff --git a/tests/baseline/1016 b/tests/baseline/1016 new file mode 100644 index 00000000..7fa39204 --- /dev/null +++ b/tests/baseline/1016 @@ -0,0 +1,4 @@ + +2006/10/20 stock optionx + Brokerage:Options -20.00 COMP + Liabilities:MasterCard diff --git a/tests/baseline/1017 b/tests/baseline/1017 new file mode 100644 index 00000000..14b37f8b --- /dev/null +++ b/tests/baseline/1017 @@ -0,0 +1,4 @@ + +2006/10/20 stock optionx + Capital Gains 0 + Liabilities:MasterCard diff --git a/tests/baseline/1018 b/tests/baseline/1018 new file mode 100644 index 00000000..9f3761f8 --- /dev/null +++ b/tests/baseline/1018 @@ -0,0 +1,4 @@ + +2006/10/20 stock optionx + time 0 + Liabilities:MasterCard diff --git a/tests/baseline/1019 b/tests/baseline/1019 new file mode 100644 index 00000000..10f14f4e --- /dev/null +++ b/tests/baseline/1019 @@ -0,0 +1,4 @@ + +2006/10/20 stock optionx + Brokerage:Options 0 + Liabilities:MasterCard diff --git a/tests/baseline/1020 b/tests/baseline/1020 new file mode 100644 index 00000000..f1547ca7 --- /dev/null +++ b/tests/baseline/1020 @@ -0,0 +1,4 @@ + +2006/10/20 stock optionx + Expenses -20 + Liabilities:MasterCard diff --git a/tests/baseline/1021 b/tests/baseline/1021 new file mode 100644 index 00000000..7e3fe64d --- /dev/null +++ b/tests/baseline/1021 @@ -0,0 +1,4 @@ + +2006/10/20 stock optionx + Expenses 0 + Liabilities:MasterCard diff --git a/tests/baseline/1022 b/tests/baseline/1022 new file mode 100644 index 00000000..953a3c02 --- /dev/null +++ b/tests/baseline/1022 @@ -0,0 +1,4 @@ + +2006/10/20 Stock option vesting schedule + Capital Gains $-20.00 + Equity:Options diff --git a/tests/baseline/1023 b/tests/baseline/1023 new file mode 100644 index 00000000..62274097 --- /dev/null +++ b/tests/baseline/1023 @@ -0,0 +1,4 @@ + +2006/10/20 Stock option vesting schedule + time $-20.00 + Equity:Options diff --git a/tests/baseline/1024 b/tests/baseline/1024 new file mode 100644 index 00000000..8272dfd9 --- /dev/null +++ b/tests/baseline/1024 @@ -0,0 +1,4 @@ + +2006/10/20 Stock option vesting schedule + Brokerage:Options -20.00 COMP + Equity:Options diff --git a/tests/baseline/1025 b/tests/baseline/1025 new file mode 100644 index 00000000..52dc8139 --- /dev/null +++ b/tests/baseline/1025 @@ -0,0 +1,4 @@ + +2006/10/20 Stock option vesting schedule + Capital Gains 0 + Equity:Options diff --git a/tests/baseline/1026 b/tests/baseline/1026 new file mode 100644 index 00000000..5071338a --- /dev/null +++ b/tests/baseline/1026 @@ -0,0 +1,4 @@ + +2006/10/20 Stock option vesting schedule + time 0 + Equity:Options diff --git a/tests/baseline/1027 b/tests/baseline/1027 new file mode 100644 index 00000000..31d7c8ab --- /dev/null +++ b/tests/baseline/1027 @@ -0,0 +1,4 @@ + +2006/10/20 Stock option vesting schedule + Brokerage:Options 45.60 COMP + Equity:Options diff --git a/tests/baseline/1028 b/tests/baseline/1028 new file mode 100644 index 00000000..8272dfd9 --- /dev/null +++ b/tests/baseline/1028 @@ -0,0 +1,4 @@ + +2006/10/20 Stock option vesting schedule + Brokerage:Options -20.00 COMP + Equity:Options diff --git a/tests/baseline/1029 b/tests/baseline/1029 new file mode 100644 index 00000000..31d7c8ab --- /dev/null +++ b/tests/baseline/1029 @@ -0,0 +1,4 @@ + +2006/10/20 Stock option vesting schedule + Brokerage:Options 45.60 COMP + Equity:Options diff --git a/tests/cases/1001.dat b/tests/cases/1001.dat new file mode 100644 index 00000000..c781fb4f --- /dev/null +++ b/tests/cases/1001.dat @@ -0,0 +1,10 @@ +1.00s = 100c +1.00G = 100s + +D 1.00G + +2006/03/14 Opening Balances + Assets:Ebonheart 63869c + Assets:Tajer 248720c + Assets:Gruulmorg + Equity:Gold diff --git a/tests/cases/1002.dat b/tests/cases/1002.dat new file mode 100644 index 00000000..8719b603 --- /dev/null +++ b/tests/cases/1002.dat @@ -0,0 +1,25 @@ +D $1,000.00 + +A Liabilities:MasterCard + +@def foo(x)=x*1000 + +2006/02/14 Buy + Broker AAPL 10 @ $200.00 ; this is a little note [2006/10/10] + Broker AAPL 10 @ $300.00 + Bank ; this is a comment + +2006/02/14 Sell + Bank $2000.00 + $500.00 + Broker AAPL -5 [2005/10/20] {$200.0015} @ $500.00 + Capital Gains $-1500.00 + +2005/10/20 Stock option vesting schedule + Brokerage:Options (1.00 COMP {$10.00}*min((([2006/08/20]-[2005/10/20])/3600/24)*0.15, 5000)) + Equity:Options + +P 2006/02/27 00:00:00 COMP $15.00 + +;2005/10/20 Stock option vesting schedule +; Brokerage:Time (1+@now) +; Equity:Time diff --git a/tests/cases/1030.dat b/tests/cases/1030.dat new file mode 100644 index 00000000..60fcac1c --- /dev/null +++ b/tests/cases/1030.dat @@ -0,0 +1,24 @@ +2006/03/01 Basis + Assets:Pool $1000 + (Shares) 1000 shares {$1.00} + Equity + +P 2006/03/01 shares $1.00 + +2006/03/10 Purchase + (Payable:You) -500 shares {$1} + (Shares) -500 shares + Assets:Investment $500 + Income:Investments $-500 + +2006/03/16 Growth + Assets:Pool $500 + Income:Capital Gains + +P 2006/03/16 shares $1.50 + +2006/03/16 Cash out + (Payable:You) 250 shares {$1} + (Shares) 250 shares + Expenses:Investors + Assets (- valueof({1 shares}) * 250) diff --git a/tests/cases/1032.dat b/tests/cases/1032.dat new file mode 100644 index 00000000..1b103f1d --- /dev/null +++ b/tests/cases/1032.dat @@ -0,0 +1,834 @@ +i 2003/10/06 15:21:00 EDG fp_conv +o 2003/10/06 15:47:53 retrieved documents from ACM and the Web +i 2003/10/08 16:25:08 EDG fp_conv +o 2003/10/08 17:10:50 read Steele document; need to print and implement +i 2003/10/18 14:54:34 EDG fp_conv +o 2003/10/18 16:56:59 +i 2003/10/18 23:50:34 EDG fp_conv +o 2003/10/19 01:08:12 +i 2003/10/19 10:54:33 EDG fp_conv +o 2003/10/19 12:41:56 +i 2003/10/19 16:21:07 EDG fp_conv +o 2003/10/19 18:29:39 +i 2003/10/21 14:54:10 EDG fp_conv +o 2003/10/21 18:07:07 +i 2003/10/21 22:44:17 EDG fp_conv +o 2003/10/21 23:55:57 +i 2003/10/22 22:26:53 EDG fp_conv +o 2003/10/22 23:22:49 +i 2003/10/23 02:44:00 EDG fp_conv +o 2003/10/23 03:34:00 +i 2003/10/23 16:12:27 EDG fp_conv +o 2003/10/23 17:39:08 +i 2003/10/26 10:32:16 ForumJobs Meeting +o 2003/10/26 15:59:28 +i 2003/10/26 17:26:23 ForumJobs Meeting +o 2003/10/26 17:57:52 +i 2003/10/27 16:02:10 EDG fp_conv +o 2003/10/27 17:33:53 +i 2003/10/27 22:38:57 EDG fp_conv +o 2003/10/28 23:37:51 Steele is working in C, with fgmp +i 2003/10/28 12:13:46 EDG fp_conv +o 2003/10/28 12:27:31 sought documents relating to MP math +i 2003/10/28 16:14:41 EDG fp_conv +o 2003/10/28 18:32:44 still need to implement mul/div/mod +i 2003/10/29 22:18:23 EDG fp_conv +o 2003/10/29 23:38:07 +i 2003/10/30 16:39:19 EDG fp_conv +o 2003/10/30 17:18:07 +i 2003/10/30 23:33:14 EDG fp_conv +o 2003/10/31 01:21:18 +i 2003/10/31 13:16:38 EDG fp_conv +o 2003/10/31 15:01:32 +i 2003/10/31 16:49:51 EDG fp_conv +o 2003/10/31 17:26:45 +i 2003/10/31 23:15:10 EDG fp_conv +o 2003/11/01 00:48:11 +i 2003/11/01 12:50:49 EDG fp_conv +o 2003/11/01 14:01:35 +i 2003/11/01 18:53:48 EDG fp_conv +o 2003/11/01 19:16:41 +i 2003/11/02 21:50:36 EDG fp_conv +o 2003/11/03 00:05:10 +i 2003/11/03 19:30:48 EDG fp_conv +o 2003/11/03 21:44:02 +i 2003/11/04 19:55:44 EDG fp_conv +o 2003/11/04 20:54:24 +i 2003/11/05 15:36:45 EDG fp_conv +o 2003/11/05 18:35:36 +i 2003/11/06 16:23:41 EDG fp_conv +o 2003/11/06 16:37:04 +i 2003/11/06 17:23:27 EDG fp_conv +o 2003/11/06 17:37:22 +i 2003/11/07 00:02:44 EDG fp_conv +o 2003/11/07 01:44:34 +i 2003/11/07 14:52:46 EDG fp_conv +o 2003/11/07 15:07:55 +i 2003/11/07 17:16:59 EDG fp_conv +o 2003/11/07 18:01:49 +i 2003/11/08 16:47:41 EDG fp_conv +o 2003/11/08 17:25:38 +i 2003/11/09 15:25:01 EDG fp_conv +o 2003/11/09 15:49:55 +i 2003/11/10 17:54:44 EDG fp_conv +o 2003/11/10 18:43:49 +i 2003/11/11 15:02:51 EDG fp_conv +o 2003/11/11 15:23:49 +i 2003/11/13 20:37:34 EDG fp_conv +o 2003/11/13 21:24:47 +i 2003/11/14 01:23:47 EDG fp_conv +o 2003/11/14 02:58:15 +i 2003/11/16 19:43:32 EDG fp_conv +o 2003/11/16 20:13:59 +i 2003/11/16 21:37:30 EDG fp_conv +o 2003/11/16 23:32:12 +i 2003/11/16 23:53:07 EDG fp_conv +o 2003/11/17 00:10:06 +i 2003/11/19 01:14:33 EDG fp_conv +o 2003/11/19 02:29:34 +i 2003/11/19 14:54:48 EDG fp_conv +o 2003/11/19 18:27:36 +i 2003/11/19 22:49:09 EDG fp_conv +o 2003/11/19 23:42:47 +i 2003/11/19 23:53:56 EDG fp_conv +o 2003/11/20 00:22:53 +i 2003/11/23 00:27:28 EDG fp_conv +o 2003/11/23 02:36:37 +i 2003/11/23 14:24:29 EDG fp_conv +o 2003/11/23 14:46:21 +i 2003/11/23 15:23:12 EDG fp_conv +o 2003/11/23 16:24:58 +i 2003/11/24 19:04:26 EDG fp_conv +o 2003/11/24 20:40:45 +i 2003/11/24 21:13:32 EDG fp_conv +o 2003/11/24 22:50:26 +i 2003/11/25 16:04:57 EDG fp_conv +o 2003/11/25 19:16:07 +i 2003/11/25 20:01:32 EDG fp_conv +o 2003/11/25 20:20:37 +i 2003/11/25 22:03:56 EDG fp_conv +o 2003/11/25 22:32:45 +i 2003/11/30 18:45:02 EDG fp_conv +o 2003/11/30 19:45:58 +i 2003/11/30 21:49:24 EDG fp_conv +o 2003/11/30 22:36:42 +i 2003/12/03 15:48:03 EDG fp_conv +o 2003/12/03 17:07:22 +i 2003/12/04 14:46:53 EDG fp_conv +o 2003/12/04 16:05:17 +i 2003/12/07 16:00:38 ForumJobs Meeting +o 2003/12/07 19:00:27 +i 2003/12/08 00:41:29 EDG fp_conv +o 2003/12/08 01:18:18 +i 2003/12/08 14:12:19 EDG fp_conv +o 2003/12/08 14:57:03 +i 2003/12/08 16:14:25 EDG fp_conv +o 2003/12/08 17:37:53 +i 2003/12/08 22:11:16 EDG fp_conv +o 2003/12/09 02:18:03 +i 2003/12/09 16:19:26 ForumJobs +o 2003/12/09 18:41:55 +i 2003/12/09 19:46:55 ForumJobs +o 2003/12/09 20:12:32 +i 2003/12/09 21:25:34 ForumJobs +o 2003/12/09 23:23:50 +i 2003/12/09 23:48:46 EDG fp_conv +o 2003/12/10 03:17:33 +i 2003/12/10 13:50:03 EDG fp_conv +o 2003/12/10 14:30:31 +i 2003/12/10 16:50:40 EDG fp_conv +o 2003/12/11 05:12:28 +i 2003/12/11 14:31:30 EDG fp_conv +o 2003/12/11 18:17:08 +i 2003/12/12 00:56:19 EDG fp_conv +o 2003/12/12 02:38:32 +i 2003/12/12 16:42:33 EDG fp_conv +o 2003/12/12 20:13:46 +i 2003/12/12 22:09:46 EDG fp_conv +o 2003/12/13 01:26:52 +i 2003/12/14 16:00:43 ForumJobs Meeting +o 2003/12/14 18:44:38 +i 2003/12/14 20:12:59 EDG fp_conv +o 2003/12/15 02:49:53 +i 2003/12/15 15:21:19 EDG fp_conv +o 2003/12/15 17:59:45 +i 2003/12/15 19:06:10 EDG fp_conv +o 2003/12/16 00:12:14 +i 2003/12/16 00:12:15 ForumJobs +o 2003/12/16 01:16:51 +i 2003/12/16 16:43:32 EDG fp_conv +o 2003/12/16 18:44:46 +i 2003/12/16 19:54:15 EDG fp_conv +o 2003/12/17 01:08:19 +i 2003/12/17 01:34:12 ForumJobs +o 2003/12/17 01:51:34 +i 2003/12/17 16:56:39 EDG fp_conv +o 2003/12/17 19:15:58 +i 2003/12/17 22:49:59 EDG fp_conv +o 2003/12/18 00:47:10 +i 2003/12/18 16:53:31 ForumJobs +o 2003/12/18 18:35:43 +i 2003/12/19 18:12:39 ForumJobs +o 2003/12/19 20:01:01 +i 2003/12/23 17:30:29 ForumJobs +o 2003/12/23 18:10:41 +i 2004/01/13 12:32:55 ForumJobs +o 2004/01/13 12:53:55 +i 2004/01/14 14:23:47 EDG fp_conv +o 2004/01/14 19:25:42 +i 2004/01/15 17:20:01 EDG fp_conv +o 2004/01/15 18:40:34 +i 2004/01/16 12:50:26 EDG fp_conv +o 2004/01/16 18:39:45 +i 2004/01/16 19:23:09 EDG fp_conv +o 2004/01/16 20:41:14 +i 2004/01/19 12:48:57 EDG fp_conv +o 2004/01/19 15:18:38 +i 2004/01/20 16:07:50 ForumJobs +o 2004/01/20 19:18:04 +i 2004/01/21 13:18:04 EDG fp_conv +o 2004/01/21 18:18:04 +i 2004/01/22 13:39:27 EDG fp_conv +o 2004/01/22 18:31:03 +i 2004/01/22 19:12:42 EDG fp_conv +o 2004/01/22 20:48:41 +i 2004/01/23 12:58:41 EDG fp_conv +o 2004/01/23 15:27:58 +i 2004/01/23 16:00:00 ForumJobs +o 2004/01/23 19:15:00 +i 2004/01/23 21:30:26 EDG fp_conv +o 2004/01/23 23:45:56 +i 2004/01/25 17:19:42 ForumJobs +o 2004/01/25 18:22:37 +i 2004/01/26 22:34:31 ForumJobs +o 2004/01/26 23:35:23 +i 2004/01/27 12:53:42 EDG fp_conv +o 2004/01/27 13:23:15 +i 2004/01/27 19:42:50 EDG fp_conv +o 2004/01/27 19:57:28 +i 2004/01/27 22:08:53 ForumJobs +o 2004/01/27 22:44:40 +i 2004/01/27 23:14:41 EDG fp_conv +o 2004/01/27 23:48:05 +i 2004/01/28 00:00:27 ForumJobs +o 2004/01/28 00:39:21 +i 2004/01/28 17:04:22 ForumJobs +o 2004/01/28 17:34:31 +i 2004/01/29 14:07:44 ForumJobs +o 2004/01/29 16:07:04 +i 2004/01/29 17:15:58 ForumJobs +o 2004/01/29 18:55:40 +i 2004/01/29 22:11:41 ForumJobs +o 2004/01/29 23:31:41 +i 2004/01/30 15:56:02 ForumJobs +o 2004/01/30 17:54:06 +i 2004/01/30 20:43:00 ForumJobs +o 2004/01/30 21:56:30 +i 2004/01/30 22:16:09 ForumJobs +o 2004/01/30 22:28:35 +i 2004/02/03 17:19:26 ForumJobs +o 2004/02/03 19:24:08 +i 2004/02/08 14:42:44 ForumJobs +o 2004/02/08 18:07:07 +i 2004/02/10 18:05:54 EDG fp_conv +o 2004/02/10 19:10:24 +i 2004/02/10 19:10:25 ForumJobs +o 2004/02/10 19:16:23 +i 2004/02/11 18:04:55 ForumJobs +o 2004/02/11 19:25:12 +i 2004/02/11 21:42:52 ForumJobs +o 2004/02/12 01:16:28 +i 2004/02/12 16:01:50 ForumJobs +o 2004/02/12 16:45:17 +i 2004/02/17 15:36:11 ForumJobs +o 2004/02/17 17:37:50 +i 2004/02/17 22:20:06 ForumJobs +o 2004/02/17 23:20:18 +i 2004/02/20 18:00:44 EDG fp_conv +o 2004/02/20 19:21:42 +i 2004/02/23 21:16:24 EDG fp_conv +o 2004/02/24 00:01:01 +i 2004/02/24 21:29:21 EDG fp_conv +o 2004/02/24 21:53:23 +i 2004/02/25 10:55:19 EDG fp_conv +o 2004/02/25 13:30:24 +i 2004/02/27 13:57:39 EDG fp_conv +o 2004/02/27 15:49:31 +i 2004/02/27 16:18:22 EDG fp_conv +o 2004/02/27 17:47:34 +i 2004/03/02 11:45:36 ForumJobs +o 2004/03/02 12:45:38 +i 2004/03/02 12:45:38 EDG fp_conv +o 2004/03/02 18:01:03 +i 2004/03/02 21:03:44 ForumJobs +o 2004/03/02 21:39:25 +i 2004/03/03 12:05:24 EDG fp_conv +o 2004/03/03 17:47:43 +i 2004/03/03 20:34:26 EDG fp_conv +o 2004/03/03 22:04:50 +i 2004/03/04 19:38:23 EDG fp_conv +o 2004/03/04 21:08:57 +i 2004/03/07 16:53:41 ForumJobs +o 2004/03/07 17:45:30 +i 2004/03/09 14:24:33 ForumJobs +o 2004/03/09 15:07:53 +i 2004/03/09 15:07:55 EDG fp_conv +o 2004/03/09 17:53:35 +i 2004/03/22 23:21:08 ForumJobs +o 2004/03/23 00:09:32 +i 2004/03/23 15:45:28 ForumJobs +o 2004/03/23 16:38:24 +i 2004/03/30 23:30:17 ForumJobs +o 2004/03/31 01:31:43 +i 2004/04/02 17:49:46 ForumJobs +o 2004/04/02 21:02:43 +i 2004/04/03 20:33:51 ForumJobs +o 2004/04/03 22:49:54 +i 2004/04/04 18:46:00 ForumJobs +o 2004/04/04 19:03:09 +i 2004/04/05 20:21:23 ForumJobs +o 2004/04/05 20:51:24 +i 2004/04/06 15:32:37 ForumJobs +o 2004/04/06 16:40:53 +i 2004/04/08 12:54:44 ForumJobs +o 2004/04/08 13:27:18 +i 2004/04/08 14:50:39 ForumJobs +o 2004/04/08 15:39:51 +i 2004/04/08 16:05:52 ForumJobs +o 2004/04/08 17:16:33 +i 2004/04/08 23:46:34 ForumJobs +o 2004/04/09 00:57:38 +i 2004/04/10 13:00:57 ForumJobs +o 2004/04/10 14:53:01 +i 2004/04/12 16:18:02 ForumJobs +o 2004/04/12 17:34:57 +i 2004/04/12 23:39:20 ForumJobs +o 2004/04/13 00:32:45 +i 2004/04/14 12:23:48 ForumJobs +o 2004/04/14 12:50:42 +i 2004/04/15 16:48:51 ForumJobs +o 2004/04/15 17:55:10 invoice #1 +i 2004/04/26 12:34:11 ForumJobs +o 2004/04/26 13:04:54 +i 2004/05/06 14:00:28 ForumJobs +o 2004/05/06 14:38:53 +i 2004/07/27 14:11:31 Borland +o 2004/07/27 14:35:56 discussed fake symbol consolidation schemes +i 2004/07/29 17:54:42 Borland +o 2004/07/29 18:32:50 discussed hashing issues in fake ns sym lookup +i 2004/07/30 12:41:33 Borland +o 2004/07/30 12:57:16 answered namespace lookup questions +i 2005/04/04 13:03:18 3dex oss +o 2005/04/04 14:33:18 +i 2005/04/18 11:03:18 3dex oss +o 2005/04/18 12:36:18 +i 2005/04/18 14:03:18 3dex oss +o 2005/04/18 16:57:56 +i 2005/05/10 13:45:16 EDG dr +o 2005/05/10 15:30:52 10 issues checked +i 2005/05/12 14:32:16 EDG dr +o 2005/05/12 18:12:55 +i 2005/05/13 11:20:51 EDG dr +o 2005/05/13 12:41:03 +i 2005/05/13 15:50:54 EDG dr +o 2005/05/13 16:13:23 break +i 2005/05/13 16:43:59 EDG dr +o 2005/05/13 17:37:44 +i 2005/05/16 12:30:37 EDG dr +o 2005/05/16 13:02:55 +i 2005/05/16 16:02:11 EDG dr +o 2005/05/16 16:36:20 +i 2005/05/17 18:33:14 EDG dr +o 2005/05/17 18:51:02 +i 2005/05/18 14:32:08 EDG dr +o 2005/05/18 15:07:43 +i 2005/05/20 20:02:55 EDG dr +o 2005/05/20 21:21:14 +i 2005/05/20 21:42:16 EDG dr +o 2005/05/20 21:52:59 +i 2005/05/21 15:39:59 EDG dr +o 2005/05/21 16:33:27 +i 2005/05/23 20:48:20 EDG dr +o 2005/05/23 22:17:08 +i 2005/05/24 13:08:29 EDG dr +o 2005/05/24 15:25:06 +i 2005/06/28 15:08:29 3dex security +o 2005/06/28 18:44:13 +i 2005/06/28 22:38:57 3dex ledger +o 2005/06/28 23:51:31 +i 2005/06/29 16:11:41 3dex ledger +o 2005/06/29 19:46:04 +i 2005/07/01 15:03:35 3dex ledger +o 2005/07/01 20:41:08 +i 2005/07/02 14:00:35 3dex ledger +o 2005/07/02 18:00:35 +i 2005/07/03 13:30:35 3dex ledger +o 2005/07/03 17:00:35 +i 2005/07/04 14:30:35 3dex ledger +o 2005/07/04 19:00:35 +i 2005/07/04 20:44:35 3dex ledger +o 2005/07/04 22:01:35 +i 2005/07/05 17:20:29 3dex ledger +o 2005/07/05 22:58:35 +i 2005/07/06 23:43:14 3dex ledger +o 2005/07/07 03:09:01 +i 2005/07/07 19:43:14 3dex ledger +o 2005/07/07 21:09:01 +i 2005/07/09 13:55:22 3dex ledger +o 2005/07/09 14:34:29 +i 2005/07/09 15:08:05 3dex ledger +o 2005/07/09 17:46:15 +i 2005/07/12 21:24:03 3dex ledger +o 2005/07/13 02:00:03 +i 2005/07/14 21:24:03 3dex ledger +o 2005/07/14 21:59:40 +i 2005/07/16 22:03:57 3dex ledger +o 2005/07/17 00:34:07 +i 2005/07/17 10:53:38 3dex ledger +o 2005/07/17 11:56:49 +i 2005/08/10 15:45:54 3dex soap +o 2005/08/10 16:12:02 +i 2005/08/11 15:04:23 3dex soap +o 2005/08/11 16:07:35 +i 2005/08/15 15:07:18 3dex soap +o 2005/08/15 15:35:18 +i 2005/08/15 15:36:14 3dex soap +o 2005/08/15 16:18:41 +i 2005/08/17 16:21:10 3dex soap +o 2005/08/17 16:53:37 +i 2005/08/18 14:01:46 3dex soap +o 2005/08/18 18:33:12 +i 2005/08/25 13:30:44 3dex soap +o 2005/08/25 15:38:09 +i 2005/08/25 16:52:18 3dex soap +o 2005/08/25 17:54:52 +i 2005/08/25 20:19:34 3dex soap +o 2005/08/25 21:32:07 +i 2005/08/28 18:06:40 3dex soap +o 2005/08/28 18:36:55 +i 2005/08/28 19:34:56 3dex soap +o 2005/08/28 19:55:25 +i 2005/10/22 00:55:10 3dex video +o 2005/10/22 01:52:58 +i 2005/10/22 22:00:59 3dex video +o 2005/10/22 22:58:30 +i 2005/10/25 13:00:00 MOW meeting +o 2005/10/25 17:00:00 +i 2005/10/26 10:00:00 MOW meeting +o 2005/10/26 14:00:00 +i 2005/10/26 18:51:52 MOW planning +o 2005/10/26 18:57:43 +i 2005/10/27 20:34:28 MOW website +o 2005/10/27 21:40:28 +i 2005/10/28 22:04:28 MOW website +o 2005/10/28 22:50:28 +i 2005/10/29 23:04:28 MOW planning +o 2005/10/29 23:40:28 +i 2005/10/30 22:18:28 MOW website +o 2005/10/31 01:22:28 +i 2005/10/31 05:15:29 3dex video +o 2005/10/31 05:55:34 +i 2005/10/31 15:51:55 3dex video +o 2005/10/31 17:37:09 +i 2005/11/01 01:15:34 MOW website +o 2005/11/01 02:34:55 +i 2005/11/01 18:04:47 MOW website +o 2005/11/01 18:35:25 +i 2005/11/01 20:39:42 MOW website +o 2005/11/01 23:00:08 +i 2005/11/02 00:26:09 MOW website +o 2005/11/02 04:14:33 +i 2005/11/02 17:07:40 MOW website +o 2005/11/02 18:13:49 +i 2005/11/02 22:09:53 MOW website +o 2005/11/02 22:41:31 +i 2005/11/03 00:11:02 MOW website +o 2005/11/03 04:52:25 +i 2005/11/03 04:55:38 3dex video +o 2005/11/03 06:22:42 +i 2005/11/03 19:45:00 MOW website +o 2005/11/03 22:53:12 +i 2005/11/04 00:16:33 MOW website +o 2005/11/04 00:43:07 +i 2005/11/04 02:01:23 MOW website +o 2005/11/04 04:31:25 +i 2005/11/04 14:11:55 MOW website +o 2005/11/04 16:48:30 +i 2005/11/04 16:59:06 MOW website +o 2005/11/04 19:54:46 +i 2005/11/05 22:29:03 MOW website +o 2005/11/06 04:53:57 +i 2005/11/07 02:13:36 MOW website +o 2005/11/07 04:38:12 +i 2005/11/07 20:29:07 MOW website +o 2005/11/07 23:03:45 +i 2005/11/07 23:53:46 MOW website +o 2005/11/08 04:35:27 +i 2005/11/08 16:02:23 MOW website +o 2005/11/08 17:26:28 +i 2005/11/09 00:25:44 MOW website +o 2005/11/09 03:35:00 +i 2005/11/09 14:28:03 MOW website +o 2005/11/09 14:49:27 +i 2005/11/09 17:13:19 MOW website +o 2005/11/09 17:29:51 +i 2005/11/10 00:13:33 MOW website +o 2005/11/10 03:08:40 +i 2005/11/10 15:22:12 MOW website +o 2005/11/10 16:33:16 +i 2005/11/10 19:10:44 MOW website +o 2005/11/10 22:19:44 +i 2005/11/11 01:00:54 MOW website +o 2005/11/11 01:31:39 +i 2005/11/11 01:50:07 MOW website +o 2005/11/11 03:13:36 +i 2005/11/11 03:35:18 MOW website +o 2005/11/11 05:32:27 +i 2005/11/13 20:07:14 MOW website +o 2005/11/13 21:14:05 +i 2005/11/13 22:02:04 MOW website +o 2005/11/14 01:34:44 +i 2005/11/14 23:35:33 MOW website +o 2005/11/15 12:25:00 +i 2005/11/15 01:31:53 MOW website +o 2005/11/15 01:54:55 +i 2005/11/15 16:58:26 MOW website +o 2005/11/15 18:17:43 +i 2005/11/15 21:16:00 MOW website +o 2005/11/15 22:57:24 +i 2005/11/15 23:52:00 MOW website +o 2005/11/16 07:08:14 +i 2005/11/16 20:06:33 MOW website +o 2005/11/16 23:00:45 +i 2005/11/17 00:15:29 MOW website +o 2005/11/17 09:39:11 +i 2005/11/17 15:33:03 MOW website: Polishing MainIndex.aspx +o 2005/11/17 17:12:52 +i 2005/11/17 20:40:53 MOW website: Fixing the display of StoryTable.ascx +o 2005/11/18 00:14:58 +i 2005/11/18 00:15:19 MOW website: Improve Asset class +o 2005/11/18 03:42:35 +i 2005/11/19 19:04:00 MOW website: Fix MainIndex page +o 2005/11/19 22:30:14 +i 2005/11/19 22:56:38 MOW website: Finalize HTML for AuthorIndex and Profile +o 2005/11/20 07:49:00 +i 2005/11/20 19:02:48 MOW website: Resolving final issues +o 2005/11/20 23:58:01 +i 2005/11/22 00:04:47 MOW website: MainIndex - Change header display and fixed alignment +o 2005/11/22 02:54:14 +i 2005/11/22 02:54:14 MOW website: AuthorProfile - Fix alignment issues created by MainIndex fixes +o 2005/11/22 03:08:13 +i 2005/11/22 03:08:13 MOW website: Breadcrumb navigation +o 2005/11/22 04:13:01 +i 2005/11/22 04:13:01 MOW website: CreateTheme - Fixing style +o 2005/11/22 04:45:41 +i 2005/11/22 04:45:41 MOW website: Confirming deletion +o 2005/11/22 05:14:26 +i 2005/11/22 05:14:29 MOW website: Yellow message boxes +o 2005/11/22 06:17:15 +i 2005/11/22 06:47:00 MOW website: MainIndex - Testing and fixing HTML +o 2005/11/22 08:20:19 +i 2005/11/22 17:41:19 MOW website: MainIndex - Use PostedDate in Themes for sorting +o 2005/11/22 18:14:23 +i 2005/11/22 18:49:32 MOW website: MainIndex - Use PostedDate in Themes for sorting +o 2005/11/22 20:01:52 +i 2005/11/23 00:04:07 MOW website: AssetList - Finishing uploads +o 2005/11/23 01:13:28 +i 2005/11/24 16:49:19 MOW website: AssetList - Support ordering +o 2005/11/24 20:20:23 +i 2005/11/24 20:50:28 MOW website: AssetList - Finishing uploads +o 2005/11/24 22:13:13 +i 2005/11/27 19:33:05 MOW website: StoryDetails - Adding other tables +o 2005/11/27 21:15:26 +i 2005/11/28 20:27:07 MOW website: StoryDetails - Adding other tables +o 2005/11/28 21:17:52 +i 2005/11/28 21:58:54 MOW website: StoryDetails - Adding other tables +o 2005/11/29 00:49:57 +i 2005/11/29 02:16:10 MOW website: Use field validators again +o 2005/11/29 03:20:58 +i 2005/11/29 04:09:57 MOW website: Use field validators again +o 2005/11/29 04:35:41 +i 2005/11/30 00:08:28 MOW website: AddedStories - The main added story list +o 2005/11/30 01:00:32 +i 2005/11/30 20:58:15 MOW website: AddedStories - The main added story list +o 2005/11/30 22:01:42 +i 2005/11/30 22:57:15 MOW website: AddedStories - The main added story list +o 2005/12/01 03:02:46 +i 2005/12/01 20:32:47 MOW website: AddedStories - The main added story list +o 2005/12/01 21:18:13 +i 2005/12/01 21:18:27 MOW website: MainIndex - Further corrections using latest HTML +o 2005/12/01 21:55:20 +i 2005/12/01 22:55:49 MOW website: MainIndex - Further corrections using latest HTML +o 2005/12/02 03:21:50 +i 2005/12/02 12:19:06 MOW website: BookDescription +o 2005/12/02 13:27:17 +i 2005/12/02 13:27:22 MOW website: Cleanup +o 2005/12/02 17:35:32 +i 2005/12/05 17:50:37 MOW website: Cleanup +o 2005/12/05 17:52:33 +i 2005/12/05 18:44:48 MOW website: Cleanup +o 2005/12/05 22:13:06 +i 2005/12/05 22:29:40 MOW website: Cleanup +o 2005/12/06 01:00:03 +i 2005/12/06 01:38:51 MOW website: Cleanup +o 2005/12/06 02:30:04 +i 2005/12/06 18:44:24 MOW website: Cleanup +o 2005/12/06 20:00:21 +i 2005/12/06 21:00:03 MOW website: Cleanup +o 2005/12/07 00:44:28 +i 2005/12/07 00:44:46 MOW website: AuthorProfile - Support for CommLanguage and Passwords +o 2005/12/07 02:10:41 +i 2005/12/07 02:11:11 MOW website: ShowImage - Make Popup size based on Image size +o 2005/12/07 02:35:37 +i 2005/12/07 02:41:14 MOW website: ShowImage - Make Popup size based on Image size +o 2005/12/07 03:02:45 +i 2005/12/07 04:22:17 MOW website: ShowImage - Make Popup size based on Image size +o 2005/12/07 06:00:31 +i 2005/12/07 06:00:45 MOW website: AuthorIndex - Fixes for the Cleanup +o 2005/12/07 06:31:09 +i 2005/12/07 10:10:21 MOW website: AddedStories - Add support for searching by author +o 2005/12/07 11:37:51 +i 2005/12/07 12:55:55 MOW planning +o 2005/12/07 13:26:03 +i 2005/12/07 13:26:19 MOW website: Cleanup +o 2005/12/07 14:20:32 +i 2005/12/07 15:13:21 MOW website: Cleanup +o 2005/12/07 15:46:54 +i 2005/12/07 17:52:33 MOW website: Cleanup +o 2005/12/07 18:36:52 +i 2005/12/08 10:31:32 MOW website: Cleanup +o 2005/12/08 16:28:12 +i 2005/12/08 20:37:50 MOW website: Cleanup +o 2005/12/08 22:38:42 +i 2005/12/09 13:44:36 MOW website: StoryDetails - Split into multiple pages +o 2005/12/09 14:09:44 +i 2005/12/11 14:46:31 MOW website: StoryDetails - Split into multiple pages +o 2005/12/11 16:09:49 +i 2005/12/12 11:27:15 MOW website: StoryDetails - Split into multiple pages +o 2005/12/12 14:39:05 +i 2005/12/12 14:58:15 MOW website: StoryDetails - Split into multiple pages +o 2005/12/12 17:06:12 +i 2005/12/12 17:06:19 MOW website: Advertisements +o 2005/12/12 18:22:28 +i 2005/12/12 19:07:13 MOW website: Advertisements +o 2005/12/12 21:47:22 +i 2005/12/13 17:05:38 MOW website: Events +o 2005/12/13 17:54:49 +i 2005/12/13 19:08:43 MOW website: Events +o 2005/12/13 21:43:52 +i 2005/12/14 15:35:08 MOW website: Events +o 2005/12/14 16:30:54 +i 2005/12/15 13:01:22 MOW website: Events +o 2005/12/15 14:41:30 +i 2005/12/15 17:25:51 MOW website: Events +o 2005/12/15 18:07:43 +i 2005/12/16 08:19:13 MOW website: Events +o 2005/12/16 10:51:19 +i 2005/12/19 14:32:21 MOW website: Bugs +o 2005/12/19 18:17:29 +i 2005/12/19 19:52:21 MOW website: Events +o 2005/12/19 22:01:36 +i 2005/12/21 18:52:02 MOW website: TakeAction +o 2005/12/21 21:30:58 +i 2005/12/29 22:35:56 MOW website: TakeAction +o 2005/12/29 23:26:52 +i 2005/12/30 22:51:30 MOW website: Flags +o 2005/12/31 00:02:40 +i 2006/01/02 19:12:34 MOW website: Communication +o 2006/01/02 19:58:53 +i 2006/01/05 17:53:58 MOW website: Schedule +o 2006/01/05 18:30:02 +i 2006/01/06 00:08:19 MOW website: Cleanup +o 2006/01/06 01:36:11 +i 2006/01/07 17:25:54 MOW website: Cleanup +o 2006/01/07 19:30:29 +i 2006/01/07 22:05:33 MOW website: Cleanup +o 2006/01/08 00:45:18 +i 2006/01/08 15:36:25 MOW website: Cleanup +o 2006/01/08 16:41:19 +i 2006/01/08 18:04:57 MOW website: Cleanup +o 2006/01/08 20:03:15 +i 2006/01/08 20:50:43 MOW website: Cleanup +o 2006/01/08 22:12:04 +i 2006/01/08 22:12:09 sina +o 2006/01/08 23:19:16 +i 2006/01/08 23:19:17 MOW website: Cleanup +o 2006/01/09 01:01:51 +i 2006/01/09 14:46:53 MOW website: Cleanup +o 2006/01/09 17:19:53 +i 2006/01/09 18:19:54 MOW website: Cleanup +o 2006/01/09 19:35:47 +i 2006/01/12 14:50:26 MOW website: Cleanup +o 2006/01/12 17:34:41 +i 2006/01/12 19:59:47 MOW website: Cleanup +o 2006/01/12 23:33:20 +i 2006/01/13 15:32:37 MOW website: Cleanup +o 2006/01/13 16:03:19 +i 2006/01/14 18:50:12 sina +o 2006/01/14 19:22:54 +i 2006/01/15 01:14:21 sina +o 2006/01/15 01:50:04 +i 2006/01/15 02:21:13 MOW website: PressReleases +o 2006/01/15 03:11:35 +i 2006/01/16 02:25:45 sina +o 2006/01/16 02:59:01 +i 2006/01/16 18:08:28 MOW planning +o 2006/01/16 18:21:21 +i 2006/01/16 21:43:57 sina +o 2006/01/16 22:57:09 +i 2006/01/17 00:23:05 sina +o 2006/01/17 02:51:55 +i 2006/01/17 18:01:54 sina +o 2006/01/17 18:22:33 +i 2006/01/17 19:00:48 sina +o 2006/01/17 19:19:36 +i 2006/01/17 19:34:10 sina +o 2006/01/17 19:50:48 +i 2006/01/17 19:53:38 MOW website: v11 +o 2006/01/17 21:09:27 +i 2006/01/17 21:33:29 sina +o 2006/01/17 21:55:42 +i 2006/01/17 22:02:38 sina +o 2006/01/17 22:28:36 +i 2006/01/17 22:28:59 MOW website: v11 +o 2006/01/17 22:48:06 +i 2006/01/18 01:57:59 MOW website: v11 +o 2006/01/18 03:27:34 +i 2006/01/18 03:50:52 sina +o 2006/01/18 04:32:47 +i 2006/01/18 18:07:31 MOW website: TakeAction +o 2006/01/18 21:01:43 +i 2006/01/18 23:53:49 MOW website: TakeAction +o 2006/01/19 01:20:50 +i 2006/01/19 14:50:56 MOW website: TakeAction +o 2006/01/19 15:40:04 +i 2006/01/19 17:53:04 MOW website: TakeAction +o 2006/01/19 19:25:36 +i 2006/01/22 00:59:17 MOW website: Cleanup +o 2006/01/22 01:23:58 +i 2006/01/22 07:43:01 MOW website: Cleanup +o 2006/01/22 10:02:30 +i 2006/01/22 19:18:23 MOW website: Cleanup +o 2006/01/22 19:48:01 +i 2006/01/22 20:31:36 MOW website: Cleanup +o 2006/01/22 23:05:58 +i 2006/01/23 18:45:59 MOW website: SubTheme +o 2006/01/23 19:50:39 +i 2006/01/23 21:05:19 MOW website: SubTheme +o 2006/01/24 01:02:44 +i 2006/01/24 20:07:33 MOW website: Bugs +o 2006/01/24 20:39:11 +i 2006/01/25 08:38:02 MOW website: Bugs +o 2006/01/25 10:17:25 +i 2006/01/25 11:54:50 MOW website: Bugs +o 2006/01/25 14:26:52 +i 2006/01/27 03:42:03 MOW website: Bugs +o 2006/01/27 04:35:28 +i 2006/01/27 05:25:53 MOW website: Bugs +o 2006/01/27 06:14:55 +i 2006/01/27 16:27:55 MOW website: Bugs +o 2006/01/27 16:36:42 +i 2006/01/27 17:08:46 MOW website: Bugs +o 2006/01/27 17:38:40 +i 2006/01/29 15:42:37 MOW website: Bugs +o 2006/01/29 16:12:01 +i 2006/01/29 22:12:15 MOW website: Bugs +o 2006/01/30 00:30:12 +i 2006/01/30 13:24:14 MOW website: Comments +o 2006/01/30 14:54:21 +i 2006/01/30 15:38:38 MOW website: Events +o 2006/01/30 18:30:18 +i 2006/01/30 18:50:55 MOW website: AboutTheBook +o 2006/01/30 19:14:55 +i 2006/01/31 12:30:40 MOW website: AboutTheBook +o 2006/01/31 14:20:46 +i 2006/01/31 16:11:25 MOW website: Events +o 2006/01/31 18:35:55 +i 2006/02/01 03:44:57 MOW website: public +o 2006/02/01 04:21:29 +i 2006/02/01 10:40:37 MOW website: public +o 2006/02/01 15:19:13 +i 2006/02/01 16:49:14 MOW website: public +o 2006/02/01 19:37:46 +i 2006/02/02 09:55:16 MOW website: public +o 2006/02/02 10:34:26 +i 2006/02/02 15:47:38 MOW website: public +o 2006/02/02 18:39:48 +i 2006/02/03 09:14:47 MOW website: public +o 2006/02/03 10:21:18 +i 2006/02/03 16:21:20 MOW website: public +o 2006/02/03 17:26:02 +i 2006/02/05 11:49:52 MOW website: public +o 2006/02/05 22:49:53 +i 2006/02/06 16:49:23 MOW website: public +o 2006/02/06 18:10:33 +i 2006/02/07 17:01:45 MOW website: public +o 2006/02/07 18:39:24 +i 2006/02/07 21:00:15 sina +o 2006/02/08 23:27:28 +i 2006/02/08 11:47:31 MOW website: public +o 2006/02/08 12:09:20 +i 2006/02/08 12:21:06 MOW website: public +o 2006/02/08 12:54:37 +i 2006/02/10 21:20:03 MOW website: public +o 2006/02/10 23:36:40 +i 2006/02/16 21:26:56 3dex scheduler +o 2006/02/16 22:52:50 +i 2006/02/16 23:35:24 3dex scheduler +o 2006/02/17 01:11:31 +i 2006/02/17 17:57:19 MOW website: public +o 2006/02/17 19:09:45 +i 2006/02/17 21:00:15 sina +o 2006/02/17 21:30:15 +i 2006/02/18 22:00:57 3dex scheduler +o 2006/02/18 22:59:26 +i 2006/02/19 01:14:16 3dex scheduler +o 2006/02/19 02:32:59 +i 2006/02/19 17:05:01 3dex scheduler +o 2006/02/19 17:26:51 +i 2006/02/20 22:28:05 3dex scheduler +o 2006/02/20 22:48:37 +i 2006/02/21 14:50:37 MOW website: Events +o 2006/02/21 16:55:24 +i 2006/02/21 17:14:06 MOW website: Events +o 2006/02/21 18:20:14 +i 2006/02/21 19:34:15 MOW website: Events +o 2006/02/21 20:00:09 +i 2006/02/23 18:02:57 sina +o 2006/02/23 19:35:47 +i 2006/02/28 16:01:01 MOW website: Factoids +o 2006/02/28 18:32:39 +i 2006/02/28 22:13:01 MOW website: testing +o 2006/02/28 23:41:58 +i 2006/03/02 12:52:49 MOW website: Factoids +o 2006/03/02 14:13:21 +i 2006/03/02 16:01:03 MOW website: bugs +o 2006/03/02 17:45:58 +i 2006/03/02 18:10:59 MOW website: bugs +o 2006/03/02 18:59:01 +i 2006/03/03 16:23:29 MOW website: bugs +o 2006/03/03 17:23:29 +i 2006/03/10 16:45:13 MOW website: testing +o 2006/03/10 17:25:14 +i 2006/03/11 16:54:29 MOW website: testing +o 2006/03/11 18:03:01 +i 2006/03/11 21:06:39 MOW website: testing +o 2006/03/11 21:36:29 +i 2006/03/11 23:59:37 sina +o 2006/03/12 03:30:39 +i 2006/03/13 00:41:27 MOW website: testing +o 2006/03/13 02:04:44 +i 2006/03/14 03:19:06 MOW website: testing +o 2006/03/14 03:37:49 +i 2006/03/15 02:03:32 MOW website: bugs +o 2006/03/15 04:04:44 +i 2006/03/15 21:02:35 College:Setup +o 2006/03/15 22:10:44 +i 2006/03/16 01:08:22 College:Setup +o 2006/03/16 02:28:17 +i 2006/03/16 03:02:34 College:Setup +o 2006/03/16 03:34:47 +i 2006/03/16 08:08:17 College:Setup +o 2006/03/16 08:59:51 +i 2006/03/22 10:31:58 sina +o 2006/03/22 13:06:15 diff --git a/tests/confirm.py b/tests/confirm.py new file mode 100755 index 00000000..0881001b --- /dev/null +++ b/tests/confirm.py @@ -0,0 +1,55 @@ +#!/usr/bin/python + +# This script confirms what ledger tells you. + +import sys +import os +import re + +def clean(num): + return float(re.sub("(\s+|\$|,)","", num)) + +running_total = 0.0 +index = 1 +last_line = "" +errors = 0 + +report = sys.argv[1] +for line in os.popen("./ledger -f utils/standard.dat -e 2004/4 %s reg %s" % + (report, sys.argv[2])): + value = clean(line[55:67]) + total = clean(line[68:]) + + running_total += value + diff = abs(running_total - total) + if report == "-V" or report == "-G" and diff < 0.015: + diff = 0.0 + if diff > 0.001: + print "! discrepancy of %.2f (%.2f - %.2f) at line %d:" % \ + (running_total - total, running_total, total, index) + print line, + running_total = total + errors += 1 + + index += 1 + last_line = line + +balance_total = 0.0 + +for line in os.popen("./ledger -f utils/standard.dat -e 2004/4 %s bal %s" % + (report, sys.argv[2])): + if line[0] != '-': + balance_total = clean(line[:20]) + +diff = abs(balance_total - running_total) +if report == "-V" or report == "-G" and diff < 0.015: + diff = 0.0 +if diff > 0.001: + print + print "! discrepancy of %.2f (%.2f - %.2f) between register and balance" % \ + (balance_total - running_total, balance_total, running_total) + print last_line, + print line, + errors += 1 + +sys.exit(errors) diff --git a/tests/parser.h b/tests/parser.h new file mode 100644 index 00000000..65acadb5 --- /dev/null +++ b/tests/parser.h @@ -0,0 +1,65 @@ +#ifndef __TESTFILEFORMAT_H +#define __TESTFILEFORMAT_H + +#include <cxxtest/TestSuite.h> + +#include <textual.h> +#include <xml.h> +#include <binary.h> +#include <gnucash.h> +#include <qif.h> + +using namespace std; +using namespace ledger; + +class TestFileFormat : public CxxTest::TestSuite +{ +public: + void testEmptyFileIsTextualFile() + { + stringstream emptyStream(stringstream::in); + textual_parser_t textualParser; + TS_ASSERT(textualParser.test(emptyStream)); + TS_ASSERT(emptyStream.good()); + TS_ASSERT_EQUALS(0, emptyStream.tellg()); + } + + void testEmptyFileIsNotXMLFile() + { + stringstream emptyStream(stringstream::in); + xml_parser_t xmlParser; + TS_ASSERT(!xmlParser.test(emptyStream)); + TS_ASSERT(emptyStream.good()); + TS_ASSERT_EQUALS(0, emptyStream.tellg()); + } + + void testEmptyFileIsNotBinaryFile() + { + stringstream emptyStream(stringstream::in); + binary_parser_t binaryParser; + TS_ASSERT(!binaryParser.test(emptyStream)); + TS_ASSERT(emptyStream.good()); + TS_ASSERT_EQUALS(0, emptyStream.tellg()); + } + + void testEmptyFileIsNotGnuCashFile() + { + stringstream emptyStream(stringstream::in); + gnucash_parser_t gnucashParser; + TS_ASSERT(!gnucashParser.test(emptyStream)); + TS_ASSERT(emptyStream.good()); + TS_ASSERT_EQUALS(0, emptyStream.tellg()); + } + + void testEmptyFileIsNotQIFFile() + { + stringstream emptyStream(stringstream::in); + qif_parser_t qifParser; + TS_ASSERT(!qifParser.test(emptyStream)); + TS_ASSERT(emptyStream.good()); + TS_ASSERT_EQUALS(0, emptyStream.tellg()); + } + +}; + +#endif // __TESTFILEFORMAT_H diff --git a/tests/regress b/tests/regress new file mode 100755 index 00000000..9a6c4412 --- /dev/null +++ b/tests/regress @@ -0,0 +1,95 @@ +#!/bin/sh + +TMPDIR=/tmp +TESTS=tests +UTILS=utils +CASES=$TESTS/cases + +result=0 + +generate=false +if [ "$1" = "--generate" ]; then + generate=true +fi + +runtest() { + num=$1 + shift + if [ $generate = true ]; then + echo generating $num + ./ledger "$@" > $TESTS/baseline/$num 2> $TMPDIR/errors-$$.out + cat $TMPDIR/errors-$$.out >> $TESTS/baseline/$num + rm -f $TMPDIR/*-$$.out + elif [ -r $TESTS/baseline/$num ]; then + ./ledger "$@" > $TMPDIR/test-$$.out 2> $TMPDIR/errors-$$.out + cat $TMPDIR/errors-$$.out >> $TMPDIR/test-$$.out + + diff $TESTS/baseline/$num $TMPDIR/test-$$.out \ + > $TMPDIR/result-$$.out 2>&1 + if [ -s $TMPDIR/result-$$.out ]; then + echo Error: Regression $num failed + echo ":: regression $num: ./ledger $@" >> errors.out + cat $TMPDIR/result-$$.out >> errors.out + result=`expr $result + 1` + fi + rm -f $TMPDIR/*-$$.out + fi +} + +echo Running Ledger regression tests... + +runtest 1032 -f $CASES/1032.dat -S t bal + +runtest 1031 -f $CASES/1030.dat reg +runtest 1030 -f $CASES/1030.dat bal + +runtest 1029 -f $CASES/1002.dat entry 2006/10/20 "stock option" +runtest 1028 -f $CASES/1002.dat entry 2006/10/20 "stock option" -20 +runtest 1027 -f $CASES/1002.dat entry 2006/10/20 "stock option" opti +runtest 1026 -f $CASES/1002.dat entry 2006/10/20 "stock option" time +runtest 1025 -f $CASES/1002.dat entry 2006/10/20 "stock option" gain +runtest 1024 -f $CASES/1002.dat entry 2006/10/20 "stock option" opti -20 +runtest 1023 -f $CASES/1002.dat entry 2006/10/20 "stock option" time -20 +runtest 1022 -f $CASES/1002.dat entry 2006/10/20 "stock option" gain -20 + +runtest 1021 -f $CASES/1002.dat entry 2006/10/20 "stock optionx" +runtest 1020 -f $CASES/1002.dat entry 2006/10/20 "stock optionx" -20 +runtest 1019 -f $CASES/1002.dat entry 2006/10/20 "stock optionx" opti +runtest 1018 -f $CASES/1002.dat entry 2006/10/20 "stock optionx" time +runtest 1017 -f $CASES/1002.dat entry 2006/10/20 "stock optionx" gain +runtest 1016 -f $CASES/1002.dat entry 2006/10/20 "stock optionx" opti -20 +runtest 1015 -f $CASES/1002.dat entry 2006/10/20 "stock optionx" time -20 +runtest 1014 -f $CASES/1002.dat entry 2006/10/20 "stock optionx" gain -20 + +runtest 1013 -f $CASES/1002.dat entry 2006/10/20 "stock option" xopti +runtest 1012 -f $CASES/1002.dat entry 2006/10/20 "stock option" xtime +runtest 1011 -f $CASES/1002.dat entry 2006/10/20 "stock option" xgain +runtest 1010 -f $CASES/1002.dat entry 2006/10/20 "stock option" xopti -20 +runtest 1009 -f $CASES/1002.dat entry 2006/10/20 "stock option" xtime -20 +runtest 1008 -f $CASES/1002.dat entry 2006/10/20 "stock option" xgain -20 + +runtest 1007 -f $CASES/1002.dat entry 2006/10/20 "stock optionx" xopti +runtest 1006 -f $CASES/1002.dat entry 2006/10/20 "stock optionx" xtime +runtest 1005 -f $CASES/1002.dat entry 2006/10/20 "stock optionx" xgain +runtest 1004 -f $CASES/1002.dat entry 2006/10/20 "stock optionx" xopti -20 +runtest 1003 -f $CASES/1002.dat entry 2006/10/20 "stock optionx" xtime -20 +runtest 1002 -f $CASES/1002.dat entry 2006/10/20 "stock optionx" xgain -20 + +runtest 1001 -f $CASES/1001.dat bal + +if [ -f $UTILS/standard.dat ]; then + runtest 10 -f $UTILS/standard.dat --truncate=trailing -M -r -s -n reg rent + runtest 9 -f $UTILS/standard.dat --truncate=trailing -M -r -s reg rent + runtest 8 -f $UTILS/standard.dat --truncate=trailing -M -r -n reg rent + runtest 7 -f $UTILS/standard.dat --truncate=trailing -M -r reg rent + runtest 6 -f $UTILS/standard.dat --truncate=trailing -M reg rent + runtest 5 -f $UTILS/standard.dat --truncate=trailing -r -s -n reg rent + runtest 4 -f $UTILS/standard.dat --truncate=trailing -r -s reg rent + runtest 3 -f $UTILS/standard.dat --truncate=trailing -r -n reg rent + runtest 2 -f $UTILS/standard.dat --truncate=trailing -r reg rent + runtest 1 -f $UTILS/standard.dat --truncate=trailing reg rent +fi + +echo Running Ledger regression tests...done + +exit $result diff --git a/tests/regtest b/tests/regtest new file mode 100755 index 00000000..57dec8e0 --- /dev/null +++ b/tests/regtest @@ -0,0 +1,27 @@ +#!/bin/sh + +errors=0 + +if [ ! -f utils/standard.dat ]; then + exit 0 +fi + +for test in \ + "-O nrl:checking" \ + "-O ^expenses" \ + "-B 401" \ + "-V 401" \ + "-G 401" \ + "-B ira" \ + "-V ira" \ + "-G ira" \ + "-B retire" \ + "-V retire" \ + "-G retire" +do + echo testing: $test + python tests/confirm.py $test + errors=`expr $errors + $?` +done + +exit $errors diff --git a/tests/runtests.py b/tests/runtests.py new file mode 100755 index 00000000..7649f775 --- /dev/null +++ b/tests/runtests.py @@ -0,0 +1,184 @@ +#!/usr/bin/env python + +import random +import string +import signal +import os +import sys +import time + +true, false = 1, 0 + +options = [ + "--account=TempAccount", + "--actual", + "--add-budget", + "--amount-data", + "--amount=a", + "--ansi", + "--ansi-invert", + "--average", + #"--balance-format", + "--basis", + "--begin=2004/01", + "--budget", + "--by-payee", + #"--cache=/tmp/cache", + "--cleared", + "--collapse", + "--comm-as-payee", + #"--csv-register-format", + "--current", + "--date-format=%Y", + "--descend='$100'", + "--descend-if='t=={$100}'", + "--deviation", + "--display='a>10'", + "--dow", + "--download", + "--effective", + "--empty", + "--end=2005/01", + #"--equity-format", + #"--file=/tmp/file", + "--forecast='d<[2006]'", + "--format=%Y", + #"--full-help", + "--gain", + "--head=10", + #"--help", + #"--help-calc", + #"--help-comm", + #"--help-disp", + #"--init-file=/tmp/init", + #"--input-date-format", + "--limit='a>10'", + "--lots", + "--lot-prices", + "--lot-dates", + "--lot-tags", + "--market", + "--monthly", + "--no-cache", + #"--output=/tmp/output", + #"--pager", + #"--percentage", + "--performance", + "--period-sort=A\\(t\\)", + "--period=oct", + #"--plot-amount-format", + #"--plot-total-format", + "--price", + "--price-exp=1000", + #"--price-db=/tmp/foo", + #"--prices-format", + #"--print-format", + "--quantity", + "--real", + #"--reconcile", + #"--reconcile-date", + #"--register-format", + "--related", + "--sort=A\\(t\\)", + "--subtotal", + "--tail=5", + "--total-data", + "--total=O", + "--totals", + "--unbudgeted", + "--uncleared", + #"--version", + "--weekly", + "--wide", + #"--wide-register-format", + #"--write-hdr-format", + #"--write-xact-format", + "--yearly", +] + +commands = [ + "bal rent", + "bal ira", + "bal auto", + "reg rent", + "reg ira", + "reg expenses:food", + "print rent", + "print irc", + "xml rent", + "xml irc", + "equity rent", + "equity ira", + "prices AAPL", +] + +random.seed () + +loop = true +count = 0 +errors = 0 +if len(sys.argv) > 1: + errors = int(sys.argv[1]) +signals = 0 + +while loop: + try: + n = random.randint (0, len (options)) + opts = random.sample (options, n) + for cmd in commands: + if os.path.exists ("/tmp/out"): + os.unlink ("/tmp/out") + + cmd = "./ledger -f utils/standard.dat " + string.join(opts, " ") + " " + cmd + \ + " >> /tmp/out 2>&1" + + sys.stdout = open ("/tmp/out", "w") + print "::", cmd + sys.stdout.close () + + ret = os.system (cmd) + + sys.stdout = open ("/tmp/out", "a") + + # Convert an odd UNIX return type into the appropriate + # signal indication. + if ret and ret % 256 == 0 and ret / 256 > 127: + ret = 0x100 + (ret / 256 - 128) + + if ret and ret % 256 == 0: + print "ERROR: Return value", ret / 256 + sys.stdout.close () + os.system ("cat /tmp/out >> errors.out") + errors += 1 + elif ret: + if ret % 256 == signal.SIGINT: + loop = false + break + print "SIGNAL: Return value", ret % 256 + sys.stdout.close () + os.system ("cat /tmp/out >> signals.out") + signals += 1 + else: + sys.stdout.close () + os.system ("cat /tmp/out >> results.out") + + sys.stdout = sys.__stdout__ + count += 1 + if count < 10 or \ + (count < 100 and count % 10 == 0) or \ + (count < 1000 and count % 100 == 0) or \ + count % 1000 == 0: + if signals > 0 and errors > 0: + print "%d tests ... (%d signals, %d errors)" % \ + (count, signals, errors) + elif signals > 0: + print "%d tests ... (%d signals)" % \ + (count, signals) + elif errors > 0: + print "%d tests ... (%d errors)" % \ + (count, errors) + else: + print "%d tests ..." % count + + except KeyboardInterrupt: + loop = false diff --git a/tests/textual.h b/tests/textual.h new file mode 100644 index 00000000..adf24c77 --- /dev/null +++ b/tests/textual.h @@ -0,0 +1,34 @@ +#ifndef __TESTTEXTUALJOURNAL_H +#define __TESTTEXTUALJOURNAL_H + +#include <cxxtest/TestSuite.h> + +#include <textual.h> +#include <config.h> + +using namespace std; +using namespace ledger; + +class TestTextualJournal : public CxxTest::TestSuite +{ +public: + void testEmptyFileIsTextualFile() + { + stringstream j(stringstream::in); + + j << "2005/10/15 Something" << endl; + j << " A $ 42" << endl; + j << " B" << endl; + + textual_parser_t textualParser; + TS_ASSERT(textualParser.test(j)); + TS_ASSERT(j.good()); + TS_ASSERT_EQUALS(0, j.tellg()); + + config_t config; + std::auto_ptr<journal_t> journal(new journal_t); + textualParser.parse(j, config, journal.get()); + } +}; + +#endif // __TESTTEXTUALJOURNAL_H |