| /* |
| * Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| * for details. All rights reserved. Use of this source code is governed by a |
| * BSD-style license that can be found in the LICENSE file. |
| */ |
| /** |
| * @assertion |
| * @description This tests the responseXml loading an HTML |
| * document in Quirks Mode with responseType "document". |
| */ |
| import "dart:html"; |
| import "../../../Utils/async_utils.dart"; |
| import "../../../Utils/expect.dart"; |
| import "../../testcommon.dart"; |
| |
| const String htmlEL = r''' |
| <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> |
| '''; |
| |
| void main() { |
| document.body.appendHtml(htmlEL, treeSanitizer: NodeTreeSanitizer.trusted); |
| |
| var xhr = new HttpRequest(), |
| url = "$testSuiteRoot/fast/xmlhttprequest/resources/xmlhttprequest-responseXML-html-document-responsetype.html", |
| children; |
| |
| xhr.onLoad.listen((e) { |
| Expect.isNotNull(xhr.responseXml); |
| Expect.isTrue(xhr.responseXml is Document); |
| |
| //'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. |
| // Expect.equals(5, children.length); |
| Expect.equals('DIV', children[0].tagName, "children[0].tagName"); |
| Expect.equals('description', children[0].id, 'description'); |
| Expect.equals('BR', children[1].tagName, "children[1].tagName"); |
| Expect.equals('BR', children[2].tagName, "children[2].tagName"); |
| Expect.equals('DIV', children[3].tagName, "children[3].tagName"); |
| Expect.equals('console', children[3].id, "children[3].id"); |
| Expect.equals('SCRIPT', children[4].tagName, "children[4].tagName"); |
| |
| // Make sure the first BR tag doesn't have an "id" set, which will prove |
| // the first script in this document was not executed. |
| Expect.notEquals("break-tag", children[1].id, "children[1].id"); |
| |
| // The parsed HTML document in responseXml should be the same compatMode as this document. |
| // This document is in quirks mode due to a missing DOCTYPE. |
| /* TODO find Dart's equivalent to document.compatMode |
| Expect.equals(xhr.responseXml.compatMode, 'BackCompat'); |
| Expect.equals(xhr.responseXml.compatMode, document.compatMode); |
| */ |
| asyncEnd(); |
| }); |
| xhr.onError.listen( (e) { |
| asyncEnd(); |
| Expect.fail('The XHR request to an existing resource failed: $url'); |
| }); |
| |
| asyncStart(); |
| xhr.open('GET', url); |
| xhr.responseType = 'document'; |
| xhr.send(null); |
| ////// |
| // 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'; |
| } |