| <!DOCTYPE html> | |
| <meta charset="utf-8"> | |
| <title>Selection.toString() with user-select: none elements</title> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <div id="test-content"> | |
| <!-- Test case 1: Basic user-select: none --> | |
| <div id="basic"> | |
| a<span style="user-select: none;">b</span>c | |
| </div> | |
| <!-- Test case 2: Nested user-select: none --> | |
| <div id="nested"> | |
| start <span style="user-select: none;">unselectable <strong>nested</strong> | |
| text</span> end | |
| </div> | |
| <!-- Test case 3: Selectable children inside unselectable container --> | |
| <div id="container" style="user-select: none;"> | |
| <span style="user-select: text;">selectable</span> unselectable | |
| <span style="user-select: text;">text</span> | |
| </div> | |
| </div> | |
| <script> | |
| function selectAllAndGetSelectionTextInElement(element) { | |
| const selection = getSelection(); | |
| selection.removeAllRanges(); | |
| const range = document.createRange(); | |
| range.selectNodeContents(element); | |
| selection.addRange(range); | |
| return selection.toString(); | |
| } | |
| test(() => { | |
| const result = selectAllAndGetSelectionTextInElement(document.getElementById('basic')); | |
| assert_equals(result, 'ac', | |
| 'Basic user-select: none content should be excluded'); | |
| }, 'Selection.toString() excludes basic user-select: none content'); | |
| test(() => { | |
| const result = selectAllAndGetSelectionTextInElement(document.getElementById('nested')); | |
| assert_equals(result, 'start end', | |
| 'Nested user-select: none content should be excluded'); | |
| }, 'Selection.toString() excludes nested user-select: none content'); | |
| test(() => { | |
| const result = selectAllAndGetSelectionTextInElement(document.getElementById('container')); | |
| assert_equals(result, 'selectabletext', | |
| 'Selectable children should be included even in unselectable container'); | |
| }, 'Selection.toString() includes selectable children in unselectable ' + | |
| 'container'); | |
| </script> |