Test DOMJIT document.body accessor works.

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


PASS successfullyParsed is true

TEST COMPLETE
PASS (
            function testHTMLDocument(element, result)
            {
                for (var i = 0; i < 1e4; ++i) {
                    if (element.body !== result)
                        return false;
                }
                return true;
            }
        )(target, result) is true
PASS (
            function testXMLDocument(element, result)
            {
                for (var i = 0; i < 1e4; ++i) {
                    if (element.body !== result)
                        return false;
                }
                return true;
            }
        )(target, result) is true
PASS (
            function testXMLDocument2(element, result)
            {
                for (var i = 0; i < 1e4; ++i) {
                    if (element.body !== result)
                        return false;
                }
                return true;
            }
        )(target, result) is true
PASS (
            function testNull(element, result)
            {
                for (var i = 0; i < 1e4; ++i) {
                    if (element.body !== result)
                        return false;
                }
                return true;
            }
        )(target, result) is true
PASS (
            function testHTMLElement(element, result)
            {
                for (var i = 0; i < 1e4; ++i) {
                    if (element.body !== result)
                        return false;
                }
                return true;
            }
        )(target, result) is true
PASS (
            function testNoHTML(element, result)
            {
                for (var i = 0; i < 1e4; ++i) {
                    if (element.body !== result)
                        return false;
                }
                return true;
            }
        )(target, result) is true
PASS (
            function testFrameset(element, result)
            {
                for (var i = 0; i < 1e4; ++i) {
                    if (element.body !== result)
                        return false;
                }
                return true;
            }
        )(target, result) is true
 
