<!DOCTYPE html>

<html>
<head>
    <script src="../../../../resources/js-test-pre.js"></script>
    <style>
        body {
            margin: none;
        }
    </style>
    <meta name="viewport" content="initial-scale=1">
</head>
<body>
    <p id="description"></p>
    <div id="console">
    </div>
    <script>
        description("Test that an Apple Pencil that changes pressure + angles does not generate a touchmove.");
        window.jsTestIsAsync = true;

        function getUIScript(x, y)
        {
            return `
            (function() {
                uiController.stylusDownAtPoint(${x}, ${y}, 2, 1, 0.5, function () {});
                uiController.stylusMoveToPoint(${x}, ${y}, 2.1, 1.1, 0.6, function () {});
                uiController.stylusUpAtPoint(${x}, ${y}, function () {});
            })();`
        }

        function runTest()
        {
            var failed = false;
            window.addEventListener("touchstart", (event) => {
                debug("touchstart fired.");
                shouldBe("event.touches.length", "1");
                shouldBe("event.touches[0].touchType", "'stylus'");
                shouldBeCloseTo("event.touches[0].altitudeAngle", 1, 0.01);
                shouldBeCloseTo("event.touches[0].azimuthAngle", 2, 0.01);
                shouldBeCloseTo("event.touches[0].force", 0.5, 0.01);
            });

            window.addEventListener("touchmove", (event) => {
                debug("FAIL: touchmove fired.");
                failed = true;
            });

            window.addEventListener("touchend", (event) => {
                if (!failed)
                    debug("PASS: Did not see a touchmove.");
                debug("touchend fired.");
                finishJSTest();
            });

            if (window.testRunner)
                testRunner.runUIScript(getUIScript(50, 200), function(result) { });
        }

        window.addEventListener("load", runTest, false);
    </script>
    <script src="../../../../resources/js-test-post.js"></script>
</body>
</html>
