mouse-pointer-boundary-events-for-shadowdom.html (3325B)
1 <!DOCTYPE HTML> 2 <meta name="viewport" content="width=device-width"> 3 <script src="/resources/testharness.js"></script> 4 <script src="/resources/testharnessreport.js"></script> 5 <script src="/resources/testdriver.js"></script> 6 <script src="/resources/testdriver-actions.js"></script> 7 <script src="/resources/testdriver-vendor.js"></script> 8 <script type="text/javascript" src="pointerevent_support.js"></script> 9 10 <h1>PointerEvent: Verifies that mouse boundary events don't point to shadow-dom</h1> 11 12 <input id="target" style="margin: 20px"> 13 14 <script> 15 function name(node) { 16 return node? node.tagName : "(null)"; 17 } 18 19 function get_event_details(e) { 20 return e.type + " target=" + name(e.target) + " relatedTarget=" + name(e.relatedTarget); 21 } 22 23 function events_match_expected(actualEvents, expectedEventDetails) { 24 if (actualEvents.length != expectedEventDetails.length) 25 return false; 26 27 let actualEventDetails = actualEvents.map(e => get_event_details(e)); 28 return (expectedEventDetails.every(expected => actualEventDetails.includes(expected)) && 29 arePointerEventsBeforeCompatMouseEvents(actualEvents) && 30 actualEventDetails[0] == expectedEventDetails[0]); 31 } 32 33 promise_test(async () => { 34 let rect = document.getElementById("target").getBoundingClientRect(); 35 let targetEvents = ["mouseout", "pointerout", "mouseover", "pointerover"]; 36 let receivedEvents = []; 37 var moveReceived = false; 38 39 targetEvents.forEach(function(eventName) { 40 window.addEventListener(eventName, function(e) { 41 receivedEvents.push(e); 42 }); 43 }); 44 45 window.addEventListener('pointermove', () => { moveReceived = true; }); 46 47 await new test_driver.Actions() 48 .addPointer("default-mouse") 49 .pointerMove(Math.ceil(rect.left - 10), Math.ceil(rect.top - 10)) 50 .send() 51 await resolveWhen(() => { return moveReceived == true }); 52 53 moveReceived = false; 54 receivedEvents.length = 0; 55 await new test_driver.Actions() 56 .addPointer("default-mouse") 57 .pointerMove(Math.ceil(rect.left + 10), Math.ceil(rect.top + 10)) 58 .send() 59 await resolveWhen(() => { return moveReceived == true }); 60 61 let intoInputExpected = [ 62 "pointerout target=BODY relatedTarget=INPUT", 63 "pointerover target=INPUT relatedTarget=BODY", 64 "mouseout target=BODY relatedTarget=INPUT", 65 "mouseover target=INPUT relatedTarget=BODY", 66 ]; 67 assert_true(events_match_expected(receivedEvents, intoInputExpected), "Moved into <input>"); 68 69 70 moveReceived = false; 71 receivedEvents.length = 0; 72 await new test_driver.Actions() 73 .addPointer("default-mouse") 74 .pointerMove(Math.ceil(rect.left - 10), Math.ceil(rect.top - 10)) 75 .send() 76 await resolveWhen(() => { return moveReceived == true }); 77 78 let outOfInputExpected = [ 79 "pointerout target=INPUT relatedTarget=BODY", 80 "pointerover target=BODY relatedTarget=INPUT", 81 "mouseout target=INPUT relatedTarget=BODY", 82 "mouseover target=BODY relatedTarget=INPUT", 83 ]; 84 assert_true(events_match_expected(receivedEvents, outOfInputExpected), "Moved out of <input>"); 85 }, "PointerEvent: Verifies that mouse boundary events don't point to shadow-dom"); 86 </script>