blob: 4388b2db308d70a24b70d94ed2441a468c2267ee [file] [log] [blame]
<!DOCTYPE HTML>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<script type="text/javascript" src="../pointerevent_support.js"></script>
<style>
div.box {
margin: 5px;
padding: 20px;
float: left;
}
#grey {
width: 50px;
height: 50px;
}
</style>
<h1>Verifies the compatibility mouse events are sent correctly when the node is deleted on pointer event handler.</h1>
<div id="grey" class="box" style="background-color:grey">
</div>
<div id="console"></div>
<script>
var receivedEvents = [];
var eventList = ["mousedown", "mouseup", "mousemove",
"pointerdown", "pointerup", "pointermove"];
var removeNodeEvent = "";
var greyDiv = document.getElementById("grey");
eventList.forEach(function(eventName) {
greyDiv.addEventListener(eventName, function(event) {
if (event.eventPhase == Event.AT_TARGET) {
receivedEvents.push(event.type+"@grey");
}
});
});
function createGreenBoxAndAddListeners() {
var greenDiv = document.createElement("div");
greenDiv.setAttribute("class", "box");
greenDiv.id = "green";
greyDiv.innerHTML = "";
greyDiv.appendChild(greenDiv);
eventList.forEach(function(eventName) {
greenDiv.addEventListener(eventName, function(event) {
if (event.eventPhase == Event.AT_TARGET) {
receivedEvents.push(event.type+"@green");
if (event.type == removeNodeEvent) {
greenDiv.parentNode.removeChild(greenDiv);
}
}
});
});
}
function performActions() {
var rect = document.getElementById("green").getBoundingClientRect();
var x1 = rect.left + 5;
var y1 = rect.top + 5;
return new test_driver.Actions()
.pointerMove(0, 0)
.pointerMove(rect.left + 5, rect.top + 5)
.pointerDown(0)
.pointerUp(0)
.send()
.then( () => {
return resolveWhen( () => receivedEvents.length == 6 );
});
}
function testScenario(targetEvent, expectedEvents, description) {
promise_test(async () => {
removeNodeEvent = targetEvent;
receivedEvents = [];
createGreenBoxAndAddListeners();
await performActions();
assert_array_equals(receivedEvents, expectedEvents);
}, description);
}
testScenario("", ["pointermove@green", "mousemove@green", "pointerdown@green", "mousedown@green", "pointerup@green", "mouseup@green"],
"Compat mouse events with no node removal");
testScenario("pointermove", ["pointermove@green", "mousemove@grey", "pointerdown@grey", "mousedown@grey", "pointerup@grey", "mouseup@grey"],
"Compat mouse events with node removal on pointermove");
testScenario("pointerdown", ["pointermove@green", "mousemove@green", "pointerdown@green", "mousedown@grey", "pointerup@grey", "mouseup@grey"],
"Compat mouse events with node removal on pointerdown");
testScenario("pointerup", ["pointermove@green", "mousemove@green", "pointerdown@green", "mousedown@green", "pointerup@green", "mouseup@grey"],
"Compat mouse events with node removal on pointerup");
</script>