chromium/third_party/blink/web_tests/editing/selection/select-line-up-down.html

<!DOCTYPE html>
<html>
<head>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../assert_selection.js"></script>
<script>

selection_test(
  [
    '<div contenteditable>',
      '<div>line| 1</div>',
      '<div><span contenteditable="false">line 2</span><br></div>',
      '<div>line 3</div>',
    '</div>',
  ],
  selection => selection.modify('move', 'forward', 'line'),
  [
  '<div contenteditable>',
      '<div>line 1</div>',
      '<div><span contenteditable="false">line 2</span>|<br></div>',
      '<div>line 3</div>',
    '</div>',
  ],
  'Down arrow selection should not cross editing boundaries.');

selection_test(
  [
    '<div contenteditable>',
      '<div>line| 1</div>',
      '<div>abc<span contenteditable="false">line 2</span><br></div>',
      '<div>line 3</div>',
    '</div>',
  ],
  selection => selection.modify('move', 'forward', 'line'),
  [
  '<div contenteditable>',
      '<div>line 1</div>',
      '<div>abc|<span contenteditable="false">line 2</span><br></div>',
      '<div>line 3</div>',
    '</div>',
  ],
  'Down arrow selection should not cross editing boundaries when content is present before non-editable.');

selection_test(
  [
    '<div contenteditable>',
      '<div>line 1</div>',
      '<div><span contenteditable="false">line 2</span><br></div>',
      '<div>line| 3</div>',
    '</div>',
  ],
  selection => selection.modify('move', 'backward', 'line'),
  [
  '<div contenteditable>',
      '<div>line 1</div>',
      '<div><span contenteditable="false">line 2</span>|<br></div>',
      '<div>line 3</div>',
    '</div>',
  ],
  'Up arrow selection should not cross editing boundaries.');

selection_test(
  [
    '<div contenteditable>',
      '<div>line 1</div>',
      '<div>abc<span contenteditable="false">line 2</span><br></div>',
      '<div>line| 3</div>',
    '</div>',
  ],
  selection => selection.modify('move', 'backward', 'line'),
  [
  '<div contenteditable>',
      '<div>line 1</div>',
      '<div>abc|<span contenteditable="false">line 2</span><br></div>',
      '<div>line 3</div>',
    '</div>',
  ],
  'Up arrow selection should not cross editing boundaries when content is present before non-editable.');

selection_test(
  [
    '<div contenteditable>',
      '<div>line 1</div>',
      '<div><span contenteditable="false">line 2</span>test<br></div>',
      '<div>line| 3</div>',
    '</div>',
  ],
  selection => selection.modify('move', 'backward', 'line'),
  [
  '<div contenteditable>',
      '<div>line 1</div>',
      '<div><span contenteditable="false">line 2</span>|test<br></div>',
      '<div>line 3</div>',
    '</div>',
  ],
  'Up arrow selection should not cross editing boundaries when editable content present around non-editable.');

</script>
</html>