<html><head></head><body>
<script src="../../resources/js-test.js"></script>
<script>

description("Test the contains function that checks if a range contains another range.")

function range(startContainer, startOffset, endContainer, endOffset)
{
    return new StaticRange({ startContainer: startContainer, startOffset: startOffset, endContainer: endContainer, endOffset: endOffset })
}

function collapsedRange(container, offset)
{
    return range(container, offset, container, offset)
}

function contentsRange(node)
{
    return range(node, 0, node, node.childNodes.length)
}

function shouldContainSelf(a)
{
    shouldBeTrue("internals.rangeContainsRange(" + a + ", " + a + ", 'ComposedTree')")
}

function shouldBeNested(a, b)
{
    shouldBeTrue("internals.rangeContainsRange(" + a + ", " + b + ", 'ComposedTree')")
    shouldBeFalse("internals.rangeContainsRange(" + b + ", " + a + ", 'ComposedTree')")
}

function shouldNotContain(a, b)
{
    shouldBeFalse("internals.rangeContainsRange(" + a + ", " + b + ", 'ComposedTree')")
    shouldBeFalse("internals.rangeContainsRange(" + b + ", " + a + ", 'ComposedTree')")
}

let documentElement = document.documentElement;
let body = document.body;

shouldContainSelf("contentsRange(document)")
shouldContainSelf("contentsRange(documentElement)")
shouldContainSelf("contentsRange(body)")

shouldBeNested("contentsRange(document)", "contentsRange(documentElement)")
shouldBeNested("contentsRange(document)", "contentsRange(body)")
shouldBeNested("contentsRange(documentElement)", "contentsRange(body)")

shouldBeNested("contentsRange(document)", "contentsRange(documentElement)")

shouldBeNested("contentsRange(documentElement)", "contentsRange(body)")

shouldBeNested("contentsRange(document)", "collapsedRange(document, 0)")
shouldBeNested("contentsRange(document)", "collapsedRange(document, 1)")
shouldNotContain("contentsRange(document)", "collapsedRange(document, 2)")

shouldBeNested("range(document, 0, document, 2)", "contentsRange(document)")
shouldNotContain("contentsRange(document)", "range(document, 1, document, 2)")

shouldNotContain("range(document, 0, documentElement, 0)", "contentsRange(body)")
shouldBeNested("range(document, 0, body, 0)", "collapsedRange(body, 0)")

let a = document.createElement("div")
shouldNotContain("contentsRange(document)", "contentsRange(a)")

body.appendChild(a)

let b = document.createElement("div")
body.appendChild(b)

let c = document.createElement("div")
b.appendChild(c)

let d = document.createElement("div")
a.appendChild(d)

let e = document.createElement("div")
let f = document.createElement("div")
e.appendChild(f)
shouldNotContain("contentsRange(body)", "contentsRange(f)")

let g = document.createElement("textarea");
c.appendChild(g)
let h = internals.ensureUserAgentShadowRoot(g).firstChild
shouldBeNested("contentsRange(body)", "contentsRange(h)")

</script>
</body></html>
