[view] Populate three columns in general ledger
[abstract.git] / app / test / aaTestAccountViews.js
blobe2c2378ac92a30972e3cf419f6d9eed7922df524
1 /* vim:set ts=2 sw=2 sts=2 et cindent tw=79 ft=javascript: */
2 /*
3  * Copyright (C) 2007,2008 Sergey Yanovich <ynvich@gmail.com>
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License as
7  * published by the Free Software Foundation; either version 2 of the
8  * License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public
16  * License along with this program; if not, write to the
17  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18  * Boston, MA 02111-1307, USA.
19  */
21 const nsCI                   = Components.interfaces
22 const moduleName             = "aaTestAccountViews";
23 const moduleCID              = "{afd38c04-819b-4823-ad6a-22c6d05b3774}";
24 const moduleContractID       = "@aasii.org/abstract/test/vc-accounts;1";
26 Components.utils.import("resource:///modules/aaTestVC.jsm");
29  * Module entry point
30  * The NSGetModule function is the magic entry point that XPCOM uses to find
31  * what XPCOM components this module provides
32  */
33 function NSGetModule(comMgr, fileSpec)
35   var loader = Components.classes["@mozilla.org/moz/jssubscript-loader;1"]
36     .getService(Components.interfaces.mozIJSSubScriptLoader);
37   loader.loadSubScript("resource:///modules/nsTestFrame.jsm");
39   var aaVCTestModule = new JSTestModule();
40   aaVCTestModule.init = ModuleInit;
41   aaVCTestModule.init();
42   return aaVCTestModule;
45 function ModuleInit()
47   this._name = moduleName;
48   this._CID = Components.ID(moduleCID);
49   this._contractID = moduleContractID;
51   /*  0 */
52   this._add(chart_page_CID, chart_page_contractID,
53       chart_page_name, chart_page_test, chart_page_check);
54   /*  1 */
55   this._add(chart_resource_CID, chart_resource_contractID, chart_resource_name,
56       chart_resource_test, resource_select_check);
57   /*  2 */
58   this._add(chart_resource_submit_CID, chart_resource_submit_contractID,
59       chart_resource_submit_name, resource_submit_test,
60       chart_resource_submit_check);
61   this._tests[2].instance.item = 0;
62   /*  3 */
63   this._repeat(0);
64   /*  4 */
65   this._add(transfer_page_CID, transfer_page_contractID,
66       transfer_page_name, transfer_page_test, transfer_page_check);
67   /*  5 */
68   this._add(transfer_to_CID, transfer_to_contractID, transfer_to_name,
69       transfer_to_test, flow_select_check);
70   /*  6 */
71   this._add(transfer_to_discard_CID, transfer_to_discard_contractID,
72       transfer_to_discard_name, flow_discard_test,
73       transfer_to_discard_check);
74   this._tests[6].instance.item = 0;
75   /*  7 */
76   this._repeat(5);
77   /*  8 */
78   this._add(transfer_to_create_CID, transfer_to_create_contractID,
79       transfer_to_create_name, transfer_to_create_test, resource_select_check);
80   /*  9 */
81   this._add(subflow_give_submit_CID, subflow_give_submit_contractID,
82       subflow_give_submit_name, resource_submit_test,
83       flow_check);
84   this._tests[9].instance.item = 1;
85   /* 10 */
86   this._add(subflow_take_select_CID, subflow_take_select_contractID,
87       subflow_take_select_name, flow_take_test, resource_select_check);
88   /* 11 */
89   this._add(subflow_take_submit_CID, subflow_take_submit_contractID,
90       subflow_take_submit_name, resource_submit_test,
91       flow_check);
92   this._tests[11].instance.item = 1;
93   /* 12 */
94   this._add(subflow_entity_select_CID, subflow_entity_select_contractID,
95       subflow_entity_select_name, flow_entity_test, entity_select_check);
96   /* 13 */
97   this._add(subflow_entity_submit_CID, subflow_entity_submit_contractID,
98       subflow_entity_submit_name, resource_submit_test,
99       flow_check);
100   this._tests[13].instance.item = 1;
101   /* 14 */
102   this._add(transfer_to_submit_CID, transfer_to_submit_contractID,
103       transfer_to_submit_name,  transfer_to_submit_test,
104       transfer_check);
105   this._tests[14].instance.item = 1;
106   /* 15 */
107   this._add(transfer_from_CID, transfer_from_contractID, transfer_from_name,
108       transfer_from_test, flow_select_check);
109   /* 16 */
110   this._add(transfer_from_discard_CID, transfer_from_discard_contractID,
111       transfer_from_discard_name, flow_discard_test,
112       transfer_from_discard_check);
113   /* 17 */
114   this._repeat(15);
115   /* 18 */
116   this._add(transfer_from_submit_CID, transfer_from_submit_contractID,
117       transfer_from_submit_name, flow_submit_test, transfer_from_submit_check);
118   this._tests[18].instance.item = 0;
119   /* 19 */
120   this._add(transfer_save_CID, transfer_save_contractID,
121       transfer_save_name, transfer_save_test, flow_select_check);
122   /* 20 */
123   this._add(submit_after_reset_CID, submit_after_reset_contractID,
124       submit_after_reset_name,  flow_submit_test,
125       submit_after_reset_check);
126   this._tests[20].instance.item = 1;
127   /* 21 */
128   this._add(account_page_CID, account_page_contractID, account_page_name,
129       account_page_test, account_page_check);
130   /* 22 */
131   this._add(transcript_page_CID, transcript_page_contractID,
132       transcript_page_name, transcript_page_test, transcript_page_check);
133   /* 23 */
134   this._add(transcript_flow_CID, transcript_flow_contractID, transcript_flow_name,
135       transcript_flow_test, flow_select_check);
136   /* 24 */
137   this._add(tf_discard_CID, tf_discard_contractID, tf_discard_name,
138       flow_discard_test, transcript_flow_discard_check);
139   this._tests[24].instance.item = 0;
140   /* 25 */
141   this._repeat(23);
142   /* 26 */
143   this._add(tf_submit_CID, tf_submit_contractID, tf_submit_name,
144       flow_submit_test, transcript_flow_submit_check);
145   this._tests[26].instance.item = 1;
146   /* 27 */
147   this._add(transcript_load_CID, transcript_load_contractID,
148       transcript_load_name, transcript_load_test);
149   /* 28 */
150   this._add(transcript_after_flow_CID, transcript_after_flow_contractID,
151       transcript_after_flow_name, transcript_after_flow_test);
152   /* 29 */
153   this._add(transcript_income_flow_CID, transcript_income_flow_contractID,
154       transcript_income_flow_name, transcript_income_flow_test);
155   /* 30 */
156   this._add(rate_page_CID, rate_page_contractID,
157       rate_page_name, rate_page_test, rate_page_check);
158   /* 31 */
159   this._add(rate_resource_CID, rate_resource_contractID, rate_resource_name,
160       rate_resource_test, resource_select_check);
161   /* 32 */
162   this._add(rate_resource_discard_CID, rate_resource_discard_contractID,
163       rate_resource_discard_name, resource_discard_test,
164       rate_resource_discard_check);
165   /* 33 */
166   this._repeat(31);
167   /* 34 */
168   this._add(rate_resource_submit_CID, rate_resource_submit_contractID,
169       rate_resource_submit_name, resource_submit_test,
170       rate_resource_submit_check);
171   this._tests[34].instance.item = 3;
172   /* 35 */
173   this._add(rate_save_CID, rate_save_contractID,
174       rate_save_name, rate_save_test);
175   /* 36 */
176   this._add(ledger_page_CID, ledger_page_contractID,
177       ledger_page_name, ledger_page_test, ledger_page_check);
180 /* Module-specific Defines and Utilities */
181 const contentId = "content";
183 /* Account Page Test */
184 const account_page_contractID = "@aasii.org/abstract/test/account-balance;1";
185 const account_page_name = "aaAccountPageTest";
186 const account_page_CID = Components.ID("{3391fcd8-e122-4e31-9162-f114fe2d843d}");
188 function account_page_test(runner)
190   runner.doCommand("cmd_report_balances");
191   runner.watchWindow = getFrame(runner).contentWindow;
194 function account_page_check(runner)
196   var tree = getElement(runner, "balances.tree");
197   var view = tree.view;
198   var date = getElement(runner, "filter.date");
199   date.value = "2008-02-06";
200   sendOnChange(date);
201   if (!tree)
202     runner.addJSFailure("[balances page] failed");
204   if (view.getCellText(0,tree.columns[3]) != "")
205     runner.addJSFailure("transcript.tree.line1.col4 failed");
206   if (view.getCellText(1,tree.columns[3]) != "100.00")
207     runner.addJSFailure("transcript.tree.line2.col4 failed");
208   if (view.getCellText(2,tree.columns[3]) != "10000.00")
209     runner.addJSFailure("transcript.tree.line3.col4 failed");
210   if (view.getCellText(3,tree.columns[3]) != "20000.00")
211     runner.addJSFailure("transcript.tree.line4.col4 failed");
212   if (view.getCellText(4,tree.columns[3]) != "")
213     runner.addJSFailure("transcript.tree.line5.col4 failed");
215   if (view.getCellText(0,tree.columns[4]) != "30000.00")
216     runner.addJSFailure("transcript.tree.line1.col4 failed");
217   if (view.getCellText(1,tree.columns[4]) != "")
218     runner.addJSFailure("transcript.tree.line2.col4 failed");
219   if (view.getCellText(2,tree.columns[4]) != "")
220     runner.addJSFailure("transcript.tree.line3.col4 failed");
221   if (view.getCellText(3,tree.columns[4]) != "")
222     runner.addJSFailure("transcript.tree.line4.col4 failed");
223   if (view.getCellText(4,tree.columns[4]) != "0.00")
224     runner.addJSFailure("transcript.tree.line5.col4 failed");
226   getElement(runner, "units.mode").selectedIndex = 1;
228   if (tree.view.getCellText(0,tree.columns[0]) != "a")
229     runner.addJSFailure("balance.tree.line1.col1 failed");
230   if (tree.view.getCellText(0,tree.columns[1]) != "K")
231     runner.addJSFailure("balance.tree.line1.col2 failed");
232   if (tree.view.getCellText(0,tree.columns[2]) != "x")
233     runner.addJSFailure("balance.tree.line1.col3 failed");
234   if (tree.view.getCellText(0,tree.columns[3]) != "")
235     runner.addJSFailure("balance.tree.line3.col4 failed");
236   if (tree.view.getCellText(0,tree.columns[4]) != "30000.00")
237     runner.addJSFailure("balance.tree.line1.col5 failed");
238   if (tree.view.getCellText(3,tree.columns[3]) != "20000.00")
239     runner.addJSFailure("balance.tree.line3.col4 failed");
241   if (getElement(runner, "footer.sumDebit").value != "40000.00")
242     runner.addJSFailure("balance.totalAssets is wrong: "
243         + getElement(runner, "footer.sumDebit").value);
244   if (getElement(runner, "footer.sumCredit").value != "40000.00")
245     runner.addJSFailure("balance.totalLiabilities is wrong: "
246         + getElement(runner, "footer.sumCredit").value);
249 /* Transcript Page Test */
250 const transcript_page_contractID = "@aasii.org/abstract/test/account-transcript;1";
251 const transcript_page_name = "aaTranscriptPageTest";
252 const transcript_page_CID = Components.ID("{d7a1753e-7d74-4f8a-940d-317d37c369ee}");
254 function transcript_page_test(runner)
256   runner.doCommand("cmd_report_transcript");
257   runner.watchWindow = getFrame(runner).contentWindow;
260 function transcript_check(runner)
262   if (! getElement(runner, "transcript.tree"))
263     runner.addJSFailure("[transcript page] tree failed");
264   if (! getElement(runner, "filter.flow"))
265     runner.addJSFailure("[transcript page] flow link failed");
268 const transcript1DateFrom = "2008-02-04";
269 const transcript1DateTo = "2008-02-06";
271 function transcript_page_check(runner)
273   transcript_check(runner);
274   var tree = getElement(runner, "transcript.tree");
275   // XXX 403202 'Unflexing' the tree speeds up reflow significantly
276   if (tree && tree.hasAttribute("flex"))
277     tree.removeAttribute("flex");
279   getElement(runner, "filter.dateFrom").value = transcript1DateFrom;
280   sendOnChange(getElement(runner, "filter.dateFrom"));
281   getElement(runner, "filter.dateTo").value = transcript1DateTo;
282   sendOnChange(getElement(runner, "filter.dateTo"));
283   if (getElement(runner, "filter.cancel").hasAttribute("collapsed"))
284     runner.addJSFailure("[transcript page] 'change' command");
287 /* ask for flow from transcript page */
288 const transcript_flow_contractID = "@aasii.org/test/transcript-flow;1";
289 const transcript_flow_name = "aaVCTranscriptFlowTest";
290 const transcript_flow_CID = Components.ID("{b4fe65f6-c55e-491c-a039-27c0beff12cc}");
292 function transcript_flow_test(runner)
294   sendOnClick(getElement(runner, "filter.flow"));
295   runner.watchWindow = getFrame(runner).contentWindow;
298 const tf_discard_contractID = "@aasii.org/test/transcript-flow-discard;1";
299 const tf_discard_name = "aaVCTranscriptFlowDiscardTest";
300 const tf_discard_CID = Components.ID("{a122d947-3fb2-4796-87fe-22c67706bd9a}");
302 function transcript_flow_discard_check(runner)
304   transcript_check(runner);
305   if (getElement(runner, "filter.flow").value != "click to choose")
306     runner.addJSFailure("[transcript->flow] discard failed");
309 const tf_submit_contractID = "@aasii.org/test/transcript-flow-submit;1";
310 const tf_submit_name = "aaVCTranscriptFlowSubmitTest";
311 const tf_submit_CID = Components.ID("{3197a8bb-1fd1-453e-98d8-6bc7996552a5}");
313 function transcript_flow_submit_check(runner)
315   transcript_check(runner);
316   if (getElement(runner, "filter.flow").value != "b")
317     runner.addJSFailure("[transcript->flow] submit failed");
320 /* submit/discard from flow page */
321 function flow_select_check(runner)
323   flow_check(runner);
324   var tree = getElement(runner, "page1.tree");
325   // XXX 403202 'Unflexing' the tree speeds up reflow significantly
326   if (tree && tree.hasAttribute("flex"))
327     tree.removeAttribute("flex");
329   if (getAnnoElement(runner, "header", "header.discard")
330       .getAttribute("collapsed") == "true")
331     runner.addJSFailure("flow.discard button should be visible");
332   if (getAnnoElement(runner, "header", "header.submit")
333       .getAttribute("collapsed") == "true")
334     runner.addJSFailure("flow.submit button should be visible");
335   if (getElement(runner, "cmd_page1_discard")
336       .getAttribute("disabled") == "true")
337     runner.addJSFailure("flow_discard command should be enabled");
338   if (getElement(runner, "cmd_page1_submit")
339       .getAttribute("disabled") == "true")
340     runner.addJSFailure("flow_submit command should be enabled");
343 function flow_discard_test(runner)
345   getElement(runner,"page1.tree").view.selection.select(this.item);
346   runner.doCommand("cmd_page1_discard");
347   runner.watchWindow = getFrame(runner).contentWindow;
350 function flow_submit_test(runner)
352   if (this.item < 0)
353     this.item = getElement(runner, "page1.tree").view.rowCount + this.item;
354   getElement(runner,"page1.tree").view.selection.select(this.item);
355   runner.doCommand("cmd_page1_submit");
356   runner.watchWindow = getFrame(runner).contentWindow;
359 function flow_last_line_check(runner)
361   var tree = getElement(runner, "page1.tree");
362   var view = tree.view;
363   if (view.getCellText(view.rowCount - 1, tree.columns[0])
364       != "profit and loss")
365     runner.addJSFailure("[flow page] wrong tag on the last line");
368 /* Transcript Load Test */
369 const transcript_load_contractID = "@aasii.org/abstract/test/transcript-load;1";
370 const transcript_load_name = "aaTranscriptLoadTest";
371 const transcript_load_CID = Components.ID("{335e1a8e-f8a0-4a9d-850b-0404cd2db9e5}");
373 function transcript_load_test(runner)
375   var loadLnk = getElement(runner, "transcript.load");
376   var startDate = getElement(runner, "filter.dateFrom");
377   var endDate = getElement(runner, "filter.dateTo");
378   var tree = getElement(runner, "transcript.tree");
379   var view = tree.view.QueryInterface(nsCI.nsITreeView);
380   
381   sendOnClick(loadLnk);
383   if (getElement(runner, "filter.group").getAttribute("collapsed") != "true")
384     runner.addJSFailure("[transcript load] filter not hidden");
386   if (getElement(runner, "header.flow").value != "b")
387     runner.addJSFailure("[transcript load] wrong flow: "
388         + getElement(runner, "header.flow").value);
389   if (getElement(runner, "header.dateFrom").value != transcript1DateFrom)
390     runner.addJSFailure("[transcript load] [1] wrong 'from' date");
391   if (getElement(runner, "header.sumDebitFrom").value != "0.00")
392     runner.addJSFailure("[transcript load] [1] wrong 'from' debit");
393   if (getElement(runner, "header.sumCreditFrom").value != "0.00")
394     runner.addJSFailure("[transcript load] [1] wrong 'from' credit");
395   if (getElement(runner, "header.dateTo").value != transcript1DateTo)
396     runner.addJSFailure("[transcript load] [1] wrong 'to' date");
397   if (getElement(runner, "header.sumDebits").value != "300.00")
398     runner.addJSFailure("[transcript load] [1] wrong total debit");
399   if (getElement(runner, "header.sumCredits").value != "200.00")
400     runner.addJSFailure("[transcript load] [1] wrong total credit");
401   if (getElement(runner, "header.sumDebitTo").value != "100.00")
402     runner.addJSFailure("[transcript load] [1] wrong 'to' debit");
403   if (getElement(runner, "header.sumCreditTo").value != "0.00")
404     runner.addJSFailure("[transcript load] [1] wrong 'to' credit");
406   if (view.getCellText(0,tree.columns[0]) != "2008-02-04")
407     runner.addJSFailure("transcript.tree.line1.col1 failed");
408   if (view.getCellText(1,tree.columns[0]) != "2008-02-05")
409     runner.addJSFailure("transcript.tree.line2.col1 failed");
411   if (view.getCellText(0,tree.columns[1]) != "a")
412     runner.addJSFailure("transcript.tree.line1.col2 failed");
413   if (view.getCellText(1,tree.columns[1]) != "c")
414     runner.addJSFailure("transcript.tree.line2.col2 failed");
416   if (view.getCellText(0,tree.columns[2]) != "300.00")
417     runner.addJSFailure("transcript.tree.line1.col3 failed");
418   if (view.getCellText(1,tree.columns[2]) != "")
419     runner.addJSFailure("transcript.tree.line2.col3 failed");
421   if (view.getCellText(0,tree.columns[3]) != "")
422     runner.addJSFailure("transcript.tree.line1.col4 failed");
423   if (view.getCellText(1,tree.columns[3]) != "200.00")
424     runner.addJSFailure("transcript.tree.line2.col4 failed");
426   getElement(runner, "units.mode").selectedIndex = 1;
428   if (view.getCellText(0,tree.columns[2]) != "30000.00")
429     runner.addJSFailure("transcript.tree.line1.col3 failed");
430   if (view.getCellText(1,tree.columns[2]) != "")
431     runner.addJSFailure("transcript.tree.line2.col3 failed");
433   if (view.getCellText(0,tree.columns[3]) != "")
434     runner.addJSFailure("transcript.tree.line1.col4 failed");
435   if (view.getCellText(1,tree.columns[3]) != "20000.00")
436     runner.addJSFailure("transcript.tree.line2.col4 failed");
438   /* Test for bug #133 */
439   if (getElement(runner, "header.sumDebitTo").value != "10000.00")
440     runner.addJSFailure("[transcript load] [1] wrong 'to' debit");
441   if (getElement(runner, "header.sumCreditTo").value != "0.00")
442     runner.addJSFailure("[transcript load] [1] wrong 'to' credit");
444   if (getElement(runner, "header.sumDebits").value != "30000.00")
445     runner.addJSFailure("[transcript load] [1] wrong total debit");
446   if (getElement(runner, "header.sumCredits").value != "20000.00")
447     runner.addJSFailure("[transcript load] [1] wrong total credit");
450 /* Tests for Flow-in-Transcript-Selection bug #122 */
451 const transcript_after_flow_contractID = "@aasii.org/abstract/test/trasncript-after-flow;1";
452 const transcript_after_flow_name = "aaTranscriptAfterFlowP1";
453 const transcript_after_flow_CID = Components.ID("{b9c0df9d-6036-43c7-b0b4-d4e2f3092601}");
455 function transcript_after_flow_test(runner)
457   var flows = getFrame(runner).docShell.QueryInterface(nsCI.nsIWebNavigation)
458     .sessionHistory.createQuery("@aasii.org/storage/load-flow;1")
459     .QueryInterface(nsCI.aaILoadQuery);
460   flows.load();
461   getFrame(runner).contentWindow.wrappedJSObject.gView.report.flow = flows
462     .queryElementAt(3, nsCI.aaIFlow);
464   var tree = getElement(runner, "transcript.tree");
465   var view = tree.view.QueryInterface(nsCI.nsITreeView);
466   
467   if (view.getCellText(0,tree.columns[1]) != "a")
468     runner.addJSFailure("transcript.tree.line3.col2 failed");
471 /* Tests for income-flow display */
472 const transcript_income_flow_contractID = "@aasii.org/abstract/test/trasncript-income-flow;1";
473 const transcript_income_flow_name = "aaTranscriptIncomeFlowP1";
474 const transcript_income_flow_CID = Components.ID("{07f18646-a3be-4ab5-9edd-7b2b899f00b8}");
476 function transcript_income_flow_test(runner)
478   var loadLnk = getElement(runner, "transcript.load");
479   var startDate = getElement(runner, "filter.dateFrom");
480   var endDate = getElement(runner, "filter.dateTo");
481   var tree = getElement(runner, "transcript.tree");
482   var view = tree.view.QueryInterface(nsCI.nsITreeView);
483   
484   getFrame(runner).contentWindow.wrappedJSObject.gView.report.flow =
485     Components.classes["@aasii.org/base/income-flow;1"]
486     .createInstance(nsCI.aaIFlow);
488   startDate.value = "2008-02-04";
489   endDate.value = "2008-02-06";
491   sendOnClick(loadLnk);
493   if (getElement(runner, "header.dateFrom").value != "2008-02-04")
494     runner.addJSFailure("[transcript load] [2] wrong 'from' date");
495   if (getElement(runner, "header.sumDebitFrom").value != "0.00")
496     runner.addJSFailure("[transcript load] [2] wrong 'from' debit");
497   if (getElement(runner, "header.sumCreditFrom").value != "0.00")
498     runner.addJSFailure("[transcript load] [2] wrong 'from' credit");
499   if (getElement(runner, "header.dateTo").value != "2008-02-06")
500     runner.addJSFailure("[transcript load] [2] wrong 'to' date");
501   if (getElement(runner, "header.sumDebitTo").value != "0.00")
502     runner.addJSFailure("[transcript load] [2] wrong 'to' debit");
503   if (getElement(runner, "header.sumCreditTo").value != "10000.00")
504     runner.addJSFailure("[transcript load] [2] wrong 'to' credit");
505   if (view.rowCount != 1)
506     runner.addJSFailure("[transcript load] [2] line count");
508   if (view.getCellText(0,tree.columns[0]) != "2008-02-05")
509     runner.addJSFailure("transcript.tree.line1.col1 failed");
511   if (view.getCellText(0,tree.columns[1]) != "c")
512     runner.addJSFailure("transcript.tree.line1.col2 failed");
514   if (view.getCellText(0,tree.columns[2]) != "")
515     runner.addJSFailure("transcript.tree.line1.col3 failed");
517   if (view.getCellText(0,tree.columns[3]) != "10000.00")
518     runner.addJSFailure("transcript.tree.line1.col4 failed");
521 /* Chart Page Test */
522 const chart_page_contractID = "@aasii.org/abstract/test/account-chart;1";
523 const chart_page_name = "aaChartPageTest";
524 const chart_page_CID = Components.ID("{9166dd77-6add-4104-a75e-cbdc41c6d3df}");
526 function chart_page_test(runner)
528   runner.doCommand("cmd_manage_chart");
529   runner.watchWindow = getFrame(runner).contentWindow;
532 function chart_sync_check(runner)
534   var result = true;
535   var wnd = getFrame(runner).contentWindow.wrappedJSObject;
536   var chart = wnd.gView.chart;
537   var loaded = wnd.gLoaded;
538   if (! chart) {
539     runner.addJSFailure(" no chart object");
540     return false;
541   }
543   if (chart.resource && chart.resource.tag
544       != getElement(runner, "chart.resource").value)
545     runner.addJSFailure(" chart.resource is wrong");
547   if ( loaded ^ getElement(runner, "chart.set").hasAttribute("collapsed")) {
548     runner.addJSFailure(" chart.set command out of sync");
549     result = false;
550   }
552   return result;
555 function chart_check(runner)
557   var result = true;
558   if (getFrame(runner).contentWindow.location.href !=
559       "chrome://abstract/content/chart.xul") {
560     runner.addJSFailure(" [chart] wrong xul document");
561     return false;
562   }
564   if ( ! chart_sync_check(runner) )
565     return false;
567   return result;
570 function chart_page_check(runner)
572   if (! chart_check(runner))
573     runner.addJSFailure("[chart page]");
576 /* ask for resource from chart page */
577 const chart_resource_contractID = "@aasii.org/test/chart-resource;1";
578 const chart_resource_name = "aaVCChartResourceTest";
579 const chart_resource_CID = Components.ID("{0a83a675-ebbd-4796-9147-5a423b83d20b}");
581 function chart_resource_test(runner)
583   sendOnClick(getElement(runner, "chart.resource"));
584   runner.watchWindow = getFrame(runner).contentWindow;
587 const chart_resource_submit_contractID = "@aasii.org/test/chart-resource-submit;1";
588 const chart_resource_submit_name = "aaVCChartResourceSubmitTest";
589 const chart_resource_submit_CID = Components.ID("{5b81d3f1-55a1-4f37-b608-992d8f094741}");
591 function chart_resource_submit_check(runner)
593   if (! chart_check(runner))
594     runner.addJSFailure("[chart->resource] wrong page init");
596   if (getElement(runner, "chart.resource").value != "x")
597     runner.addJSFailure("[chart->resource] submit failed: "
598         + getElement(runner, "chart.resource").value);
600   sendOnClick(getElement(runner, "chart.set"));
601   if ( ! chart_sync_check(runner))
602     runner.addJSFailure("[chart->date] out of sync");
605 /* Transfer Page Test */
606 const transfer_page_contractID = "@aasii.org/abstract/test/account-transfer;1";
607 const transfer_page_name = "aaTransferPageTest";
608 const transfer_page_CID = Components.ID("{950daefb-95ba-4960-a11a-b88af6cf6cad}");
610 function transfer_page_test(runner)
612   runner.doCommand("cmd_process_transfer");
613   runner.watchWindow = getFrame(runner).contentWindow;
616 function transfer_sync_check(runner)
618   var wnd = getFrame(runner).contentWindow.wrappedJSObject;
619   var result = true;
620   if (! wnd) {
621     runner.addJSFailure("[transfer sync] getting window");
622     return false;
623   }
625   if (! wnd.gFact) {
626     runner.addJSFailure("[transfer sync] getting fact object");
627     return false;
628   }
630   if (getElement(runner, "transfer.fromFlow").value != (wnd.gFact.takeFrom ? 
631         wnd.gFact.takeFrom.tag : "click to choose")) {
632     runner.addJSFailure("  'fromFlow.tag' is wrong:" + getElement(runner,
633           "transfer.fromFlow").value);
634     result = false;
635   }
637   if (getElement(runner, "transfer.toFlow").value != (wnd.gFact.giveTo ? 
638         wnd.gFact.giveTo.tag : "click to choose")) {
639     runner.addJSFailure("  'toFlow.tag' is wrong: " + getElement(runner,
640           "transfer.toFlow").value);
641     result = false;
642   }
644   if (getElement(runner, "transfer.amount").value != wnd.gFact.amount) {
645     runner.addJSFailure("  'amount' is wrong: " + getElement(runner,
646           "transfer.amount").value);
647     result = false;
648   }
650   var time = new Date(wnd.gEvent.time / 1000);
651   if (getElement(runner, "transfer.date").value != time
652       .toLocaleFormat('%Y-%m-%d')) {
653     runner.addJSFailure("  'date' is wrong: " + getElement(runner,
654           "transfer.date").value + " - " + time.toLocaleFormat('%Y-%m-%d'));
655     result = false;
656   }
658   if ((wnd.gTransaction && (getElement(runner, "transfer.value").value
659         != wnd.gTransaction.value.toFixed(2))) || !wnd.gTransaction
660       && (getElement(runner, "transfer.value").value != "")) {
661       runner.addJSFailure("  'value' is wrong: " + getElement(runner,
662             "transfer.value").value);
663       result = false;
664   }
666   return result;
669 function transfer_check(runner)
671   var result = true;
672   if (getFrame(runner).docShell.QueryInterface(nsCI.nsIWebNavigation)
673       .currentURI.spec != "chrome://abstract/content/transfer.xul") {
674     runner.addJSFailure(" [transfer] wrong xul document");
675     return false;
676   }
677   if (! transfer_sync_check(runner)) {
678     runner.addJSFailure(" [transfer] page out of sync");
679     result = false;
680   }
682   return result;
685 function transfer_page_check(runner)
687   if (! transfer_check(runner))
688     runner.addJSFailure("[transfer page] wrong initialization");
690   if (getElement(runner, "transfer.amount").value != "0")
691     runner.addJSFailure("  'amount' is wrong: " + getElement(runner,
692           "transfer.amount").value);
694   var junk = Components.classes["@aasii.org/base/flow;1"].createInstance(nsCI.aaIFlow);
695   junk.tag = "junk";
696   var wnd = getFrame(runner).contentWindow.wrappedJSObject;
697   wnd.gFact.takeFrom = junk;
698   wnd.gFact.giveTo = junk;
701 /* ask for 'from' flow from transfer page */
702 const transfer_from_contractID = "@aasii.org/test/transfer-from;1";
703 const transfer_from_name = "aaVCTransferFromTest";
704 const transfer_from_CID = Components.ID("{7ad5abf7-53b9-468d-b50c-4d9614a9dc14}");
706 function transfer_from_test(runner)
708   sendOnClick(getElement(runner, "transfer.fromFlow"));
709   runner.watchWindow = getFrame(runner).contentWindow;
712 const transfer_from_discard_contractID = "@aasii.org/test/transfer-from-discard;1";
713 const transfer_from_discard_name = "aaVCTransferFromDiscardTest";
714 const transfer_from_discard_CID = Components.ID("{ca063e94-1b9c-4e53-bf25-9fa8af605def}");
716 function transfer_from_discard_check(runner)
718   if (! transfer_check(runner))
719     runner.addJSFailure("[transfer->fromFlow] wrong init");
721   if (getElement(runner, "transfer.fromFlow").value != "junk")
722     runner.addJSFailure("[transfer->fromFlow] discard failed");
725 const transfer_from_submit_contractID = "@aasii.org/test/transfer-from-submit;1";
726 const transfer_from_submit_name = "aaVCTransferFromSubmitTest";
727 const transfer_from_submit_CID = Components.ID("{aaf7ec49-e9aa-45a8-b630-56b6659fa6ad}");
729 function transfer_from_submit_check(runner)
731   if (! transfer_check(runner))
732     runner.addJSFailure("[transfer->fromFlow] wrong page init");
734   if (getElement(runner, "transfer.fromFlow").value != "a")
735     runner.addJSFailure("[transfer->fromFlow] submit failed:"
736         + getElement(runner, "transfer.fromFlow").value);
739 /* ask for 'to' flow from transfer page */
740 const transfer_to_contractID = "@aasii.org/test/transfer-to;1";
741 const transfer_to_name = "aaVCTransferToTest";
742 const transfer_to_CID = Components.ID("{3c13bbbd-927b-4b67-be0a-2f80691bed1e}");
744 function transfer_to_test(runner)
746   sendOnClick(getElement(runner, "transfer.toFlow"));
747   runner.watchWindow = getFrame(runner).contentWindow;
750 const transfer_to_discard_contractID = "@aasii.org/test/transfer-to-discard;1";
751 const transfer_to_discard_name = "aaVCTransferToDiscardTest";
752 const transfer_to_discard_CID = Components.ID("{a04d7093-663b-4c24-9c96-028c67b89df3}");
754 function transfer_to_discard_check(runner)
756   if (! transfer_check(runner))
757     runner.addJSFailure("[transfer->toFlow] wrong init");
759   if (getElement(runner, "transfer.toFlow").value != "junk")
760     runner.addJSFailure("[transfer->toFlow] discard failed");
763 const transfer_to_create_contractID = "@aasii.org/test/transfer-to-create;1";
764 const transfer_to_create_name = "aaVCTransferToCreateTest";
765 const transfer_to_create_CID = Components.ID("{4c2eed92-0acd-4a60-9003-13e558ce961e}");
767 function transfer_to_create_test(runner)
769   flow_last_line_check(runner);
770   runner.doCommand("cmd_page1_new");
771   runner.doCommand("cmd_flow_give");
772   runner.watchWindow = getFrame(runner).contentWindow;
775 const subflow_give_submit_contractID = "@aasii.org/test/subflow-give-submit;1";
776 const subflow_give_submit_name = "aaVCSubflowGiveSubmitTest";
777 const subflow_give_submit_CID = Components.ID("{9daed633-4b08-4220-8931-4152f7bc5066}");
779 const subflow_take_submit_contractID = "@aasii.org/test/subflow-take-submit;1";
780 const subflow_take_submit_name = "aaVCSubflowtakeSubmitTest";
781 const subflow_take_submit_CID = Components.ID("{6b652c77-8368-42ca-9768-8376bad338ae}");
783 const subflow_take_select_contractID = "@aasii.org/test/subflow-take-select;1";
784 const subflow_take_select_name = "aaVCSubflowtakeSelectTest";
785 const subflow_take_select_CID = Components.ID("{479b48f0-a20f-488d-b219-dbfee74b15bd}");
787 const subflow_entity_submit_contractID = "@aasii.org/test/subflow-entity-submit;1";
788 const subflow_entity_submit_name = "aaVCSubflowGiveSubmitTest";
789 const subflow_entity_submit_CID = Components.ID("{316884a0-4623-4c49-b214-819bc7b98bc6}");
791 const subflow_entity_select_contractID = "@aasii.org/test/subflow-entity-select;1";
792 const subflow_entity_select_name = "aaVCSubflowGiveSelectTest";
793 const subflow_entity_select_CID = Components.ID("{63ecefa6-b153-4d83-a812-f23ae777d0f0}");
795 const transfer_to_submit_contractID = "@aasii.org/test/transfer-to-submit;1";
796 const transfer_to_submit_name = "aaVCTransferToSubmitTest";
797 const transfer_to_submit_CID = Components.ID("{dbd1150c-c80c-4a95-8a02-2906c0d06dd3}");
799 function transfer_to_submit_test(runner)
801   getElement(runner, "flow.tag").value = "b";
802   sendOnInput(getElement(runner, "flow.tag"));
804   getElement(runner, "flow.rate").value = "1.0";
805   sendOnInput(getElement(runner, "flow.rate"));
807   runner.doCommand("cmd_page1_save");
808   add_flow_when_selecting_check(runner);
809   if (this.item < 0)
810     this.item = getElement(runner, "page1.tree").view.rowCount + this.item;
811   getElement(runner,"page1.tree").view.selection.select(this.item);
812   runner.doCommand("cmd_page1_submit");
813   runner.watchWindow = getFrame(runner).contentWindow;
816 const transfer_save_contractID = "@aasii.org/test/transfer-save;1";
817 const transfer_save_name = "aaVCTransferSaveTest";
818 const transfer_save_CID = Components.ID("{bcb12042-4b82-4e71-949b-228b444e344c}");
820 function transfer_save_test(runner)
822   var amount = getElement(runner, "transfer.amount");
823   amount.value = "300";
824   sendOnInput(amount);
825   if (! transfer_sync_check(runner))
826     runner.addJSFailure("[transfer save] page out of sync");
827   var date = getElement(runner, "transfer.date");
828   date.value = "2008-02-04";
829   sendOnChange(date);
830   if (! transfer_sync_check(runner))
831     runner.addJSFailure("[transfer save] page out of sync");
833   var commit = getElement(runner, "transfer.commit");
834   sendOnClick(commit);
835   if (! transfer_sync_check(runner))
836     runner.addJSFailure("[transfer save] page out of sync");
837   var value = getElement(runner, "transfer.value");
838   if (value.value != "30000.00")
839     runner.addJSFailure("[transfer save] wrong value:" + value.value);
840   var earnings = getElement(runner, "transfer.earnings");
841   if (earnings.value != "")
842     runner.addJSFailure("[transfer save] wrong earnings:" + earnings.value);
843   if (getElement(runner,"transfer.commit").getAttribute("disabled") != "true")
844     runner.addJSFailure("[transfer save] 'commit' not disabled");
845   var reset = getElement(runner, "transfer.reset");
846   sendOnClick(reset);
847   if (getElement(runner,"transfer.commit").hasAttribute("disabled"))
848     runner.addJSFailure("[transfer save] 'commit' not enabled");
850   sendOnClick(getElement(runner, "transfer.fromFlow"));
851   runner.watchWindow = getFrame(runner).contentWindow;
854 function submit_after_reset_check(runner)
856   var amount = getElement(runner, "transfer.amount");
857   var date = getElement(runner, "transfer.date");
858   var commit = getElement(runner, "transfer.commit");
859   var value = getElement(runner, "transfer.value");
860   var earnings = getElement(runner, "transfer.earnings");
861   var reset = getElement(runner, "transfer.reset");
863   if (getElement(runner, "transfer.fromFlow").value != "b")
864     runner.addJSFailure("submit after reset failed:"
865         + getElement(runner, "transfer.fromFlow").value);
866   /* Prepare direct database access */
867   var wnd = getFrame(runner).contentWindow.wrappedJSObject;
868   var session = getFrame(runner).docShell.QueryInterface(nsCI.nsIWebNavigation)
869     .sessionHistory;
870   var entities = session.createQuery("@aasii.org/storage/load-entity;1")
871     .QueryInterface(nsCI.aaILoadQuery);
872   entities.load();
873   var resources = session.createQuery("@aasii.org/storage/load-resource;1")
874     .QueryInterface(nsCI.aaILoadQuery);
875   resources.load();
876   var flow = Components.classes["@aasii.org/base/flow;1"]
877     .createInstance(nsCI.aaIFlow);
879   /* Create flow 'c' */
880   flow.tag = "c";
881   flow.entity = entities.queryElementAt(2, nsCI.aaIEntity);
882   flow.giveResource = resources.queryElementAt(1, nsCI.aaIResource);
883   flow.takeResource = resources.queryElementAt(0, nsCI.aaIResource);
884   flow.rate = 150;
885   session.save(flow, null);
887   /* Create flow 'd' */
888   flow = Components.classes["@aasii.org/base/flow;1"]
889     .createInstance(nsCI.aaIFlow);
890   flow.tag = "d";
891   flow.entity = entities.queryElementAt(3, nsCI.aaIEntity);
892   flow.giveResource = resources.queryElementAt(0, nsCI.aaIResource);
893   flow.takeResource = resources.queryElementAt(0, nsCI.aaIResource);
894   flow.rate = 1;
895   session.save(flow, null);
897   /* Load flows */
898   var flows = session.createQuery("@aasii.org/storage/load-flow;1")
899     .QueryInterface(nsCI.aaILoadQuery);
900   flows.load();
902   /* Add transfer 'b'->'c' of 200 */
903   //wnd.gFact.takeFrom = flows.queryElementAt(1, nsCI.aaIFlow);
904   wnd.gFact.giveTo = flows.queryElementAt(2, nsCI.aaIFlow);
905   amount.value = "200";
906   sendOnInput(amount);
907   date.value = "2008-02-05";
908   sendOnChange(date);
909   sendOnClick(commit);
910   if (value.value != "20000.00")
911     runner.addJSFailure("[transfer save] wrong value:" + value.value);
912   if (earnings.value != "10000.00")
913     runner.addJSFailure("[transfer save] wrong earnings:" + earnings.value);
914   sendOnClick(reset);
916   /* Add transfer 'c'->'d' of 20000 */
917   wnd.gFact.takeFrom = flows.queryElementAt(2, nsCI.aaIFlow);
918   wnd.gFact.giveTo = flows.queryElementAt(3, nsCI.aaIFlow);
919   amount.value = "20000";
920   sendOnInput(amount);
921   date.value = "2008-02-06";
922   sendOnChange(date);
923   sendOnClick(commit);
924   if (value.value != "20000.00")
925     runner.addJSFailure("[transfer save] wrong value:" + value.value);
926   if (earnings.value != "")
927     runner.addJSFailure("[transfer save] wrong earnings:" + earnings.value);
930 const submit_after_reset_contractID = "@aasii.org/test/submit-after-reset;1";
931 const submit_after_reset_name = "aaVCTransferToSubmitAfterReset";
932 const submit_after_reset_CID = Components.ID("{412fc32b-1aed-4efa-8456-ae5a4c2ef29a}");
934 /* test for bug 128 */
935 function add_flow_when_selecting_check(runner)
937   var tree = getElement(runner, "page1.tree");
938   var view = tree.view;
939   
940   if (getElement(runner, "page1.browseSet").hasAttribute("disabled"))
941     runner.addJSFailure("edit status - bug 128 regression");
942   if (view.getCellText(view.selection.currentIndex,tree.columns[0])
943       != "b")
944     runner.addJSFailure("selection - bug 128 regression");
945   tree.view.selection.select(0);
946   if (getElement(runner, "flow.rate").value != "0.01")
947     runner.addJSFailure("rate switch - bug 129 regression");
950 /* test for rate change page */
951 const rate_page_contractID = "@aasii.org/test/rate-page;1";
952 const rate_page_name = "aaVCRatePageTest";
953 const rate_page_CID = Components.ID("{cb01568d-1fb2-4ea9-a468-8d00b50b4c65}");
955 function rate_sync_check(runner)
957   var wnd = getFrame(runner).contentWindow.wrappedJSObject;
958   var result = true;
959   if (! wnd) {
960     runner.addJSFailure("[rate sync] getting window");
961     return false;
962   }
964   var details = wnd.gDetails;
965   if (! details) {
966     runner.addJSFailure("[rate sync] details object is null");
967     return false;
968   }
970   var quote;
971   if (details.buffer)
972     quote = details.buffer;
973   else if (details._item)
974     quote = details._item;
975   
976   var resourceBox = details._resource;
977   var dateBox = details._date;
978   var rateBox = details._rate;
979   if (!quote) {
980     if (resourceBox.value != "click to choose") {
981       runner.addJSFailure("[rate sync] resource.tag is wrong: "
982           + resourceBox.value);
983       result = false;
984     }
985     if (rateBox.value != "") {
986       runner.addJSFailure("[rate sync] rate is wrong: "
987           + rateBox.value);
988       result = false;
989     }
990     return result;
991   }
992   quote = quote.QueryInterface(nsCI.aaIQuote);
993   var date = new Date(quote.time / 1000);
994   if (dateBox.value != date.toLocaleFormat('%Y-%m-%d')) {
995     runner.addJSFailure("[rate sync] date is wrong: "
996         + date);
997     result = false;
998   }
999   if (rateBox.value != quote.rate) {
1000     runner.addJSFailure("[rate sync] rate is wrong: "
1001         + quote.rate);
1002     result = false;
1003   }
1005   return result;
1008 function rate_page_test(runner)
1010   runner.doCommand("cmd_manage_rate");
1011   runner.watchWindow = getFrame(runner).contentWindow;
1014 function rate_check(runner)
1016   var result = true;
1017   if (getFrame(runner).docShell.QueryInterface(nsCI.nsIWebNavigation)
1018       .currentURI.spec != "chrome://abstract/content/rate.xul") {
1019     runner.addJSFailure(" [rate page] wrong xul document");
1020     result = false;
1021   }
1022   var tree = getElement(runner, "page1.tree");
1023   if (! tree.view.QueryInterface(nsCI.aaIDataTreeView)) {
1024     runner.addJSFailure("[rate page] tree view assingment");
1025     result = false;
1026   }
1027   if (! rate_sync_check(runner))
1028     result = false;
1029   return result;
1032 function rate_page_check(runner)
1034   if (!rate_check(runner))
1035     runner.addJSFailure("[rate page] page out of sync");
1036   var tree = getElement(runner, "page1.tree");
1037   if (tree.view.rowCount != 0)
1038     runner.addJSFailure("[rate page] tree not empty");
1039   runner.doCommand("cmd_page1_new");
1040   if (! rate_sync_check(runner))
1041     runner.addJSFailure("[rate page] page out of sync");
1042   var date = getElement(runner, "quote.date");
1043   date.value = "2008-02-06";
1044   sendOnChange(date);
1045   if (! rate_sync_check(runner))
1046     runner.addJSFailure("[rate page] page out of sync");
1047   var rate = getElement(runner, "quote.rate");
1048   rate.value = "1.5";
1049   sendOnInput(rate);
1050   if (! rate_sync_check(runner))
1051     runner.addJSFailure("[rate page] page out of sync");
1052   var resource = Components.classes["@aasii.org/base/resource;1"]
1053     .createInstance(nsCI.aaIResource);
1054   resource.tag = "c1";
1055   getFrame(runner).contentDocument.defaultView
1056     .QueryInterface(nsCI.nsIInterfaceRequestor)
1057     .getInterface(nsCI.nsIWebNavigation).sessionHistory.save(resource, null);
1060 /* ask for resource from rate page */
1061 const rate_resource_contractID = "@aasii.org/test/rate-resource;1";
1062 const rate_resource_name = "aaVCRateResourceTest";
1063 const rate_resource_CID = Components.ID("{89919005-f3fb-4d35-8f35-fa0603defbdb}");
1065 function rate_resource_test(runner)
1067   sendOnClick(getElement(runner, "quote.resource"));
1068   runner.watchWindow = getFrame(runner).contentWindow;
1071 const rate_resource_discard_contractID = "@aasii.org/test/rate-resource-discard;1";
1072 const rate_resource_discard_name = "aaVCRateResourceDiscardTest";
1073 const rate_resource_discard_CID = Components.ID("{fd2c7c83-2551-44d4-a06f-b6562b622f7e}");
1075 function rate_resource_discard_check(runner)
1077   if (! rate_check(runner))
1078     runner.addJSFailure("[rate page] wrong init");
1080   if (getElement(runner, "quote.resource").value != "click to choose")
1081     runner.addJSFailure("[rate page] discard failed");
1084 const rate_resource_submit_contractID = "@aasii.org/test/rate-resource-submit;1";
1085 const rate_resource_submit_name = "aaVCRateResourceSubmitTest";
1086 const rate_resource_submit_CID = Components.ID("{3668794f-4e7a-44d6-bb37-949dc576fba1}");
1088 function rate_resource_submit_check(runner)
1090   if (! rate_check(runner))
1091     runner.addJSFailure("[rate page] wrong page init");
1093   if (getElement(runner, "quote.resource").value != "c1")
1094     runner.addJSFailure("[rate page] submit failed:"
1095         + getElement(runner, "quote.resource").value);
1098 const rate_save_contractID = "@aasii.org/test/rate-save;1";
1099 const rate_save_name = "aaVCRateSaveTest";
1100 const rate_save_CID = Components.ID("{cc30d198-e1ce-4d24-889d-d93ed4857569}");
1102 function rate_save_test(runner)
1104   runner.doCommand("cmd_page1_save");
1105   if (! rate_check(runner))
1106     runner.addJSFailure("[rate save] page out of sync");
1109 /* test for general ledger page */
1110 const ledger_page_contractID = "@aasii.org/test/ledger-page;1";
1111 const ledger_page_name = "aaVCLedgerPageTest";
1112 const ledger_page_CID = Components.ID("{49b95893-a0e9-4e5e-9e8f-b2ab2398dccd}");
1114 function ledger_page_test(runner)
1116   runner.doCommand("cmd_report_ledger");
1117   runner.watchWindow = getFrame(runner).contentWindow;
1120 function ledger_check(runner)
1122   var result = true;
1123   if (getFrame(runner).docShell.QueryInterface(nsCI.nsIWebNavigation)
1124       .currentURI.spec != "chrome://abstract/content/ledger.xul") {
1125     runner.addJSFailure(" [ledger page] wrong xul document");
1126     return false;
1127   }
1128   var tree = getElement(runner, "ledger.tree");
1129   if (! tree) {
1130     runner.addJSFailure("[ledger page] tree view assingment");
1131     result = false;
1132   }
1133   return result;
1136 function ledger_page_check(runner)
1138   if (!ledger_check(runner)) {
1139     runner.addJSFailure("[ledger page] page out of sync");
1140     return;
1141   }
1142   var tree = getElement(runner, "ledger.tree");
1143   if (tree.view.rowCount != 6)
1144     runner.addJSFailure("[ledger page] wrong row count:" + tree.view.rowCount);
1145   if (tree.view.getCellText(0,tree.columns[0]) != "2008-02-04")
1146     runner.addJSFailure("ledger.tree.line1.col1 failed");
1147   if (tree.view.getCellText(1,tree.columns[0]) != "")
1148     runner.addJSFailure("ledger.tree.line2.col1 failed");
1149   if (tree.view.getCellText(2,tree.columns[0]) != "2008-02-05")
1150     runner.addJSFailure("ledger.tree.line3.col1 failed");
1151   if (tree.view.getCellText(3,tree.columns[0]) != "")
1152     runner.addJSFailure("ledger.tree.line4.col1 failed");
1153   if (tree.view.getCellText(4,tree.columns[0]) != "2008-02-06")
1154     runner.addJSFailure("ledger.tree.line5.col1 failed:"
1155         + tree.view.getCellText(4,tree.columns[0]));
1156   if (tree.view.getCellText(5,tree.columns[0]) != "")
1157     runner.addJSFailure("ledger.tree.line6.col1 failed");
1159   if (tree.view.getCellText(0,tree.columns[1]) != "y")
1160     runner.addJSFailure("ledger.tree.line1.col2 failed");
1161   if (tree.view.getCellText(1,tree.columns[1]) != "")
1162     runner.addJSFailure("ledger.tree.line2.col2 failed");
1163   if (tree.view.getCellText(2,tree.columns[1]) != "y")
1164     runner.addJSFailure("ledger.tree.line3.col2 failed");
1165   if (tree.view.getCellText(3,tree.columns[1]) != "")
1166     runner.addJSFailure("ledger.tree.line4.col2 failed");
1167   if (tree.view.getCellText(4,tree.columns[1]) != "x")
1168     runner.addJSFailure("ledger.tree.line5.col2 failed:"
1169         + tree.view.getCellText(4,tree.columns[1]));
1170   if (tree.view.getCellText(5,tree.columns[1]) != "")
1171     runner.addJSFailure("ledger.tree.line6.col2 failed");
1173   if (tree.view.getCellText(0,tree.columns[2]) != "300.00")
1174     runner.addJSFailure("ledger.tree.line1.col3 failed");
1175   if (tree.view.getCellText(1,tree.columns[2]) != "")
1176     runner.addJSFailure("ledger.tree.line2.col3 failed");
1177   if (tree.view.getCellText(2,tree.columns[2]) != "200.00")
1178     runner.addJSFailure("ledger.tree.line3.col3 failed");
1179   if (tree.view.getCellText(3,tree.columns[2]) != "")
1180     runner.addJSFailure("ledger.tree.line4.col3 failed");
1181   if (tree.view.getCellText(4,tree.columns[2]) != "20000.00")
1182     runner.addJSFailure("ledger.tree.line5.col3 failed:"
1183         + tree.view.getCellText(4,tree.columns[1]));
1184   if (tree.view.getCellText(5,tree.columns[2]) != "")
1185     runner.addJSFailure("ledger.tree.line6.col3 failed");