152 lines
5.5 KiB
HTML
152 lines
5.5 KiB
HTML
<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>
|