Commit f35aa8bc authored by Yoshifumi Inoue's avatar Yoshifumi Inoue Committed by Commit Bot

Make fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-in-zoom-and-scroll.html

This patch changes "caretRangeFromPoint-in-zoom-and-scroll.html" independent from
platform dependent hit test behavior "move cart to boundary when hit point is
above/below line." for a preparation of enabling EditingNG.

Before this patch, the test simulates to move mouse pointer above the line at
style.zoom = 2.

Bug: 707656, 971414
Change-Id: I0588bfc66f04fd00b19dfcfb35b74e62989e0de7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2226576
Commit-Queue: Yoshifumi Inoue <yosin@chromium.org>
Auto-Submit: Yoshifumi Inoue <yosin@chromium.org>
Reviewed-by: default avatarKent Tamura <tkent@chromium.org>
Cr-Commit-Position: refs/heads/master@{#774470}
parent dc9187da
A long text to test document caretRangeFromPoint. Test scroll, zoom, zoomAndScroll .................................... The End
PASS successfullyParsed is true
TEST COMPLETE
PASS Test completed successfully
<div id="first" style="width: 4000px; height: 1000px">A long text to test document caretRangeFromPoint. Test scroll, zoom, zoomAndScroll .................................... The End </div> <!doctype html>
<ul id="console"></ul> <script src="../../../../resources/ahem.js"></script>
<script src="../../../../resources/testharness.js"></script>
<script src="../../../../resources/js-test.js"></script> <script src="../../../../resources/testharnessreport.js"></script>
<style>
body { margin: 0px; }
</style>
<div id="first" style="font: 10px/1 Ahem; width: 4000px; height: 1000px">A long text to test document caretRangeFromPoint. Test scroll, zoom, zoomAndScroll .................................... The End </div>
<script> <script>
function sendClick(x, y) // 29 is the character offset in the div text "A long text to test document
{ // caretRangeFromPoint".
eventSender.mouseMoveTo(x, y); const kExpectedOffset = 29;
eventSender.mouseDown();
eventSender.mouseUp();
}
// 29 is the character offset in the div text "A long text to test document caretRangeFromPoint".
var expectedOffset = 29;
var succeed = true;
function checkNodeAndOffsetFromCaretRangeFromPoint(message, event)
{
var range = document.caretRangeFromPoint(event.clientX, event.clientY);
var offset = 0;
if (range)
offset = range.startOffset;
else {
alert("range is null");
return;
}
var node = document.getElementById("first").firstChild; const t = async_test();
if (range.startContainer != node) {
testFailed(message + " node should be div's child text node"); document.addEventListener('DOMContentLoaded', t.step_func_done(() => {
succeed = false; const range = document.createRange();
} const node = document.getElementById('first');
if (offset != expectedOffset) { // Set range in the middle of word 'document'.
testFailed(message + " offset actual: " + offset + "; expected: " + expectedOffset); range.setStart(node.firstChild, kExpectedOffset);
succeed = false; range.setEnd(node.firstChild, kExpectedOffset + 1);
let stepName = '';
window.addEventListener('click', t.step_func(event => {
const range = document.caretRangeFromPoint(event.clientX, event.clientY);
if (!range)
throw 'caretRangeFromPoint() returns null';
assert_equals(range.startContainer, node.firstChild,
`${stepName}: range.startContainer`);
assert_equals(range.startOffset, kExpectedOffset,
`${stepName}: ${event.clientX} range.startOffset`);
}));
function testIt(name, scrollFunction) {
if (!window.eventSender)
throw 'This test requires eventSender.';
stepName = name;
const shouldScroll = name.startsWith('scroll');
const scale = shouldScroll ? 0.5 : 1;
// Note: Style.zoom doesn't affect Range#getClientRects().
const rect = range.getClientRects()[0];
const x = rect.left * scale * node.style.zoom;
const y = (rect.top + rect.height / 2) * node.style.zoom;
if (shouldScroll)
scrollTo(x, 0);
if (window.eventSender) {
eventSender.leapForward(9999); // reset mouse button state
eventSender.mouseMoveTo(x, y);
eventSender.mouseDown();
eventSender.mouseUp();
} }
scrollTo(0, 0);
} }
function checkBase(event)
{
checkNodeAndOffsetFromCaretRangeFromPoint("check base", event);
}
function checkScroll(event)
{
checkNodeAndOffsetFromCaretRangeFromPoint("check scroll", event);
}
function checkZoom(event)
{
checkNodeAndOffsetFromCaretRangeFromPoint("check zoom", event);
}
function checkZoomScroll(event)
{
checkNodeAndOffsetFromCaretRangeFromPoint("check zoom and scroll", event);
}
function scrollPage(x, y)
{
window.scrollTo(x, y);
}
onload = function()
{
if (!window.testRunner)
return;
testRunner.dumpAsText();
var range = document.createRange();
var node = document.getElementById("first");
// Set range in the middle of word "document".
range.setStart(node.firstChild, expectedOffset);
range.setEnd(node.firstChild, expectedOffset + 1);
// Base test. node.style.zoom = 1.0;
window.addEventListener("click", checkBase, false); testIt('base');
rects = range.getClientRects(); testIt('scroll');
var x = rects[0].left;
var y = rects[0].top + rects[0].width / 2; node.style.zoom = 2.0;
sendClick(x, y); testIt('zoom');
window.removeEventListener("click", checkBase, false); testIt('scroll and zoom');
// Test scroll. scrollTo(0, 0);
window.addEventListener("click", checkScroll, false); node.style.zoom = 1.0;
scrollPage(x / 2, 0); }));
sendClick(x / 2, y);
scrollPage(0, 0);
window.removeEventListener("click", checkScroll, false);
// Test zoom.
window.addEventListener("click", checkZoom, false);
node.style.zoom = 2.0;
rects = range.getClientRects();
var x = rects[0].left;
var y = rects[0].top + rects[0].width / 2;
sendClick(x * 2, y);
window.removeEventListener("click", checkZoom, false);
// Test scroll and Zoom.
window.addEventListener("click", checkZoomScroll, false);
scrollPage(x, 0);
sendClick(x, y);
scrollPage(0, 0);
node.style.zoom = 1.0;
window.removeEventListener("click", checkZoomScroll, false);
if (succeed == true)
testPassed("Test completed successfully");
}
</script> </script>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment