blob: be7806e1ee55297a8b8841e745966413d0e20168 [file] [log] [blame]
<!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>