blob: 89d2424acc9a824eb1e312cdea8125102f1ee7dc [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
</head>
<body>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../utils.js"></script>
<script>
'use strict';
target_test({ x: "100px", y: "100px", width: "100px", height: "100px" }, (target, test) => {
const eventTracker = new EventTracker(target, ["pointermove", "gotpointercapture", "lostpointercapture"]);
// Start with the mouse outside of the target.
eventSender.mouseMoveTo(50, 50);
// Move it over the target, this yields a "pointermove" event.
eventSender.mouseMoveTo(150, 150);
eventTracker.assertMatchesEvents([
{ type: "pointermove", x: 150, y: 150 }
]);
eventTracker.clear();
// Press the mouse and move it outside the target and release it, this does not yield a "pointermove" event since there is no capture.
eventSender.mouseDown();
eventSender.mouseMoveTo(250, 250);
eventSender.mouseUp();
// Now, move the mouse over the target again.
eventSender.mouseMoveTo(150, 150);
eventTracker.assertMatchesEvents([
{ type: "pointermove", x: 150, y: 150 }
]);
eventTracker.clear();
// And press the mouse button again, but set the capture while handling the "pointerdown" event.
let pointerId;
target.addEventListener("pointerdown", event => {
pointerId = event.pointerId;
assert_false(target.hasPointerCapture(pointerId), "The target does not have pointer capture by default.");
target.setPointerCapture(pointerId);
assert_true(target.hasPointerCapture(pointerId), "The target has pointer capture after calling setPointerCapture().");
});
eventSender.mouseDown();
// Move the mouse oustide the target again. This will yield a "gotpointercapture" event and a "pointermove" event since the target now has pointer capture.
eventSender.mouseMoveTo(250, 250);
eventTracker.assertMatchesEvents([
{ type: "gotpointercapture" },
{ type: "pointermove", x: 250, y: 250 }
]);
eventTracker.clear();
// Finally, release capture and mouse the mouse again, this should not yield a "pointermove" event.
target.releasePointerCapture(pointerId);
assert_false(target.hasPointerCapture(pointerId), "The target no longer has pointer capture after calling releasePointerCapture().");
eventSender.mouseMoveTo(240, 240);
eventTracker.assertMatchesEvents([
{ type: "lostpointercapture" }
]);
test.done();
}, `Testing that setting pointer capture on an element dispatches pointermove events to that element even when the pointer is outside of its bounds.`);
</script>
</body>
</html>