blob: bad45a99f42169cab3ef08c6cbd563301e04734d [file] [log] [blame]
<!DOCTYPE html>
<script src="../../resources/js-test.js"></script>
description('This tests the XMLHttpRequest responseXML loading an HTML document in Strict Mode with responseType "document".');
window.jsTestIsAsync = true;
var xhr = new XMLHttpRequest(),
url = window.location.href,
xhr.onload = function() {
shouldBeTrue('xhr.responseXML instanceof Document');
debug('The two open &lt;br&gt; elements should be siblings of one another and not nested per HTML parser spec.');
// Get the children of the body tag, using QSA to skip all text nodes.
children = xhr.responseXML.querySelectorAll('body > *');
// Test that the HTML parser was used by confirming the two BR tags are adjacent siblings
// and not nested within one another, nor nesting the div#console node.
// There should be 5 non-text children altogether.
shouldEvaluateTo('children.length', 5);
shouldBeEqualToString('children[0].tagName', 'DIV');
shouldBeEqualToString('children[0].id', 'description');
shouldBeEqualToString('children[1].tagName', 'BR');
shouldBeEqualToString('children[2].tagName', 'BR');
shouldBeEqualToString('children[3].tagName', 'DIV');
shouldBeEqualToString('children[3].id', 'console');
shouldBeEqualToString('children[4].tagName', 'SCRIPT');
// Make sure the first BR tag doesn't have an "id" set, which will prove
// the first script in this document was not executed.
shouldNotBe('children[1].id', '"break-tag"');
// The parsed HTML document in responseXML should be the same compatMode as this document.
// This document is in strict mode due to the HTML5 DOCTYPE being present.
shouldBeEqualToString('xhr.responseXML.compatMode', 'CSS1Compat');
shouldBeEqualToString('xhr.responseXML.compatMode', document.compatMode);
xhr.onerror = function() {
testFailed('The XHR request to an existing resource failed: "' + url + '"');
};'GET', url);
xhr.responseType = 'document';
<div id="description"></div>
<!-- Leave these break tags malformed/open to test HTML parsing.
They should be siblings to div#description, and not nested within one another.
The XMLDocument parser would treat the second <br> as a child to the first. -->
<div id="console"></div>
// This code will manipulate the first BR node by adding an "id" to it.
// This same BR will be inspected after XHR loads the document to see
// if this script executed or not. If it didn't execute, the first BR
// will not have an "id" specified and the test passes.
var br = document.querySelector('div#description + br'); = 'break-tag';