tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_formSubmission2.html (6394B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <!--
      4 https://bugzilla.mozilla.org/show_bug.cgi?id=523771
      5 -->
      6 <head>
      7  <title>Test for Bug 523771</title>
      8  <script src="/tests/SimpleTest/SimpleTest.js"></script>        
      9  <script src="/tests/SimpleTest/EventUtils.js"></script>        
     10  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
     11 </head>
     12 <body>
     13 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=523771">Mozilla Bug 523771</a>
     14 <p id="display"></p>
     15 <iframe name="target_iframe" id="target_iframe"></iframe>
     16 <form action="form_submit_server.sjs" target="target_iframe" id="form"
     17      method="POST" enctype="multipart/form-data">
     18  <table>
     19    <tr>
     20      <td>Control type</td>
     21      <td>Name and value</td>
     22      <td>Name, empty value</td>
     23      <td>Name, no value</td>
     24      <td>Empty name, with value</td>
     25      <td>No name, with value</td>
     26      <td>No name or value</td>
     27    </tr>
     28    <tr>
     29      <td>Submit input</td>
     30      <td><input type=submit name="n1_1" value="v1_1"></td>
     31      <td><input type=submit name="n1_2" value=""></td>
     32      <td><input type=submit name="n1_3"></td>
     33      <td><input type=submit name="" value="v1_4"></td>
     34      <td><input type=submit value="v1_5"></td>
     35      <td><input type=submit></td>
     36    </tr>
     37    <tr>
     38      <td>Image input</td>
     39      <td><input type=image src="file_formSubmission_img.jpg" name="n2_1" value="v2_1"></td>
     40      <td><input type=image src="file_formSubmission_img.jpg" name="n2_2" value=""></td>
     41      <td><input type=image src="file_formSubmission_img.jpg" name="n2_3"></td>
     42      <td><input type=image src="file_formSubmission_img.jpg" name="" value="v2_4"></td>
     43      <td><input type=image src="file_formSubmission_img.jpg" value="v2_5"></td>
     44      <td><input type=image src="file_formSubmission_img.jpg"></td>
     45    </tr>
     46    <tr>
     47      <td>Submit button</td>
     48      <td><button type=submit name="n3_1" value="v3_1"></button></td>
     49      <td><button type=submit name="n3_2" value=""></button></td>
     50      <td><button type=submit name="n3_3"></button></td>
     51      <td><button type=submit name="" value="v3_4"></button></td>
     52      <td><button type=submit value="v3_5"></button></td>
     53      <td><button type=submit ></button></td>
     54    </tr>
     55    <tr>
     56      <td>Submit button with text</td>
     57      <td><button type=submit name="n4_1" value="v4_1">text here</button></td>
     58      <td><button type=submit name="n4_2" value="">text here</button></td>
     59      <td><button type=submit name="n4_3">text here</button></td>
     60      <td><button type=submit name="" value="v4_4">text here</button></td>
     61      <td><button type=submit value="v4_5">text here</button></td>
     62      <td><button type=submit>text here</button></td>
     63    </tr>
     64  </table>
     65 </form>
     66 <pre id="test">
     67 <script class="testbody" type="text/javascript">
     68 
     69 var gen = runTest();
     70 
     71 SimpleTest.waitForExplicitFinish();
     72 addLoadEvent(function() {
     73  gen.next();
     74 });
     75 
     76 var expectedSub = [
     77  // Submit input
     78  [{ name: "n1_1", value: "v1_1" }],
     79  [{ name: "n1_2", value: "" }],
     80  [{ name: "n1_3", value: "Submit Query" }],
     81  [],
     82  [],
     83  [],
     84  // Image input
     85  [{ name: "n2_1.x", value: "10" },
     86   { name: "n2_1.y", value: "7"  }],
     87  [{ name: "n2_2.x", value: "10" },
     88   { name: "n2_2.y", value: "7"  }],
     89  [{ name: "n2_3.x", value: "10" },
     90   { name: "n2_3.y", value: "7"  }],
     91  [{ name: "x", value: "10" },
     92   { name: "y", value: "7"  }],
     93  [{ name: "x", value: "10" },
     94   { name: "y", value: "7"  }],
     95  [{ name: "x", value: "10" },
     96   { name: "y", value: "7"  }],
     97  // Submit button
     98  [{ name: "n3_1", value: "v3_1" }],
     99  [{ name: "n3_2", value: "" }],
    100  [{ name: "n3_3", value: "" }],
    101  [],
    102  [],
    103  [],
    104  // Submit button with text
    105  [{ name: "n4_1", value: "v4_1" }],
    106  [{ name: "n4_2", value: "" }],
    107  [{ name: "n4_3", value: "" }],
    108  [],
    109  [],
    110  [],
    111 ];
    112 
    113 function checkSubmission(sub, expected) {
    114  function getPropCount(o) {
    115    var x, l = 0;
    116    for (x in o) ++l;
    117    return l;
    118  }
    119 
    120  is(sub.length, expected.length,
    121     "Correct number of items");
    122  var i;
    123  for (i = 0; i < expected.length; ++i) {
    124    if (!("fileName" in expected[i])) {
    125      is(sub[i].headers["Content-Disposition"],
    126         "form-data; name=\"" + expected[i].name + "\"",
    127         "Correct name");
    128      is (getPropCount(sub[i].headers), 1,
    129          "Wrong number of headers");
    130    }
    131    else {
    132      is(sub[i].headers["Content-Disposition"],
    133         "form-data; name=\"" + expected[i].name + "\"; filename=\"" +
    134           expected[i].fileName + "\"",
    135         "Correct name");
    136      is(sub[i].headers["Content-Type"],
    137         expected[i].contentType,
    138         "Correct content type");
    139      is (getPropCount(sub[i].headers), 2,
    140          "Wrong number of headers");
    141    }
    142    is(sub[i].body,
    143       expected[i].value,
    144       "Correct value");
    145  }
    146 }
    147 
    148 function clickImage(aTarget, aX, aY)
    149 {
    150  aTarget.style.position = "absolute";
    151  aTarget.style.top = "0";
    152  aTarget.style.left = "0";
    153  aTarget.offsetTop;
    154 
    155  synthesizeMouseAtPoint(aX, aY, {}, aTarget.ownerDocument.defaultView);
    156 
    157  aTarget.style.position = "";
    158  aTarget.style.top = "";
    159  aTarget.style.left = "";
    160 }
    161 
    162 function* runTest() {
    163  // Make normal submission
    164  var form = $("form");
    165  var iframe = $("target_iframe");
    166  iframe.onload = function() { gen.next(); };
    167 
    168  var elements = form.querySelectorAll("input, button");
    169 
    170  is(elements.length, expectedSub.length,
    171     "tests vs. expected out of sync");
    172 
    173  var i;
    174  for (i = 0; i < elements.length && i < expectedSub.length; ++i) {
    175    elem = elements[i];
    176    if (elem.localName != "input" || elem.type != "image") {
    177      elem.click();
    178    }
    179    else {
    180      clickImage(elem, 10, 7);
    181    }
    182    yield undefined;
    183 
    184    var submission = JSON.parse(iframe.contentDocument.documentElement.textContent);
    185    checkSubmission(submission, expectedSub[i]);
    186  }
    187 
    188  // Disabled controls
    189  var i;
    190  for (i = 0; i < elements.length && i < expectedSub.length; ++i) {
    191    elem = elements[i];
    192    form.onsubmit = function() {
    193      elem.disabled = true;
    194    }
    195    if (elem.localName != "input" || elem.type != "image") {
    196      elem.click();
    197    }
    198    else {
    199      clickImage(elem, 10, 7);
    200    }
    201    yield undefined;
    202 
    203    is(elem.disabled, true, "didn't disable");
    204    elem.disabled = false;
    205    form.onsubmit = undefined;
    206 
    207    var submission = JSON.parse(iframe.contentDocument.documentElement.textContent);
    208    checkSubmission(submission, []);
    209  }
    210 
    211  SimpleTest.finish();
    212 }
    213 
    214 </script>
    215 </pre>
    216 </body>
    217 </html>