pointerevent_click_is_a_pointerevent.html (5014B)
1 <!DOCTYPE HTML> 2 <title>click is a PointerEvent</title> 3 <meta name="variant" content="?mouse"> 4 <meta name="variant" content="?pen"> 5 <meta name="variant" content="?touch"> 6 <link rel="help" href="https://github.com/w3c/pointerevents/pull/317"> 7 <script src="/resources/testharness.js"></script> 8 <script src="/resources/testharnessreport.js"></script> 9 <script src="/resources/testdriver.js"></script> 10 <script src="/resources/testdriver-actions.js"></script> 11 <script src="/resources/testdriver-vendor.js"></script> 12 <script src="pointerevent_support.js"></script> 13 14 <input id="target" style="margin: 20px"> 15 16 <iframe src="resources/minimal.html" height="100" width="100"></iframe> 17 18 <script> 19 'use strict'; 20 const pointer_type = location.search.substring(1); 21 let subframe_loaded = getMessageData("subframe-loaded", frames[0]); 22 23 function assertClickProperties( 24 click_event, window_object, pointerdown_event, pointerup_event) { 25 assert_equals(click_event.constructor, window_object.PointerEvent, 26 "click should use a PointerEvent constructor"); 27 assert_true(click_event instanceof window_object.PointerEvent, 28 "click should be a PointerEvent instance"); 29 assert_equals(click_event.composed, true, "click.composed should be true"); 30 31 if (pointerdown_event) { 32 assert_equals(click_event.pointerId, pointerdown_event.pointerId, 33 "click.pointerId should match pointerdown.pointerId"); 34 assert_equals(click_event.pointerType, pointerdown_event.pointerType, 35 "click.pointerType should match pointerdown.pointerType"); 36 } 37 38 if (pointerup_event) { 39 assert_equals(click_event.pointerId, pointerup_event.pointerId, 40 "click.pointerId should match pointerup.pointerId"); 41 assert_equals(click_event.pointerType, pointerup_event.pointerType, 42 "click.pointerType should match pointerup.pointerType"); 43 } 44 } 45 46 promise_test(async test => { 47 const target = document.getElementById("target"); 48 49 let pointerdown_prevented = preventDefaultPointerdownOnce(target, test); 50 51 let pointerdown_promise = getEvent("pointerdown", target, test); 52 let pointerup_promise = getEvent("pointerup", target, test); 53 let click_promise = getEvent("click", target, test); 54 55 await clickInTarget(pointer_type, target); 56 57 await pointerdown_prevented; 58 let pointerdown_event = await pointerdown_promise; 59 let pointerup_event = await pointerup_promise; 60 let click_event = await click_promise; 61 62 assertClickProperties(click_event, this, pointerdown_event, pointerup_event); 63 }, "click using " + pointer_type + " is a PointerEvent with correct properties"); 64 65 promise_test(async test => { 66 const target = document.getElementById("target"); 67 68 let click_promise = getEvent("click", target, test); 69 await clickInTarget(pointer_type, target); 70 71 let click_event = await click_promise; 72 73 assertClickProperties(click_event, this); 74 assert_not_equals(click_event.pointerId, -1, 75 "click.pointerId should not be -1"); 76 }, "click using " + pointer_type + " is a PointerEvent with correct properties" 77 + " when no other PointerEvent listeners are present"); 78 79 // Run this part of the test only once, since it doesn't rely on the pointer_type. 80 if (pointer_type == "mouse") { 81 promise_test(async test => { 82 const target = document.getElementById("target"); 83 let click_promise = getEvent("click", target, test); 84 target.click(); 85 let click_event = await click_promise; 86 assert_equals(click_event.pointerId, -1, 87 "click.pointerId should be -1"); 88 89 target.type = "button"; 90 target.focus(); 91 click_promise = getEvent("click", target, test); 92 // Press enter 93 let actions = new test_driver.Actions() 94 .keyDown("\uE007") 95 .keyUp("\uE007"); 96 await actions.send(); 97 click_event = await click_promise; 98 assertClickProperties(click_event, this); 99 assert_equals(click_event.pointerId, -1, 100 "click.pointerId should be -1"); 101 }, "click using " + pointer_type + " is a PointerEvent with correct properties" 102 + " using non-pointing device"); 103 } 104 105 promise_test(async test => { 106 // This subtest must be run last as workaround for a WebKit issue where webdriver 107 // fails to correctly direct focus after clicking outside of the frame. This bug 108 // does not occur during normal browsing. https://webkit.org/b/298676 109 await subframe_loaded; 110 111 const target = frames[0]; 112 let pointerdown_promise = getEvent("pointerdown", target, test); 113 let pointerup_promise = getEvent("pointerup", target, test); 114 let click_promise = getEvent("click", target, test); 115 116 await clickInTarget(pointer_type, frames[0].document.body); 117 118 let pointerdown_event = await pointerdown_promise; 119 let pointerup_event = await pointerup_promise; 120 let click_event = await click_promise; 121 122 assertClickProperties(click_event, frames[0], pointerdown_event, pointerup_event); 123 }, "click using " + pointer_type + " is a PointerEvent with correct properties" 124 + " in a subframe"); 125 </script>