testing/web-platform/tests/domparsing/DOMParser-parseFromString-html.html
author Kent Tamura <tkent@chromium.org>
Wed, 06 Mar 2019 10:35:20 +0000
changeset 464607 7cce703abc33ec6f3aa826403287adb6000a397e
parent 464361 66b1aba3fb4372ec47986e728b1da9b32dd3d368
permissions -rw-r--r--
Bug 1529242 [wpt PR 15471] - domparsing: HTML Parser: Remove conditional parsing of <noembed> content, a=testonly Automatic update from web-platform-tests domparsing: HTML Parser: Remove conditional parsing of <noembed> content The HTML Parser had raw text handling for <noembed> content only if plugins were runnable. However, the HTML specification doesn't ask such behavior, and it didn't match to our HTML serializer. We should always handle it as raw text. Bug: 933211 Change-Id: Iade5197a14aeffb6b540c8e9f1ed1880c651955b Reviewed-on: https://chromium-review.googlesource.com/c/1477556 Auto-Submit: Kent Tamura <tkent@chromium.org> Commit-Queue: Kouhei Ueno <kouhei@chromium.org> Reviewed-by: Kouhei Ueno <kouhei@chromium.org> Cr-Commit-Position: refs/heads/master@{#633571} -- wpt-commits: a8348f28a0ca463f412ce4beec0b07d6e39c1fd3 wpt-pr: 15471

<!doctype html>
<title>DOMParser basic test of HTML parsing</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
// |expected| should be an object indicating the expected type of node.
function assert_node(actual, expected) {
    assert_true(actual instanceof expected.type,
                'Node type mismatch: actual = ' + actual.nodeType + ', expected = ' + expected.nodeType);
    if (typeof(expected.id) !== 'undefined')
        assert_equals(actual.id, expected.id, expected.idMessage);
    if (typeof(expected.nodeValue) !== 'undefined')
        assert_equals(actual.nodeValue, expected.nodeValue, expected.nodeValueMessage);
}

var doc;
setup(function() {
    var parser = new DOMParser();
    var input = '<html id="root"><head></head><body></body></html>';
    doc = parser.parseFromString(input, 'text/html');
});

test(function() {
    var root = doc.documentElement;
    assert_node(root, { type: HTMLHtmlElement, id: 'root',
                        idMessage: 'documentElement id attribute should be root.' });
}, 'Parsing of id attribute');

test(function() {
    assert_equals(doc.contentType, "text/html")
}, 'contentType');

test(function() {
    assert_equals(doc.characterSet, "UTF-8")
}, 'characterSet');

test(function() {
    assert_equals(doc.inputEncoding, "UTF-8")
}, 'inputEncoding');

test(function() {
    assert_equals(doc.charset, "UTF-8")
}, 'charset');

test(function() {
    var url = document.URL;
    assert_equals(doc.documentURI, url,
                  'The document must have a URL value equal to the URL of the active document.');
    assert_equals(doc.URL, url,
                  'The document must have a URL value equal to the URL of the active document.');
}, 'URL value');

test(function() {
    assert_equals(doc.baseURI, document.URL);
}, 'baseURI value');

test(function() {
    assert_equals(doc.location, null,
                  'The document must have a location value of null.');
}, 'Location value');

test(function() {
    var soup = "<!DOCTYPE foo></><foo></multiple></>";
    var htmldoc = new DOMParser().parseFromString(soup, "text/html");
    assert_equals(htmldoc.documentElement.localName, "html");
    assert_equals(htmldoc.documentElement.namespaceURI, "http://www.w3.org/1999/xhtml");
}, "DOMParser parses HTML tag soup with no problems");

test(function() {
   const doc = new DOMParser().parseFromString('<noembed>&lt;a&gt;</noembed>', 'text/html');
   assert_equals(doc.querySelector('noembed').textContent, '&lt;a&gt;');
}, 'DOMParser should handle the content of <noembed> as raw text');

test(function() {
    assert_throws(new TypeError(), function() {
        new DOMParser().parseFromString("", "text/foo-this-is-invalid");
    })
}, "DOMParser throws on an invalid enum value")
</script>