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