blob: 0a8e101f45095a481a2132badba36c59a3605890 [file] [log] [blame]
<!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.textSelectionCaretRect.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>