| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../../resources/js-test-pre.js"></script> |
| <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, |
| children; |
| xhr.onload = function() { |
| shouldBeNonNull('xhr.responseXML'); |
| shouldBeTrue('xhr.responseXML instanceof Document'); |
| |
| debug('The two open <br> 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); |
| |
| finishJSTest(); |
| }; |
| xhr.onerror = function() { |
| testFailed('The XHR request to an existing resource failed: "' + url + '"'); |
| finishJSTest(); |
| }; |
| xhr.open('GET', url); |
| xhr.responseType = 'document'; |
| xhr.send(null); |
| </script> |
| <script src="../../resources/js-test-post.js"></script> |
| </head> |
| <body> |
| <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. --> |
| <br><br> |
| |
| <div id="console"></div> |
| |
| <script> |
| // 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'); |
| br.id = 'break-tag'; |
| </script> |
| </body> |
| </html> |