[view] Sync 'quote.rate'
[abstract.git] / app / test / aaTestAccountViews.js
blob79872a1f9c164ab72c22097528fb4486cb1b4a67
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);
160 /* Module-specific Defines and Utilities */
161 const contentId = "content";
163 /* Account Page Test */
164 const account_page_contractID = "@aasii.org/abstract/test/account-balance;1";
165 const account_page_name = "aaAccountPageTest";
166 const account_page_CID = Components.ID("{3391fcd8-e122-4e31-9162-f114fe2d843d}");
168 function account_page_test(runner)
170   runner.doCommand("cmd_report_balances");
171   runner.watchWindow = getFrame(runner).contentWindow;
174 function account_page_check(runner)
176   var tree = getElement(runner, "balances.tree");
177   var view = tree.view;
178   var date = getElement(runner, "filter.date");
179   date.value = "2008-02-06";
180   sendOnChange(date);
181   if (!tree)
182     runner.addJSFailure("[balances page] failed");
184   if (view.getCellText(0,tree.columns[3]) != "")
185     runner.addJSFailure("transcript.tree.line1.col4 failed");
186   if (view.getCellText(1,tree.columns[3]) != "100.00")
187     runner.addJSFailure("transcript.tree.line2.col4 failed");
188   if (view.getCellText(2,tree.columns[3]) != "10000.00")
189     runner.addJSFailure("transcript.tree.line3.col4 failed");
190   if (view.getCellText(3,tree.columns[3]) != "20000.00")
191     runner.addJSFailure("transcript.tree.line4.col4 failed");
192   if (view.getCellText(4,tree.columns[3]) != "")
193     runner.addJSFailure("transcript.tree.line5.col4 failed");
195   if (view.getCellText(0,tree.columns[4]) != "30000.00")
196     runner.addJSFailure("transcript.tree.line1.col4 failed");
197   if (view.getCellText(1,tree.columns[4]) != "")
198     runner.addJSFailure("transcript.tree.line2.col4 failed");
199   if (view.getCellText(2,tree.columns[4]) != "")
200     runner.addJSFailure("transcript.tree.line3.col4 failed");
201   if (view.getCellText(3,tree.columns[4]) != "")
202     runner.addJSFailure("transcript.tree.line4.col4 failed");
203   if (view.getCellText(4,tree.columns[4]) != "0.00")
204     runner.addJSFailure("transcript.tree.line5.col4 failed");
206   getElement(runner, "units.mode").selectedIndex = 1;
208   if (tree.view.getCellText(0,tree.columns[0]) != "a")
209     runner.addJSFailure("balance.tree.line1.col1 failed");
210   if (tree.view.getCellText(0,tree.columns[1]) != "K")
211     runner.addJSFailure("balance.tree.line1.col2 failed");
212   if (tree.view.getCellText(0,tree.columns[2]) != "x")
213     runner.addJSFailure("balance.tree.line1.col3 failed");
214   if (tree.view.getCellText(0,tree.columns[3]) != "")
215     runner.addJSFailure("balance.tree.line3.col4 failed");
216   if (tree.view.getCellText(0,tree.columns[4]) != "30000.00")
217     runner.addJSFailure("balance.tree.line1.col5 failed");
218   if (tree.view.getCellText(3,tree.columns[3]) != "20000.00")
219     runner.addJSFailure("balance.tree.line3.col4 failed");
221   if (getElement(runner, "footer.sumDebit").value != "40000.00")
222     runner.addJSFailure("balance.totalAssets is wrong: "
223         + getElement(runner, "footer.sumDebit").value);
224   if (getElement(runner, "footer.sumCredit").value != "40000.00")
225     runner.addJSFailure("balance.totalLiabilities is wrong: "
226         + getElement(runner, "footer.sumCredit").value);
229 /* Transcript Page Test */
230 const transcript_page_contractID = "@aasii.org/abstract/test/account-transcript;1";
231 const transcript_page_name = "aaTranscriptPageTest";
232 const transcript_page_CID = Components.ID("{d7a1753e-7d74-4f8a-940d-317d37c369ee}");
234 function transcript_page_test(runner)
236   runner.doCommand("cmd_report_transcript");
237   runner.watchWindow = getFrame(runner).contentWindow;
240 function transcript_check(runner)
242   if (! getElement(runner, "transcript.tree"))
243     runner.addJSFailure("[transcript page] tree failed");
244   if (! getElement(runner, "filter.flow"))
245     runner.addJSFailure("[transcript page] flow link failed");
248 const transcript1DateFrom = "2008-02-04";
249 const transcript1DateTo = "2008-02-06";
251 function transcript_page_check(runner)
253   transcript_check(runner);
254   var tree = getElement(runner, "transcript.tree");
255   // XXX 403202 'Unflexing' the tree speeds up reflow significantly
256   if (tree && tree.hasAttribute("flex"))
257     tree.removeAttribute("flex");
259   getElement(runner, "filter.dateFrom").value = transcript1DateFrom;
260   sendOnChange(getElement(runner, "filter.dateFrom"));
261   getElement(runner, "filter.dateTo").value = transcript1DateTo;
262   sendOnChange(getElement(runner, "filter.dateTo"));
263   if (getElement(runner, "filter.cancel").hasAttribute("collapsed"))
264     runner.addJSFailure("[transcript page] 'change' command");
267 /* ask for flow from transcript page */
268 const transcript_flow_contractID = "@aasii.org/test/transcript-flow;1";
269 const transcript_flow_name = "aaVCTranscriptFlowTest";
270 const transcript_flow_CID = Components.ID("{b4fe65f6-c55e-491c-a039-27c0beff12cc}");
272 function transcript_flow_test(runner)
274   sendOnClick(getElement(runner, "filter.flow"));
275   runner.watchWindow = getFrame(runner).contentWindow;
278 const tf_discard_contractID = "@aasii.org/test/transcript-flow-discard;1";
279 const tf_discard_name = "aaVCTranscriptFlowDiscardTest";
280 const tf_discard_CID = Components.ID("{a122d947-3fb2-4796-87fe-22c67706bd9a}");
282 function transcript_flow_discard_check(runner)
284   transcript_check(runner);
285   if (getElement(runner, "filter.flow").value != "click to choose")
286     runner.addJSFailure("[transcript->flow] discard failed");
289 const tf_submit_contractID = "@aasii.org/test/transcript-flow-submit;1";
290 const tf_submit_name = "aaVCTranscriptFlowSubmitTest";
291 const tf_submit_CID = Components.ID("{3197a8bb-1fd1-453e-98d8-6bc7996552a5}");
293 function transcript_flow_submit_check(runner)
295   transcript_check(runner);
296   if (getElement(runner, "filter.flow").value != "b")
297     runner.addJSFailure("[transcript->flow] submit failed");
300 /* submit/discard from flow page */
301 function flow_select_check(runner)
303   flow_check(runner);
304   var tree = getElement(runner, "page1.tree");
305   // XXX 403202 'Unflexing' the tree speeds up reflow significantly
306   if (tree && tree.hasAttribute("flex"))
307     tree.removeAttribute("flex");
309   if (getAnnoElement(runner, "header", "header.discard")
310       .getAttribute("collapsed") == "true")
311     runner.addJSFailure("flow.discard button should be visible");
312   if (getAnnoElement(runner, "header", "header.submit")
313       .getAttribute("collapsed") == "true")
314     runner.addJSFailure("flow.submit button should be visible");
315   if (getElement(runner, "cmd_page1_discard")
316       .getAttribute("disabled") == "true")
317     runner.addJSFailure("flow_discard command should be enabled");
318   if (getElement(runner, "cmd_page1_submit")
319       .getAttribute("disabled") == "true")
320     runner.addJSFailure("flow_submit command should be enabled");
323 function flow_discard_test(runner)
325   getElement(runner,"page1.tree").view.selection.select(this.item);
326   runner.doCommand("cmd_page1_discard");
327   runner.watchWindow = getFrame(runner).contentWindow;
330 function flow_submit_test(runner)
332   if (this.item < 0)
333     this.item = getElement(runner, "page1.tree").view.rowCount + this.item;
334   getElement(runner,"page1.tree").view.selection.select(this.item);
335   runner.doCommand("cmd_page1_submit");
336   runner.watchWindow = getFrame(runner).contentWindow;
339 function flow_last_line_check(runner)
341   var tree = getElement(runner, "page1.tree");
342   var view = tree.view;
343   if (view.getCellText(view.rowCount - 1, tree.columns[0])
344       != "profit and loss")
345     runner.addJSFailure("[flow page] wrong tag on the last line");
348 /* Transcript Load Test */
349 const transcript_load_contractID = "@aasii.org/abstract/test/transcript-load;1";
350 const transcript_load_name = "aaTranscriptLoadTest";
351 const transcript_load_CID = Components.ID("{335e1a8e-f8a0-4a9d-850b-0404cd2db9e5}");
353 function transcript_load_test(runner)
355   var loadLnk = getElement(runner, "transcript.load");
356   var startDate = getElement(runner, "filter.dateFrom");
357   var endDate = getElement(runner, "filter.dateTo");
358   var tree = getElement(runner, "transcript.tree");
359   var view = tree.view.QueryInterface(nsCI.nsITreeView);
360   
361   sendOnClick(loadLnk);
363   if (getElement(runner, "filter.group").getAttribute("collapsed") != "true")
364     runner.addJSFailure("[transcript load] filter not hidden");
366   if (getElement(runner, "header.flow").value != "b")
367     runner.addJSFailure("[transcript load] wrong flow: "
368         + getElement(runner, "header.flow").value);
369   if (getElement(runner, "header.dateFrom").value != transcript1DateFrom)
370     runner.addJSFailure("[transcript load] [1] wrong 'from' date");
371   if (getElement(runner, "header.sumDebitFrom").value != "0.00")
372     runner.addJSFailure("[transcript load] [1] wrong 'from' debit");
373   if (getElement(runner, "header.sumCreditFrom").value != "0.00")
374     runner.addJSFailure("[transcript load] [1] wrong 'from' credit");
375   if (getElement(runner, "header.dateTo").value != transcript1DateTo)
376     runner.addJSFailure("[transcript load] [1] wrong 'to' date");
377   if (getElement(runner, "header.sumDebits").value != "300.00")
378     runner.addJSFailure("[transcript load] [1] wrong total debit");
379   if (getElement(runner, "header.sumCredits").value != "200.00")
380     runner.addJSFailure("[transcript load] [1] wrong total credit");
381   if (getElement(runner, "header.sumDebitTo").value != "100.00")
382     runner.addJSFailure("[transcript load] [1] wrong 'to' debit");
383   if (getElement(runner, "header.sumCreditTo").value != "0.00")
384     runner.addJSFailure("[transcript load] [1] wrong 'to' credit");
386   if (view.getCellText(0,tree.columns[0]) != "2008-02-04")
387     runner.addJSFailure("transcript.tree.line1.col1 failed");
388   if (view.getCellText(1,tree.columns[0]) != "2008-02-05")
389     runner.addJSFailure("transcript.tree.line2.col1 failed");
391   if (view.getCellText(0,tree.columns[1]) != "a")
392     runner.addJSFailure("transcript.tree.line1.col2 failed");
393   if (view.getCellText(1,tree.columns[1]) != "c")
394     runner.addJSFailure("transcript.tree.line2.col2 failed");
396   if (view.getCellText(0,tree.columns[2]) != "300.00")
397     runner.addJSFailure("transcript.tree.line1.col3 failed");
398   if (view.getCellText(1,tree.columns[2]) != "")
399     runner.addJSFailure("transcript.tree.line2.col3 failed");
401   if (view.getCellText(0,tree.columns[3]) != "")
402     runner.addJSFailure("transcript.tree.line1.col4 failed");
403   if (view.getCellText(1,tree.columns[3]) != "200.00")
404     runner.addJSFailure("transcript.tree.line2.col4 failed");
406   getElement(runner, "units.mode").selectedIndex = 1;
408   if (view.getCellText(0,tree.columns[2]) != "30000.00")
409     runner.addJSFailure("transcript.tree.line1.col3 failed");
410   if (view.getCellText(1,tree.columns[2]) != "")
411     runner.addJSFailure("transcript.tree.line2.col3 failed");
413   if (view.getCellText(0,tree.columns[3]) != "")
414     runner.addJSFailure("transcript.tree.line1.col4 failed");
415   if (view.getCellText(1,tree.columns[3]) != "20000.00")
416     runner.addJSFailure("transcript.tree.line2.col4 failed");
418   /* Test for bug #133 */
419   if (getElement(runner, "header.sumDebitTo").value != "10000.00")
420     runner.addJSFailure("[transcript load] [1] wrong 'to' debit");
421   if (getElement(runner, "header.sumCreditTo").value != "0.00")
422     runner.addJSFailure("[transcript load] [1] wrong 'to' credit");
424   if (getElement(runner, "header.sumDebits").value != "30000.00")
425     runner.addJSFailure("[transcript load] [1] wrong total debit");
426   if (getElement(runner, "header.sumCredits").value != "20000.00")
427     runner.addJSFailure("[transcript load] [1] wrong total credit");
430 /* Tests for Flow-in-Transcript-Selection bug #122 */
431 const transcript_after_flow_contractID = "@aasii.org/abstract/test/trasncript-after-flow;1";
432 const transcript_after_flow_name = "aaTranscriptAfterFlowP1";
433 const transcript_after_flow_CID = Components.ID("{b9c0df9d-6036-43c7-b0b4-d4e2f3092601}");
435 function transcript_after_flow_test(runner)
437   var flows = getFrame(runner).docShell.QueryInterface(nsCI.nsIWebNavigation)
438     .sessionHistory.createQuery("@aasii.org/storage/load-flow;1")
439     .QueryInterface(nsCI.aaILoadQuery);
440   flows.load();
441   getFrame(runner).contentWindow.wrappedJSObject.gView.report.flow = flows
442     .queryElementAt(3, nsCI.aaIFlow);
444   var tree = getElement(runner, "transcript.tree");
445   var view = tree.view.QueryInterface(nsCI.nsITreeView);
446   
447   if (view.getCellText(0,tree.columns[1]) != "a")
448     runner.addJSFailure("transcript.tree.line3.col2 failed");
451 /* Tests for income-flow display */
452 const transcript_income_flow_contractID = "@aasii.org/abstract/test/trasncript-income-flow;1";
453 const transcript_income_flow_name = "aaTranscriptIncomeFlowP1";
454 const transcript_income_flow_CID = Components.ID("{07f18646-a3be-4ab5-9edd-7b2b899f00b8}");
456 function transcript_income_flow_test(runner)
458   var loadLnk = getElement(runner, "transcript.load");
459   var startDate = getElement(runner, "filter.dateFrom");
460   var endDate = getElement(runner, "filter.dateTo");
461   var tree = getElement(runner, "transcript.tree");
462   var view = tree.view.QueryInterface(nsCI.nsITreeView);
463   
464   getFrame(runner).contentWindow.wrappedJSObject.gView.report.flow =
465     Components.classes["@aasii.org/base/income-flow;1"]
466     .createInstance(nsCI.aaIFlow);
468   startDate.value = "2008-02-04";
469   endDate.value = "2008-02-06";
471   sendOnClick(loadLnk);
473   if (getElement(runner, "header.dateFrom").value != "2008-02-04")
474     runner.addJSFailure("[transcript load] [2] wrong 'from' date");
475   if (getElement(runner, "header.sumDebitFrom").value != "0.00")
476     runner.addJSFailure("[transcript load] [2] wrong 'from' debit");
477   if (getElement(runner, "header.sumCreditFrom").value != "0.00")
478     runner.addJSFailure("[transcript load] [2] wrong 'from' credit");
479   if (getElement(runner, "header.dateTo").value != "2008-02-06")
480     runner.addJSFailure("[transcript load] [2] wrong 'to' date");
481   if (getElement(runner, "header.sumDebitTo").value != "0.00")
482     runner.addJSFailure("[transcript load] [2] wrong 'to' debit");
483   if (getElement(runner, "header.sumCreditTo").value != "10000.00")
484     runner.addJSFailure("[transcript load] [2] wrong 'to' credit");
485   if (view.rowCount != 1)
486     runner.addJSFailure("[transcript load] [2] line count");
488   if (view.getCellText(0,tree.columns[0]) != "2008-02-05")
489     runner.addJSFailure("transcript.tree.line1.col1 failed");
491   if (view.getCellText(0,tree.columns[1]) != "c")
492     runner.addJSFailure("transcript.tree.line1.col2 failed");
494   if (view.getCellText(0,tree.columns[2]) != "")
495     runner.addJSFailure("transcript.tree.line1.col3 failed");
497   if (view.getCellText(0,tree.columns[3]) != "10000.00")
498     runner.addJSFailure("transcript.tree.line1.col4 failed");
501 /* Chart Page Test */
502 const chart_page_contractID = "@aasii.org/abstract/test/account-chart;1";
503 const chart_page_name = "aaChartPageTest";
504 const chart_page_CID = Components.ID("{9166dd77-6add-4104-a75e-cbdc41c6d3df}");
506 function chart_page_test(runner)
508   runner.doCommand("cmd_manage_chart");
509   runner.watchWindow = getFrame(runner).contentWindow;
512 function chart_sync_check(runner)
514   var result = true;
515   var wnd = getFrame(runner).contentWindow.wrappedJSObject;
516   var chart = wnd.gView.chart;
517   var loaded = wnd.gLoaded;
518   if (! chart) {
519     runner.addJSFailure(" no chart object");
520     return false;
521   }
523   if (chart.resource && chart.resource.tag
524       != getElement(runner, "chart.resource").value)
525     runner.addJSFailure(" chart.resource is wrong");
527   if ( loaded ^ getElement(runner, "chart.set").hasAttribute("collapsed")) {
528     runner.addJSFailure(" chart.set command out of sync");
529     result = false;
530   }
532   return result;
535 function chart_check(runner)
537   var result = true;
538   if (getFrame(runner).contentWindow.location.href !=
539       "chrome://abstract/content/chart.xul") {
540     runner.addJSFailure(" [chart] wrong xul document");
541     return false;
542   }
544   if ( ! chart_sync_check(runner) )
545     return false;
547   return result;
550 function chart_page_check(runner)
552   if (! chart_check(runner))
553     runner.addJSFailure("[chart page]");
556 /* ask for resource from chart page */
557 const chart_resource_contractID = "@aasii.org/test/chart-resource;1";
558 const chart_resource_name = "aaVCChartResourceTest";
559 const chart_resource_CID = Components.ID("{0a83a675-ebbd-4796-9147-5a423b83d20b}");
561 function chart_resource_test(runner)
563   sendOnClick(getElement(runner, "chart.resource"));
564   runner.watchWindow = getFrame(runner).contentWindow;
567 const chart_resource_submit_contractID = "@aasii.org/test/chart-resource-submit;1";
568 const chart_resource_submit_name = "aaVCChartResourceSubmitTest";
569 const chart_resource_submit_CID = Components.ID("{5b81d3f1-55a1-4f37-b608-992d8f094741}");
571 function chart_resource_submit_check(runner)
573   if (! chart_check(runner))
574     runner.addJSFailure("[chart->resource] wrong page init");
576   if (getElement(runner, "chart.resource").value != "x")
577     runner.addJSFailure("[chart->resource] submit failed: "
578         + getElement(runner, "chart.resource").value);
580   sendOnClick(getElement(runner, "chart.set"));
581   if ( ! chart_sync_check(runner))
582     runner.addJSFailure("[chart->date] out of sync");
585 /* Transfer Page Test */
586 const transfer_page_contractID = "@aasii.org/abstract/test/account-transfer;1";
587 const transfer_page_name = "aaTransferPageTest";
588 const transfer_page_CID = Components.ID("{950daefb-95ba-4960-a11a-b88af6cf6cad}");
590 function transfer_page_test(runner)
592   runner.doCommand("cmd_process_transfer");
593   runner.watchWindow = getFrame(runner).contentWindow;
596 function transfer_sync_check(runner)
598   var wnd = getFrame(runner).contentWindow.wrappedJSObject;
599   var result = true;
600   if (! wnd) {
601     runner.addJSFailure("[transfer sync] getting window");
602     return false;
603   }
605   if (! wnd.gFact) {
606     runner.addJSFailure("[transfer sync] getting fact object");
607     return false;
608   }
610   if (getElement(runner, "transfer.fromFlow").value != (wnd.gFact.takeFrom ? 
611         wnd.gFact.takeFrom.tag : "click to choose")) {
612     runner.addJSFailure("  'fromFlow.tag' is wrong:" + getElement(runner,
613           "transfer.fromFlow").value);
614     result = false;
615   }
617   if (getElement(runner, "transfer.toFlow").value != (wnd.gFact.giveTo ? 
618         wnd.gFact.giveTo.tag : "click to choose")) {
619     runner.addJSFailure("  'toFlow.tag' is wrong: " + getElement(runner,
620           "transfer.toFlow").value);
621     result = false;
622   }
624   if (getElement(runner, "transfer.amount").value != wnd.gFact.amount) {
625     runner.addJSFailure("  'amount' is wrong: " + getElement(runner,
626           "transfer.amount").value);
627     result = false;
628   }
630   var time = new Date(wnd.gEvent.time / 1000);
631   if (getElement(runner, "transfer.date").value != time
632       .toLocaleFormat('%Y-%m-%d')) {
633     runner.addJSFailure("  'date' is wrong: " + getElement(runner,
634           "transfer.date").value + " - " + time.toLocaleFormat('%Y-%m-%d'));
635     result = false;
636   }
638   if ((wnd.gTransaction && (getElement(runner, "transfer.value").value
639         != wnd.gTransaction.value.toFixed(2))) || !wnd.gTransaction
640       && (getElement(runner, "transfer.value").value != "")) {
641       runner.addJSFailure("  'value' is wrong: " + getElement(runner,
642             "transfer.value").value);
643       result = false;
644   }
646   return result;
649 function transfer_check(runner)
651   var result = true;
652   if (getFrame(runner).docShell.QueryInterface(nsCI.nsIWebNavigation)
653       .currentURI.spec != "chrome://abstract/content/transfer.xul") {
654     runner.addJSFailure(" [transfer] wrong xul document");
655     return false;
656   }
657   if (! transfer_sync_check(runner)) {
658     runner.addJSFailure(" [transfer] page out of sync");
659     result = false;
660   }
662   return result;
665 function transfer_page_check(runner)
667   if (! transfer_check(runner))
668     runner.addJSFailure("[transfer page] wrong initialization");
670   if (getElement(runner, "transfer.amount").value != "0")
671     runner.addJSFailure("  'amount' is wrong: " + getElement(runner,
672           "transfer.amount").value);
674   var junk = Components.classes["@aasii.org/base/flow;1"].createInstance(nsCI.aaIFlow);
675   junk.tag = "junk";
676   var wnd = getFrame(runner).contentWindow.wrappedJSObject;
677   wnd.gFact.takeFrom = junk;
678   wnd.gFact.giveTo = junk;
681 /* ask for 'from' flow from transfer page */
682 const transfer_from_contractID = "@aasii.org/test/transfer-from;1";
683 const transfer_from_name = "aaVCTransferFromTest";
684 const transfer_from_CID = Components.ID("{7ad5abf7-53b9-468d-b50c-4d9614a9dc14}");
686 function transfer_from_test(runner)
688   sendOnClick(getElement(runner, "transfer.fromFlow"));
689   runner.watchWindow = getFrame(runner).contentWindow;
692 const transfer_from_discard_contractID = "@aasii.org/test/transfer-from-discard;1";
693 const transfer_from_discard_name = "aaVCTransferFromDiscardTest";
694 const transfer_from_discard_CID = Components.ID("{ca063e94-1b9c-4e53-bf25-9fa8af605def}");
696 function transfer_from_discard_check(runner)
698   if (! transfer_check(runner))
699     runner.addJSFailure("[transfer->fromFlow] wrong init");
701   if (getElement(runner, "transfer.fromFlow").value != "junk")
702     runner.addJSFailure("[transfer->fromFlow] discard failed");
705 const transfer_from_submit_contractID = "@aasii.org/test/transfer-from-submit;1";
706 const transfer_from_submit_name = "aaVCTransferFromSubmitTest";
707 const transfer_from_submit_CID = Components.ID("{aaf7ec49-e9aa-45a8-b630-56b6659fa6ad}");
709 function transfer_from_submit_check(runner)
711   if (! transfer_check(runner))
712     runner.addJSFailure("[transfer->fromFlow] wrong page init");
714   if (getElement(runner, "transfer.fromFlow").value != "a")
715     runner.addJSFailure("[transfer->fromFlow] submit failed:"
716         + getElement(runner, "transfer.fromFlow").value);
719 /* ask for 'to' flow from transfer page */
720 const transfer_to_contractID = "@aasii.org/test/transfer-to;1";
721 const transfer_to_name = "aaVCTransferToTest";
722 const transfer_to_CID = Components.ID("{3c13bbbd-927b-4b67-be0a-2f80691bed1e}");
724 function transfer_to_test(runner)
726   sendOnClick(getElement(runner, "transfer.toFlow"));
727   runner.watchWindow = getFrame(runner).contentWindow;
730 const transfer_to_discard_contractID = "@aasii.org/test/transfer-to-discard;1";
731 const transfer_to_discard_name = "aaVCTransferToDiscardTest";
732 const transfer_to_discard_CID = Components.ID("{a04d7093-663b-4c24-9c96-028c67b89df3}");
734 function transfer_to_discard_check(runner)
736   if (! transfer_check(runner))
737     runner.addJSFailure("[transfer->toFlow] wrong init");
739   if (getElement(runner, "transfer.toFlow").value != "junk")
740     runner.addJSFailure("[transfer->toFlow] discard failed");
743 const transfer_to_create_contractID = "@aasii.org/test/transfer-to-create;1";
744 const transfer_to_create_name = "aaVCTransferToCreateTest";
745 const transfer_to_create_CID = Components.ID("{4c2eed92-0acd-4a60-9003-13e558ce961e}");
747 function transfer_to_create_test(runner)
749   flow_last_line_check(runner);
750   runner.doCommand("cmd_page1_new");
751   runner.doCommand("cmd_flow_give");
752   runner.watchWindow = getFrame(runner).contentWindow;
755 const subflow_give_submit_contractID = "@aasii.org/test/subflow-give-submit;1";
756 const subflow_give_submit_name = "aaVCSubflowGiveSubmitTest";
757 const subflow_give_submit_CID = Components.ID("{9daed633-4b08-4220-8931-4152f7bc5066}");
759 const subflow_take_submit_contractID = "@aasii.org/test/subflow-take-submit;1";
760 const subflow_take_submit_name = "aaVCSubflowtakeSubmitTest";
761 const subflow_take_submit_CID = Components.ID("{6b652c77-8368-42ca-9768-8376bad338ae}");
763 const subflow_take_select_contractID = "@aasii.org/test/subflow-take-select;1";
764 const subflow_take_select_name = "aaVCSubflowtakeSelectTest";
765 const subflow_take_select_CID = Components.ID("{479b48f0-a20f-488d-b219-dbfee74b15bd}");
767 const subflow_entity_submit_contractID = "@aasii.org/test/subflow-entity-submit;1";
768 const subflow_entity_submit_name = "aaVCSubflowGiveSubmitTest";
769 const subflow_entity_submit_CID = Components.ID("{316884a0-4623-4c49-b214-819bc7b98bc6}");
771 const subflow_entity_select_contractID = "@aasii.org/test/subflow-entity-select;1";
772 const subflow_entity_select_name = "aaVCSubflowGiveSelectTest";
773 const subflow_entity_select_CID = Components.ID("{63ecefa6-b153-4d83-a812-f23ae777d0f0}");
775 const transfer_to_submit_contractID = "@aasii.org/test/transfer-to-submit;1";
776 const transfer_to_submit_name = "aaVCTransferToSubmitTest";
777 const transfer_to_submit_CID = Components.ID("{dbd1150c-c80c-4a95-8a02-2906c0d06dd3}");
779 function transfer_to_submit_test(runner)
781   getElement(runner, "flow.tag").value = "b";
782   sendOnInput(getElement(runner, "flow.tag"));
784   getElement(runner, "flow.rate").value = "1.0";
785   sendOnInput(getElement(runner, "flow.rate"));
787   runner.doCommand("cmd_page1_save");
788   add_flow_when_selecting_check(runner);
789   if (this.item < 0)
790     this.item = getElement(runner, "page1.tree").view.rowCount + this.item;
791   getElement(runner,"page1.tree").view.selection.select(this.item);
792   runner.doCommand("cmd_page1_submit");
793   runner.watchWindow = getFrame(runner).contentWindow;
796 const transfer_save_contractID = "@aasii.org/test/transfer-save;1";
797 const transfer_save_name = "aaVCTransferSaveTest";
798 const transfer_save_CID = Components.ID("{bcb12042-4b82-4e71-949b-228b444e344c}");
800 function transfer_save_test(runner)
802   var amount = getElement(runner, "transfer.amount");
803   amount.value = "300";
804   sendOnInput(amount);
805   if (! transfer_sync_check(runner))
806     runner.addJSFailure("[transfer save] page out of sync");
807   var date = getElement(runner, "transfer.date");
808   date.value = "2008-02-04";
809   sendOnChange(date);
810   if (! transfer_sync_check(runner))
811     runner.addJSFailure("[transfer save] page out of sync");
813   var commit = getElement(runner, "transfer.commit");
814   sendOnClick(commit);
815   if (! transfer_sync_check(runner))
816     runner.addJSFailure("[transfer save] page out of sync");
817   var value = getElement(runner, "transfer.value");
818   if (value.value != "30000.00")
819     runner.addJSFailure("[transfer save] wrong value:" + value.value);
820   var earnings = getElement(runner, "transfer.earnings");
821   if (earnings.value != "")
822     runner.addJSFailure("[transfer save] wrong earnings:" + earnings.value);
823   if (getElement(runner,"transfer.commit").getAttribute("disabled") != "true")
824     runner.addJSFailure("[transfer save] 'commit' not disabled");
825   var reset = getElement(runner, "transfer.reset");
826   sendOnClick(reset);
827   if (getElement(runner,"transfer.commit").hasAttribute("disabled"))
828     runner.addJSFailure("[transfer save] 'commit' not enabled");
830   sendOnClick(getElement(runner, "transfer.fromFlow"));
831   runner.watchWindow = getFrame(runner).contentWindow;
834 function submit_after_reset_check(runner)
836   var amount = getElement(runner, "transfer.amount");
837   var date = getElement(runner, "transfer.date");
838   var commit = getElement(runner, "transfer.commit");
839   var value = getElement(runner, "transfer.value");
840   var earnings = getElement(runner, "transfer.earnings");
841   var reset = getElement(runner, "transfer.reset");
843   if (getElement(runner, "transfer.fromFlow").value != "b")
844     runner.addJSFailure("submit after reset failed:"
845         + getElement(runner, "transfer.fromFlow").value);
846   /* Prepare direct database access */
847   var wnd = getFrame(runner).contentWindow.wrappedJSObject;
848   var session = getFrame(runner).docShell.QueryInterface(nsCI.nsIWebNavigation)
849     .sessionHistory;
850   var entities = session.createQuery("@aasii.org/storage/load-entity;1")
851     .QueryInterface(nsCI.aaILoadQuery);
852   entities.load();
853   var resources = session.createQuery("@aasii.org/storage/load-resource;1")
854     .QueryInterface(nsCI.aaILoadQuery);
855   resources.load();
856   var flow = Components.classes["@aasii.org/base/flow;1"]
857     .createInstance(nsCI.aaIFlow);
859   /* Create flow 'c' */
860   flow.tag = "c";
861   flow.entity = entities.queryElementAt(2, nsCI.aaIEntity);
862   flow.giveResource = resources.queryElementAt(1, nsCI.aaIResource);
863   flow.takeResource = resources.queryElementAt(0, nsCI.aaIResource);
864   flow.rate = 150;
865   session.save(flow, null);
867   /* Create flow 'd' */
868   flow = Components.classes["@aasii.org/base/flow;1"]
869     .createInstance(nsCI.aaIFlow);
870   flow.tag = "d";
871   flow.entity = entities.queryElementAt(3, nsCI.aaIEntity);
872   flow.giveResource = resources.queryElementAt(0, nsCI.aaIResource);
873   flow.takeResource = resources.queryElementAt(0, nsCI.aaIResource);
874   flow.rate = 1;
875   session.save(flow, null);
877   /* Load flows */
878   var flows = session.createQuery("@aasii.org/storage/load-flow;1")
879     .QueryInterface(nsCI.aaILoadQuery);
880   flows.load();
882   /* Add transfer 'b'->'c' of 200 */
883   //wnd.gFact.takeFrom = flows.queryElementAt(1, nsCI.aaIFlow);
884   wnd.gFact.giveTo = flows.queryElementAt(2, nsCI.aaIFlow);
885   amount.value = "200";
886   sendOnInput(amount);
887   date.value = "2008-02-05";
888   sendOnChange(date);
889   sendOnClick(commit);
890   if (value.value != "20000.00")
891     runner.addJSFailure("[transfer save] wrong value:" + value.value);
892   if (earnings.value != "10000.00")
893     runner.addJSFailure("[transfer save] wrong earnings:" + earnings.value);
894   sendOnClick(reset);
896   /* Add transfer 'c'->'d' of 20000 */
897   wnd.gFact.takeFrom = flows.queryElementAt(2, nsCI.aaIFlow);
898   wnd.gFact.giveTo = flows.queryElementAt(3, nsCI.aaIFlow);
899   amount.value = "20000";
900   sendOnInput(amount);
901   date.value = "2008-02-06";
902   sendOnChange(date);
903   sendOnClick(commit);
904   if (value.value != "20000.00")
905     runner.addJSFailure("[transfer save] wrong value:" + value.value);
906   if (earnings.value != "")
907     runner.addJSFailure("[transfer save] wrong earnings:" + earnings.value);
910 const submit_after_reset_contractID = "@aasii.org/test/submit-after-reset;1";
911 const submit_after_reset_name = "aaVCTransferToSubmitAfterReset";
912 const submit_after_reset_CID = Components.ID("{412fc32b-1aed-4efa-8456-ae5a4c2ef29a}");
914 /* test for bug 128 */
915 function add_flow_when_selecting_check(runner)
917   var tree = getElement(runner, "page1.tree");
918   var view = tree.view;
919   
920   if (getElement(runner, "page1.browseSet").hasAttribute("disabled"))
921     runner.addJSFailure("edit status - bug 128 regression");
922   if (view.getCellText(view.selection.currentIndex,tree.columns[0])
923       != "b")
924     runner.addJSFailure("selection - bug 128 regression");
925   tree.view.selection.select(0);
926   if (getElement(runner, "flow.rate").value != "0.01")
927     runner.addJSFailure("rate switch - bug 129 regression");
930 /* test for rate change page */
931 const rate_page_contractID = "@aasii.org/test/rate-page;1";
932 const rate_page_name = "aaVCRatePageTest";
933 const rate_page_CID = Components.ID("{cb01568d-1fb2-4ea9-a468-8d00b50b4c65}");
935 function rate_sync_check(runner)
937   var wnd = getFrame(runner).contentWindow.wrappedJSObject;
938   var result = true;
939   if (! wnd) {
940     runner.addJSFailure("[rate sync] getting window");
941     return false;
942   }
944   var details = wnd.gDetails;
945   if (! details) {
946     runner.addJSFailure("[rate sync] details object is null");
947     return false;
948   }
950   var quote;
951   if (details.buffer)
952     quote = details.buffer;
953   else if (details._item)
954     quote = details._item;
955   
956   var resourceBox = details._resource;
957   var dateBox = details._date;
958   var rateBox = details._rate;
959   if (!quote) {
960     if (resourceBox.value != "click to choose") {
961       runner.addJSFailure("[rate sync] resource.tag is wrong: "
962           + resourceBox.value);
963       result = false;
964     }
965     if (rateBox.value != "") {
966       runner.addJSFailure("[rate sync] rate is wrong: "
967           + rateBox.value);
968       result = false;
969     }
970     return result;
971   }
972   quote = quote.QueryInterface(nsCI.aaIQuote);
973   var date = new Date(quote.time / 1000);
974   if (dateBox.value != date.toLocaleFormat('%Y-%m-%d')) {
975     runner.addJSFailure("[rate sync] date is wrong: "
976         + date);
977     result = false;
978   }
979   if (rateBox.value != quote.rate) {
980     runner.addJSFailure("[rate sync] rate is wrong: "
981         + quote.rate);
982     result = false;
983   }
985   return result;
988 function rate_page_test(runner)
990   runner.doCommand("cmd_manage_rate");
991   runner.watchWindow = getFrame(runner).contentWindow;
994 function rate_page_check(runner)
996   if (getFrame(runner).docShell.QueryInterface(nsCI.nsIWebNavigation)
997       .currentURI.spec != "chrome://abstract/content/rate.xul") {
998     runner.addJSFailure(" [rate page] wrong xul document");
999   }
1000   var tree = getElement(runner, "page1.tree");
1001   if (! tree.view.QueryInterface(nsCI.aaIDataTreeView))
1002     runner.addJSFailure("[rate page] tree view assingment");
1003   if (tree.view.rowCount != 0)
1004     runner.addJSFailure("[rate page] tree not empty");
1005   if (! rate_sync_check(runner))
1006     runner.addJSFailure("[rate page] page out of sync");
1007   runner.doCommand("cmd_page1_new");
1008   if (! rate_sync_check(runner))
1009     runner.addJSFailure("[rate page] page out of sync");
1010   var date = getElement(runner, "quote.date");
1011   date.value = "2008-02-06";
1012   sendOnChange(date);
1013   if (! rate_sync_check(runner))
1014     runner.addJSFailure("[rate page] page out of sync");
1015   var rate = getElement(runner, "quote.rate");
1016   rate.value = "1.5";
1017   sendOnInput(rate);
1018   if (! rate_sync_check(runner))
1019     runner.addJSFailure("[rate page] page out of sync");