xpunit: added exported symbols to test system
[abstract.git] / app / test / aaTestVC.js
blob6ed631f247511ddd55c5d516ae7239aa98d99b02
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 //var testStorageFile = Components.interfaces.nsIFile;
22 var mFile = Components.interfaces.nsIFile;
24 const nsCI                   = Components.interfaces
25 const moduleName             = "aaVCTest";
26 const moduleCID              = "{c23f7275-3b2f-432a-b2fe-c560b7b0a069}";
27 const moduleContractID       = "@aasii.org/abstract/test/vc-base;1";
29 Components.utils.import("resource:///modules/aaTestVC.jsm");
30 Components.utils.import("resource:///modules/aaUITestUtils.jsm");
31 Components.utils.import("resource:///modules/aaUITestFrame.jsm");
34  * Module entry point
35  * The NSGetModule function is the magic entry point that XPCOM uses to find
36  * what XPCOM components this module provides
37  */
38 function NSGetModule(comMgr, fileSpec)
40   var loader = Components.classes["@mozilla.org/moz/jssubscript-loader;1"]
41     .getService(Components.interfaces.mozIJSSubScriptLoader);
42   loader.loadSubScript("resource:///modules/nsTestFrame.jsm");
43   loader.loadSubScript("resource:///modules/aaTestNames.jsm");
45   var aaVCTestModule = JSTestModule();
46   aaVCTestModule.init = ModuleInit;
47   aaVCTestModule.init();
48   return aaVCTestModule;
51 function ModuleInit()
53   var i = 0;
54   this._name = moduleName;
55   this._CID = Components.ID(moduleCID);
56   this._contractID = moduleContractID;
58   /*  0 */
59   this._add(start_CID, start_contractID, start_name,
60       start_page_test, start_page_check);
61   /*  1 */ i++;
62   this._add(open_storage_CID, open_storage_contractID, open_storage_name,
63       open_storage_test, null);
64   /* 21 */ i++;
65   this._add(close_storage_CID, close_storage_contractID, close_storage_name,
66       close_storage_test, null);
67   /*  2 */ i++;
68   this._add(top_CID, top_contractID, top_name, top_test, top_check);
69   /*  3 */ i++;
70   this._add(show_entity_CID, show_entity_contractID, show_entity_name,
71       show_entity_test, entity_check);
72   /*  4 */ i++;
73   this._add(entity_CID, entity_contractID, entity_name, entity_test, null);
74   /*  5 */ i++;
75   this._add(show_resource_CID, show_resource_contractID, show_resource_name,
76       show_resource_test, show_resource_check);
77   /*  6 */ i++;
78   this._add(resource_CID, resource_contractID, resource_name, resource_test, null);
79   /*  7 */ i++;
80   this._add(flow_CID, flow_contractID, flow_name, flow_test, flow_page_check);
81   /*  8 */ i++;
82   this._add(flow_entity_CID, flow_entity_contractID, flow_entity_name,
83       flow_entity_test, entity_select_check);
84   /*  9 */ i++;
85   this._add(entity_discard_CID, entity_discard_contractID, entity_discard_name,
86       entity_discard_test, entity_discard_check);
87   /*  10 */ i++;
88   this._repeat(i-2);
89   /*  11 */ i++;
90   this._add(entity_submit_CID, entity_submit_contractID, entity_submit_name,
91       entity_submit_test, entity_submit_check);
92   this._tests[i].item = 0;
93   /* 12 */ i++;
94   this._add(flow_give_CID, flow_give_contractID, flow_give_name,
95       flow_give_test, resource_select_check);
96   /* 13 */ i++;
97   this._add(give_discard_CID, give_discard_contractID, give_discard_name,
98       resource_discard_test, give_discard_check);
99   /* 14 */ i++;
100   this._repeat(i-2);
101   /* 15 */ i++;
102   this._add(give_submit_CID, give_submit_contractID, give_submit_name,
103       resource_submit_test, give_submit_check);
104   /* 16 */ i++;
105   this._add(flow_take_CID, flow_take_contractID, flow_take_name,
106       flow_take_test, resource_select_check);
107   /* 17 */ i++;
108   this._add(take_discard_CID, take_discard_contractID, take_discard_name,
109       resource_discard_test, take_discard_check);
110   /* 18 */ i++;
111   this._repeat(i-2);
112   /* 19 */ i++;
113   this._add(take_submit_CID, take_submit_contractID, take_submit_name,
114       resource_submit_test, take_submit_check);
115   this._tests[i].item = 1;
116   /* 20 */ i++;
117   this._add(flow_save_CID, flow_save_contractID, flow_save_name,
118       flow_save_test, null);
121 /* Module-specific Defines and Utilities */
122 var contentId = "content";
123 var treeId = "page1.tree";
124 var gItem = -1;
126 /* Top Window Test */
127 const top_contractID = "@aasii.org/abstract/test/vc-top;1";
128 const top_name = "aaVCTopTest";
129 const top_CID = Components.ID("{5274ac84-fc9c-4bf9-9689-0a89f5638e1c}");
131 function top_test(runner)
133   var manager = Components.classes["@aasii.org/storage/manager;1"]
134     .createInstance(nsCI.aaIManager);
136   if (!runner.hasWindow) 
137     runner.watchWindow = runner.testWindow;
138   else
139     this.notify();
142 function top_check(runner)
146 /* 'cmd_show1' Test */
147 const show_entity_contractID = "@aasii.org/abstract/test/show-entity;1";
148 const show_entity_name = "aaVCShow1Test";
149 const show_entity_CID = Components.ID("{8a57485e-fed0-4eed-ab93-5f9c01aacbe8}");
151 function show_entity_test(runner)
153   runner.doCommand("cmd_view_entity");
154   runner.watchWindow = getFrame(runner).contentWindow;
157 /* page1 Test */
158 const entity_contractID = "@aasii.org/abstract/test/entity;1";
159 const entity_name = "aaVCPage1OnSelectTest";
160 const entity_CID = Components.ID("{213e5e73-f6d7-42c4-9d04-746fd6d7f01a}");
162 function entity_test(runner)
164   var tree = getElement(runner,treeId);
165   var box = getElement(runner, entityTagId);
167   if (getAnnoElement(runner, "header", "header.discard")
168       .getAttribute("collapsed") != "true")
169     runner.addJSFailure("entity.discard button should not be visible");
170   if (getAnnoElement(runner, "header", "header.submit")
171       .getAttribute("collapsed") != "true")
172     runner.addJSFailure("entity.submit button should not be visible");
173   if (getElement(runner, "cmd_page1_discard")
174       .getAttribute("disabled") != "true")
175     runner.addJSFailure("entity_discard command should be disabled");
176   if (getElement(runner, "cmd_page1_submit")
177       .getAttribute("disabled") != "true")
178     runner.addJSFailure("entity_submit command should be disabled");
180   /* Insert Entity[0] */
181   runner.doCommand("cmd_page1_new");
182   if (! entity_details_check(tree, box))
183     runner.addJSFailure("page1.tag not synched");
184   box.value = aaTestNames.EntityTag[0];
185   sendOnInput(box);
186   runner.doCommand("cmd_page1_save");
187   if (! entity_details_check(tree, box))
188     runner.addJSFailure("page1.tag not synched");
190   /* Test that 'cancel' clears selection */
191   runner.doCommand("cmd_page1_cancel");
192   if (tree.view.selection.currentIndex != -1)
193     runner.addJSFailure("page1.tree selection not cleared");
195   /* Test synchronization after selection */
196   tree.view.selection.select(0);
197   if (! entity_details_check(tree, box))
198     runner.addJSFailure("page1.tag not synched");
200   runner.doCommand("cmd_page1_new");
201   if (box.getAttribute("focused") != "true")
202     runner.addJSFailure("entity.tag not focused");
203   if (tree.view.selection.currentIndex != -1)
204     runner.addJSFailure("entity.tree selection not cleared");
205   if (! entity_details_check(tree, box))
206     runner.addJSFailure("entity.tag not synched");
208   runner.doCommand("cmd_page1_cancel");
209   if (tree.view.selection.currentIndex != 0)
210     runner.addJSFailure("page1.tree selection not restored");
211   if (! entity_details_check(tree, box))
212     runner.addJSFailure("page1.tag not synched");
214   tree.view.selection.select(-1);
215   runner.doCommand("cmd_page1_new");
216   if (tree.view.getCellText(0,tree.columns[0]) != aaTestNames.EntityTag[0])
217     runner.addJSFailure("entity.tree.line1 failed");
218   box.value = "junk";
219   runner.doCommand("cmd_page1_cancel");
220   if (! entity_details_check(tree, box))
221     runner.addJSFailure("page1.tag not synched");
223   tree.view.selection.select(0);
224   runner.doCommand("cmd_page1_new");
225   box.value = "junk";
226   runner.doCommand("cmd_page1_reset");
227   if (! entity_details_check(tree, box))
228     runner.addJSFailure("page1.tag not synched");
230   try {
231     runner.doCommand("cmd_page1_save");
232     runner.addJSFailure("page1.save not disabled");
233   } catch (e) {
234   }
235   box.value="temp";
236   var entity = getFrame(runner).contentWindow.wrappedJSObject
237     .view.buffer;
238   if (entity.edited)
239     runner.addJSFailure("blank entity marked edited");
240   sendOnInput(box);
241   if (! entity.edited)
242     runner.addJSFailure("edited entity marked blank");
243   entity = null;
245   /* Test that insertion goes to the last row */
246   var count = tree.view.rowCount;
247   runner.doCommand("cmd_page1_save");
248   if (tree.view.selection.currentIndex != count)
249     runner.addJSFailure("page1.tree insert not focused");
251   runner.doCommand("cmd_page1_cancel");
252   if (tree.view.selection.currentIndex != -1)
253     runner.addJSFailure("page1.tree selection not cleared");
255   try {
256     runner.doCommand("cmd_page1_change");
257     runner.addJSFailure("page1.change not disabled");
258   } catch (e) {
259   }
260   tree.view.selection.select(count);
261   runner.doCommand("cmd_page1_change");
262   box.value = aaTestNames.EntityTag[0];
263   sendOnInput(box);
264   runner.doCommand("cmd_page1_save");
265   if (box.value != "temp")
266     runner.addJSFailure("page1.tag not unique");
267   box.value = aaTestNames.EntityTag[1];
268   sendOnInput(box);
269   runner.doCommand("cmd_page1_save");
270   if (! entity_details_check(tree, box))
271     runner.addJSFailure("page1.tag not synched");
272   if (tree.view.selection.currentIndex != count)
273     runner.addJSFailure("page1.change on wrong index: " +
274         tree.view.selection.currentIndex + "!=" + count);
275   if (box.value !=  aaTestNames.EntityTag[1])
276     runner.addJSFailure("entity.change not saved");
278   var i;
279   for (i = 2; i < aaTestNames.EntityTag.length; i++) {
280     runner.doCommand("cmd_page1_new");
281     if (! entity_details_check(tree, box))
282       runner.addJSFailure("page1.tag not synched");
283     box.value = aaTestNames.EntityTag[i];
284     sendOnInput(box);
285     runner.doCommand("cmd_page1_save");
286     if (! entity_details_check(tree, box))
287       runner.addJSFailure("page1.tag not synched");
288   }
292 /* 'cmd_show2' Test */
293 const show_resource_contractID = "@aasii.org/abstract/test/show-resource;1";
294 const show_resource_name = "aaVCShow2Test";
295 const show_resource_CID = Components.ID("{2aa28aa0-d25c-4fdc-a32b-27fe83afab1d}");
297 function show_resource_test(runner)
299   runner.doCommand("cmd_view_resource");
300   runner.watchWindow = getFrame(runner).contentWindow;
303 function show_resource_check(runner)
305   var tree = getElement(runner,treeId);
306   resource_check(runner);
307   // XXX 403202 'Unflexing' the tree speeds up reflow significantly
308   if (tree && tree.hasAttribute("flex"))
309     tree.removeAttribute("flex");
312 /* page2 Test */
313 const resource_contractID = "@aasii.org/abstract/test/resource;1";
314 const resource_name = "aaVCPage2OnSelectTest";
315 const resource_CID = Components.ID("{540d4ac5-d104-473c-846a-052d50ca62be}");
317 function resource_test(runner)
319   var page = getFrame(runner).contentWindow.wrappedJSObject.view;
321   /* Insert 'x' */
322   runner.doCommand("cmd_page1_new");
323   if (! resource_details_check(runner, page))
324     runner.addJSFailure("resource page not synched");
325   if (aaTestNames.ResourceType[0]) {
326     runner.doCommand("cmd_resource_type");
327     page.code.value = aaTestNames.ResourceCode[0];
328     sendOnInput(page.code);
329   }
330   page.tag.value = aaTestNames.ResourceTag[0];
331   sendOnInput(page.tag);
332   runner.doCommand("cmd_page1_save");
333   if (! resource_details_check(runner, page))
334     runner.addJSFailure("resource page not synched");
336   /* Test that 'cancel' clears selection */
337   runner.doCommand("cmd_page1_cancel");
338   if (page.tree.view.selection.currentIndex != -1)
339     runner.addJSFailure("page1.tree selection not cleared");
341   /* Test synchronization after selection */
342   page.tree.view.selection.select(0);
343   if (! resource_details_check(runner, page))
344     runner.addJSFailure("resource page not synched");
346   runner.doCommand("cmd_page1_new");
347   if (page.tag.getAttribute("focused") != "true")
348     runner.addJSFailure("resource page1.tag not focused");
349   if (page.tree.view.selection.currentIndex != -1)
350     runner.addJSFailure("resource page1.tree selection not cleared");
351   if (! resource_details_check(runner, page))
352     runner.addJSFailure("resource page not synched");
354   runner.doCommand("cmd_page1_cancel");
355   if (page.tree.view.selection.currentIndex != 0)
356     runner.addJSFailure("resource page1.tree selection not restored");
357   if (! resource_details_check(runner, page))
358     runner.addJSFailure("resource page not synched");
360   page.tree.view.selection.select(-1);
361   runner.doCommand("cmd_page1_new");
362   page.tag.value = "junk";
363   runner.doCommand("cmd_page1_cancel");
364   if (! resource_details_check(runner, page))
365     runner.addJSFailure("resource page not synched");
367   runner.doCommand("cmd_page1_new");
368   page.tag.value = aaTestNames.ResourceTag[1];
369   sendOnInput(page.tag);
370   runner.doCommand("cmd_page1_save");
372   page.tree.view.selection.select(1);
373   runner.doCommand("cmd_page1_new");
374   page.tag.value = "junk";
375   runner.doCommand("cmd_page1_reset");
376   if (! resource_details_check(runner, page))
377     runner.addJSFailure("resource page not synched");
379   try {
380     runner.doCommand("cmd_page1_save");
381     runner.addJSFailure("resource page1.save not disabled");
382   } catch (e) {
383   }
384   page.tag.value = "temp";
385   sendOnInput(page.tag);
387   var count = page.tree.view.rowCount;
388   runner.doCommand("cmd_page1_save");
389   if (page.tree.view.selection.currentIndex != count)
390     runner.addJSFailure("resource page1.tree insert not focused");
391   if (! resource_details_check(runner, page))
392     runner.addJSFailure("resource page not synched");
394   page.tree.view.selection.select(-1);
395   try {
396     runner.doCommand("cmd_page1_change");
397     runner.addJSFailure("resource page1.change not disabled");
398   } catch (e) {
399   }
400   page.tree.view.selection.select(count);
401   runner.doCommand("cmd_page1_change");
402   page.tag.value = aaTestNames.ResourceTag[1];
403   sendOnInput(page.tag);
404   runner.doCommand("cmd_page1_save");
405   if (page.tag.value != "temp")
406     runner.addJSFailure("resource page1.tag not unique");
407   page.tag.value = aaTestNames.ResourceTag[2];
408   sendOnInput(page.tag);
409   runner.doCommand("cmd_page1_save");
410   if (! resource_details_check(runner, page))
411     runner.addJSFailure("resource page not synched");
412   if (page.tree.view.selection.currentIndex != count)
413     runner.addJSFailure("resource page1.change on wrong index");
414   if (page.tag.value != aaTestNames.ResourceTag[2])
415     runner.addJSFailure("resource page1.change not saved");
417   /* Insert 'z' */
418   var i;
419   for (i = 3; i < aaTestNames.ResourceTag.length; i++) {
420     runner.doCommand("cmd_page1_new");
421     if (aaTestNames.ResourceType[i]) {
422       runner.doCommand("cmd_resource_type");
423       page.code.value = aaTestNames.ResourceCode[i];
424       sendOnInput(page.code);
425     }
426     page.tag.value = aaTestNames.ResourceTag[i];
427     sendOnInput(page.tag);
428     runner.doCommand("cmd_page1_save");
429     if (! resource_details_check(runner, page))
430       runner.addJSFailure("resource page not synched");
431   }
434 /* flow Test */
435 const flow_contractID = "@aasii.org/abstract/test/flow;1";
436 const flow_name = "aaVCFlowPageTest";
437 const flow_CID = Components.ID("{b2c6addf-862e-4457-99b7-1909ef6208e0}");
438 const flowTagId = "flow.tag";
440 function flow_test(runner)
442   runner.doCommand("cmd_process_flow");
443   runner.watchWindow = getFrame(runner).contentWindow;
446 function flow_page_check(runner)
448   var tree = getElement(runner,treeId);
449   // XXX 403202 'Unflexing' the tree speeds up reflow significantly
450   if (tree && tree.hasAttribute("flex"))
451     tree.removeAttribute("flex");
453   flow_check(runner);
454   if (getAnnoElement(runner, "header", "header.discard")
455       .getAttribute("collapsed") != "true")
456     runner.addJSFailure("flow.discard button should be invisible");
457   if (getAnnoElement(runner, "header", "header.submit")
458       .getAttribute("collapsed") != "true")
459     runner.addJSFailure("flow.submit button should be invisible");
460   if (getElement(runner, "cmd_page1_discard")
461       .getAttribute("disabled") != "true")
462     runner.addJSFailure("flow_discard command should be disabled");
463   if (getElement(runner, "cmd_page1_submit")
464       .getAttribute("disabled") != "true")
465     runner.addJSFailure("flow_submit command should be disabled");
467   runner.doCommand("cmd_page1_new");
468   if (! flow_check(runner))
469     runner.addJSFailure("[flow] page not synched");
472 /* ask for entity from flow page */
473 const flow_entity_contractID = "@aasii.org/abstract/test/flow-entity;1";
474 const flow_entity_name = "aaVCFlowEntityTest";
475 const flow_entity_CID = Components.ID("{1b16209f-d818-4bf1-862d-64953ff8c414}");
477 const entity_discard_contractID = "@aasii.org/abstract/test/entity-discard;1";
478 const entity_discard_name = "aaVCEntityDiscardTest";
479 const entity_discard_CID = Components.ID("{21737fb5-a114-4a9a-bc45-907ecbffeb23}");
481 function entity_discard_check(runner)
483   flow_check(runner);
484   if (getElement(runner, entityTagId).value != "")
485     runner.addJSFailure("entity discard failed");
488 const entity_submit_contractID = "@aasii.org/abstract/test/entity-submit;1";
489 const entity_submit_name = "aaVCEntitySubmitTest";
490 const entity_submit_CID = Components.ID("{755a6691-7d04-4b02-95e8-894b3dd17034}");
492 function entity_submit_check(runner)
494   flow_check(runner);
495   if (getElement(runner, entityTagId).value != aaTestNames.EntityTag[0])
496     runner.addJSFailure("entity submit failed");
499 /* ask for give resource from flow page */
500 const flow_give_contractID = "@aasii.org/abstract/test/flow-give;1";
501 const flow_give_name = "aaVCFlowGiveResourceTest";
502 const flow_give_CID = Components.ID("{fc969e46-99d8-4612-b502-2494e2d372cd}");
504 function flow_give_test(runner)
506   gItem = 0;
507   runner.doCommand("cmd_flow_give");
508   runner.watchWindow = getFrame(runner).contentWindow;
511 const give_discard_contractID = "@aasii.org/abstract/test/give-discard;1";
512 const give_discard_name = "aaGiveResourceDiscardTest";
513 const give_discard_CID = Components.ID("{6b3c8a33-e4eb-41f3-8367-0926ef033197}");
515 function give_discard_check(runner)
517   flow_check(runner);
518   if (getElement(runner, "give.tag").value != "")
519     runner.addJSFailure("resource dsicard failed");
522 const give_submit_contractID = "@aasii.org/abstract/test/give-submit;1";
523 const give_submit_name = "aaGiveResourceSubmitTest";
524 const give_submit_CID = Components.ID("{a7a676e9-45c2-49cd-be2b-c40da915fb20}");
526 function give_submit_check(runner)
528   flow_check(runner);
529   if (getElement(runner, "give.tag").value != aaTestNames.ResourceTag[0])
530     runner.addJSFailure("resource submit failed");
533 /* ask for take resource from flow page */
534 const flow_take_contractID = "@aasii.org/abstract/test/flow-take;1";
535 const flow_take_name = "aaVCFlowTakeResourceTest";
536 const flow_take_CID = Components.ID("{573b04f4-2d4c-4a70-a880-939f960ea883}");
538 const take_discard_contractID = "@aasii.org/abstract/test/take-discard;1";
539 const take_discard_name = "aaTakeResourceDiscardTest";
540 const take_discard_CID = Components.ID("{8a096221-c744-4cc9-9689-ed53b3b28858}");
542 function take_discard_check(runner)
544   flow_check(runner);
545   if (getElement(runner, "take.tag").value != "")
546     runner.addJSFailure("resource discard failed");
549 const take_submit_contractID = "@aasii.org/abstract/test/take-submit;1";
550 const take_submit_name = "aaTakeResourceSubmitTest";
551 const take_submit_CID = Components.ID("{fed26559-2aee-458c-8778-0f5d363cab86}");
553 function take_submit_check(runner)
555   flow_check(runner);
556   if (getElement(runner, "take.tag").value != aaTestNames.ResourceTag[1])
557     runner.addJSFailure("resource submit failed: "
558         + getElement(runner, "take.tag").value);
561 const flow_save_contractID = "@aasii.org/abstract/test/flow-save;1";
562 const flow_save_name = "aaVCFlowSaveTest";
563 const flow_save_CID = Components.ID("{a8704d86-db0e-4256-bdc4-4774d11cf2fb}");
565 function flow_save_test(runner)
567   var tree = getElement(runner,treeId);
568   var tagBox = getElement(runner, "flow.tag")
569   var rateBox = getElement(runner, "flow.rate")
570   var count = tree.view.rowCount;
572   tagBox.value = aaTestNames.FlowTag[0];
573   sendOnInput(tagBox);
574   if (! flow_check(runner))
575     runner.addJSFailure("[flow save] page not synched");
576   getElement(runner, "rate.direction").selectedIndex = 1;
577   rateBox.value = "100";
578   sendOnInput(rateBox);
579   if (! flow_check(runner))
580     runner.addJSFailure("[flow save] page not synched");
581   runner.doCommand("cmd_page1_save");
582   if (tree.view.selection.currentIndex != count)
583     runner.addJSFailure("[flow save] insert not focused in the tree: " +
584         tree.view.selection.currentIndex + "!=" + count);
585   if (! flow_check(runner))
586     runner.addJSFailure("[flow save] page not synched");
587   try {
588     runner.doCommand("cmd_page1_change");
589     runner.addJSFailure("[flow save] 'change' not disabled");
590   } catch (e) {
591   }
594 const start_contractID = "@aasii.org/abstract/test/start-page;1";
595 const start_name = "aaVCStartPageTest";
596 const start_CID = Components.ID("{34d31427-05cd-4743-9f4b-6a4384e6337a}");
598 function start_page_check(runner)
600   var result = false;
601   
602   var startPage = getElement(runner,"start_page");
603   if (!startPage) {
604     runner.addJSFailure("start page is null");
605     result = false;
606   }
607   var setButton = getElement(runner, "start_page", "set_storage");
608   if (!setButton)
609   {
610     runner.addJSFailure("start page: set_storage is null");
611     result = false;
612   }
613   if (setButton.getAttribute("collapsed") == "true")
614   {
615     runner.addJSFailure("start page: set_storage button should be visible");
616     result = false;
617   }
619   var getButton = getElement(runner, "start_page", "create_storage");
620   if (!getButton)
621   {
622     runner.addJSFailure("start page: create_storage is null");
623     result = false;
624   }
625   if (getButton.getAttribute("collapsed") == "true")
626   {
627     runner.addJSFailure("start page: create_storage button should be visible");
628     result = false;
629   }
631   return result;
634 function start_page_test(runner)
636   runner.doCommand("cmd_start");
637   runner.watchWindow = getFrame(runner).contentWindow;
640 const open_storage_contractID = "@aasii.org/abstract/test/storage-open;1";
641 const open_storage_name = "aaVCOpenStorageTest";
642 const open_storage_CID = Components.ID("{6f8b5da2-a533-497a-bc5e-255bcc60f588}");
644 function open_storage_test(runner)
646   mFile = Components.classes["@mozilla.org/file/directory_service;1"]
647     .getService(Components.interfaces.nsIProperties)
648     .get("CurProcD", Components.interfaces.nsIFile);
649   mFile.append("myBase.sqlite");
650   if (mFile.exists())
651     mFile.remove(true);
652   var doc = runner.testWindow.document;
653   if ( doc.documentElement.tagName != "window" )
654     runner.addJSFailure("main window not created");
656   var web = doc.getElementById("content").docShell
657     .QueryInterface(nsCI.nsIWebNavigation);
659   var session = web.sessionHistory.QueryInterface(nsCI.aaISHistory);  
660   if (!session)
661     runner.addJSFailure("session not started");
662   session.setFile(mFile);
663   var ioService = Components.classes["@mozilla.org/network/io-service;1"]  
664     .getService(Components.interfaces.nsIIOService);
665   var uri = session.connectionURI.QueryInterface(nsCI.nsIURL);
666   if (uri == null) 
667     runner.addJSFailure("URI is null");
668   if (uri.fileName != "myBase.sqlite")
669     runner.addJSFailure("Filename is wrong: " + uri.fileName);
672 const close_storage_contractID = "@aasii.org/abstract/test/storage-close;1";
673 const close_storage_name = "aaVCCloseStorageTest";
674 const close_storage_CID = Components.ID("{dee507e5-5e1c-4550-9cf0-83b72215f09b}");
676 function close_storage_test(runner) 
678   var doc = runner.testWindow.document;
679   var web = doc.getElementById("content").docShell
680     .QueryInterface(nsCI.nsIWebNavigation);
682   var manager = Components.classes["@aasii.org/storage/manager;1"]
683     .createInstance(nsCI.aaIManager);
685   manager.tmpFileFromString("default.sqlite", true);
687   var session = web.sessionHistory.QueryInterface(nsCI.aaISHistory);  
688   if (!session)
689     runner.addJSFailure("session not started");
690   session.setFile(null);
692   mFile.remove(true);
693   if (mFile.exists())
694     runner.addJSFailure("File exists yet");