59 lines
2.7 KiB
HTML
59 lines
2.7 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<script src="../../../resources/js-test.js"></script>
|
|
</head>
|
|
<body>
|
|
<script>
|
|
const shadowHost = document.body.appendChild(document.createElement('div'));
|
|
const shadowRoot = shadowHost.attachShadow({mode: 'closed'});
|
|
shadowRoot.textContent = 'hello';
|
|
const shadowNode = shadowRoot.firstChild;
|
|
|
|
function bodyRange()
|
|
{
|
|
const range = document.createRange();
|
|
range.selectNode(document.body);
|
|
return range;
|
|
}
|
|
|
|
function collapsedRangeNode(range)
|
|
{
|
|
return range.collapsed ? range.startContainer : "not collapsed";
|
|
}
|
|
|
|
function testRangeMutation(test)
|
|
{
|
|
range = bodyRange();
|
|
shouldBe("range." + test + "; collapsedRangeNode(range)", "shadowRoot");
|
|
}
|
|
|
|
testRangeMutation("setStart(shadowRoot, 0)");
|
|
testRangeMutation("setEnd(shadowRoot, 0)");
|
|
testRangeMutation("setStartBefore(shadowNode)");
|
|
testRangeMutation("setStartAfter(shadowNode)");
|
|
testRangeMutation("setEndBefore(shadowNode)");
|
|
testRangeMutation("setEndAfter(shadowNode)");
|
|
|
|
shouldBeFalse("bodyRange().isPointInRange(shadowNode, 0)");
|
|
shouldThrowErrorName("bodyRange().comparePoint(shadowNode, 0)", "WrongDocumentError");
|
|
shouldBeFalse("bodyRange().intersectsNode(shadowNode)");
|
|
shouldThrowErrorName("bodyRange().compareNode(shadowNode)", "WrongDocumentError");
|
|
|
|
// FIXME: These are Node methods, not Range, so we might want to move them into a separate test.
|
|
|
|
shouldBe("document.body.compareDocumentPosition(shadowNode) & Node.DOCUMENT_POSITION_DISCONNECTED", "Node.DOCUMENT_POSITION_DISCONNECTED");
|
|
shouldBeTrue("(document.body.compareDocumentPosition(shadowNode) & (Node.DOCUMENT_POSITION_PRECEDING | Node.DOCUMENT_POSITION_FOLLOWING)) != 0");
|
|
shouldBe("document.body.compareDocumentPosition(shadowNode) & Node.DOCUMENT_POSITION_CONTAINS", "0");
|
|
shouldBe("document.body.compareDocumentPosition(shadowNode) & Node.DOCUMENT_POSITION_CONTAINED_BY", "0");
|
|
shouldBe("document.body.compareDocumentPosition(shadowNode) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC", "Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC");
|
|
shouldBe("document.body.compareDocumentPosition(shadowNode) & ~(Node.DOCUMENT_POSITION_DISCONNECTED | Node.DOCUMENT_POSITION_PRECEDING | Node.DOCUMENT_POSITION_FOLLOWING | Node.DOCUMENT_POSITION_CONTAINS | Node.DOCUMENT_POSITION_CONTAINED_BY | Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC)", "0");
|
|
|
|
shouldBeFalse("document.body.contains(shadowNode)");
|
|
|
|
document.body.removeChild(shadowHost);
|
|
|
|
successfullyParsed = true;
|
|
</script>
|
|
</html>
|