ladybird/Tests/LibWeb/Text/input/Editing/execCommand-insertText.html
Jelle Raaijmakers e029e785d2 LibWeb: Convert Editing API internals to UTF-16
Both sides of the Editing internals now have to deal with some awkward
converting between UTF-8 and UTF-16, but the upside is that it
immediately exposed an issue with the `insertText` command: instead of
dealing with code units, it was iterating over code points causing the
selection to be updated only once instead of twice. This resulted in the
final selection potentially ending up in between a surrogate pair.

Fixes #5547 (pasting/typing surrogate pairs).
2025-07-24 07:18:25 -04:00

32 lines
1 KiB
HTML

<!DOCTYPE html>
<script src="../include.js"></script>
<div contenteditable="true">foobar</div>
<script>
test(() => {
const selection = getSelection();
const reportSelection = () => {
if (selection.rangeCount === 0) {
println('No range.');
return;
}
const range = selection.getRangeAt(0);
println(`${range.startContainer.nodeName} ${range.startOffset} - ${range.endContainer.nodeName} ${range.endOffset}`);
};
var divElm = document.querySelector('div');
divElm.addEventListener('input', (e) => println('input triggered'));
// Put cursor between 'foo' and 'bar'
selection.setBaseAndExtent(divElm.childNodes[0], 3, divElm.childNodes[0], 3);
// Insert text
document.execCommand('insertText', false, 'baz');
reportSelection();
// Insert Unicode
document.execCommand('insertText', false, '🙂');
reportSelection();
println(divElm.innerHTML);
});
</script>