<!DOCTYPE html> <!-- webkit-test-runner [ useFlexibleViewport=true ] -->
<html>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<head>
    <script src="../../../resources/js-test-pre.js"></script>
    <style>
        body {
            margin: 0;
        }

        input {
            width: 100%;
            height: 50px;
            position: absolute;
            left: 0;
            top: 0;
        }

        div {
            background-image: linear-gradient(0deg, blue, red);
            height: 4000px;
        }
    </style>
    <script>
    window.jsTestIsAsync = true;

    function tapInInputScript(tapX, tapY)
    {
        return `
        var caretPositions = [];

        function pressArrow() {
            uiController.typeCharacterUsingHardwareKeyboard("leftArrow", function() {
                uiController.doAfterNextStablePresentationUpdate(function() {
                    var selectionRectLeft = uiController.selectionCaretViewRect.left;
                    var caretPositionsLength = caretPositions.length;
                    if (caretPositionsLength == 0 || caretPositions[caretPositionsLength - 1] != selectionRectLeft) {
                        caretPositions.push(selectionRectLeft);
                        pressArrow();
                    } else
                        uiController.uiScriptComplete(JSON.stringify(caretPositions));
                });
            });
        };

        (function() {
            uiController.didShowKeyboardCallback = function() {
                uiController.doAfterNextStablePresentationUpdate(function() {
                    pressArrow();
                });
            };
            uiController.singleTapAtPoint(${tapX}, ${tapY}, function() { });
        })()`;
    }

    var pixelWidth;
    var currentWidth;
    function run()
    {
        if (!window.testRunner || !testRunner.runUIScript) {
            description("To manually test, place the caret in the field above and use the arrow keys to make sure the carets don't appear in the middle of characters.");
            return;
        }

        testRunner.runUIScript(tapInInputScript(window.innerWidth * 2 / 3, 30), caretPositions => {
            caretPositions = JSON.parse(caretPositions);
            pixelWidth = -1;
            for (var i = 0; i < caretPositions.length - 1; ++i) {
                currentWidth = caretPositions[i] - caretPositions[i + 1];
                if (pixelWidth == -1)
                    pixelWidth = currentWidth;
                else
                    shouldBeCloseTo("currentWidth", pixelWidth, 1);
            }
            finishJSTest();
        });
    }
    </script>
</head>
<body onload=run()>
    <input value="&#x1f46b;&#x1f46b;&#x1f3fb;&#x1f46b;&#x1f3ff;&#x1f46c;&#x1f46c;&#x1f3fb;&#x1f46c;&#x1f3ff;&#x1f46d;&#x1f46d;&#x1f3fb;&#x1f46d;&#x1f3ff;&#x1f46a;&#x1f46a;&#x1f3fb;&#x1f46a;&#x1f3ff;"></input>
    <script src="../../../resources/js-test-post.js"></script>
</body>

</html>
