| <html> |
| <head> |
| <title>Implicit Form Submission</title> |
| <script> |
| |
| var currentTest = 0; |
| |
| // match IE and FF unless specified otherwise. |
| var allTests = [ |
| [ "Single text input", "!text", "y" ], |
| [ "Single text input with submit disabled", "!text,-submit", "y" ], |
| [ "Multiple text inputs", "!text,text,text", "n" ], |
| [ "Multiple text inputs with submit", "!text,text,text,submit", "y" ], |
| [ "Multiple text inputs with submit disabled", "!text,text,text,-submit", "n" ], |
| [ "Multiple text inputs and multiple submits, first submit disabled", "!text,text,text,-submit,submit", "y" ], // match IE, not FF. |
| [ "Text input and text area, text input focused", "!text,textarea", "y" ], |
| [ "Text input and text area and a submit, text input focused", "!text,textarea,submit", "y" ], |
| [ "Text input and text area and a disabled submit, text input focused", "!text,textarea,-submit", "y" ], // match IE, not FF. |
| [ "Text input and checkbox, text input focused", "!text,checkbox", "y" ], |
| [ "Text input and radio, text input focused", "!text,radio", "y" ], |
| [ "Text input and text area, textarea focused", "text,!textarea", "n" ], |
| [ "Text input and checkbox, checkbox focused", "text,!checkbox", "n" ], // match IE, not FF. |
| [ "Text input and radio, radio focused", "text,!radio", "n" ], // match IE, not FF. |
| [ "Single radio", "!radio", "n" ], // match IE, not FF. |
| [ "Single checkbox", "!checkbox", "n" ], |
| [ "Single checkbox with a submit", "!checkbox,submit", "y" ], |
| [ "Single checkbox with a submit disabled", "!checkbox,-submit", "n" ], |
| [ "Single select", "!select", "n" ], |
| [ "Select with a submit", "!select,submit", "y" ], // match neither FF nor IE, instead follow logic. |
| [ "Select with a disabled submit", "!select,-submit", "n" ], |
| [ "Multi-line select with a submit", "!selectBox,submit", "y" ], // match neither FF nor IE, instead follow logic. |
| [ "Multi-line select with a disabled submit", "!selectBox,-submit", "n" ], |
| [ "Text field and single select, text focused", "!text,select", "y" ], |
| [ "Text field and single select, select focused", "text,!select", "n" ], |
| [ "Multiple text inputs with a button", "!text,text,button", "y"], |
| [ "Multiple text inputs with a disabled button", "!text,text,-button", "n"] |
| ]; |
| |
| if (window.testRunner) { |
| testRunner.dumpAsText(); |
| testRunner.waitUntilDone(); |
| } |
| |
| var results = { |
| submissionReported: false, |
| data: [], |
| submitted: function() |
| { |
| this.submissionReported = true; |
| if (!window.eventSender) |
| this.testCompleted(); |
| }, |
| testCompleted: function() |
| { |
| this.data.push(this.submissionReported ? 'y' : 'n'); |
| this.submissionReported = false; |
| runNextTest(); |
| }, |
| publish: function() |
| { |
| document.getElementById("log").innerHTML = allTests.map(function(manifest, i) |
| { |
| return manifest[0] + " should " + (manifest[2] == 'n' ? "not" : "") + " submit: " + (this.data[i] == manifest[2] ? "PASS" : "FAIL"); |
| }, this).join("<br>"); |
| } |
| }; |
| |
| function runNextTest() |
| { |
| ++currentTest; |
| if (currentTest < allTests.length) { |
| runTest(); |
| return; |
| } |
| document.getElementById('arena').textContent = ''; |
| results.publish(); |
| if (window.testRunner) |
| testRunner.notifyDone(); |
| } |
| |
| function buildAndTestForm(arena, inputs, description) |
| { |
| arena.textContent = ''; |
| var form = arena.appendChild(document.createElement("form")); |
| form.addEventListener('submit', function(evt) { |
| results.submitted(); |
| evt.preventDefault(); |
| }) |
| if (!window.eventSender) |
| form.appendChild(document.createElement("p")).innerHTML = "Press Enter key"; |
| inputs.forEach(function(type, i) |
| { |
| var focused; |
| if (type[0] == '!') { |
| type = type.substr(1); |
| focused = true; |
| } |
| var disabled; |
| if (type[0] == '-') { |
| type = type.substr(1); |
| disabled = true; |
| } |
| var control; |
| if (type == "textarea") { |
| control = document.createElement(type); |
| } else if (type == "select") { |
| control = document.createElement(type); |
| control.options.add(new Option("a")); |
| } else if (type == "selectBox") { |
| control = document.createElement("select"); |
| control.size = 5; |
| control.options.add(new Option("a")); |
| } else if (type == "button") { |
| control = document.createElement(type); |
| control.type = "submit"; |
| } else { |
| control = document.createElement("input"); |
| control.type = type; |
| } |
| control.id = focused ? "focused" : ("input" + i); |
| control.disabled = !!disabled; |
| form.appendChild(control); |
| }); |
| var input = document.getElementById("focused"); |
| if (input) |
| input.focus(); |
| if (window.eventSender) { |
| eventSender.keyDown("\r", []); |
| results.testCompleted(); |
| } else { |
| var a = document.createElement("a"); |
| a.href = "javascript:results.testCompleted();"; |
| a.innerText = "Click if didn't submit"; |
| arena.appendChild(a); |
| } |
| } |
| |
| function runTest() |
| { |
| var manifest = allTests[currentTest]; |
| buildAndTestForm(document.getElementById('arena'), manifest[1].split(','), manifest[0]); |
| } |
| |
| </script> |
| </head> |
| <body onload="runTest()"> |
| <p>Tests various combinations of form elements and how implicit submission works with them. |
| <div id="arena"></div> |
| <div id="log"></div> |
| </body> |
| </html> |