Test the intersects function that checks if a range intersects a node.

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


PASS internals.rangeIntersectsNode(contentsRange(document), documentElement, 'ComposedTree') is true
PASS internals.rangeIntersectsNode(contentsRange(document), body, 'ComposedTree') is true
PASS internals.rangeIntersectsNode(contentsRange(documentElement), body, 'ComposedTree') is true
PASS internals.rangeIntersectsNode(contentsRange(document), document, 'ComposedTree') is true
PASS internals.rangeIntersectsNode(range(document, 0, document, 2), document, 'ComposedTree') is true
PASS internals.rangeIntersectsNode(range(document, 0, documentElement, 0), body, 'ComposedTree') is false
PASS internals.rangeIntersectsNode(range(document, 0, documentElement, 1), body, 'ComposedTree') is false
PASS internals.rangeIntersectsNode(range(document, 0, body, 0), body, 'ComposedTree') is true
PASS internals.rangeIntersectsNode(range(document, 0, body, 1), body, 'ComposedTree') is true
PASS internals.rangeIntersectsNode(range(document, 0, documentElement, 2), body, 'ComposedTree') is true
PASS internals.rangeIntersectsNode(contentsRange(document), a, 'ComposedTree') is false
PASS internals.rangeIntersectsNode(contentsRange(body), e, 'ComposedTree') is false
PASS internals.rangeIntersectsNode(contentsRange(f), e, 'ComposedTree') is true
PASS internals.rangeIntersectsNode(contentsRange(body), f, 'ComposedTree') is false
PASS internals.rangeIntersectsNode(contentsRange(body), h, 'ComposedTree') is true
PASS successfullyParsed is true

TEST COMPLETE

