<!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 eventTested = false;
            var detected_pointertypes = {};
            var test_pointermove = async_test("pointermove event received");
            add_completion_callback(showPointerTypes);

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

                // 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;
                    if (eventTested == false) {
                        test_pointermove.done();
                        eventTested = true;
                    }
                });

                // Inject the inputs to run this test.
                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>