<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>

body {
    /* Ensure we get pointer events for all touch events. */
    touch-action: none;
}

#container, #container div {
    position: absolute;
    top: 0;
    height: 100px;
}

#container {
    left: 50px;
    width: 400px;
    background-color: black;
}

#leaf-one {
    width: 100px;
    background-color: blue;
}

#nested-container {
    left: 150px;
    width: 250px;
    background-color: green;
}

#nested-leaf-one {
    width: 100px;
    background-color: pink;
}

#nested-leaf-two {
    left: 100px;
    width: 100px;
    background-color: yellow;
}

</style>
</head>
<body>
<div id="container">
    <div id="leaf-one"></div>
    <div id="nested-container">
        <div id="nested-leaf-one"></div>
        <div id="nested-leaf-two"></div>
    </div>
</div>

<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../utils.js"></script>
<script>

'use strict';

async_test(test => {
    const eventsLog = [];
    const logger = event => eventsLog.push(`${event.type}@${event.currentTarget.id}`);
    for (let node of document.querySelectorAll("div")) {
        for (let eventType of ["pointerover", "pointerenter", "pointerout", "pointerleave"])
            node.addEventListener(eventType, logger);
    }

    // Ensure we disable pointer capture.
    document.body.addEventListener("pointerdown", event => event.currentTarget.releasePointerCapture(event.pointerId));

    const one = ui.finger();
    ui.sequence([
        one.begin({ x: 10, y: 50 }), // We start outside of the bounds of any <div>.
        one.move({ x: 100, y: 50 }), // Step 1: we enter the bounds of both #container and #leaf-one.
        one.move({ x: 160, y: 50 }), // Step 2: we leave the bounds of #leaf-one, remaining within #container.
        one.move({ x: 210, y: 50 }), // Step 3: we enter the bounds of #nested-container and #nested-leaf-one, remaining within #container.
        one.move({ x: 310, y: 50 }), // Step 4: we leave the bounds of #nested-leaf-one and enter the bounds of #nested-leaf-two, remaining within #nested-container and #container.
        one.move({ x: 410, y: 50 }), // Step 5: we leave the bounds of #nested-leaf-two, remaining within #nested-container and #container.
        one.move({ x: 460, y: 50 }), // Step 6: we leave the bounds of any <div>.
        one.end()
    ]).then(() => {
        assert_array_equals(eventsLog, [
            // Step 1.
            "pointerover@leaf-one", "pointerover@container", "pointerenter@container", "pointerenter@leaf-one",
            // Step 2.
            "pointerout@leaf-one", "pointerout@container", "pointerleave@leaf-one", "pointerover@container",
            // Step 3.
            "pointerout@container", "pointerover@nested-leaf-one", "pointerover@nested-container", "pointerover@container", "pointerenter@nested-container", "pointerenter@nested-leaf-one",
            // Step 4.
            "pointerout@nested-leaf-one", "pointerout@nested-container", "pointerout@container", "pointerleave@nested-leaf-one", "pointerover@nested-leaf-two", "pointerover@nested-container", "pointerover@container", "pointerenter@nested-leaf-two",
            // Step 5.
            "pointerout@nested-leaf-two", "pointerout@nested-container", "pointerout@container", "pointerleave@nested-leaf-two", "pointerover@nested-container", "pointerover@container",
            // Step 6.
            "pointerout@nested-container", "pointerout@container", "pointerleave@nested-container", "pointerleave@container"
        ]);
        test.done();
    });
}, `Testing that "pointerover", "pointerenter", "pointerout" and "pointerleave" events are dispatched correctly with capture disabled as a touch moves between elements in a hierarchy.`);

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