<?xml version="1.0"?> <html xmlns="http://www.w3.org/1999/xhtml"> <!-- https://bugzilla.mozilla.org/show_bug.cgi?id=428135 --> <head> <title>Test for Bug 428135</title> <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.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=428135">Mozilla Bug 428135</a> <p id="display"></p> <div id="content" style="display: none"> </div> <pre id="test"> <script class="testbody" type="text/javascript"> <![CDATA[ /** Test for Bug 428135 **/ var expectedCurrentTargets = new Array(); function d(el, ename) { var e = document.createEvent("Events"); e.initEvent(ename, true, true); el.dispatchEvent(e); } function testListener(e) { e.preventDefault(); var expected = expectedCurrentTargets.shift(); ok(expected == e.currentTarget, "Unexpected current target [" + e.currentTarget + "], event=" + e.type + ", phase=" + e.eventPhase + ", target should have been " + expected); } function getAndAddListeners(elname) { var el = document; if (elname) { el = document.getElementById(elname); } el.addEventListener("submit", testListener, true); el.addEventListener("submit", testListener, false); el.addEventListener("reset", testListener, true); el.addEventListener("reset", testListener, false); el.addEventListener("fooEvent", testListener, true); el.addEventListener("fooEvent", testListener, false); return el; } function testSubmitResetEvents() { getAndAddListeners(null); var outerForm = getAndAddListeners("outerForm"); var outerSubmit = getAndAddListeners("outerSubmit"); var outerReset = getAndAddListeners("outerReset"); var outerSubmitDispatcher = getAndAddListeners("outerSubmitDispatcher"); var outerResetDispatcher = getAndAddListeners("outerResetDispatcher"); var outerChild = getAndAddListeners("outerChild"); var innerForm = getAndAddListeners("innerForm"); var innerSubmit = getAndAddListeners("innerSubmit"); var innerReset = getAndAddListeners("innerReset"); var innerSubmitDispatcher = getAndAddListeners("innerSubmitDispatcher"); var innerResetDispatcher = getAndAddListeners("innerResetDispatcher"); expectedCurrentTargets = new Array(document, outerForm, outerForm, document); outerSubmit.click(); ok(expectedCurrentTargets.length == 0, "(1) expectedCurrentTargets isn't empty!"); expectedCurrentTargets = new Array(document, outerForm, outerForm, document); outerReset.click(); ok(expectedCurrentTargets.length == 0, "(2) expectedCurrentTargets isn't empty!"); // Because of bug 428135, submit shouldn't propagate // back to outerForm and document! expectedCurrentTargets = new Array(document, outerForm, outerSubmitDispatcher, outerSubmitDispatcher); outerSubmitDispatcher.click(); ok(expectedCurrentTargets.length == 0, "(3) expectedCurrentTargets isn't empty!"); // Because of bug 428135, reset shouldn't propagate // back to outerForm and document! expectedCurrentTargets = new Array(document, outerForm, outerResetDispatcher, outerResetDispatcher); outerResetDispatcher.click(); ok(expectedCurrentTargets.length == 0, "(4) expectedCurrentTargets isn't empty!"); // Because of bug 428135, submit shouldn't propagate // back to outerForm and document! expectedCurrentTargets = new Array(document, outerForm, outerChild, innerForm, innerForm, outerChild); innerSubmit.click(); ok(expectedCurrentTargets.length == 0, "(5) expectedCurrentTargets isn't empty!"); // Because of bug 428135, reset shouldn't propagate // back to outerForm and document! expectedCurrentTargets = new Array(document, outerForm, outerChild, innerForm, innerForm, outerChild); innerReset.click(); ok(expectedCurrentTargets.length == 0, "(6) expectedCurrentTargets isn't empty!"); // Because of bug 428135, submit shouldn't propagate // back to inner/outerForm or document! expectedCurrentTargets = new Array(document, outerForm, outerChild, innerForm, innerSubmitDispatcher, innerSubmitDispatcher); innerSubmitDispatcher.click(); ok(expectedCurrentTargets.length == 0, "(7) expectedCurrentTargets isn't empty!"); // Because of bug 428135, reset shouldn't propagate // back to inner/outerForm or document! expectedCurrentTargets = new Array(document, outerForm, outerChild, innerForm, innerResetDispatcher, innerResetDispatcher); innerResetDispatcher.click(); ok(expectedCurrentTargets.length == 0, "(8) expectedCurrentTargets isn't empty!"); } SimpleTest.waitForExplicitFinish(); addLoadEvent(testSubmitResetEvents); addLoadEvent(SimpleTest.finish); ]]> </script> </pre> <form id="outerForm"> <input type="submit" value="outer" id="outerSubmit"/> <input type="reset" value="reset outer" id="outerReset"/> <input type="button" value="dispatch submit" onclick="d(this, 'submit')" id="outerSubmitDispatcher"/> <input type="button" value="dispatch reset" onclick="d(this, 'reset')" id="outerResetDispatcher"/> <div id="outerChild"> <form id="innerForm"> <input type="submit" value="inner" id="innerSubmit"/> <input type="reset" value="reset inner" id="innerReset"/> <input type="button" value="dispatch submit" onclick="d(this, 'submit')" id="innerSubmitDispatcher"/> <input type="button" value="dispatch reset" onclick="d(this, 'reset')" id="innerResetDispatcher"/> </form> </div> </form> </body> </html>