browser/components/sessionstore/test/browser_formdata_format.js

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:66fa91ef09eb
1 /* Any copyright is dedicated to the Public Domain.
2 http://creativecommons.org/publicdomain/zero/1.0/ */
3
4 "use strict";
5
6 function test() {
7 /** Tests formdata format **/
8 waitForExplicitFinish();
9
10 let formData = [
11 { },
12 // old format
13 { "#input1" : "value0" },
14 { "#input1" : "value1", "/xhtml:html/xhtml:body/xhtml:input[@name='input2']" : "value2" },
15 { "/xhtml:html/xhtml:body/xhtml:input[@name='input2']" : "value3" },
16 // new format
17 { id: { "input1" : "value4" } },
18 { id: { "input1" : "value5" }, xpath: {} },
19 { id: { "input1" : "value6" }, xpath: { "/xhtml:html/xhtml:body/xhtml:input[@name='input2']" : "value7" } },
20 { id: {}, xpath: { "/xhtml:html/xhtml:body/xhtml:input[@name='input2']" : "value8" } },
21 { xpath: { "/xhtml:html/xhtml:body/xhtml:input[@name='input2']" : "value9" } },
22 // combinations
23 { "#input1" : "value10", id: { "input1" : "value11" } },
24 { "#input1" : "value12", id: { "input1" : "value13" }, xpath: { "/xhtml:html/xhtml:body/xhtml:input[@name='input2']" : "value14" } },
25 { "#input1" : "value15", xpath: { "/xhtml:html/xhtml:body/xhtml:input[@name='input2']" : "value16" } },
26 { "/xhtml:html/xhtml:body/xhtml:input[@name='input2']" : "value17", id: { "input1" : "value18" } },
27 { "/xhtml:html/xhtml:body/xhtml:input[@name='input2']" : "value19", id: { "input1" : "value20" }, xpath: { "/xhtml:html/xhtml:body/xhtml:input[@name='input2']" : "value21" } },
28 { "/xhtml:html/xhtml:body/xhtml:input[@name='input2']" : "value22", xpath: { "/xhtml:html/xhtml:body/xhtml:input[@name='input2']" : "value23" } },
29 { "#input1" : "value24", "/xhtml:html/xhtml:body/xhtml:input[@name='input2']" : "value25", id: { "input1" : "value26" } },
30 { "#input1" : "value27", "/xhtml:html/xhtml:body/xhtml:input[@name='input2']" : "value28", id: { "input1" : "value29" }, xpath: { "/xhtml:html/xhtml:body/xhtml:input[@name='input2']" : "value30" } },
31 { "#input1" : "value31", "/xhtml:html/xhtml:body/xhtml:input[@name='input2']" : "value32", xpath: { "/xhtml:html/xhtml:body/xhtml:input[@name='input2']" : "value33" } }
32 ]
33 let expectedValues = [
34 [ "" , "" ],
35 // old format
36 [ "value0", "" ],
37 [ "value1", "value2" ],
38 [ "", "value3" ],
39 // new format
40 [ "value4", "" ],
41 [ "value5", "" ],
42 [ "value6", "value7" ],
43 [ "", "value8" ],
44 [ "", "value9" ],
45 // combinations
46 [ "value11", "" ],
47 [ "value13", "value14" ],
48 [ "", "value16" ],
49 [ "value18", "" ],
50 [ "value20", "value21" ],
51 [ "", "value23" ],
52 [ "value26", "" ],
53 [ "value29", "value30" ],
54 [ "", "value33" ]
55 ];
56 let testTabCount = 0;
57 let callback = function() {
58 testTabCount--;
59 if (testTabCount == 0) {
60 finish();
61 }
62 };
63
64 for (let i = 0; i < formData.length; i++) {
65 testTabCount++;
66 testTabRestoreData(formData[i], expectedValues[i], callback);
67 }
68 }
69
70 function testTabRestoreData(aFormData, aExpectedValue, aCallback) {
71 let URL = ROOT + "browser_formdata_format_sample.html";
72 let tab = gBrowser.addTab("about:blank");
73 let browser = tab.linkedBrowser;
74 let tabState = { entries: [{ url: URL, formdata: aFormData}] };
75
76 Task.spawn(function () {
77 yield promiseBrowserLoaded(tab.linkedBrowser);
78
79 ss.setTabState(tab, JSON.stringify(tabState));
80 yield promiseTabRestored(tab);
81
82 SyncHandlers.get(tab.linkedBrowser).flush();
83 let restoredTabState = JSON.parse(ss.getTabState(tab));
84 let restoredFormData = restoredTabState.formdata;
85
86 if (restoredFormData) {
87 let doc = tab.linkedBrowser.contentDocument;
88 let input1 = doc.getElementById("input1");
89 let input2 = doc.querySelector("input[name=input2]");
90
91 // test format
92 ok("id" in restoredFormData || "xpath" in restoredFormData,
93 "FormData format is valid: " + restoredFormData);
94 // validate that there are no old keys
95 for (let key of Object.keys(restoredFormData)) {
96 if (["id", "xpath", "url"].indexOf(key) === -1) {
97 ok(false, "FormData format is invalid.");
98 }
99 }
100 // test id
101 is(input1.value, aExpectedValue[0],
102 "FormData by 'id' has been restored correctly");
103 // test xpath
104 is(input2.value, aExpectedValue[1],
105 "FormData by 'xpath' has been restored correctly");
106 }
107
108 // clean up
109 gBrowser.removeTab(tab);
110
111 // This test might time out if the task fails.
112 }).then(aCallback);
113 }

mercurial