mirror of
https://github.com/servo/servo.git
synced 2025-06-24 09:04:33 +01:00
87 lines
3.3 KiB
HTML
87 lines
3.3 KiB
HTML
<!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: -->
|