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>