chromium/third_party/blink/web_tests/editing/selection/mouse/click-left-of-rtl-wrapping-text.html

<!doctype html>
<script src="../../../resources/ahem.js"></script>
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<script src="../../assert_selection.js"></script>
<script>
// Test clicking on the left of RTL text puts the caret at the end of the line.

function testClickLeft(lineNumber, numberOfLines, width, sample, expected) {
    const kLineHeight = 20;
    const kStyle = [
        'direction: rtl;',
        `font: 10px/${kLineHeight}px Ahem;`,
        'line-break: normal;',
        `width: ${width}ch;`,
    ].join('');
    selection_test(
        [
            `<style>div {${kStyle}}</style>`,
            `<div contenteditable><bdo dir="rtl">${sample}</bdo></div>`,
        ],
        selection => {
            const target = selection.document.querySelector('div');
            if (!window.eventSender)
                throw 'This test requires eventSender.';
            assert_equals(target.offsetHeight, numberOfLines * kLineHeight);
            const offsetY = (lineNumber - 1)  * kLineHeight;
            eventSender.leapForward(9999); // reset mouse click
            eventSender.mouseMoveTo(
                selection.computeLeft(target) + 3,
                selection.computeTop(target) + offsetY + kLineHeight / 2);
            eventSender.mouseDown();
            eventSender.mouseUp();
        },
        [
            `<style>div {${kStyle}}</style>`,
            `<div contenteditable><bdo dir="rtl">${expected}</bdo></div>`,
        ],
        `Click left at line ${lineNumber}/${numberOfLines}`);
}

// 2 lines
testClickLeft(1, 2, 2, 'A BC', 'A| BC');
testClickLeft(2, 2, 2, 'A BC', 'A BC|');

// 3 lines
testClickLeft(1, 3, 4, 'AB CDEF GHI', 'AB| CDEF GHI');
testClickLeft(2, 3, 4, 'AB CDEF GHI', 'AB CDEF| GHI');
testClickLeft(3, 3, 4, 'AB CDEF GHI', 'AB CDEF GHI|');

// 5 lines
testClickLeft(1, 5, 4, 'AB CDE FGH IJK LMN', 'AB| CDE FGH IJK LMN');
testClickLeft(2, 5, 4, 'AB CDE FGH IJK LMN', 'AB CDE| FGH IJK LMN');
testClickLeft(3, 5, 4, 'AB CDE FGH IJK LMN', 'AB CDE FGH| IJK LMN');
testClickLeft(4, 5, 4, 'AB CDE FGH IJK LMN', 'AB CDE FGH IJK| LMN');
testClickLeft(5, 5, 4, 'AB CDE FGH IJK LMN', 'AB CDE FGH IJK LMN|');
</script>