<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../utils.js"></script>
<script>

'use strict';

target_test((target, test) => {
    target.style.touchAction = "none";
    const eventTracker = new EventTracker(target, ["pointerdown", "gotpointercapture", "pointermove", "pointerup", "lostpointercapture"]);

    const one = ui.finger();
    const two = ui.finger();
    ui.sequence([
        one.begin({ x: 10, y: 10 }),
        two.begin({ x: 50, y: 50 }),
        one.move({ x: 30, y: 30 }),
        two.move({ x: 70, y: 70 }),
        one.end(),
        two.end()
    ]).then(() => {
        eventTracker.assertMatchesEvents([
            { id: 1, type: "pointerdown" },
            { id: 1, type: "gotpointercapture", isPrimary: true },
            { id: 2, type: "pointerdown" },
            { id: 2, type: "gotpointercapture", isPrimary: false },
            { id: 1, type: "pointermove" },
            { id: 2, type: "pointermove" },
            { id: 1, type: "pointerup" },
            { id: 1, type: "lostpointercapture", isPrimary: false },
            { id: 2, type: "pointerup" },
            { id: 2, type: "lostpointercapture", isPrimary: false }
        ]);
        test.done();
    });
}, "Pointer events for a direct manipulation device trigger 'gotpointercapture' and 'lostpointercapture' events due to implicit capture.");

</script>
</body>
</html>