Index: third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/nodes/mutationobservers.js |
diff --git a/third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/nodes/mutationobservers.js b/third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/nodes/mutationobservers.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..772f280bee9e165b53a779db1ca718534378caba |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/nodes/mutationobservers.js |
@@ -0,0 +1,76 @@ |
+// Compares a mutation record to a predefined one |
+// mutationToCheck is a mutation record from the user agent |
+// expectedRecord is a mutation record minted by the test |
+// for expectedRecord, if properties are ommitted, they get default ones |
+function checkRecords(target, mutationToCheck, expectedRecord) { |
+ var mr1; |
+ var mr2; |
+ |
+ |
+ function checkField(property, isArray) { |
+ var field = mr2[property]; |
+ if (isArray === undefined) { |
+ isArray = false; |
+ } |
+ if (field instanceof Function) { |
+ field = field(); |
+ } else if (field === undefined) { |
+ if (isArray) { |
+ field = new Array(); |
+ } else { |
+ field = null; |
+ } |
+ } |
+ if (isArray) { |
+ assert_array_equals(mr1[property], field, property + " didn't match"); |
+ } else { |
+ assert_equals(mr1[property], field, property + " didn't match"); |
+ } |
+ } |
+ |
+ assert_equals(mutationToCheck.length, expectedRecord.length, "mutation records must match"); |
+ for (var item = 0; item < mutationToCheck.length; item++) { |
+ mr1 = mutationToCheck[item]; |
+ mr2 = expectedRecord[item]; |
+ |
+ if (mr2.target instanceof Function) { |
+ assert_equals(mr1.target, mr2.target(), "target node must match"); |
+ } else if (mr2.target !== undefined) { |
+ assert_equals(mr1.target, mr2.target, "target node must match"); |
+ } else { |
+ assert_equals(mr1.target, target, "target node must match"); |
+ } |
+ |
+ checkField("type"); |
+ checkField("addedNodes", true); |
+ checkField("removedNodes", true); |
+ checkField("previousSibling"); |
+ checkField("nextSibling"); |
+ checkField("attributeName"); |
+ checkField("attributeNamespace"); |
+ checkField("oldValue"); |
+ }; |
+} |
+ |
+function runMutationTest(node, mutationObserverOptions, mutationRecordSequence, mutationFunction, description, target) { |
+ var test = async_test(description); |
+ |
+ |
+ function moc(mrl, obs) { |
+ test.step( |
+ function () { |
+ if (target === undefined) target = node; |
+ checkRecords(target, mrl, mutationRecordSequence); |
+ test.done(); |
+ } |
+ ); |
+ } |
+ |
+ test.step( |
+ function () { |
+ (new MutationObserver(moc)).observe(node, mutationObserverOptions); |
+ mutationFunction(); |
+ } |
+ ); |
+ return mutationRecordSequence.length |
+} |