chromium/third_party/blink/web_tests/editing/selection/extend-to-line-boundary.html

<!DOCTYPE html>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../assert_selection.js"></script>
<script>
const kStyle = [
    'font-family: monospace;',
    'width: 4ch',
].join(' ');

// LTR
selection_test(
    [
        `<div contenteditable style="${kStyle}">`,
            '|abc def ghi jkl',
        '</div>',
    ],
    selection => selection.modify("move", "forward", "line"),
    [
        `<div contenteditable style="${kStyle}">`,
            'abc |def ghi jkl',
        '</div>',
    ], 'LTR move forward line');
selection_test(
    [
        `<div contenteditable style="${kStyle}">`,
            'abc |def ghi jkl',
        '</div>',
    ],
    selection => selection.modify("extend", "forward", "lineboundary"),
    [
        `<div contenteditable style="${kStyle}">`,
            'abc ^def |ghi jkl',
        '</div>',
    ], 'LTR extend forward lineboundary');

// RTL-BDO
selection_test(
    [
        `<div contenteditable dir="rtl" style="${kStyle}">`,
            '<bdo dir="rtl">|abc def ghi jkl</bdo>',
        '</div>',
    ],
    selection => selection.modify("move", "forward", "line"),
    [
        `<div contenteditable dir="rtl" style="${kStyle}">`,
            '<bdo dir="rtl">abc |def ghi jkl</bdo>',
        '</div>',
    ], 'RTL-BDO move forward line');
selection_test(
    [
        `<div contenteditable dir="rtl" style="${kStyle}">`,
            '<bdo dir="rtl">abc |def ghi jkl</bdo>',
        '</div>',
    ],
    selection => selection.modify("extend", "forward", "lineboundary"),
    [
        `<div contenteditable dir="rtl" style="${kStyle}">`,
            '<bdo dir="rtl">abc ^def |ghi jkl</bdo>',
        '</div>',
    ], 'RTL-BDO extend forward lineboundary');

// RTL
selection_test(
    [
        `<div contenteditable dir="rtl" style="${kStyle}">`,
            '|\u05D0\u05D1\u05D2 \u05E0\u05E1\u05E2 \u05E5\u05E6\u05E7 \u05D5\u05D6\u05D7',
        '</div>',
    ],
    selection => selection.modify("move", "forward", "line"),
    [
        `<div contenteditable dir="rtl" style="${kStyle}">`,
            '\u05D0\u05D1\u05D2 |\u05E0\u05E1\u05E2 \u05E5\u05E6\u05E7 \u05D5\u05D6\u05D7',
        '</div>',
    ], 'RTL move forward line');
selection_test(
    [
        `<div contenteditable dir="rtl" style="${kStyle}">`,
            '\u05D0\u05D1\u05D2 |\u05E0\u05E1\u05E2 \u05E5\u05E6\u05E7 \u05D5\u05D6\u05D7',
        '</div>',
    ],
    selection => selection.modify("extend", "forward", "lineboundary"),
    [
        `<div contenteditable dir="rtl" style="${kStyle}">`,
            '\u05D0\u05D1\u05D2 ^\u05E0\u05E1\u05E2 |\u05E5\u05E6\u05E7 \u05D5\u05D6\u05D7',
        '</div>',
    ], 'RTL extend forward lineboundary');
</script>