File: browser_662743.js

package info (click to toggle)
wine-gecko-2.21 2.21%2Bdfsg2-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 646,272 kB
  • ctags: 630,086
  • sloc: cpp: 2,895,786; ansic: 1,502,970; python: 156,675; asm: 115,373; java: 111,421; sh: 63,309; xml: 62,872; makefile: 58,685; perl: 19,182; objc: 3,461; yacc: 2,051; lex: 979; pascal: 929; exp: 449; php: 244; lisp: 228; awk: 211; sed: 26; csh: 21; ada: 16; ruby: 3
file content (128 lines) | stat: -rw-r--r-- 4,923 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */

// This tests that session restore component does restore the right <select> option.
// Session store should not rely only on previous user's selectedIndex, it should
// check its value as well.

function test() {
  /** Tests selected options **/
  waitForExplicitFinish();

  let testTabCount = 0;
  let formData = [
  // default case
    { },
  // old format
    { "#select_id" : 0 },
    { "#select_id" : 2 },
    // invalid index
    { "#select_id" : 8 },
    { "/xhtml:html/xhtml:body/xhtml:select" : 5},
    { "/xhtml:html/xhtml:body/xhtml:select[@name='select_name']" : 6},

  // new format
    // index doesn't match value (testing an option in between (two))
    { id:{ "select_id": {"selectedIndex":0,"value":"val2"} } },
    // index doesn't match value (testing an invalid value)
    { id:{ "select_id": {"selectedIndex":4,"value":"val8"} } },
    // index doesn't match value (testing an invalid index)
    { id:{ "select_id": {"selectedIndex":8,"value":"val5"} } },
    // index and value match position zero
    { id:{ "select_id": {"selectedIndex":0,"value":"val0"} }, xpath: {} },
    // index doesn't match value (testing the last option (seven))
    { id:{},"xpath":{ "/xhtml:html/xhtml:body/xhtml:select[@name='select_name']": {"selectedIndex":1,"value":"val7"} } },
    // index and value match the default option "selectedIndex":3,"value":"val3"
    { xpath: { "/xhtml:html/xhtml:body/xhtml:select[@name='select_name']" : {"selectedIndex":3,"value":"val3"} } },
    // index matches default option however it doesn't match value
    { id:{ "select_id": {"selectedIndex":3,"value":"val4"} } },

  // combinations
    { "#select_id" : 3, id:{ "select_id": {"selectedIndex":1,"value":"val1"} } },
    { "#select_id" : 5, xpath: { "/xhtml:html/xhtml:body/xhtml:select[@name='select_name']" : {"selectedIndex":4,"value":"val4"} } },
    { "/xhtml:html/xhtml:body/xhtml:select" : 5, id:{ "select_id": {"selectedIndex":1,"value":"val1"} }},
    { "/xhtml:html/xhtml:body/xhtml:select[@name='select_name']" : 2, xpath: { "/xhtml:html/xhtml:body/xhtml:select[@name='select_name']" : {"selectedIndex":7,"value":"val7"} } }
  ];

  let expectedValues = [
    [ "val3"], // default value
    [ "val0"],
    [ "val2"],
    [ "val3"], // default value (invalid index)
    [ "val5"],
    [ "val6"],
    [ "val2"],
    [ "val3"], // default value (invalid value)
    [ "val5"], // value is still valid (even it has an invalid index)
    [ "val0"],
    [ "val7"],
    [ "val3"],
    [ "val4"],
    [ "val1"],
    [ "val4"],
    [ "val1"],
    [ "val7"]
  ];
  let callback = function() {
    testTabCount--;
    if (testTabCount == 0) {
      finish();
    }
  };

  for (let i = 0; i < formData.length; i++) {
    testTabCount++;
    testTabRestoreData(formData[i], expectedValues[i], callback);
  }
}

function testTabRestoreData(aFormData, aExpectedValues, aCallback) {
  let testURL =
    getRootDirectory(gTestPath) + "browser_662743_sample.html";
  let tab = gBrowser.addTab(testURL);
  let tabState = { entries: [{ url: testURL, formdata: aFormData}] };

  tab.linkedBrowser.addEventListener("load", function(aEvent) {
    tab.linkedBrowser.removeEventListener("load", arguments.callee, true);
    ss.setTabState(tab, JSON.stringify(tabState));

    tab.addEventListener("SSTabRestored", function(aEvent) {
      tab.removeEventListener("SSTabRestored", arguments.callee);
      let doc = tab.linkedBrowser.contentDocument;
      let select = doc.getElementById("select_id");
      let value = select.options[select.selectedIndex].value;

      // test select options values
      is(value, aExpectedValues[0],
        "Select Option by selectedIndex &/or value has been restored correctly");

      // clean up
      gBrowser.removeTab(tab);
      aCallback();
    });

    tab.addEventListener("TabClose", function(aEvent) {
      tab.removeEventListener("TabClose", arguments.callee);
      let restoredTabState = JSON.parse(ss.getTabState(tab));
      let restoredFormData = restoredTabState.entries[0].formdata;
      let selectIdFormData = restoredFormData.id.select_id;
      let value = restoredFormData.id.select_id.value;

      // test format
      ok("id" in restoredFormData && "xpath" in restoredFormData,
        "FormData format is valid");
      // validate that there are no old keys
      is(Object.keys(restoredFormData).length, 2,
        "FormData key length is valid");
      // test format
      ok("selectedIndex" in selectIdFormData && "value" in selectIdFormData,
        "select format is valid");
      // validate that there are no old keys
      is(Object.keys(selectIdFormData).length, 2,
        "select_id length is valid");
       // test set collection values
      is(value, aExpectedValues[0],
        "Collection has been saved correctly");
    });
  }, true);
}