<!DOCTYPE html>
<html>
<head>
    <script src="../../resources/js-test-pre.js"></script>
    <script>
        var a;
        var b;

        function testElements(_a, _b) {
            a = _a;
            b = _b;

            shouldBe('a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_DISCONNECTED', 'Node.DOCUMENT_POSITION_DISCONNECTED');
            shouldBe('b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_DISCONNECTED', 'Node.DOCUMENT_POSITION_DISCONNECTED');
            shouldBe('a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC', 'Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC');
            shouldBe('b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC', 'Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC');
            shouldNotBe('a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_PRECEDING', 'b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING');
            shouldNotBe('a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING', 'b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_FOLLOWING');
            shouldBeNonZero('a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_PRECEDING || a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING');
            shouldBeNonZero('b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING || b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_FOLLOWING');
            // Make sure the returned result is consistent.
            shouldBe('a.compareDocumentPosition(b)', 'a.compareDocumentPosition(b)');
            shouldBe('b.compareDocumentPosition(a)', 'b.compareDocumentPosition(a)');
        }

        debug("* Test with 2 disconnected elements");
        testElements(document.createElement('a'), document.createElement('b'));
        debug("* Test with document and a disconnected element");
        testElements(document, document.createElement('b'));
        debug("* Test with document and a disconnected attribute");
        testElements(document, document.createAttribute('b'));
        debug("* Test with 2 disconnected attributes");
        testElements(document.createAttribute("a"), document.createAttribute("b"));
        debug("* Test with disconnected attribute and element");
        testElements(document.createAttribute("a"), document.createElement("b"));
    </script>
    <script src="../../resources/js-test-post.js"></script>
</head>
<body>
    <p>Comparing the positions of two disconnected nodes should result in DOCUMENT_POSITION_DISCONNECTED.</p>
</body>
</html>
