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