| <!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: --> |