summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/semantics/interfaces.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/html/semantics/interfaces.html')
-rw-r--r--testing/web-platform/tests/html/semantics/interfaces.html74
1 files changed, 74 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/semantics/interfaces.html b/testing/web-platform/tests/html/semantics/interfaces.html
new file mode 100644
index 0000000000..dc7b600e0a
--- /dev/null
+++ b/testing/web-platform/tests/html/semantics/interfaces.html
@@ -0,0 +1,74 @@
+<!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>