<!DOCTYPE html>

<head>
    <meta charset="utf-8">
    <script src='black_box_js_test_utils.js'></script>
    <script src='pointer_event_test_utils.js'></script>
    <style>
        #container {
            overflow: hidden;
            position: absolute;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
            margin: auto;
            width: 100%;
            height: 50%;
            background: rgba(255, 0, 0, 1);
        }

        #surface {
            background: rgba(0, 0, 255, .5);
            height: 100%;
            width: 100%;
            position: fixed;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
        }
    </style>
</head>

<body>
    <script>
        const expected_events = [
            // actions.move_to_element(container).pause(_SLEEP_AFTER_MOVE_TIME)
            { name: 'pointermove', id: 'surface', phase: Event.AT_TARGET },
            { name: 'pointermove', id: 'container', phase: Event.BUBBLING_PHASE },
            // actions.click(container)
            { name: 'pointermove', id: 'surface', phase: Event.AT_TARGET },
            { name: 'pointermove', id: 'container', phase: Event.BUBBLING_PHASE },
            { name: 'pointerdown', id: 'surface', phase: Event.AT_TARGET },
            { name: 'pointerdown', id: 'container', phase: Event.BUBBLING_PHASE },
            { name: 'pointerup', id: 'surface', phase: Event.AT_TARGET },
            { name: 'pointerup', id: 'container', phase: Event.BUBBLING_PHASE },
            // actions.move_to_element(surface).pause(_SLEEP_AFTER_MOVE_TIME)
            { name: 'pointermove', id: 'surface', phase: Event.AT_TARGET },
            { name: 'pointermove', id: 'container', phase: Event.BUBBLING_PHASE },
            // actions.click(surface)
            { name: 'pointermove', id: 'surface', phase: Event.AT_TARGET },
            { name: 'pointermove', id: 'container', phase: Event.BUBBLING_PHASE },
            { name: 'pointerdown', id: 'surface', phase: Event.AT_TARGET },
            { name: 'pointerdown', id: 'container', phase: Event.BUBBLING_PHASE },
            { name: 'pointerup', id: 'surface', phase: Event.AT_TARGET },
            { name: 'pointerup', id: 'container', phase: Event.BUBBLING_PHASE },
        ];

        function endTest(e) {
            console.log('Ending test.')
            assertTrue(failure_count == 0);
            onEndTest();
        }

        function setAllHandlers(prefix, selector, callback) {
            setHandlers(prefix + 'down', selector, callback);
            setHandlers(prefix + 'up', selector, callback);
            setHandlers(prefix + 'move', selector, callback);
        }

        window.onload = function () {
            setAllHandlers('pointer', '.track', logEvent);
            setHandlers('click', '#surface', endTest);
            console.log("Setup finished");
            setupFinished();
        }
    </script>
    <div id="container" class="track">
        <div id="surface" class="track"></div>
    </div>

</body>
