<!doctype html>
<html>
    <head>
        <title>Pointermove</title>
        <meta name="viewport" content="width=device-width">
        <meta name="assert" content="When a pointer changes coordinates, the pointermove event must be dispatched."/>
        <link rel="stylesheet" type="text/css" href="pointerevent_styles.css">
        <script src="/resources/testharness.js"></script>
        <script src="/resources/testharnessreport.js"></script>
        <script src="/resources/testdriver.js"></script>
        <script src="/resources/testdriver-actions.js"></script>
        <script src="/resources/testdriver-vendor.js"></script>
        <!-- Additional helper script for common checks across event types -->
        <script type="text/javascript" src="pointerevent_support.js"></script>
    </head>
    <body onload="run()">
        <h2>PointerMove</h2>
        <h4>Test Description: This test checks if pointermove event triggers. Move your mouse over the black rectangle or slide it if you are using touchscreen.</h4>
        <div id="target0" style="background:black"></div>
        <script>
            var detected_pointertypes = {};
            var test_pointermove = async_test("pointermove event received");
            add_completion_callback(showPointerTypes);

            function run() {
                var target0 = document.getElementById("target0");
                var actions_promise;

                // When a pointer changes coordinates, the pointermove event must be dispatched.
                // TA: 5.3
                on_event(target0, "pointermove", function (event) {
                    detected_pointertypes[event.pointerType] = true;
                    // Make sure the test finishes after all the input actions are completed.
                    actions_promise.then( () => {
                        test_pointermove.done();
                    });
                });

                // Inject the inputs to run this test.
                actions_promise = new test_driver.Actions().pointerMove(0, 0, {origin: target0}).send();
            }
        </script>
        <h1>Pointer Events pointermove Tests</h1>
        <div id="complete-notice">
            <p>The following pointer types were detected: <span id="pointertype-log"></span>.</p>
            <p>Refresh the page to run the tests again with a different pointer type.</p>
        </div>
        <div id="log"></div>
    </body>
</html>