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

View File

@@ -247,28 +247,23 @@
testing.expectEqual(0, eventCount); testing.expectEqual(0, eventCount);
textarea.setSelectionRange(0, 5); 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(); textarea.select();
testing.expectEqual(2, eventCount);
textarea.selectionStart = 3; textarea.selectionStart = 3;
testing.expectEqual(3, eventCount);
textarea.selectionEnd = 8; textarea.selectionEnd = 8;
testing.expectEqual(4, eventCount);
let bubbledToBody = false; let bubbledToBody = false;
document.body.addEventListener('selectionchange', () => { document.body.addEventListener('selectionchange', () => {
bubbledToBody = true; bubbledToBody = true;
}); });
textarea.setSelectionRange(1, 4); 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> </script>

View File

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