diff options
Diffstat (limited to 'testing/web-platform/tests/html/semantics/forms/the-button-element/button-events.html')
-rw-r--r-- | testing/web-platform/tests/html/semantics/forms/the-button-element/button-events.html | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/semantics/forms/the-button-element/button-events.html b/testing/web-platform/tests/html/semantics/forms/the-button-element/button-events.html new file mode 100644 index 0000000000..be7806e1ee --- /dev/null +++ b/testing/web-platform/tests/html/semantics/forms/the-button-element/button-events.html @@ -0,0 +1,166 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>HTML Test: Button - events</title> +<link rel="author" title="Intel" href="http://www.intel.com/"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-button-element"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<form name="fm1" style="display:none"> + <button id="btn">BUTTON</button> + <button id="menu_btn" type="menu" menu="menu">MENU BUTTON</button> +</form> +<script> + +var btn = document.getElementById("btn"), + menu_btn = document.getElementById("menu_btn"), + t1 = async_test("The submit event must be fired when click a button in submit status"), + t2 = async_test("The reset event must be fired when click a button in reset status"); + t3 = async_test("type=button shouldn't trigger submit or reset events"); + t4 = async_test("Switching from type=button to type=submit should submit the form"); + t5 = async_test("Switching from type=button to type=reset should reset the form"); + t6 = async_test("Innermost button should submit its form"); + t7 = async_test("Innermost button should reset its form"); + t8 = async_test("Anchor inside a button should be prevent button activation"); + t9 = async_test("input type=submit inside a button should be prevent button activation"); + +document.forms.fm1.onsubmit = t1.step_func(function (evt) { + evt.preventDefault(); + assert_true(evt.isTrusted, "The isTrusted attribute of the submit event should be true."); + assert_true(evt.bubbles, "The bubbles attribute of the submit event should be true."); + assert_true(evt.cancelable, "The cancelable attribute of the submit event should be true."); + assert_true(evt instanceof Event, "The submit event is an instance of Event interface."); + t1.done(); +}); + +document.forms.fm1.onreset = t2.step_func(function (evt) { + assert_true(evt.isTrusted, "The isTrusted attribute of the reset event should be true."); + assert_true(evt.bubbles, "The bubbles attribute of the reset event should be true."); + assert_true(evt.cancelable, "The cancelable attribute of the reset event should be true."); + assert_true(evt instanceof Event, "The reset event is an instance of Event interface."); + t2.done(); +}); + +t1.step(function () { + btn.type = "submit"; + assert_equals(btn.type, "submit", "The button type should be 'submit'."); + btn.click(); +}); + +t2.step(function () { + btn.type = "reset"; + assert_equals(btn.type, "reset", "The button type should be 'reset'."); + btn.click(); +}); + +t3.step(function () { + btn.type = "button"; + assert_equals(btn.type, "button", "The button type should be 'button'."); + document.forms.fm1.onsubmit = t3.step_func(function (evt) { + assert_unreached("type=button shouldn't trigger submission."); + }); + document.forms.fm1.onreset = t3.step_func(function (evt) { + assert_unreached("type=button shouldn't reset the form."); + }); + btn.click(); + t3.done(); +}); + +t4.step(function () { + btn.type = "button"; + btn.onclick = function() { btn.type = "submit"; } + document.forms.fm1.onsubmit = t4.step_func(function (evt) { + evt.preventDefault(); + assert_equals(btn.type, "submit", "The button type should be 'submit'."); + t4.done(); + }); + btn.click(); +}); + +t5.step(function () { + btn.type = "button"; + btn.onclick = function() { btn.type = "reset"; } + document.forms.fm1.onreset = t5.step_func(function (evt) { + evt.preventDefault(); + assert_equals(btn.type, "reset", "The button type should be 'reset'."); + t5.done(); + }); + btn.click(); +}); + +t6.step(function () { + btn.type = "submit"; + btn.innerHTML = ""; + var fm2 = document.createElement("form"); + var btn2 = document.createElement("button"); + btn2.type = "submit"; + fm2.appendChild(btn2); + btn.appendChild(fm2); + assert_true(document.forms.fm1.contains(fm2), "Should have nested forms"); + + function submitListener(evt) { + evt.preventDefault(); + assert_equals(evt.target, fm2, "Innermost form should have got the submit event"); + }; + window.addEventListener("submit", submitListener, true); + btn2.click(); + window.removeEventListener("submit", submitListener, true); + t6.done(); +}); + +t7.step(function () { + btn.type = "reset"; + btn.innerHTML = ""; + var fm2 = document.createElement("form"); + var btn2 = document.createElement("button"); + btn2.type = "reset"; + fm2.appendChild(btn2); + btn.appendChild(fm2); + assert_true(document.forms.fm1.contains(fm2), "Should have nested forms"); + + function resetListener(evt) { + evt.currentTarget.removeEventListener(evt.type, resetListener, true); + evt.preventDefault(); + assert_equals(evt.target, fm2, "Innermost form should have got the reset event"); + t7.done(); + }; + window.addEventListener("reset", resetListener, true); + btn2.click(); +}); + +t8.step(function () { + btn.type = "submit"; + btn.innerHTML = ""; + var a = document.createElement("a"); + a.href = "#"; + btn.appendChild(a); + document.forms.fm1.onsubmit = t8.step_func(function (evt) { + assert_unreached("type=button shouldn't trigger submission."); + }); + + a.click(); + t8.done(); +}); + +t9.step(function () { + btn.type = "submit"; + btn.innerHTML = ""; + var fm2 = document.createElement("form"); + var btn2 = document.createElement("input"); + btn2.type = "submit"; + fm2.appendChild(btn2); + btn.appendChild(fm2); + assert_true(document.forms.fm1.contains(fm2), "Should have nested forms"); + + function submitListener(evt) { + evt.preventDefault(); + assert_equals(evt.target, fm2, "Innermost form should have got the submit event"); + }; + + window.addEventListener("submit", submitListener, true); + btn2.click(); + window.removeEventListener("submit", submitListener, true); + t9.done(); +}); + +</script> |