| <!doctype html> |
| <title>Synthetic click event "magic"</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <div id=log></div> |
| <div id=dump style=display:none></div> |
| <script> |
| var dump = document.getElementById("dump") |
| |
| async_test(function(t) { |
| var input = document.createElement("input") |
| input.type = "checkbox" |
| dump.appendChild(input) |
| input.onclick = t.step_func_done(function() { |
| assert_true(input.checked) |
| }) |
| input.click() |
| }, "basic with click()") |
| |
| async_test(function(t) { |
| var input = document.createElement("input") |
| input.type = "checkbox" |
| dump.appendChild(input) |
| input.onclick = t.step_func_done(function() { |
| assert_true(input.checked) |
| }) |
| input.dispatchEvent(new MouseEvent("click", {bubbles:true})) // equivalent to the above |
| }, "basic with dispatchEvent()") |
| |
| async_test(function(t) { |
| var input = document.createElement("input") |
| input.type = "checkbox" |
| dump.appendChild(input) |
| input.onclick = t.step_func_done(function() { |
| assert_false(input.checked) |
| }) |
| input.dispatchEvent(new Event("click", {bubbles:true})) // no MouseEvent |
| }, "basic with wrong event class") |
| |
| async_test(function(t) { |
| var input = document.createElement("input") |
| input.type = "checkbox" |
| dump.appendChild(input) |
| var child = input.appendChild(new Text("does not matter")) |
| child.dispatchEvent(new MouseEvent("click")) // does not bubble |
| assert_false(input.checked) |
| t.done() |
| }, "look at parents only when event bubbles") |
| |
| async_test(function(t) { |
| var input = document.createElement("input") |
| input.type = "checkbox" |
| dump.appendChild(input) |
| input.onclick = t.step_func_done(function() { |
| assert_true(input.checked) |
| }) |
| var child = input.appendChild(new Text("does not matter")) |
| child.dispatchEvent(new MouseEvent("click", {bubbles:true})) |
| }, "look at parents when event bubbles") |
| |
| async_test(function(t) { |
| var input = document.createElement("input") |
| input.type = "checkbox" |
| dump.appendChild(input) |
| input.onclick = t.step_func(function() { |
| assert_false(input.checked, "input pre-click must not be triggered") |
| }) |
| var child = input.appendChild(document.createElement("input")) |
| child.type = "checkbox" |
| child.onclick = t.step_func(function() { |
| assert_true(child.checked, "child pre-click must be triggered") |
| }) |
| child.dispatchEvent(new MouseEvent("click", {bubbles:true})) |
| t.done() |
| }, "pick the first with activation behavior <input type=checkbox>") |
| |
| async_test(function(t) { // as above with <a> |
| window.hrefComplete = t.step_func(function(a) { |
| assert_equals(a, 'child'); |
| t.done(); |
| }); |
| var link = document.createElement("a") |
| link.href = "javascript:hrefComplete('link')" // must not be triggered |
| dump.appendChild(link) |
| var child = link.appendChild(document.createElement("a")) |
| child.href = "javascript:hrefComplete('child')" |
| child.dispatchEvent(new MouseEvent("click", {bubbles:true})) |
| }, "pick the first with activation behavior <a href>") |
| |
| async_test(function(t) { |
| var input = document.createElement("input") |
| input.type = "checkbox" |
| dump.appendChild(input) |
| var clickEvent = new MouseEvent("click") |
| input.onchange = t.step_func_done(function() { |
| assert_false(clickEvent.defaultPrevented) |
| assert_true(clickEvent.returnValue) |
| assert_equals(clickEvent.eventPhase, 0) |
| assert_equals(clickEvent.currentTarget, null) |
| assert_equals(clickEvent.target, input) |
| assert_equals(clickEvent.srcElement, input) |
| assert_equals(clickEvent.composedPath().length, 0) |
| }) |
| input.dispatchEvent(clickEvent) |
| }, "event state during post-click handling") |
| |
| async_test(function(t) { |
| var input = document.createElement("input") |
| input.type = "checkbox" |
| dump.appendChild(input) |
| var clickEvent = new MouseEvent("click") |
| var finalTarget = document.createElement("doesnotmatter") |
| finalTarget.onclick = t.step_func_done(function() { |
| assert_equals(clickEvent.target, finalTarget) |
| assert_equals(clickEvent.srcElement, finalTarget) |
| }) |
| input.onchange = t.step_func(function() { |
| finalTarget.dispatchEvent(clickEvent) |
| }) |
| input.dispatchEvent(clickEvent) |
| }, "redispatch during post-click handling") |
| |
| async_test(function(t) { |
| var input = document.createElement("input") |
| input.type = "checkbox" |
| dump.appendChild(input) |
| var child = input.appendChild(document.createElement("input")) |
| child.type = "checkbox" |
| child.disabled = true |
| child.click() |
| assert_false(input.checked) |
| assert_false(child.checked) |
| t.done() |
| }, "disabled checkbox still has activation behavior") |
| |
| async_test(function(t) { |
| var state = "start" |
| |
| var form = document.createElement("form") |
| form.onsubmit = t.step_func(() => { |
| if(state == "start" || state == "checkbox") { |
| state = "failure" |
| } else if(state == "form") { |
| state = "done" |
| } |
| return false |
| }) |
| dump.appendChild(form) |
| var button = form.appendChild(document.createElement("button")) |
| button.type = "submit" |
| var checkbox = button.appendChild(document.createElement("input")) |
| checkbox.type = "checkbox" |
| checkbox.onclick = t.step_func(() => { |
| if(state == "start") { |
| assert_unreached() |
| } else if(state == "checkbox") { |
| assert_true(checkbox.checked) |
| } |
| }) |
| checkbox.disabled = true |
| checkbox.click() |
| assert_equals(state, "start") |
| |
| state = "checkbox" |
| checkbox.disabled = false |
| checkbox.click() |
| assert_equals(state, "checkbox") |
| |
| state = "form" |
| button.click() |
| assert_equals(state, "done") |
| |
| t.done() |
| }, "disabled checkbox still has activation behavior, part 2") |
| |
| async_test(function(t) { |
| var input = document.createElement("input") |
| input.type = "checkbox" |
| input.onclick = t.step_func_done(function() { |
| assert_true(input.checked) |
| }) |
| input.click() |
| }, "disconnected checkbox should be checked") |
| |
| async_test(function(t) { |
| var input = document.createElement("input") |
| input.type = "radio" |
| input.onclick = t.step_func_done(function() { |
| assert_true(input.checked) |
| }) |
| input.click() |
| }, "disconnected radio should be checked") |
| |
| async_test(function(t) { |
| var form = document.createElement("form") |
| var didSubmit = false |
| form.onsubmit = t.step_func(() => { |
| didSubmit = true |
| return false |
| }) |
| var input = form.appendChild(document.createElement("input")) |
| input.type = "submit" |
| input.click() |
| assert_false(didSubmit) |
| t.done() |
| }, "disconnected form should not submit") |
| </script> |