-
Notifications
You must be signed in to change notification settings - Fork 3.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
DOM: Add basic moveBefore() MutationObserver tests
See whatwg/dom#1307 (comment). [email protected] Bug: 40150299 Change-Id: I6be9d91d4e20690694fb20480f0d1d13a766b117 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6108064 Reviewed-by: Noam Rosenthal <[email protected]> Commit-Queue: Dominic Farolino <[email protected]> Cr-Commit-Position: refs/heads/main@{#1400321}
- Loading branch information
1 parent
7f001e1
commit db16b41
Showing
1 changed file
with
52 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
<!DOCTYPE html> | ||
<title>slotchanged event</title> | ||
<script src="/resources/testharness.js"></script> | ||
<script src="/resources/testharnessreport.js"></script> | ||
<body> | ||
|
||
<div id=oldParent> | ||
<p id=target></p> | ||
</div> | ||
<div id=newParent></div> | ||
|
||
<script> | ||
async function runTest(oldParent, target, newParent) { | ||
const observations = []; | ||
const observer = new MutationObserver(mutationList => observations.push(mutationList)); | ||
|
||
observer.observe(oldParent, {childList: true}); | ||
observer.observe(target, {childList: true}); | ||
observer.observe(newParent, {childList: true}); | ||
|
||
newParent.moveBefore(target, null); | ||
|
||
// Wait for microtasks to settle. | ||
await new Promise(resolve => queueMicrotask(resolve)); | ||
|
||
assert_equals(observations.length, 1, "MutationObserver has emitted a single mutation list"); | ||
assert_equals(observations[0].length, 2, "Mutation list has two MutationRecords"); | ||
|
||
const removalRecord = observations[0][0]; | ||
const insertionRecord = observations[0][1]; | ||
assert_equals(removalRecord.target, oldParent, "removalRecord target is correct"); | ||
assert_equals(removalRecord.removedNodes[0], target, "removedNodes contains the moved node"); | ||
assert_equals(insertionRecord.target, newParent, "insertionRecord target is correct"); | ||
assert_equals(insertionRecord.addedNodes[0], target, "addedNodes contains the moved node"); | ||
observer.disconnect(); | ||
} | ||
|
||
promise_test(async t => { | ||
await runTest(oldParent, target, newParent); | ||
}, "[Connected move] MutationObserver removal + insertion is tracked by moveBefore()"); | ||
|
||
promise_test(async t => { | ||
const oldParent = document.createElement('div'); | ||
const target = document.createElement('p'); | ||
const newParent = document.createElement('div'); | ||
// We must append `newParent` as well, since the origin and destination nodes | ||
// must share the same shadow-including root. | ||
oldParent.append(target, newParent); | ||
|
||
await runTest(oldParent, target, newParent); | ||
}, "[Disconnected move] MutationObserver removal + insertion is tracked by moveBefore()"); | ||
</script> |