blob: 10d1e1f878dc9faf10689e0b78c1d6848d313897 [file] [log] [blame]
<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", "n" ],
[ "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", "n" ], // match Gecko + spec, but not IE.
[ "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", "n" ], // match Gecko + spec, but not IE.
[ "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"],
[ "Multiple text inputs with a hidden submit", "!text,text,?submit", "y"]
];
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 hidden;
if (type[0] == '?') {
type = type.substr(1);
hidden = 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;
if (hidden)
control.style.display = 'none';
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>