gecko-dev/dom/html/test/forms/test_formaction_attribute.html

177 строки
6.6 KiB
HTML
Исходник Обычный вид История

<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=566160
-->
<head>
<title>Test for Bug 566160</title>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=566160">Mozilla Bug 566160</a>
<p id="display"></p>
<style>
iframe { width: 130px; height: 100px;}
</style>
<iframe name='frame1' id='frame1'></iframe>
<iframe name='frame2' id='frame2'></iframe>
<iframe name='frame3' id='frame3'></iframe>
<iframe name='frame3bis' id='frame3bis'></iframe>
<iframe name='frame4' id='frame4'></iframe>
<iframe name='frame5' id='frame5'></iframe>
<iframe name='frame6' id='frame6'></iframe>
<iframe name='frame7' id='frame7'></iframe>
<div id="content">
<!-- submit controls with formaction that are validated with a CLICK -->
<form target="frame1" action="data:text/html,FAIL" method="GET">
<input name='foo' value='foo'>
<input type='submit' id='is' formaction="data:text/html,">
</form>
<form target="frame2" action="data:text/html,FAIL" method="GET">
<input name='bar' value='bar'>
<input type='image' id='ii' formaction="data:text/html,">
</form>
<form target="frame3" action="data:text/html,FAIL" method="GET">
<input name='tulip' value='tulip'>
<button type='submit' id='bs' formaction="data:text/html,">submit</button>
</form>
<form target="frame3bis" action="data:text/html,FAIL" method="GET">
<input name='tulipbis' value='tulipbis'>
<button type='submit' id='bsbis' formaction="data:text/html,">submit</button>
</form>
<!-- submit controls with formaction that are validated with ENTER -->
<form target="frame4" action="data:text/html,FAIL" method="GET">
<input name='footulip' value='footulip'>
<input type='submit' id='is2' formaction="data:text/html,">
</form>
<form target="frame5" action="data:text/html,FAIL" method="GET">
<input name='foobar' value='foobar'>
<input type='image' id='ii2' formaction="data:text/html,">
</form>
<form target="frame6" action="data:text/html,FAIL" method="GET">
<input name='tulip2' value='tulip2'>
<button type='submit' id='bs2' formaction="data:text/html,">submit</button>
</form>
<!-- check that when submitting a from from an element
which is not a submit control, @formaction isn't used -->
<form target='frame7' action="data:text/html," method="GET">
<input id='enter' name='input' value='enter' formaction="data:text/html,FAIL">
</form>
</div>
<pre id="test">
<script type="application/javascript">
/** Test for Bug 566160 **/
SimpleTest.waitForExplicitFinish();
SimpleTest.waitForFocus(runTests);
var gTestResults = {
frame1: "data:text/html,?foo=foo",
frame2: "data:text/html,?bar=bar&x=0&y=0",
frame3: "data:text/html,?tulip=tulip",
frame3bis: "data:text/html,?tulipbis=tulipbis",
frame4: "data:text/html,?footulip=footulip",
frame5: "data:text/html,?foobar=foobar&x=0&y=0",
frame6: "data:text/html,?tulip2=tulip2",
frame7: "data:text/html,?input=enter",
};
var gPendingLoad = 0; // Has to be set after depending on the frames number.
function runTests()
{
// We add a load event for the frames which will be called when the forms
// will be submitted.
var frames = [ document.getElementById('frame1'),
document.getElementById('frame2'),
document.getElementById('frame3'),
document.getElementById('frame3bis'),
document.getElementById('frame4'),
document.getElementById('frame5'),
document.getElementById('frame6'),
document.getElementById('frame7'),
];
gPendingLoad = frames.length;
for (var i=0; i<frames.length; i++) {
frames[i].setAttribute('onload', "frameLoaded(this);");
}
/**
* We are going to focus each element before interacting with either for
* simulating the ENTER key (synthesizeKey) or a click (synthesizeMouse) or
* using .click(). This because it may be needed (ENTER) and because we want
* to have the element visible in the iframe.
*
* Focusing the first element (id='is') is launching the tests.
*/
document.getElementById('is').addEventListener('focus', function(aEvent) {
aEvent.target.removeEventListener('focus', arguments.callee, false);
synthesizeMouse(document.getElementById('is'), 5, 5, {});
document.getElementById('ii').focus();
}, false);
document.getElementById('ii').addEventListener('focus', function(aEvent) {
aEvent.target.removeEventListener('focus', arguments.callee, false);
synthesizeMouse(document.getElementById('ii'), 5, 5, {});
document.getElementById('bs').focus();
}, false);
document.getElementById('bs').addEventListener('focus', function(aEvent) {
aEvent.target.removeEventListener('focus', arguments.callee, false);
synthesizeMouse(document.getElementById('bs'), 5, 5, {});
document.getElementById('bsbis').focus();
}, false);
document.getElementById('bsbis').addEventListener('focus', function(aEvent) {
aEvent.target.removeEventListener('focus', arguments.callee, false);
document.getElementById('bsbis').click();
document.getElementById('is2').focus();
}, false);
document.getElementById('is2').addEventListener('focus', function(aEvent) {
aEvent.target.removeEventListener('focus', arguments.callee, false);
synthesizeKey("VK_RETURN", {});
document.getElementById('ii2').focus();
}, false);
document.getElementById('ii2').addEventListener('focus', function(aEvent) {
aEvent.target.removeEventListener('focus', arguments.callee, false);
synthesizeKey("VK_RETURN", {});
document.getElementById('bs2').focus();
}, false);
document.getElementById('bs2').addEventListener('focus', function(aEvent) {
aEvent.target.removeEventListener('focus', arguments.callee, false);
synthesizeKey("VK_RETURN", {});
document.getElementById('enter').focus();
}, false);
document.getElementById('enter').addEventListener('focus', function(aEvent) {
aEvent.target.removeEventListener('focus', arguments.callee, false);
synthesizeKey("VK_RETURN", {});
}, false);
document.getElementById('is').focus();
}
function frameLoaded(aFrame) {
// Check if formaction/action has the correct behavior.
is(aFrame.contentWindow.location.href, gTestResults[aFrame.name],
"the action attribute doesn't have the correct behavior");
if (--gPendingLoad == 0) {
SimpleTest.finish();
}
}
</script>
</pre>
</body>
</html>