Index: third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/nodes/Node-compareDocumentPosition.html |
diff --git a/third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/nodes/Node-compareDocumentPosition.html b/third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/nodes/Node-compareDocumentPosition.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7ac02c6f10072c4c7a8d407513a93d4673ee8b6a |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/nodes/Node-compareDocumentPosition.html |
@@ -0,0 +1,87 @@ |
+<!doctype html> |
+<title>Node.compareDocumentPosition() tests</title> |
+<link rel=author title="Aryeh Gregor" href=ayg@aryeh.name> |
+<div id=log></div> |
+<script src=../../../../resources/testharness.js></script> |
+<script src=../../../../resources/testharnessreport.js></script> |
+<script src=../common.js></script> |
+<script> |
+"use strict"; |
+ |
+testNodes.forEach(function(referenceName) { |
+ var reference = eval(referenceName); |
+ testNodes.forEach(function(otherName) { |
+ var other = eval(otherName); |
+ test(function() { |
+ var result = reference.compareDocumentPosition(other); |
+ |
+ // "If other and reference are the same object, return zero and |
+ // terminate these steps." |
+ if (other === reference) { |
+ assert_equals(result, 0); |
+ return; |
+ } |
+ |
+ // "If other and reference are not in the same tree, return the result of |
+ // adding DOCUMENT_POSITION_DISCONNECTED, |
+ // DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC, and either |
+ // DOCUMENT_POSITION_PRECEDING or DOCUMENT_POSITION_FOLLOWING, with the |
+ // constraint that this is to be consistent, together and terminate these |
+ // steps." |
+ if (furthestAncestor(reference) !== furthestAncestor(other)) { |
+ // TODO: Test that it's consistent. |
+ assert_in_array(result, [Node.DOCUMENT_POSITION_DISCONNECTED + |
+ Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC + |
+ Node.DOCUMENT_POSITION_PRECEDING, |
+ Node.DOCUMENT_POSITION_DISCONNECTED + |
+ Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC + |
+ Node.DOCUMENT_POSITION_FOLLOWING]); |
+ return; |
+ } |
+ |
+ // "If other is an ancestor of reference, return the result of |
+ // adding DOCUMENT_POSITION_CONTAINS to DOCUMENT_POSITION_PRECEDING |
+ // and terminate these steps." |
+ var ancestor = reference.parentNode; |
+ while (ancestor && ancestor !== other) { |
+ ancestor = ancestor.parentNode; |
+ } |
+ if (ancestor === other) { |
+ assert_equals(result, Node.DOCUMENT_POSITION_CONTAINS + |
+ Node.DOCUMENT_POSITION_PRECEDING); |
+ return; |
+ } |
+ |
+ // "If other is a descendant of reference, return the result of adding |
+ // DOCUMENT_POSITION_CONTAINED_BY to DOCUMENT_POSITION_FOLLOWING and |
+ // terminate these steps." |
+ ancestor = other.parentNode; |
+ while (ancestor && ancestor !== reference) { |
+ ancestor = ancestor.parentNode; |
+ } |
+ if (ancestor === reference) { |
+ assert_equals(result, Node.DOCUMENT_POSITION_CONTAINED_BY + |
+ Node.DOCUMENT_POSITION_FOLLOWING); |
+ return; |
+ } |
+ |
+ // "If other is preceding reference return DOCUMENT_POSITION_PRECEDING |
+ // and terminate these steps." |
+ var prev = previousNode(reference); |
+ while (prev && prev !== other) { |
+ prev = previousNode(prev); |
+ } |
+ if (prev === other) { |
+ assert_equals(result, Node.DOCUMENT_POSITION_PRECEDING); |
+ return; |
+ } |
+ |
+ // "Return DOCUMENT_POSITION_FOLLOWING." |
+ assert_equals(result, Node.DOCUMENT_POSITION_FOLLOWING); |
+ }, referenceName + ".compareDocumentPosition(" + otherName + ")"); |
+ }); |
+}); |
+ |
+testDiv.parentNode.removeChild(testDiv); |
+</script> |
+<!-- vim: set expandtab tabstop=2 shiftwidth=2: --> |