Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

<!doctype HTML>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<body>
<div contenteditable="true" id="target"></div>
<script>
promise_test(async () => {
let selectionChangeCount = 0;
const target = document.getElementById("target");
target.innerHTML = '<p>wor<i id="caret">l</i>d</p>';
document.addEventListener("selectionchange", () => {
++selectionChangeCount;
});
await new test_driver.click(document.querySelector('#caret')); // wor|ld
await new Promise(resolve => step_timeout(resolve, 500));
assert_equals(selectionChangeCount, 1, "Selection change count should match");
// Simulate the backspace key press to remove 'r'
await new test_driver.send_keys(target, "\uE003");
// Waits a short time to allow any events to be processed.
await new Promise(resolve => step_timeout(resolve, 500));
const expectedHTML = '<p>wo<i id="caret">l</i>d</p>';
assert_equals(target.innerHTML, expectedHTML, "target.innerHTML should match");
assert_equals(selectionChangeCount, 2, "Selection change count should match");
}, "Selectionchange event is fired after removing the character");
promise_test(async () => {
let selectionChangeCount = 0;
const target = document.getElementById("target");
target.innerHTML = '<p>wor<i id="caret">l</i>d</p>';
await new test_driver.click(document.querySelector('#caret')); //wor|ld
await new test_driver.Actions()
.keyDown('\uE008') // Shift
.keyDown('\uE012') // Arrow Left
.keyUp('\uE012')
.keyDown('\uE012') // Arrow Left
.keyUp('\uE012')
.keyUp('\uE008')
.send();
await new Promise(resolve => step_timeout(resolve, 500));
document.addEventListener("selectionchange", () => {
++selectionChangeCount;
});
// Simulate the backspace key press to remove 'or'
await new test_driver.send_keys(target, "\uE003");
// Waits a short time to allow any events to be processed.
await new Promise(resolve => step_timeout(resolve, 500));
const expectedHTML = '<p>w<i id="caret">l</i>d</p>';
assert_equals(target.innerHTML, expectedHTML, "target.innerHTML should match");
assert_equals(selectionChangeCount, 1, "Selection change count should match");
}, "Selectionchange event is fired after removing the range");
</script>
</body>