<!DOCTYPE html> <meta charset="utf-8"> <title>Test of interfaces</title> <link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com"> <link rel="help" href="https://html.spec.whatwg.org/multipage/"> <link rel="help" href="https://webidl.spec.whatwg.org/#host-objects"> <link rel="help" href="http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf#page=96"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src=interfaces.js></script> <div id="log"></div> <script> function do_test(local_name, iface, variant) { test(function() { var e; var i = "HTML" + iface + "Element"; if (variant === "useNS") { // Use createElementNS here to preserve the case of local_name. e = document.createElementNS("http://www.w3.org/1999/xhtml", local_name); } else if (variant === "useParser") { e = new DOMParser().parseFromString("<" + local_name + ">", "text/html").querySelector(local_name); } else { e = document.createElement(local_name); } assert_class_string(e, i, "Element " + local_name + " should have " + i + " as its primary interface."); assert_true(e instanceof window[i], "Element " + local_name + " should implement " + i + "."); assert_true(e instanceof HTMLElement, "Element " + local_name + " should implement HTMLElement."); assert_true(e instanceof Element, "Element " + local_name + " should implement Element."); assert_true(e instanceof Node, "Element " + local_name + " should implement Node."); }, "Interfaces for " + local_name + ": " + variant); } // Some elements have weird parser behavior / insertion modes and would be // skipped by the parser, so skip those. function should_do_parser_test(local_name) { return ![ "foo-BAR", "tbody", "td", "tfoot", "th", "thead", "tr", "å-bar", "caption", "col", "colgroup", "frame", "image", "frameset", ].includes(local_name) } elements.forEach(function(a) { do_test(a[0], a[1], "useNS"); if (should_do_parser_test(a[0])) { do_test(a[0], a[1], "useParser"); } // Only run the createElement variant if the input is all-lowercase, because createElement // case-folds to lowercase. Custom elements are required to use all-lowercase to implement // HTMLElement, otherwise they use HTMLUnknownElement per spec. Example: "foo-BAR". if (a[0] === a[0].toLowerCase()) { do_test(a[0].toUpperCase(), a[1], "createElement"); } }) </script>