blob: a3413a9bceb8e8cc5d0e558ab68d5954eebf0c45 [file] [log] [blame]
<!DOCTYPE html> <!-- webkit-test-runner [ useFlexibleViewport=true AsyncOverflowScrollingEnabled=true ] -->
<html>
<head>
<script src="../../../resources/js-test.js"></script>
<script src="../../../resources/ui-helper.js"></script>
<meta name=viewport content="width=device-width, initial-scale=1">
<style>
body, html {
width: 100%;
height: 100%;
margin: 0;
}
#editor {
font-size: 24px;
width: 320px;
height: 200px;
overflow: scroll;
}
#console, #description {
width: 100%;
}
</style>
<script>
jsTestIsAsync = true;
function rectsAreEqual(rects, otherRects)
{
if (rects.length != otherRects.length)
return false;
for (let i = 0; i < rects.length; ++i) {
if (rects[i].top != otherRects[i].top
|| rects[i].left != otherRects[i].left
|| rects[i].width != otherRects[i].width
|| rects[i].height != otherRects[i].height)
return false;
}
return true;
}
async function waitForSelectionRectsToChange(fromRects)
{
let rects = fromRects;
while (rectsAreEqual(rects, fromRects))
rects = await UIHelper.getUISelectionViewRects();
return rects;
}
addEventListener("load", async function() {
description("This test verifies that a selection in a fast scrollable area is kept up to date after scrolling. To test manually, tap the button and scroll the editable area down; the selection move to account for the new scroll position.");
const editor = document.getElementById("editor");
const button = document.querySelector("button");
button.addEventListener("click", event => {
editor.focus();
getSelection().selectAllChildren(document.getElementById("select-target"));
event.preventDefault();
});
await UIHelper.activateElementAndWaitForInputSession(button);
selectionRectsBefore = await waitForSelectionRectsToChange([]);
const rect = editor.getBoundingClientRect();
await UIHelper.immediateScrollElementAtContentPointToOffset(rect.left + 40, rect.top + 40, 0, 50);
selectionRectsAfter = await waitForSelectionRectsToChange(selectionRectsBefore);
shouldBe("selectionRectsBefore[0].top", "109");
shouldBe("selectionRectsBefore[0].width", "320");
shouldBe("selectionRectsBefore[0].left", "0");
shouldBe("selectionRectsBefore[0].height", "28");
shouldBe("selectionRectsBefore[1].top", "137");
shouldBe("selectionRectsBefore[1].width", "172");
shouldBe("selectionRectsBefore[1].left", "0");
shouldBe("selectionRectsBefore[1].height", "30");
shouldBe("selectionRectsAfter[0].top", "59");
shouldBe("selectionRectsAfter[0].width", "320");
shouldBe("selectionRectsAfter[0].left", "0");
shouldBe("selectionRectsAfter[0].height", "28");
shouldBe("selectionRectsAfter[1].top", "87");
shouldBe("selectionRectsAfter[1].width", "172");
shouldBe("selectionRectsAfter[1].left", "0");
shouldBe("selectionRectsAfter[1].height", "30");
editor.remove();
button.remove();
finishJSTest();
});
</script>
</head>
<body>
<div id="editor" contenteditable>
<p>The quick brown fox jumped over the lazy dog.</p>
<p id="select-target">The quick brown fox jumped over the lazy dog.</p>
<p>The quick brown fox jumped over the lazy dog.</p>
</div>
<button>Click to select text</button>
<div id="description"></div>
<div id="console"></div>
</body>
</html>