3915aee42cffeff4cedcafc14a9caf1cf8d30276
[WebKit-https.git] / LayoutTests / imported / w3c / web-platform-tests / dom / nodes / ParentNode-querySelector-All-xht.xht
1 <!DOCTYPE html>
2 <html id="html" lang="en" xmlns="http://www.w3.org/1999/xhtml">
3 <head id="head">
4 <title>Selectors-API Test Suite: XHTML</title>
5 <script src="/resources/testharness.js"></script>
6 <script src="/resources/testharnessreport.js"></script>
7 <script src="selectors.js"></script>
8 <script src="ParentNode-querySelector-All.js"></script>
9 <style>iframe { visibility: hidden; position: absolute; }</style>
10 </head>
11 <body>
12 <div id="log">This test requires JavaScript.</div>
13
14 <script><![CDATA[
15 async_test(function() {
16   var frame = document.createElement("iframe");
17   var self = this;
18   frame.onload = function() {
19     // :target doesn't work before a page rendering on some browsers.  We run
20     // tests after an animation frame because it may be later than the first
21     // page rendering.
22     requestAnimationFrame(self.step_func_done(init.bind(self, frame)));
23   };
24   frame.src = "ParentNode-querySelector-All-content.xht#target";
25   document.body.appendChild(frame);
26 })
27
28 function init(target) {
29   /*
30    * This test suite tests Selectors API methods in 4 different contexts:
31    * 1. Document node
32    * 2. In-document Element node
33    * 3. Detached Element node (an element with no parent, not in the document)
34    * 4. Document Fragment node
35    *
36    * For each context, the following tests are run:
37    *
38    * The interface check tests ensure that each type of node exposes the Selectors API methods
39    *
40    * The special selector tests verify the result of passing special values for the selector parameter,
41    * to ensure that the correct WebIDL processing is performed, such as stringification of null and
42    * undefined and missing parameter. The universal selector is also tested here, rather than with the
43    * rest of ordinary selectors for practical reasons.
44    *
45    * The static list verification tests ensure that the node lists returned by the method remain unchanged
46    * due to subsequent document modication, and that a new list is generated each time the method is
47    * invoked based on the current state of the document.
48    *
49    * The invalid selector tests ensure that SyntaxError is thrown for invalid forms of selectors
50    *
51    * The valid selector tests check the result from querying many different types of selectors, with a
52    * list of expected elements. This checks that querySelector() always returns the first result from
53    * querySelectorAll(), and that all matching elements are correctly returned in tree-order. The tests
54    * can be limited by specifying the test types to run, using the testType variable. The constants for this
55    * can be found in selectors.js.
56    *
57    * All the selectors tested for both the valid and invalid selector tests are found in selectors.js.
58    * See comments in that file for documentation of the format used.
59    *
60    * The ParentNode-querySelector-All.js file contains all the common test functions for running each of the aforementioned tests
61    */
62
63   var testType = TEST_QSA;
64   var docType  = "xhtml"; // Only run tests suitable for XHTML
65
66   // Prepare the nodes for testing
67   var doc = target.contentDocument;                 // Document Node tests
68
69   var element = doc.getElementById("root");   // In-document Element Node tests
70
71   //Setup the namespace tests
72   setupSpecialElements(doc, element);
73
74   var outOfScope = element.cloneNode(true);   // Append this to the body before running the in-document
75                                                // Element tests, but after running the Document tests. This
76                                                // tests that no elements that are not descendants of element
77                                                // are selected.
78
79   traverse(outOfScope, function(elem) {        // Annotate each element as being a clone; used for verifying
80     elem.setAttribute("data-clone", "");     // that none of these elements ever match.
81   });
82
83
84   var detached = element.cloneNode(true);     // Detached Element Node tests
85
86   var fragment = doc.createDocumentFragment(); // Fragment Node tests
87   fragment.appendChild(element.cloneNode(true));
88
89   // Setup Tests
90   interfaceCheck("Document", doc);
91   interfaceCheck("Detached Element", detached);
92   interfaceCheck("Fragment", fragment);
93   interfaceCheck("In-document Element", element);
94
95   runSpecialSelectorTests("Document", doc);
96   runSpecialSelectorTests("Detached Element", detached);
97   runSpecialSelectorTests("Fragment", fragment);
98   runSpecialSelectorTests("In-document Element", element);
99
100   verifyStaticList("Document", doc, doc);
101   verifyStaticList("Detached Element", doc, detached);
102   verifyStaticList("Fragment", doc, fragment);
103   verifyStaticList("In-document Element", doc, element);
104
105   runInvalidSelectorTest("Document", doc, invalidSelectors);
106   runInvalidSelectorTest("Detached Element", detached, invalidSelectors);
107   runInvalidSelectorTest("Fragment", fragment, invalidSelectors);
108   runInvalidSelectorTest("In-document Element", element, invalidSelectors);
109
110   runValidSelectorTest("Document", doc, validSelectors, testType, docType);
111   runValidSelectorTest("Detached Element", detached, validSelectors, testType, docType);
112   runValidSelectorTest("Fragment", fragment, validSelectors, testType, docType);
113
114   doc.body.appendChild(outOfScope); // Append before in-document Element tests.
115                                     // None of these elements should match
116   runValidSelectorTest("In-document Element", element, validSelectors, testType, docType);
117 }
118 ]]></script>
119 </body>
120 </html>