test_bug582412-2.html (8259B)
1 <!DOCTYPE HTML> 2 <html> 3 <!-- 4 https://bugzilla.mozilla.org/show_bug.cgi?id=566160 5 --> 6 <head> 7 <title>Test for Bug 566160</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=566160">Mozilla Bug 566160</a> 14 <p id="display"></p> 15 <style> 16 iframe { width: 130px; height: 100px;} 17 </style> 18 <iframe name='frame1' id='frame1'></iframe> 19 <iframe name='frame2' id='frame2'></iframe> 20 <iframe name='frame3' id='frame3'></iframe> 21 <iframe name='frame3bis' id='frame3bis'></iframe> 22 <iframe name='frame4' id='frame4'></iframe> 23 <iframe name='frame5' id='frame5'></iframe> 24 <iframe name='frame6' id='frame6'></iframe> 25 <iframe name='frame7' id='frame7'></iframe> 26 <iframe name='frame8' id='frame8'></iframe> 27 <iframe name='frame9' id='frame9'></iframe> 28 <div id="content"> 29 <!-- submit controls with formaction that are validated with a CLICK --> 30 <form target="frame1" action="form_submit_server.sjs" method="POST"> 31 <input name='foo' value='foo'> 32 <input type='submit' id='is' formenctype='multipart/form-data'> 33 </form> 34 <form target="frame2" action="form_submit_server.sjs" method="POST"> 35 <input name='bar' value='bar'> 36 <input type='image' id='ii' formenctype='multipart/form-data'> 37 </form> 38 <form target="frame3" action="form_submit_server.sjs" method="POST"> 39 <input name='tulip' value='tulip'> 40 <button type='submit' id='bs' formenctype="multipart/form-data">submit</button> 41 </form> 42 <form target="frame3bis" action="form_submit_server.sjs" method="POST"> 43 <input name='tulipbis' value='tulipbis'> 44 <button type='submit' id='bsbis' formenctype="multipart/form-data">submit</button> 45 </form> 46 47 <!-- submit controls with formaction that are validated with ENTER --> 48 <form target="frame4" action="form_submit_server.sjs" method="POST"> 49 <input name='footulip' value='footulip'> 50 <input type='submit' id='is2' formenctype="multipart/form-data"> 51 </form> 52 <form target="frame5" action="form_submit_server.sjs" method="POST"> 53 <input name='foobar' value='foobar'> 54 <input type='image' id='ii2' formenctype="multipart/form-data"> 55 </form> 56 <form target="frame6" action="form_submit_server.sjs" method="POST"> 57 <input name='tulip2' value='tulip2'> 58 <button type='submit' id='bs2' formenctype="multipart/form-data">submit</button> 59 </form> 60 61 <!-- check that when submitting a from from an element 62 which is not a submit control, @formaction isn't used --> 63 <form target='frame7' action="form_submit_server.sjs" method="POST"> 64 <input id='enter' name='input' value='enter' formenctype="multipart/form-data"> 65 </form> 66 67 <!-- If formenctype isn't set, it's default value shouldn't be used --> 68 <form target="frame8" action="form_submit_server.sjs" method="POST" enctype="multipart/form-data"> 69 <input name='tulip8' value='tulip8'> 70 <input type='submit' id='i8'> 71 </form> 72 73 <!-- If formenctype is set but has an invalid value, the default value should 74 be used. --> 75 <form target="frame9" action="form_submit_server.sjs" method="POST" enctype="multipart/form-data"> 76 <input name='tulip9' value='tulip9'> 77 <input type='submit' id='i9' formenctype=""> 78 </form> 79 </div> 80 <pre id="test"> 81 <script type="application/javascript"> 82 83 /** Test for Bug 566160 */ 84 85 SimpleTest.waitForExplicitFinish(); 86 addLoadEvent(function() { 87 setTimeout(runTests, 0); 88 }); 89 90 var gTestResults = { 91 frame1: '[{\"headers\":{\"Content-Disposition\":\"form-data; name=\\\"foo\\\"\"},\"body\":\"foo\"}]', 92 frame2: '[{\"headers\":{\"Content-Disposition\":\"form-data; name=\\\"bar\\\"\"},\"body\":\"bar\"},{\"headers\":{\"Content-Disposition\":\"form-data; name=\\\"x\\\"\"},\"body\":\"0\"},{\"headers\":{\"Content-Disposition\":\"form-data; name=\\\"y\\\"\"},\"body\":\"0\"}]', 93 frame3: '[{\"headers\":{\"Content-Disposition\":\"form-data; name=\\\"tulip\\\"\"},\"body\":\"tulip\"}]', 94 frame3bis: '[{\"headers\":{\"Content-Disposition\":\"form-data; name=\\\"tulipbis\\\"\"},\"body\":\"tulipbis\"}]', 95 frame4: '[{\"headers\":{\"Content-Disposition\":\"form-data; name=\\\"footulip\\\"\"},\"body\":\"footulip\"}]', 96 frame5: '[{\"headers\":{\"Content-Disposition\":\"form-data; name=\\\"foobar\\\"\"},\"body\":\"foobar\"},{\"headers\":{\"Content-Disposition\":\"form-data; name=\\\"x\\\"\"},\"body\":\"0\"},{\"headers\":{\"Content-Disposition\":\"form-data; name=\\\"y\\\"\"},\"body\":\"0\"}]', 97 frame6: '[{\"headers\":{\"Content-Disposition\":\"form-data; name=\\\"tulip2\\\"\"},\"body\":\"tulip2\"}]', 98 frame7: '[]', 99 frame8: '[{\"headers\":{\"Content-Disposition\":\"form-data; name=\\\"tulip8\\\"\"},\"body\":\"tulip8\"}]', 100 frame9: '[]', 101 }; 102 103 var gPendingLoad = 0; // Has to be set after depending on the frames number. 104 105 function runTests() 106 { 107 // We add a load event for the frames which will be called when the forms 108 // will be submitted. 109 var frames = [ document.getElementById('frame1'), 110 document.getElementById('frame2'), 111 document.getElementById('frame3'), 112 document.getElementById('frame3bis'), 113 document.getElementById('frame4'), 114 document.getElementById('frame5'), 115 document.getElementById('frame6'), 116 document.getElementById('frame7'), 117 document.getElementById('frame8'), 118 document.getElementById('frame9'), 119 ]; 120 gPendingLoad = frames.length; 121 122 for (var i=0; i<frames.length; i++) { 123 frames[i].setAttribute('onload', "frameLoaded(this);"); 124 } 125 126 /** 127 * We are going to focus each element before interacting with either for 128 * simulating the ENTER key (synthesizeKey) or a click (synthesizeMouse) or 129 * using .click(). This because it may be needed (ENTER) and because we want 130 * to have the element visible in the iframe. 131 * 132 * Focusing the first element (id='is') is launching the tests. 133 */ 134 document.getElementById('is').addEventListener('focus', function(aEvent) { 135 synthesizeMouse(document.getElementById('is'), 5, 5, {}); 136 document.getElementById('ii').focus(); 137 }, {once: true}); 138 139 document.getElementById('ii').addEventListener('focus', function(aEvent) { 140 synthesizeMouse(document.getElementById('ii'), 5, 5, {}); 141 document.getElementById('bs').focus(); 142 }, {once: true}); 143 144 document.getElementById('bs').addEventListener('focus', function(aEvent) { 145 synthesizeMouse(document.getElementById('bs'), 5, 5, {}); 146 document.getElementById('bsbis').focus(); 147 }, {once: true}); 148 149 document.getElementById('bsbis').addEventListener('focus', function(aEvent) { 150 document.getElementById('bsbis').click(); 151 document.getElementById('is2').focus(); 152 }, {once: true}); 153 154 document.getElementById('is2').addEventListener('focus', function(aEvent) { 155 synthesizeKey("KEY_Enter"); 156 document.getElementById('ii2').focus(); 157 }, {once: true}); 158 159 document.getElementById('ii2').addEventListener('focus', function(aEvent) { 160 synthesizeKey("KEY_Enter"); 161 document.getElementById('bs2').focus(); 162 }, {once: true}); 163 164 document.getElementById('bs2').addEventListener('focus', function(aEvent) { 165 synthesizeKey("KEY_Enter"); 166 document.getElementById('enter').focus(); 167 }, {once: true}); 168 169 document.getElementById('enter').addEventListener('focus', function(aEvent) { 170 synthesizeKey("KEY_Enter"); 171 document.getElementById('i8').focus(); 172 }, {once: true}); 173 174 document.getElementById('i8').addEventListener('focus', function(aEvent) { 175 synthesizeKey("KEY_Enter"); 176 document.getElementById('i9').focus(); 177 }, {once: true}); 178 179 document.getElementById('i9').addEventListener('focus', function(aEvent) { 180 synthesizeKey("KEY_Enter"); 181 }, {once: true}); 182 183 document.getElementById('is').focus(); 184 } 185 186 function frameLoaded(aFrame) { 187 // Check if formaction/action has the correct behavior. 188 is(aFrame.contentDocument.documentElement.textContent, gTestResults[aFrame.name], 189 "the enctype/formenctype attribute doesn't have the correct behavior"); 190 191 if (--gPendingLoad == 0) { 192 SimpleTest.finish(); 193 } 194 } 195 196 </script> 197 </pre> 198 </body> 199 </html>