run selectionchange tests eventually

This commit is contained in:
Muki Kiboigo
2026-02-10 21:48:56 -08:00
parent 97d53b81a7
commit c8413cb029
3 changed files with 40 additions and 92 deletions

View File

@@ -188,7 +188,7 @@
const input = document.createElement('input');
input.value = 'Hello World';
document.body.appendChild(input);
let eventCount = 0;
let lastEvent = null;
@@ -200,29 +200,24 @@
testing.expectEqual(0, eventCount);
input.setSelectionRange(0, 5);
testing.expectEqual(1, eventCount);
testing.expectEqual('selectionchange', lastEvent.type);
testing.expectEqual(input, lastEvent.target);
testing.expectEqual(true, lastEvent.bubbles);
testing.expectEqual(false, lastEvent.cancelable);
input.select();
testing.expectEqual(2, eventCount);
input.selectionStart = 3;
testing.expectEqual(3, eventCount);
input.selectionEnd = 8;
testing.expectEqual(4, eventCount);
let bubbledToBody = false;
document.body.addEventListener('selectionchange', () => {
bubbledToBody = true;
});
input.setSelectionRange(1, 4);
testing.expectEqual(true, bubbledToBody);
testing.eventually(() => {
testing.expectEqual(5, eventCount);
testing.expectEqual('selectionchange', lastEvent.type);
testing.expectEqual(input, lastEvent.target);
testing.expectEqual(true, lastEvent.bubbles);
testing.expectEqual(false, lastEvent.cancelable);
testing.expectEqual(true, bubbledToBody);
});
}
</script>

View File

@@ -247,28 +247,23 @@
testing.expectEqual(0, eventCount);
textarea.setSelectionRange(0, 5);
testing.expectEqual(1, eventCount);
testing.expectEqual('selectionchange', lastEvent.type);
testing.expectEqual(textarea, lastEvent.target);
testing.expectEqual(true, lastEvent.bubbles);
testing.expectEqual(false, lastEvent.cancelable);
textarea.select();
testing.expectEqual(2, eventCount);
textarea.selectionStart = 3;
testing.expectEqual(3, eventCount);
textarea.selectionEnd = 8;
testing.expectEqual(4, eventCount);
let bubbledToBody = false;
document.body.addEventListener('selectionchange', () => {
bubbledToBody = true;
});
textarea.setSelectionRange(1, 4);
testing.expectEqual(true, bubbledToBody);
testing.eventually(() => {
testing.expectEqual(5, eventCount);
testing.expectEqual('selectionchange', lastEvent.type);
testing.expectEqual(textarea, lastEvent.target);
testing.expectEqual(true, lastEvent.bubbles);
testing.expectEqual(false, lastEvent.cancelable);
testing.expectEqual(true, bubbledToBody);
});
}
</script>

View File

@@ -546,92 +546,50 @@
{
const sel = window.getSelection();
sel.removeAllRanges();
let eventCount = 0;
let lastEvent = null;
document.addEventListener('selectionchange', (e) => {
eventCount++;
lastEvent = e;
});
testing.expectEqual(0, eventCount);
const p1 = document.getElementById("p1");
const textNode = p1.firstChild;
// Test 1: collapse should fire event
const nested = document.getElementById("nested");
sel.collapse(textNode, 5);
testing.expectEqual(1, eventCount);
testing.expectEqual('selectionchange', lastEvent.type);
testing.expectEqual(document, lastEvent.target);
testing.expectEqual(false, lastEvent.bubbles);
testing.expectEqual(false, lastEvent.cancelable);
// Test 2: extend should fire event
sel.extend(textNode, 10);
testing.expectEqual(2, eventCount);
// Test 3: collapseToStart should fire event
sel.collapseToStart();
testing.expectEqual(3, eventCount);
// Test 4: collapseToEnd should fire event
eventCount = 0;
sel.collapseToEnd();
sel.removeAllRanges();
const range = document.createRange();
range.setStart(textNode, 4);
range.setEnd(textNode, 15);
sel.addRange(range);
sel.collapseToEnd();
testing.expectEqual(3, eventCount);
// Test 5: addRange should fire event
eventCount = 0;
sel.removeAllRanges();
sel.removeRange(range);
const newRange = document.createRange();
newRange.selectNodeContents(p1);
sel.addRange(newRange);
testing.expectEqual(2, eventCount);
// Test 6: removeRange should fire event
eventCount = 0;
sel.removeRange(newRange);
testing.expectEqual(1, eventCount);
// Test 7: removeAllRanges should fire event
sel.addRange(newRange);
eventCount = 0;
sel.removeAllRanges();
testing.expectEqual(1, eventCount);
// Test 8: selectAllChildren should fire event
eventCount = 0;
const nested = document.getElementById("nested");
sel.selectAllChildren(nested);
testing.expectEqual(1, eventCount);
// Test 9: setBaseAndExtent should fire event
eventCount = 0;
sel.setBaseAndExtent(textNode, 4, textNode, 15);
testing.expectEqual(1, eventCount);
// Test 10: deleteFromDocument should fire event
sel.collapse(textNode, 5);
sel.extend(textNode, 10);
eventCount = 0;
sel.deleteFromDocument();
testing.expectEqual(1, eventCount);
// Test 11: Event doesn't bubble
let bubbledToBody = false;
document.body.addEventListener('selectionchange', () => {
bubbledToBody = true;
testing.eventually(() => {
testing.expectEqual(14, eventCount);
testing.expectEqual('selectionchange', lastEvent.type);
testing.expectEqual(document, lastEvent.target);
testing.expectEqual(false, lastEvent.bubbles);
testing.expectEqual(false, lastEvent.cancelable);
});
eventCount = 0;
sel.collapse(textNode, 7);
testing.expectEqual(1, eventCount);
testing.expectEqual(false, bubbledToBody);
}
</script>