summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/dom/nodes/Element-matches.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/dom/nodes/Element-matches.html')
-rw-r--r--testing/web-platform/tests/dom/nodes/Element-matches.html87
1 files changed, 87 insertions, 0 deletions
diff --git a/testing/web-platform/tests/dom/nodes/Element-matches.html b/testing/web-platform/tests/dom/nodes/Element-matches.html
new file mode 100644
index 000000000..e04c0f9d1
--- /dev/null
+++ b/testing/web-platform/tests/dom/nodes/Element-matches.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>Selectors-API Level 2 Test Suite: HTML with Selectors Level 3</title>
+<!-- Selectors API Test Suite Version 3 -->
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/dom/nodes/selectors.js"></script>
+<script src="/dom/nodes/ParentNode-querySelector-All.js"></script>
+<script src="Element-matches.js"></script>
+<style>iframe { visibility: hidden; position: absolute; }</style>
+
+<div id="log">This test requires JavaScript.</div>
+
+<script>
+async_test(function() {
+ var frame = document.createElement("iframe");
+ frame.onload = this.step_func_done(init);
+ frame.src = "/dom/nodes/ParentNode-querySelector-All-content.html#target";
+ document.body.appendChild(frame);
+});
+
+function init(e) {
+ /*
+ * This test suite tests Selectors API methods in 4 different contexts:
+ * 1. Document node
+ * 2. In-document Element node
+ * 3. Detached Element node (an element with no parent, not in the document)
+ * 4. Document Fragment node
+ *
+ * For each context, the following tests are run:
+ *
+ * The interface check tests ensure that each type of node exposes the Selectors API methods.
+ *
+ * The matches() tests are run
+ * All the selectors tested for both the valid and invalid selector tests are found in selectors.js.
+ * See comments in that file for documentation of the format used.
+ *
+ * The level2-lib.js file contains all the common test functions for running each of the aforementioned tests
+ */
+
+ var docType = "html"; // Only run tests suitable for HTML
+
+ // Prepare the nodes for testing
+ var doc = e.target.contentDocument; // Document Node tests
+
+ var element = doc.getElementById("root"); // In-document Element Node tests
+
+ //Setup the namespace tests
+ setupSpecialElements(doc, element);
+
+ var outOfScope = element.cloneNode(true); // Append this to the body before running the in-document
+ // Element tests, but after running the Document tests. This
+ // tests that no elements that are not descendants of element
+ // are selected.
+
+ traverse(outOfScope, function(elem) { // Annotate each element as being a clone; used for verifying
+ elem.setAttribute("data-clone", ""); // that none of these elements ever match.
+ });
+
+
+ var detached = element.cloneNode(true); // Detached Element Node tests
+
+ var fragment = doc.createDocumentFragment(); // Fragment Node tests
+ fragment.appendChild(element.cloneNode(true));
+
+ // Setup Tests
+ interfaceCheckMatches("Document", doc);
+ interfaceCheckMatches("Detached Element", detached);
+ interfaceCheckMatches("Fragment", fragment);
+ interfaceCheckMatches("In-document Element", element);
+
+ runSpecialMatchesTests("DIV Element", element);
+ runSpecialMatchesTests("NULL Element", document.createElement("null"));
+ runSpecialMatchesTests("UNDEFINED Element", document.createElement("undefined"));
+
+ runInvalidSelectorTestMatches("Document", doc, invalidSelectors);
+ runInvalidSelectorTestMatches("Detached Element", detached, invalidSelectors);
+ runInvalidSelectorTestMatches("Fragment", fragment, invalidSelectors);
+ runInvalidSelectorTestMatches("In-document Element", element, invalidSelectors);
+
+ runMatchesTest("In-document", doc, validSelectors, "html");
+ runMatchesTest("Detached", detached, validSelectors, "html");
+ runMatchesTest("Fragment", fragment, validSelectors, "html");
+
+ runMatchesTest("In-document", doc, scopedSelectors, "html");
+}
+</script>