browser/components/sessionstore/test/browser_formdata_format.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* Any copyright is dedicated to the Public Domain.
     2    http://creativecommons.org/publicdomain/zero/1.0/ */
     4 "use strict";
     6 function test() {
     7   /** Tests formdata format **/
     8   waitForExplicitFinish();
    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   };
    64   for (let i = 0; i < formData.length; i++) {
    65     testTabCount++;
    66     testTabRestoreData(formData[i], expectedValues[i], callback);
    67   }
    68 }
    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}] };
    76   Task.spawn(function () {
    77     yield promiseBrowserLoaded(tab.linkedBrowser);
    79     ss.setTabState(tab, JSON.stringify(tabState));
    80     yield promiseTabRestored(tab);
    82     SyncHandlers.get(tab.linkedBrowser).flush();
    83     let restoredTabState = JSON.parse(ss.getTabState(tab));
    84     let restoredFormData = restoredTabState.formdata;
    86     if (restoredFormData) {
    87       let doc = tab.linkedBrowser.contentDocument;
    88       let input1 = doc.getElementById("input1");
    89       let input2 = doc.querySelector("input[name=input2]");
    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     }
   108     // clean up
   109     gBrowser.removeTab(tab);
   111   // This test might time out if the task fails.
   112   }).then(aCallback);
   113 }

mercurial