<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[173853] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/173853">173853</a></dd>
<dt>Author</dt> <dd>benjamin@webkit.org</dd>
<dt>Date</dt> <dd>2014-09-22 15:09:13 -0700 (Mon, 22 Sep 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Add the baseline implementation of :nth-child(An+B of selector-list)
https://bugs.webkit.org/show_bug.cgi?id=136975

Patch by Benjamin Poulain &lt;bpoulain@apple.com&gt; on 2014-09-22
Reviewed by Darin Adler.

Source/WebCore:

Tests: fast/css/nth-child-of-classname.html
       fast/css/nth-child-of-complex-selector.html
       fast/css/nth-child-of-compound-selector.html
       fast/css/nth-child-of-tagname.html
       fast/selectors/nth-child-of-basics.html
       fast/selectors/nth-child-of-class-style-update.html
       fast/selectors/nth-child-of-complex-selectors.html
       fast/selectors/nth-child-of-selector-list.html

* css/SelectorChecker.cpp:
(WebCore::SelectorChecker::checkOne):
Pretty basic:
-Go over the previous siblings.
-For each sibling, test the selector list. If it matches, increase the count.

* cssjit/SelectorCompiler.cpp:
(WebCore::SelectorCompiler::addPseudoClassType):
Skip any case of the new selector. This will be implemented separately.

LayoutTests:

* fast/css/nth-child-of-classname-expected.html: Added.
* fast/css/nth-child-of-classname.html: Added.
* fast/css/nth-child-of-complex-selector-expected.html: Added.
* fast/css/nth-child-of-complex-selector.html: Added.
* fast/css/nth-child-of-compound-selector-expected.html: Added.
* fast/css/nth-child-of-compound-selector.html: Added.
* fast/css/nth-child-of-tagname-expected.html: Added.
* fast/css/nth-child-of-tagname.html: Added.
Cover basic styling and style sharing.

* fast/selectors/nth-child-of-basics-expected.txt: Added.
* fast/selectors/nth-child-of-basics.html: Added.
* fast/selectors/nth-child-of-complex-selectors-expected.txt: Added.
* fast/selectors/nth-child-of-complex-selectors.html: Added.
* fast/selectors/nth-child-of-selector-list-expected.txt: Added.
* fast/selectors/nth-child-of-selector-list.html: Added.
Cover querySelector and styling of various cases.

* fast/selectors/nth-child-of-class-style-update-expected.txt: Added.
* fast/selectors/nth-child-of-class-style-update.html: Added.
Basic case of style invalidation.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorecssSelectorCheckercpp">trunk/Source/WebCore/css/SelectorChecker.cpp</a></li>
<li><a href="#trunkSourceWebCorecssjitSelectorCompilercpp">trunk/Source/WebCore/cssjit/SelectorCompiler.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfastcssnthchildofclassnameexpectedhtml">trunk/LayoutTests/fast/css/nth-child-of-classname-expected.html</a></li>
<li><a href="#trunkLayoutTestsfastcssnthchildofclassnamehtml">trunk/LayoutTests/fast/css/nth-child-of-classname.html</a></li>
<li><a href="#trunkLayoutTestsfastcssnthchildofcomplexselectorexpectedhtml">trunk/LayoutTests/fast/css/nth-child-of-complex-selector-expected.html</a></li>
<li><a href="#trunkLayoutTestsfastcssnthchildofcomplexselectorhtml">trunk/LayoutTests/fast/css/nth-child-of-complex-selector.html</a></li>
<li><a href="#trunkLayoutTestsfastcssnthchildofcompoundselectorexpectedhtml">trunk/LayoutTests/fast/css/nth-child-of-compound-selector-expected.html</a></li>
<li><a href="#trunkLayoutTestsfastcssnthchildofcompoundselectorhtml">trunk/LayoutTests/fast/css/nth-child-of-compound-selector.html</a></li>
<li><a href="#trunkLayoutTestsfastcssnthchildoftagnameexpectedhtml">trunk/LayoutTests/fast/css/nth-child-of-tagname-expected.html</a></li>
<li><a href="#trunkLayoutTestsfastcssnthchildoftagnamehtml">trunk/LayoutTests/fast/css/nth-child-of-tagname.html</a></li>
<li><a href="#trunkLayoutTestsfastselectorsnthchildofbasicsexpectedtxt">trunk/LayoutTests/fast/selectors/nth-child-of-basics-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastselectorsnthchildofbasicshtml">trunk/LayoutTests/fast/selectors/nth-child-of-basics.html</a></li>
<li><a href="#trunkLayoutTestsfastselectorsnthchildofclassstyleupdateexpectedtxt">trunk/LayoutTests/fast/selectors/nth-child-of-class-style-update-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastselectorsnthchildofclassstyleupdatehtml">trunk/LayoutTests/fast/selectors/nth-child-of-class-style-update.html</a></li>
<li><a href="#trunkLayoutTestsfastselectorsnthchildofcomplexselectorsexpectedtxt">trunk/LayoutTests/fast/selectors/nth-child-of-complex-selectors-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastselectorsnthchildofcomplexselectorshtml">trunk/LayoutTests/fast/selectors/nth-child-of-complex-selectors.html</a></li>
<li><a href="#trunkLayoutTestsfastselectorsnthchildofselectorlistexpectedtxt">trunk/LayoutTests/fast/selectors/nth-child-of-selector-list-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastselectorsnthchildofselectorlisthtml">trunk/LayoutTests/fast/selectors/nth-child-of-selector-list.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (173852 => 173853)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-09-22 22:08:02 UTC (rev 173852)
+++ trunk/LayoutTests/ChangeLog        2014-09-22 22:09:13 UTC (rev 173853)
</span><span class="lines">@@ -1,3 +1,32 @@
</span><ins>+2014-09-22  Benjamin Poulain  &lt;bpoulain@apple.com&gt;
+
+        Add the baseline implementation of :nth-child(An+B of selector-list)
+        https://bugs.webkit.org/show_bug.cgi?id=136975
+
+        Reviewed by Darin Adler.
+
+        * fast/css/nth-child-of-classname-expected.html: Added.
+        * fast/css/nth-child-of-classname.html: Added.
+        * fast/css/nth-child-of-complex-selector-expected.html: Added.
+        * fast/css/nth-child-of-complex-selector.html: Added.
+        * fast/css/nth-child-of-compound-selector-expected.html: Added.
+        * fast/css/nth-child-of-compound-selector.html: Added.
+        * fast/css/nth-child-of-tagname-expected.html: Added.
+        * fast/css/nth-child-of-tagname.html: Added.
+        Cover basic styling and style sharing.
+
+        * fast/selectors/nth-child-of-basics-expected.txt: Added.
+        * fast/selectors/nth-child-of-basics.html: Added.
+        * fast/selectors/nth-child-of-complex-selectors-expected.txt: Added.
+        * fast/selectors/nth-child-of-complex-selectors.html: Added.
+        * fast/selectors/nth-child-of-selector-list-expected.txt: Added.
+        * fast/selectors/nth-child-of-selector-list.html: Added.
+        Cover querySelector and styling of various cases.
+
+        * fast/selectors/nth-child-of-class-style-update-expected.txt: Added.
+        * fast/selectors/nth-child-of-class-style-update.html: Added.
+        Basic case of style invalidation.
+
</ins><span class="cx"> 2014-09-22  David Hyatt  &lt;hyatt@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Bad cast in isValidColumnSpanner.
</span></span></pre></div>
<a id="trunkLayoutTestsfastcssnthchildofclassnameexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/css/nth-child-of-classname-expected.html (0 => 173853)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/nth-child-of-classname-expected.html                                (rev 0)
+++ trunk/LayoutTests/fast/css/nth-child-of-classname-expected.html        2014-09-22 22:09:13 UTC (rev 173853)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+&lt;!doctype html&gt;
+&lt;html&gt;
+&lt;body&gt;
+    &lt;p&gt;This test the styling of paragraphs with :nth-child(An+B of selector). If the test succeed, paragraphs that say &quot;green&quot; should have a green background.&lt;/p&gt;
+    &lt;p class=&quot;webkit&quot;&gt;White&lt;/p&gt;
+    &lt;p style=&quot;background-color: lime&quot;&gt;Green!&lt;/p&gt;
+    &lt;p style=&quot;background-color: lime&quot;&gt;Green!&lt;/p&gt;
+    &lt;p style=&quot;background-color: lime&quot;&gt;Green!&lt;/p&gt;
+    &lt;p&gt;White&lt;/p&gt;
+    &lt;p&gt;White&lt;/p&gt;
+    &lt;p&gt;White&lt;/p&gt;
+    &lt;p style=&quot;background-color: lime&quot;&gt;Green!&lt;/p&gt;
+    &lt;p style=&quot;background-color: lime&quot;&gt;Green!&lt;/p&gt;
+    &lt;p&gt;White&lt;/p&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastcssnthchildofclassnamehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/css/nth-child-of-classname.html (0 => 173853)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/nth-child-of-classname.html                                (rev 0)
+++ trunk/LayoutTests/fast/css/nth-child-of-classname.html        2014-09-22 22:09:13 UTC (rev 173853)
</span><span class="lines">@@ -0,0 +1,23 @@
</span><ins>+&lt;!doctype html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;style&gt;
+p:nth-child(even of .webkit, .fast) {
+    background-color: lime;
+}
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+    &lt;p&gt;This test the styling of paragraphs with :nth-child(An+B of selector). If the test succeed, paragraphs that say &quot;green&quot; should have a green background.&lt;/p&gt;
+    &lt;p class=&quot;webkit&quot;&gt;White&lt;/p&gt;
+    &lt;p&gt;Green!&lt;/p&gt;
+    &lt;p&gt;Green!&lt;/p&gt;
+    &lt;p class=&quot;fast&quot;&gt;Green!&lt;/p&gt;
+    &lt;p&gt;White&lt;/p&gt;
+    &lt;p&gt;White&lt;/p&gt;
+    &lt;p class=&quot;webkit&quot;&gt;White&lt;/p&gt;
+    &lt;p&gt;Green!&lt;/p&gt;
+    &lt;p class=&quot;webkit&quot;&gt;Green!&lt;/p&gt;
+    &lt;p&gt;White&lt;/p&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastcssnthchildofcomplexselectorexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/css/nth-child-of-complex-selector-expected.html (0 => 173853)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/nth-child-of-complex-selector-expected.html                                (rev 0)
+++ trunk/LayoutTests/fast/css/nth-child-of-complex-selector-expected.html        2014-09-22 22:09:13 UTC (rev 173853)
</span><span class="lines">@@ -0,0 +1,14 @@
</span><ins>+&lt;!doctype html&gt;
+&lt;html&gt;
+&lt;body&gt;
+    &lt;p&gt;This test the styling of paragraphs with :nth-child(An+B of selector). If the test succeed, paragraphs that say &quot;green&quot; should have a green background.&lt;/p&gt;
+    &lt;p&gt;White&lt;/p&gt;
+    &lt;p&gt;White&lt;/p&gt;
+    &lt;p&gt;White&lt;/p&gt;
+    &lt;p style=&quot;background-color: lime&quot;&gt;Green&lt;/p&gt;
+    &lt;p&gt;White&lt;/p&gt;
+    &lt;p&gt;White&lt;/p&gt;
+    &lt;p&gt;White&lt;/p&gt;
+    &lt;p style=&quot;background-color: lime&quot;&gt;Green&lt;/p&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastcssnthchildofcomplexselectorhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/css/nth-child-of-complex-selector.html (0 => 173853)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/nth-child-of-complex-selector.html                                (rev 0)
+++ trunk/LayoutTests/fast/css/nth-child-of-complex-selector.html        2014-09-22 22:09:13 UTC (rev 173853)
</span><span class="lines">@@ -0,0 +1,22 @@
</span><ins>+&lt;!doctype html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;style&gt;
+/* At least 4 pair of &lt;p&gt; above, can be overlapping. The other selectors of the list are useless. */
+p:nth-child(4n of html:root&gt;body&gt;p+p:not(empty), :not(*), p:not(p), span, .notthere) {
+    background-color: lime;
+}
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+    &lt;p&gt;This test the styling of paragraphs with :nth-child(An+B of selector). If the test succeed, paragraphs that say &quot;green&quot; should have a green background.&lt;/p&gt;
+    &lt;p&gt;White&lt;/p&gt;
+    &lt;p&gt;White&lt;/p&gt;
+    &lt;p&gt;White&lt;/p&gt;
+    &lt;p&gt;Green&lt;/p&gt;
+    &lt;p&gt;White&lt;/p&gt;
+    &lt;p&gt;White&lt;/p&gt;
+    &lt;p&gt;White&lt;/p&gt;
+    &lt;p&gt;Green&lt;/p&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastcssnthchildofcompoundselectorexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/css/nth-child-of-compound-selector-expected.html (0 => 173853)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/nth-child-of-compound-selector-expected.html                                (rev 0)
+++ trunk/LayoutTests/fast/css/nth-child-of-compound-selector-expected.html        2014-09-22 22:09:13 UTC (rev 173853)
</span><span class="lines">@@ -0,0 +1,18 @@
</span><ins>+&lt;!doctype html&gt;
+&lt;html&gt;
+&lt;body&gt;
+    &lt;p&gt;&lt;/p&gt;
+    &lt;p&gt;This test the styling of paragraphs with :nth-child(An+B of selector). If the test succeed, paragraphs that say &quot;green&quot; should have a green background.&lt;/p&gt;
+    &lt;p&gt;White!&lt;/p&gt;
+    &lt;p&gt;White!&lt;/p&gt;
+    &lt;p&gt;White!&lt;/p&gt;
+    &lt;p&gt;White!&lt;/p&gt;
+    &lt;p style=&quot;background-color: lime&quot;&gt;Green&lt;/p&gt;
+    &lt;p style=&quot;background-color: lime&quot;&gt;Green&lt;/p&gt;
+    &lt;p&gt;White!&lt;/p&gt;
+    &lt;p&gt;White!&lt;/p&gt;
+    &lt;p&gt;White!&lt;/p&gt;
+    &lt;p&gt;White!&lt;/p&gt;
+    &lt;p style=&quot;background-color: lime&quot;&gt;Green&lt;/p&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastcssnthchildofcompoundselectorhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/css/nth-child-of-compound-selector.html (0 => 173853)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/nth-child-of-compound-selector.html                                (rev 0)
+++ trunk/LayoutTests/fast/css/nth-child-of-compound-selector.html        2014-09-22 22:09:13 UTC (rev 173853)
</span><span class="lines">@@ -0,0 +1,26 @@
</span><ins>+&lt;!doctype html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;style&gt;
+/* 3n of paragraph with the class foobar but for which foobar is not the only class. */
+p:nth-child(3n+1 of p.foobar:not([class=foobar])) {
+    background-color: lime;
+}
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+    &lt;p class=&quot;foobar foo&quot;&gt;&lt;/p&gt;
+    &lt;p&gt;This test the styling of paragraphs with :nth-child(An+B of selector). If the test succeed, paragraphs that say &quot;green&quot; should have a green background.&lt;/p&gt;
+    &lt;p class=&quot;foobar&quot;&gt;White!&lt;/p&gt;
+    &lt;p class=&quot;foobar foo&quot;&gt;White!&lt;/p&gt;
+    &lt;p&gt;White!&lt;/p&gt;
+    &lt;p class=&quot;foo foobar&quot;&gt;White!&lt;/p&gt;
+    &lt;p&gt;Green&lt;/p&gt;
+    &lt;p class=&quot;foobar foo&quot;&gt;Green&lt;/p&gt;
+    &lt;p class=&quot;foobar&quot;&gt;White!&lt;/p&gt;
+    &lt;p class=&quot;foo foobar&quot;&gt;White!&lt;/p&gt;
+    &lt;p class=&quot;foobar&quot;&gt;White!&lt;/p&gt;
+    &lt;p class=&quot;foo foobar baz&quot;&gt;White!&lt;/p&gt;
+    &lt;p&gt;Green&lt;/p&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastcssnthchildoftagnameexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/css/nth-child-of-tagname-expected.html (0 => 173853)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/nth-child-of-tagname-expected.html                                (rev 0)
+++ trunk/LayoutTests/fast/css/nth-child-of-tagname-expected.html        2014-09-22 22:09:13 UTC (rev 173853)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+&lt;!doctype html&gt;
+&lt;html&gt;
+&lt;body&gt;
+    &lt;webkit&gt;&lt;/webkit&gt;
+    &lt;p&gt;This test the styling of paragraphs with :nth-child(An+B of selector). If the test succeed, paragraphs that say &quot;green&quot; should have a green background.&lt;/p&gt;
+    &lt;p&gt;White!&lt;/p&gt;
+    &lt;p&gt;White!&lt;/p&gt;
+    &lt;fast&gt;White!&lt;/fast&gt;
+    &lt;p style=&quot;background-color: lime&quot;&gt;Green&lt;/p&gt;
+    &lt;p style=&quot;background-color: lime&quot;&gt;Green&lt;/p&gt;
+    &lt;webkit&gt;White!&lt;/webkit&gt;
+    &lt;p&gt;White!&lt;/p&gt;
+    &lt;webkit&gt;White!&lt;/webkit&gt;
+    &lt;p style=&quot;background-color: lime&quot;&gt;Green&lt;/p&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastcssnthchildoftagnamehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/css/nth-child-of-tagname.html (0 => 173853)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/nth-child-of-tagname.html                                (rev 0)
+++ trunk/LayoutTests/fast/css/nth-child-of-tagname.html        2014-09-22 22:09:13 UTC (rev 173853)
</span><span class="lines">@@ -0,0 +1,23 @@
</span><ins>+&lt;!doctype html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;style&gt;
+p:nth-child(odd of webkit, fast) {
+    background-color: lime;
+}
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+    &lt;webkit&gt;&lt;/webkit&gt;
+    &lt;p&gt;This test the styling of paragraphs with :nth-child(An+B of selector). If the test succeed, paragraphs that say &quot;green&quot; should have a green background.&lt;/p&gt;
+    &lt;p&gt;White!&lt;/p&gt;
+    &lt;p&gt;White!&lt;/p&gt;
+    &lt;fast&gt;White!&lt;/fast&gt;
+    &lt;p&gt;Green&lt;/p&gt;
+    &lt;p&gt;Green&lt;/p&gt;
+    &lt;webkit&gt;White!&lt;/webkit&gt;
+    &lt;p&gt;White!&lt;/p&gt;
+    &lt;webkit&gt;White!&lt;/webkit&gt;
+    &lt;p&gt;Green&lt;/p&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastselectorsnthchildofbasicsexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/selectors/nth-child-of-basics-expected.txt (0 => 173853)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/selectors/nth-child-of-basics-expected.txt                                (rev 0)
+++ trunk/LayoutTests/fast/selectors/nth-child-of-basics-expected.txt        2014-09-22 22:09:13 UTC (rev 173853)
</span><span class="lines">@@ -0,0 +1,556 @@
</span><ins>+Check the basic features of the &quot;:nth-child(An+B of selectorList)&quot; pseudo class.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+Testing &quot;:nth-child(2n of *)&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of *)').length is 15
+PASS document.querySelectorAll('#test-root :nth-child(2n of *)')[0].id is &quot;testcase2&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of *)')[1].id is &quot;testcase4&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of *)')[2].id is &quot;testcase6&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of *)')[3].id is &quot;testcase8&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of *)')[4].id is &quot;testcase10&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of *)')[5].id is &quot;testcase12&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of *)')[6].id is &quot;testcase14&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of *)')[7].id is &quot;testcase16&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of *)')[8].id is &quot;testcase18&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of *)')[9].id is &quot;testcase20&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of *)')[10].id is &quot;testcase22&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of *)')[11].id is &quot;testcase24&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of *)')[12].id is &quot;testcase26&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of *)')[13].id is &quot;testcase28&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of *)')[14].id is &quot;testcase30&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[0]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[1]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[2]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[3]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[4]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[5]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[6]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[7]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[8]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[9]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[10]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[11]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[12]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[13]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[14]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[15]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[16]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[17]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[18]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[19]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[20]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[21]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[22]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[23]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[24]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[25]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[26]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[27]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[28]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[29]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+
+Testing &quot;:nth-child(2n + 1 of testcaseA)&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n + 1 of testcaseA)').length is 15
+PASS document.querySelectorAll('#test-root :nth-child(2n + 1 of testcaseA)')[0].id is &quot;testcase1&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n + 1 of testcaseA)')[1].id is &quot;testcase4&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n + 1 of testcaseA)')[2].id is &quot;testcase5&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n + 1 of testcaseA)')[3].id is &quot;testcase8&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n + 1 of testcaseA)')[4].id is &quot;testcase9&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n + 1 of testcaseA)')[5].id is &quot;testcase12&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n + 1 of testcaseA)')[6].id is &quot;testcase13&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n + 1 of testcaseA)')[7].id is &quot;testcase16&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n + 1 of testcaseA)')[8].id is &quot;testcase17&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n + 1 of testcaseA)')[9].id is &quot;testcase20&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n + 1 of testcaseA)')[10].id is &quot;testcase21&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n + 1 of testcaseA)')[11].id is &quot;testcase24&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n + 1 of testcaseA)')[12].id is &quot;testcase25&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n + 1 of testcaseA)')[13].id is &quot;testcase28&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n + 1 of testcaseA)')[14].id is &quot;testcase29&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[0]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[1]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[2]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[3]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[4]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[5]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[6]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[7]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[8]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[9]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[10]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[11]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[12]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[13]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[14]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[15]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[16]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[17]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[18]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[19]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[20]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[21]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[22]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[23]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[24]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[25]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[26]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[27]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[28]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[29]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+
+Testing &quot;:nth-child(3n - 2 of [attribute1=value1])&quot;
+PASS document.querySelectorAll('#test-root :nth-child(3n - 2 of [attribute1=value1])').length is 12
+PASS document.querySelectorAll('#test-root :nth-child(3n - 2 of [attribute1=value1])')[0].id is &quot;testcase1&quot;
+PASS document.querySelectorAll('#test-root :nth-child(3n - 2 of [attribute1=value1])')[1].id is &quot;testcase5&quot;
+PASS document.querySelectorAll('#test-root :nth-child(3n - 2 of [attribute1=value1])')[2].id is &quot;testcase6&quot;
+PASS document.querySelectorAll('#test-root :nth-child(3n - 2 of [attribute1=value1])')[3].id is &quot;testcase9&quot;
+PASS document.querySelectorAll('#test-root :nth-child(3n - 2 of [attribute1=value1])')[4].id is &quot;testcase10&quot;
+PASS document.querySelectorAll('#test-root :nth-child(3n - 2 of [attribute1=value1])')[5].id is &quot;testcase13&quot;
+PASS document.querySelectorAll('#test-root :nth-child(3n - 2 of [attribute1=value1])')[6].id is &quot;testcase17&quot;
+PASS document.querySelectorAll('#test-root :nth-child(3n - 2 of [attribute1=value1])')[7].id is &quot;testcase20&quot;
+PASS document.querySelectorAll('#test-root :nth-child(3n - 2 of [attribute1=value1])')[8].id is &quot;testcase21&quot;
+PASS document.querySelectorAll('#test-root :nth-child(3n - 2 of [attribute1=value1])')[9].id is &quot;testcase24&quot;
+PASS document.querySelectorAll('#test-root :nth-child(3n - 2 of [attribute1=value1])')[10].id is &quot;testcase27&quot;
+PASS document.querySelectorAll('#test-root :nth-child(3n - 2 of [attribute1=value1])')[11].id is &quot;testcase28&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[0]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[1]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[2]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[3]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[4]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[5]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[6]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[7]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[8]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[9]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[10]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[11]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[12]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[13]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[14]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[15]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[16]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[17]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[18]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[19]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[20]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[21]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[22]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[23]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[24]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[25]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[26]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[27]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[28]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[29]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+
+Testing &quot;:nth-child(4n - 1 of .bar)&quot;
+PASS document.querySelectorAll('#test-root :nth-child(4n - 1 of .bar)').length is 6
+PASS document.querySelectorAll('#test-root :nth-child(4n - 1 of .bar)')[0].id is &quot;testcase3&quot;
+PASS document.querySelectorAll('#test-root :nth-child(4n - 1 of .bar)')[1].id is &quot;testcase4&quot;
+PASS document.querySelectorAll('#test-root :nth-child(4n - 1 of .bar)')[2].id is &quot;testcase10&quot;
+PASS document.querySelectorAll('#test-root :nth-child(4n - 1 of .bar)')[3].id is &quot;testcase15&quot;
+PASS document.querySelectorAll('#test-root :nth-child(4n - 1 of .bar)')[4].id is &quot;testcase20&quot;
+PASS document.querySelectorAll('#test-root :nth-child(4n - 1 of .bar)')[5].id is &quot;testcase25&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[0]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[1]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[2]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[3]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[4]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[5]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[6]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[7]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[8]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[9]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[10]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[11]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[12]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[13]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[14]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[15]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[16]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[17]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[18]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[19]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[20]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[21]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[22]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[23]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[24]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[25]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[26]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[27]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[28]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[29]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+
+Testing &quot;:nth-child(2n + 2 of :empty)&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n + 2 of :empty)').length is 13
+PASS document.querySelectorAll('#test-root :nth-child(2n + 2 of :empty)')[0].id is &quot;testcase3&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n + 2 of :empty)')[1].id is &quot;testcase4&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n + 2 of :empty)')[2].id is &quot;testcase5&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n + 2 of :empty)')[3].id is &quot;testcase6&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n + 2 of :empty)')[4].id is &quot;testcase7&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n + 2 of :empty)')[5].id is &quot;testcase8&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n + 2 of :empty)')[6].id is &quot;testcase9&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n + 2 of :empty)')[7].id is &quot;testcase22&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n + 2 of :empty)')[8].id is &quot;testcase23&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n + 2 of :empty)')[9].id is &quot;testcase24&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n + 2 of :empty)')[10].id is &quot;testcase25&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n + 2 of :empty)')[11].id is &quot;testcase26&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n + 2 of :empty)')[12].id is &quot;testcase27&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[0]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[1]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[2]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[3]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[4]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[5]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[6]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[7]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[8]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[9]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[10]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[11]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[12]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[13]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[14]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[15]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[16]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[17]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[18]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[19]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[20]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[21]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[22]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[23]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[24]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[25]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[26]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[27]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[28]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[29]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+
+Testing &quot;testcaseA:nth-child(even of testcaseA)&quot;
+PASS document.querySelectorAll('#test-root testcaseA:nth-child(even of testcaseA)').length is 7
+PASS document.querySelectorAll('#test-root testcaseA:nth-child(even of testcaseA)')[0].id is &quot;testcase3&quot;
+PASS document.querySelectorAll('#test-root testcaseA:nth-child(even of testcaseA)')[1].id is &quot;testcase7&quot;
+PASS document.querySelectorAll('#test-root testcaseA:nth-child(even of testcaseA)')[2].id is &quot;testcase11&quot;
+PASS document.querySelectorAll('#test-root testcaseA:nth-child(even of testcaseA)')[3].id is &quot;testcase15&quot;
+PASS document.querySelectorAll('#test-root testcaseA:nth-child(even of testcaseA)')[4].id is &quot;testcase19&quot;
+PASS document.querySelectorAll('#test-root testcaseA:nth-child(even of testcaseA)')[5].id is &quot;testcase23&quot;
+PASS document.querySelectorAll('#test-root testcaseA:nth-child(even of testcaseA)')[6].id is &quot;testcase27&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[0]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[1]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[2]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[3]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[4]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[5]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[6]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[7]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[8]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[9]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[10]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[11]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[12]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[13]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[14]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[15]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[16]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[17]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[18]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[19]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[20]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[21]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[22]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[23]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[24]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[25]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[26]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[27]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[28]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[29]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+
+Testing &quot;testcaseA:nth-child(even of testcaseA.bazoo)&quot;
+PASS document.querySelectorAll('#test-root testcaseA:nth-child(even of testcaseA.bazoo)').length is 8
+PASS document.querySelectorAll('#test-root testcaseA:nth-child(even of testcaseA.bazoo)')[0].id is &quot;testcase3&quot;
+PASS document.querySelectorAll('#test-root testcaseA:nth-child(even of testcaseA.bazoo)')[1].id is &quot;testcase7&quot;
+PASS document.querySelectorAll('#test-root testcaseA:nth-child(even of testcaseA.bazoo)')[2].id is &quot;testcase11&quot;
+PASS document.querySelectorAll('#test-root testcaseA:nth-child(even of testcaseA.bazoo)')[3].id is &quot;testcase13&quot;
+PASS document.querySelectorAll('#test-root testcaseA:nth-child(even of testcaseA.bazoo)')[4].id is &quot;testcase17&quot;
+PASS document.querySelectorAll('#test-root testcaseA:nth-child(even of testcaseA.bazoo)')[5].id is &quot;testcase21&quot;
+PASS document.querySelectorAll('#test-root testcaseA:nth-child(even of testcaseA.bazoo)')[6].id is &quot;testcase23&quot;
+PASS document.querySelectorAll('#test-root testcaseA:nth-child(even of testcaseA.bazoo)')[7].id is &quot;testcase29&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[0]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[1]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[2]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[3]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[4]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[5]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[6]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[7]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[8]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[9]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[10]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[11]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[12]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[13]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[14]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[15]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[16]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[17]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[18]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[19]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[20]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[21]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[22]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[23]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[24]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[25]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[26]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[27]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[28]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[29]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+
+Testing &quot;[attribute2]:nth-child(odd of [attribute2])&quot;
+PASS document.querySelectorAll('#test-root [attribute2]:nth-child(odd of [attribute2])').length is 3
+PASS document.querySelectorAll('#test-root [attribute2]:nth-child(odd of [attribute2])')[0].id is &quot;testcase2&quot;
+PASS document.querySelectorAll('#test-root [attribute2]:nth-child(odd of [attribute2])')[1].id is &quot;testcase9&quot;
+PASS document.querySelectorAll('#test-root [attribute2]:nth-child(odd of [attribute2])')[2].id is &quot;testcase20&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[0]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[1]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[2]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[3]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[4]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[5]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[6]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[7]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[8]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[9]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[10]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[11]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[12]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[13]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[14]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[15]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[16]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[17]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[18]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[19]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[20]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[21]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[22]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[23]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[24]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[25]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[26]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[27]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[28]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[29]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+
+Testing &quot;.foo:nth-child(even of .foo)&quot;
+PASS document.querySelectorAll('#test-root .foo:nth-child(even of .foo)').length is 11
+PASS document.querySelectorAll('#test-root .foo:nth-child(even of .foo)')[0].id is &quot;testcase4&quot;
+PASS document.querySelectorAll('#test-root .foo:nth-child(even of .foo)')[1].id is &quot;testcase6&quot;
+PASS document.querySelectorAll('#test-root .foo:nth-child(even of .foo)')[2].id is &quot;testcase9&quot;
+PASS document.querySelectorAll('#test-root .foo:nth-child(even of .foo)')[3].id is &quot;testcase11&quot;
+PASS document.querySelectorAll('#test-root .foo:nth-child(even of .foo)')[4].id is &quot;testcase14&quot;
+PASS document.querySelectorAll('#test-root .foo:nth-child(even of .foo)')[5].id is &quot;testcase16&quot;
+PASS document.querySelectorAll('#test-root .foo:nth-child(even of .foo)')[6].id is &quot;testcase19&quot;
+PASS document.querySelectorAll('#test-root .foo:nth-child(even of .foo)')[7].id is &quot;testcase23&quot;
+PASS document.querySelectorAll('#test-root .foo:nth-child(even of .foo)')[8].id is &quot;testcase25&quot;
+PASS document.querySelectorAll('#test-root .foo:nth-child(even of .foo)')[9].id is &quot;testcase28&quot;
+PASS document.querySelectorAll('#test-root .foo:nth-child(even of .foo)')[10].id is &quot;testcase30&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[0]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[1]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[2]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[3]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[4]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[5]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[6]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[7]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[8]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[9]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[10]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[11]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[12]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[13]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[14]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[15]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[16]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[17]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[18]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[19]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[20]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[21]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[22]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[23]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[24]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[25]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[26]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[27]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[28]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[29]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+
+Testing &quot;testcaseA:nth-child(even of .bar.foo)&quot;
+PASS document.querySelectorAll('#test-root testcaseA:nth-child(even of .bar.foo)').length is 4
+PASS document.querySelectorAll('#test-root testcaseA:nth-child(even of .bar.foo)')[0].id is &quot;testcase5&quot;
+PASS document.querySelectorAll('#test-root testcaseA:nth-child(even of .bar.foo)')[1].id is &quot;testcase13&quot;
+PASS document.querySelectorAll('#test-root testcaseA:nth-child(even of .bar.foo)')[2].id is &quot;testcase21&quot;
+PASS document.querySelectorAll('#test-root testcaseA:nth-child(even of .bar.foo)')[3].id is &quot;testcase25&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[0]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[1]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[2]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[3]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[4]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[5]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[6]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[7]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[8]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[9]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[10]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[11]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[12]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[13]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[14]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[15]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[16]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[17]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[18]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[19]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[20]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[21]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[22]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[23]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[24]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[25]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[26]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[27]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[28]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[29]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+
+Testing &quot;*:nth-child(3n+1 of [id][attribute2^=&quot;value&quot;].bazoo)&quot;
+PASS document.querySelectorAll('#test-root *:nth-child(3n+1 of [id][attribute2^=&quot;value&quot;].bazoo)').length is 13
+PASS document.querySelectorAll('#test-root *:nth-child(3n+1 of [id][attribute2^=&quot;value&quot;].bazoo)')[0].id is &quot;testcase1&quot;
+PASS document.querySelectorAll('#test-root *:nth-child(3n+1 of [id][attribute2^=&quot;value&quot;].bazoo)')[1].id is &quot;testcase2&quot;
+PASS document.querySelectorAll('#test-root *:nth-child(3n+1 of [id][attribute2^=&quot;value&quot;].bazoo)')[2].id is &quot;testcase10&quot;
+PASS document.querySelectorAll('#test-root *:nth-child(3n+1 of [id][attribute2^=&quot;value&quot;].bazoo)')[3].id is &quot;testcase11&quot;
+PASS document.querySelectorAll('#test-root *:nth-child(3n+1 of [id][attribute2^=&quot;value&quot;].bazoo)')[4].id is &quot;testcase12&quot;
+PASS document.querySelectorAll('#test-root *:nth-child(3n+1 of [id][attribute2^=&quot;value&quot;].bazoo)')[5].id is &quot;testcase13&quot;
+PASS document.querySelectorAll('#test-root *:nth-child(3n+1 of [id][attribute2^=&quot;value&quot;].bazoo)')[6].id is &quot;testcase14&quot;
+PASS document.querySelectorAll('#test-root *:nth-child(3n+1 of [id][attribute2^=&quot;value&quot;].bazoo)')[7].id is &quot;testcase15&quot;
+PASS document.querySelectorAll('#test-root *:nth-child(3n+1 of [id][attribute2^=&quot;value&quot;].bazoo)')[8].id is &quot;testcase16&quot;
+PASS document.querySelectorAll('#test-root *:nth-child(3n+1 of [id][attribute2^=&quot;value&quot;].bazoo)')[9].id is &quot;testcase17&quot;
+PASS document.querySelectorAll('#test-root *:nth-child(3n+1 of [id][attribute2^=&quot;value&quot;].bazoo)')[10].id is &quot;testcase18&quot;
+PASS document.querySelectorAll('#test-root *:nth-child(3n+1 of [id][attribute2^=&quot;value&quot;].bazoo)')[11].id is &quot;testcase19&quot;
+PASS document.querySelectorAll('#test-root *:nth-child(3n+1 of [id][attribute2^=&quot;value&quot;].bazoo)')[12].id is &quot;testcase20&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[0]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[1]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[2]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[3]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[4]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[5]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[6]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[7]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[8]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[9]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[10]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[11]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[12]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[13]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[14]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[15]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[16]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[17]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[18]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[19]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[20]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[21]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[22]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[23]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[24]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[25]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[26]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[27]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[28]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[29]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+
+Testing &quot;:-webkit-any(testcaseA, dontExist):nth-child(n+3 of .foo:empty)&quot;
+PASS document.querySelectorAll('#test-root :-webkit-any(testcaseA, dontExist):nth-child(n+3 of .foo:empty)').length is 4
+PASS document.querySelectorAll('#test-root :-webkit-any(testcaseA, dontExist):nth-child(n+3 of .foo:empty)')[0].id is &quot;testcase23&quot;
+PASS document.querySelectorAll('#test-root :-webkit-any(testcaseA, dontExist):nth-child(n+3 of .foo:empty)')[1].id is &quot;testcase25&quot;
+PASS document.querySelectorAll('#test-root :-webkit-any(testcaseA, dontExist):nth-child(n+3 of .foo:empty)')[2].id is &quot;testcase27&quot;
+PASS document.querySelectorAll('#test-root :-webkit-any(testcaseA, dontExist):nth-child(n+3 of .foo:empty)')[3].id is &quot;testcase29&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[0]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[1]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[2]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[3]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[4]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[5]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[6]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[7]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[8]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[9]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[10]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[11]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[12]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[13]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[14]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[15]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[16]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[17]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[18]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[19]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[20]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[21]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[22]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[23]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[24]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[25]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[26]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[27]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[28]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[29]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+
+Testing &quot;*:nth-child(even of :nth-child(odd of [attribute2]))&quot;
+PASS document.querySelectorAll('#test-root *:nth-child(even of :nth-child(odd of [attribute2]))').length is 7
+PASS document.querySelectorAll('#test-root *:nth-child(even of :nth-child(odd of [attribute2]))')[0].id is &quot;testcase2&quot;
+PASS document.querySelectorAll('#test-root *:nth-child(even of :nth-child(odd of [attribute2]))')[1].id is &quot;testcase7&quot;
+PASS document.querySelectorAll('#test-root *:nth-child(even of :nth-child(odd of [attribute2]))')[2].id is &quot;testcase9&quot;
+PASS document.querySelectorAll('#test-root *:nth-child(even of :nth-child(odd of [attribute2]))')[3].id is &quot;testcase16&quot;
+PASS document.querySelectorAll('#test-root *:nth-child(even of :nth-child(odd of [attribute2]))')[4].id is &quot;testcase18&quot;
+PASS document.querySelectorAll('#test-root *:nth-child(even of :nth-child(odd of [attribute2]))')[5].id is &quot;testcase20&quot;
+PASS document.querySelectorAll('#test-root *:nth-child(even of :nth-child(odd of [attribute2]))')[6].id is &quot;testcase29&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[0]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[1]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[2]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[3]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[4]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[5]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[6]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[7]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[8]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[9]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[10]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[11]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[12]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[13]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[14]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[15]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[16]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[17]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[18]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[19]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[20]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[21]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[22]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[23]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[24]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[25]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[26]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[27]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[28]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[29]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsfastselectorsnthchildofbasicshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/selectors/nth-child-of-basics.html (0 => 173853)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/selectors/nth-child-of-basics.html                                (rev 0)
+++ trunk/LayoutTests/fast/selectors/nth-child-of-basics.html        2014-09-22 22:09:13 UTC (rev 173853)
</span><span class="lines">@@ -0,0 +1,116 @@
</span><ins>+&lt;!doctype html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;style&gt;
+#test-root * {
+    background-color: red;
+}
+&lt;/style&gt;
+&lt;style id=&quot;style&quot;&gt;
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+    &lt;div style=&quot;display:none&quot; id=&quot;test-root&quot;&gt;
+        &lt;testcaseA id=&quot;testcase1&quot; attribute1=&quot;value1&quot; class=&quot;bar baz bazoo&quot; attribute3=&quot;value3&quot;&gt;Not empty&lt;/testcaseA&gt;
+        &lt;testcaseB id=&quot;testcase2&quot; class=&quot;bar baz bazoo&quot; attribute2=&quot;value2&quot; attribute3=&quot;value3&quot;&gt;&lt;/testcaseB&gt;
+        &lt;testcaseA id=&quot;testcase3&quot; attribute1=&quot;value1&quot; class=&quot;foo baz bazoo&quot;&gt;Not empty&lt;/testcaseA&gt;
+        &lt;testcaseB id=&quot;testcase4&quot; attribute1=&quot;value1&quot; class=&quot;foo bar bazoo&quot;&gt;Not empty&lt;/testcaseB&gt;
+        &lt;testcaseA id=&quot;testcase5&quot; class=&quot;foo baz bazoo&quot; attribute2=&quot;value2&quot; attribute3=&quot;value3&quot;&gt;Not empty&lt;/testcaseA&gt;
+        &lt;testcaseB id=&quot;testcase6&quot; attribute1=&quot;value1&quot; class=&quot;foo bar baz&quot; attribute3=&quot;value3&quot;&gt;Not empty&lt;/testcaseB&gt;
+        &lt;testcaseA id=&quot;testcase7&quot; attribute1=&quot;value1&quot; class=&quot;bar baz bazoo&quot;&gt;Not empty&lt;/testcaseA&gt;
+        &lt;testcaseB id=&quot;testcase8&quot; attribute1=&quot;value1&quot; class=&quot;foo baz bazoo&quot;&gt;Not empty&lt;/testcaseB&gt;
+        &lt;testcaseA id=&quot;testcase9&quot; class=&quot;foo bar bazoo&quot; attribute2=&quot;value2&quot; attribute3=&quot;value3&quot;&gt;&lt;/testcaseA&gt;
+        &lt;testcaseB id=&quot;testcase10&quot; attribute1=&quot;value1&quot; class=&quot;foo bar bazoo&quot; attribute3=&quot;value3&quot;&gt;Not empty&lt;/testcaseB&gt;
+        &lt;testcaseA id=&quot;testcase11&quot; attribute1=&quot;value1&quot; class=&quot;foo bar baz&quot;&gt;Not empty&lt;/testcaseA&gt;
+        &lt;testcaseB id=&quot;testcase12&quot; attribute1=&quot;value1&quot; class=&quot;bar baz bazoo&quot;&gt;Not empty&lt;/testcaseB&gt;
+        &lt;testcaseA id=&quot;testcase13&quot; attribute1=&quot;value1&quot; class=&quot;foo baz bazoo&quot; attribute3=&quot;value3&quot;&gt;Not empty&lt;/testcaseA&gt;
+        &lt;testcaseB id=&quot;testcase14&quot; class=&quot;foo bar baz&quot; attribute2=&quot;value2&quot;&gt;Not empty&lt;/testcaseB&gt;
+        &lt;testcaseA id=&quot;testcase15&quot; attribute1=&quot;value1&quot; class=&quot;foo bar bazoo&quot;&gt;Not empty&lt;/testcaseA&gt;
+        &lt;testcaseB id=&quot;testcase16&quot; attribute1=&quot;value1&quot; class=&quot;foo bar baz&quot; attribute3=&quot;value3&quot;&gt;Not empty&lt;/testcaseB&gt;
+        &lt;testcaseA id=&quot;testcase17&quot; attribute1=&quot;value1&quot; class=&quot;bar baz bazoo&quot; attribute3=&quot;value3&quot;&gt;Not empty&lt;/testcaseA&gt;
+        &lt;testcaseB id=&quot;testcase18&quot; attribute1=&quot;value1&quot; class=&quot;foo baz bazoo&quot;&gt;Not empty&lt;/testcaseB&gt;
+        &lt;testcaseA id=&quot;testcase19&quot; attribute1=&quot;value1&quot; class=&quot;foo bar bazoo&quot;&gt;Not empty&lt;/testcaseA&gt;
+        &lt;testcaseB id=&quot;testcase20&quot; class=&quot;bar baz bazoo&quot; attribute2=&quot;value2&quot; attribute3=&quot;value3&quot;&gt;Not empty&lt;/testcaseB&gt;
+        &lt;testcaseA id=&quot;testcase21&quot; attribute1=&quot;value1&quot; class=&quot;foo bar baz&quot; attribute3=&quot;value3&quot;&gt;&lt;/testcaseA&gt;
+        &lt;testcaseB id=&quot;testcase22&quot; attribute1=&quot;value1&quot; class=&quot;bar baz bazoo&quot;&gt;Not empty&lt;/testcaseB&gt;
+        &lt;testcaseA id=&quot;testcase23&quot; attribute1=&quot;value1&quot; class=&quot;foo baz bazoo&quot;&gt;Not empty&lt;/testcaseA&gt;
+        &lt;testcaseB id=&quot;testcase24&quot; attribute1=&quot;value1&quot; class=&quot;foo bar bazoo&quot; attribute3=&quot;value3&quot;&gt;Not empty&lt;/testcaseB&gt;
+        &lt;testcaseA id=&quot;testcase25&quot; attribute1=&quot;value1&quot; class=&quot;foo bar baz&quot; attribute3=&quot;value3&quot;&gt;Not empty&lt;/testcaseA&gt;
+        &lt;testcaseB id=&quot;testcase26&quot; attribute1=&quot;value1&quot; class=&quot;bar baz bazoo&quot;&gt;Not empty&lt;/testcaseB&gt;
+        &lt;testcaseA id=&quot;testcase27&quot; class=&quot;foo baz bazoo&quot; attribute2=&quot;value2&quot;&gt;&lt;/testcaseA&gt;
+        &lt;testcaseB id=&quot;testcase28&quot; attribute1=&quot;value1&quot; class=&quot;foo baz bazoo&quot; attribute3=&quot;value3&quot;&gt;Not empty&lt;/testcaseB&gt;
+        &lt;testcaseA id=&quot;testcase29&quot; attribute1=&quot;value1&quot; class=&quot;foo bar bazoo&quot;&gt;Not empty&lt;/testcaseA&gt;
+        &lt;testcaseB id=&quot;testcase30&quot; attribute1=&quot;value1&quot; class=&quot;foo bar baz&quot;&gt;Not empty&lt;/testcaseB&gt;
+    &lt;/div&gt;
+&lt;/body&gt;
+&lt;script&gt;
+description('Check the basic features of the &quot;:nth-child(An+B of selectorList)&quot; pseudo class.');
+
+function testQuerySelector(selector, expectedIds) {
+    shouldBe(&quot;document.querySelectorAll('&quot; + selector + &quot;').length&quot;, '' + expectedIds.length);
+    for (var i = 0; i &lt; expectedIds.length; ++i)
+        shouldBeEqualToString(&quot;document.querySelectorAll('&quot; + selector + &quot;')[&quot; + i + &quot;].id&quot;, expectedIds[i]);
+}
+
+function testStyling(selector, expectedIds) {
+    var stylingElement = document.getElementById(&quot;style&quot;);
+    stylingElement.innerHTML = '' + selector + ' { background-color: rgb(10, 100, 200); }';
+
+    var allTestCases = document.querySelectorAll(&quot;#test-root *&quot;);
+    for (var i = 0; i &lt; allTestCases.length; ++i) {
+        var expectMatch = expectedIds.indexOf(allTestCases[i].id) &gt;= 0;
+        shouldBeEqualToString('getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[' + i + ']).backgroundColor', expectMatch ? 'rgb(10, 100, 200)' : 'rgb(255, 0, 0)');
+    }
+
+    stylingElement.innerHTML = '';
+}
+
+function testSelector(selector, expectedIds) {
+    debug(&quot;Testing \&quot;&quot; + selector + &quot;\&quot;&quot;);
+    testQuerySelector(&quot;#test-root &quot; + selector, expectedIds);
+    testStyling(&quot;#test-root &quot; + selector, expectedIds);
+    debug(&quot;&quot;);
+}
+
+// Should be the same as :nth-child(even).
+testSelector(&quot;:nth-child(2n of *)&quot;, [&quot;testcase2&quot;, &quot;testcase4&quot;, &quot;testcase6&quot;, &quot;testcase8&quot;, &quot;testcase10&quot;, &quot;testcase12&quot;, &quot;testcase14&quot;, &quot;testcase16&quot;, &quot;testcase18&quot;, &quot;testcase20&quot;, &quot;testcase22&quot;, &quot;testcase24&quot;, &quot;testcase26&quot;, &quot;testcase28&quot;, &quot;testcase30&quot;]);
+
+/* -- Some generic tests for primitive selectors. -- */
+
+// Even of a tag name.
+testSelector(&quot;:nth-child(2n + 1 of testcaseA)&quot;, [&quot;testcase1&quot;, &quot;testcase4&quot;, &quot;testcase5&quot;, &quot;testcase8&quot;, &quot;testcase9&quot;, &quot;testcase12&quot;, &quot;testcase13&quot;, &quot;testcase16&quot;, &quot;testcase17&quot;, &quot;testcase20&quot;, &quot;testcase21&quot;, &quot;testcase24&quot;, &quot;testcase25&quot;, &quot;testcase28&quot;, &quot;testcase29&quot;]);
+
+// Attribute.
+testSelector(&quot;:nth-child(3n - 2 of [attribute1=value1])&quot;, [&quot;testcase1&quot;, &quot;testcase5&quot;, &quot;testcase6&quot;, &quot;testcase9&quot;, &quot;testcase10&quot;, &quot;testcase13&quot;, &quot;testcase17&quot;, &quot;testcase20&quot;, &quot;testcase21&quot;, &quot;testcase24&quot;, &quot;testcase27&quot;, &quot;testcase28&quot;]);
+
+// Class.
+testSelector(&quot;:nth-child(4n - 1 of .bar)&quot;, [&quot;testcase3&quot;, &quot;testcase4&quot;, &quot;testcase10&quot;, &quot;testcase15&quot;, &quot;testcase20&quot;, &quot;testcase25&quot;]);
+
+// Value.
+testSelector(&quot;:nth-child(2n + 2 of :empty)&quot;, [&quot;testcase3&quot;, &quot;testcase4&quot;, &quot;testcase5&quot;, &quot;testcase6&quot;, &quot;testcase7&quot;, &quot;testcase8&quot;, &quot;testcase9&quot;, &quot;testcase22&quot;, &quot;testcase23&quot;, &quot;testcase24&quot;, &quot;testcase25&quot;, &quot;testcase26&quot;, &quot;testcase27&quot;]);
+
+
+/* -- In practice, we expect a lot of filtering will be done on the same type. -- */
+
+// Even of testcaseA.
+testSelector(&quot;testcaseA:nth-child(even of testcaseA)&quot;, [&quot;testcase3&quot;, &quot;testcase7&quot;, &quot;testcase11&quot;, &quot;testcase15&quot;, &quot;testcase19&quot;, &quot;testcase23&quot;, &quot;testcase27&quot;]);
+
+// All the testcaseA with an odd number of testcaseA.bazoo before it.
+testSelector(&quot;testcaseA:nth-child(even of testcaseA.bazoo)&quot;, [&quot;testcase3&quot;, &quot;testcase7&quot;, &quot;testcase11&quot;, &quot;testcase13&quot;, &quot;testcase17&quot;, &quot;testcase21&quot;, &quot;testcase23&quot;, &quot;testcase29&quot;]);
+
+// Odd of [attribute2].
+testSelector(&quot;[attribute2]:nth-child(odd of [attribute2])&quot;, [&quot;testcase2&quot;, &quot;testcase9&quot;, &quot;testcase20&quot;]);
+
+// Even of .foo.
+testSelector(&quot;.foo:nth-child(even of .foo)&quot;, [&quot;testcase4&quot;, &quot;testcase6&quot;, &quot;testcase9&quot;, &quot;testcase11&quot;, &quot;testcase14&quot;, &quot;testcase16&quot;, &quot;testcase19&quot;, &quot;testcase23&quot;, &quot;testcase25&quot;, &quot;testcase28&quot;, &quot;testcase30&quot;]);
+
+
+/* -- Compound selectors -- */
+testSelector(&quot;testcaseA:nth-child(even of .bar.foo)&quot;, [&quot;testcase5&quot;, &quot;testcase13&quot;, &quot;testcase21&quot;, &quot;testcase25&quot;]);
+testSelector('*:nth-child(3n+1 of [id][attribute2^=&quot;value&quot;].bazoo)', [&quot;testcase1&quot;, &quot;testcase2&quot;, &quot;testcase10&quot;, &quot;testcase11&quot;, &quot;testcase12&quot;, &quot;testcase13&quot;, &quot;testcase14&quot;, &quot;testcase15&quot;, &quot;testcase16&quot;, &quot;testcase17&quot;, &quot;testcase18&quot;, &quot;testcase19&quot;, &quot;testcase20&quot;]);
+testSelector(':-webkit-any(testcaseA, dontExist):nth-child(n+3 of .foo:empty)', [&quot;testcase23&quot;, &quot;testcase25&quot;, &quot;testcase27&quot;, &quot;testcase29&quot;]);
+testSelector('*:nth-child(even of :nth-child(odd of [attribute2]))', [&quot;testcase2&quot;, &quot;testcase7&quot;, &quot;testcase9&quot;, &quot;testcase16&quot;, &quot;testcase18&quot;, &quot;testcase20&quot;, &quot;testcase29&quot;]);
+&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastselectorsnthchildofclassstyleupdateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/selectors/nth-child-of-class-style-update-expected.txt (0 => 173853)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/selectors/nth-child-of-class-style-update-expected.txt                                (rev 0)
+++ trunk/LayoutTests/fast/selectors/nth-child-of-class-style-update-expected.txt        2014-09-22 22:09:13 UTC (rev 173853)
</span><span class="lines">@@ -0,0 +1,259 @@
</span><ins>+Test style update of :nth-child() when the tree structure is modified.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+Initialy, &lt;foo&gt; is the first of its type, the style should match.
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[0]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[1]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[2]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[3]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[4]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[5]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[6]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[7]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[8]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[9]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+Removing the .webkit class from the first element, nothing should match.
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[0]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[1]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[2]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[3]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[4]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[5]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[6]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[7]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[8]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[9]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+Adding it back, we should be back to the original state.
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[0]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[1]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[2]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[3]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[4]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[5]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[6]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[7]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[8]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[9]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+Removing the .webkit class from the third element, nothing should match.
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[0]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[1]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[2]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[3]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[4]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[5]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[6]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[7]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[8]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[9]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+Adding it back, we should be back to the original state.
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[0]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[1]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[2]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[3]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[4]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[5]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[6]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[7]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[8]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[9]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+Removing the .webkit class from the second element, nothing should match.
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[0]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[1]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[2]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[3]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[4]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[5]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[6]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[7]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[8]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[9]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+Adding an element &lt;target&gt; on top, we should have a match again, skipping 2.
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[0]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[1]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[2]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[3]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[4]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[5]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[6]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[7]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[8]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[9]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[10]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[11]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+Adding the .webkit calss back on 2, we should now match 2 elements.
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[0]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[1]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[2]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[3]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[4]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[5]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[6]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[7]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[8]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[9]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[10]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[11]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+Removing the element we added should put us back in the initial state.
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[0]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[1]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[2]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[3]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[4]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[5]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[6]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[7]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[8]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[9]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+Adding an element &lt;target&gt; on top, we should now match 4 and 5.
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[0]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[1]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[2]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[3]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[4]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[5]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[6]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[7]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[8]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[9]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[10]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[11]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+Adding an element &lt;nottarget&gt; on top, we should now match 3, 4 and 5.
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[0]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[1]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[2]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[3]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[4]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[5]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[6]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[7]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[8]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[9]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[10]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[11]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+Adding an element &lt;nottarget&gt; on top, we should now match 2, 3, 4 and 5.
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[0]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[1]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[2]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[3]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[4]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[5]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[6]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[7]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[8]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[9]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[10]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[11]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+Adding an element &lt;target&gt; on top, we should now match 1, 2, 3, 4 and 5.
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[0]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[1]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[2]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[3]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[4]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[5]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[6]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[7]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[8]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[9]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[10]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[11]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[12]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[13]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+Adding an element &lt;nottarget&gt; on top, we should now match 0, 1, 2, 3, 4 and 5.
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[0]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[1]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[2]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[3]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[4]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[5]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[6]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[7]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[8]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[9]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[10]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[11]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[12]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[13]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+Removing one of the &lt;nottarget&gt;, 0 should no longer match.
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[0]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[1]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[2]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[3]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[4]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[5]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[6]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[7]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[8]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[9]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[10]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[11]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[12]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[13]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+Removing one of the &lt;target&gt;, 1 should no longer match.
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[0]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[1]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[2]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[3]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[4]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[5]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[6]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[7]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[8]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[9]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[10]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[11]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[12]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[13]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+Removing one of the &lt;notarget&gt;, 2 should no longer match.
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[0]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[1]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[2]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[3]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[4]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[5]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[6]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[7]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[8]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[9]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[10]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[11]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[12]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[13]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+Removing one of the &lt;target&gt;, 3 should no longer match.
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[0]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[1]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[2]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[3]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[4]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[5]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[6]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[7]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[8]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[9]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[10]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[11]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+Removing one of the &lt;target&gt;, 4 should no longer match.
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[0]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[1]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[2]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[3]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[4]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[5]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[6]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[7]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[8]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[9]).backgroundColor is &quot;rgb(1, 2, 3)&quot;
+Removing one of the &lt;target&gt;, there are only 4 siblings left, nothing can match.
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[0]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[1]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[2]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[3]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[4]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[5]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[6]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;target&quot;)[7]).backgroundColor is &quot;rgb(255, 255, 255)&quot;
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsfastselectorsnthchildofclassstyleupdatehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/selectors/nth-child-of-class-style-update.html (0 => 173853)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/selectors/nth-child-of-class-style-update.html                                (rev 0)
+++ trunk/LayoutTests/fast/selectors/nth-child-of-class-style-update.html        2014-09-22 22:09:13 UTC (rev 173853)
</span><span class="lines">@@ -0,0 +1,157 @@
</span><ins>+&lt;!doctype html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;style&gt;
+target {
+    background-color: white;
+}
+target:nth-child(n+5 of .webkit) {
+    background-color: rgb(1, 2, 3);
+}
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+    &lt;div id=&quot;with-renderer&quot;&gt;
+        &lt;target class=&quot;element_1 webkit&quot;&gt;&lt;/target&gt;
+        &lt;target class=&quot;element_2 webkit&quot;&gt;&lt;/target&gt;
+        &lt;target class=&quot;element_3 webkit&quot;&gt;&lt;/target&gt;
+        &lt;target class=&quot;element_4 webkit&quot;&gt;&lt;/target&gt;
+        &lt;target class=&quot;element_5 webkit&quot;&gt;&lt;/target&gt;
+    &lt;/div&gt;
+    &lt;div id=&quot;without-renderer&quot; style=&quot;display:none;&quot;&gt;
+        &lt;target class=&quot;element_1 webkit&quot;&gt;&lt;/target&gt;
+        &lt;target class=&quot;element_2 webkit&quot;&gt;&lt;/target&gt;
+        &lt;target class=&quot;element_3 webkit&quot;&gt;&lt;/target&gt;
+        &lt;target class=&quot;element_4 webkit&quot;&gt;&lt;/target&gt;
+        &lt;target class=&quot;element_5 webkit&quot;&gt;&lt;/target&gt;
+    &lt;/div&gt;
+&lt;/body&gt;
+&lt;script&gt;
+description('Test style update of :nth-child() when the tree structure is modified.');
+
+function testColor(classesThatShouldMatch) {
+    var allTargets = document.querySelectorAll(&quot;target&quot;);
+    for (var i = 0; i &lt; allTargets.length; ++i) {
+        var expectMath = classesThatShouldMatch.indexOf(allTargets[i].classList[0]) != -1;
+        shouldBeEqualToString('getComputedStyle(document.querySelectorAll(&quot;target&quot;)[' + i + ']).backgroundColor', expectMath ? 'rgb(1, 2, 3)' : 'rgb(255, 255, 255)');
+    }
+}
+
+function addElementAsFirstChild(tagName, className)
+{
+    var newElement = document.createElement(tagName);
+    newElement.className = className + ' webkit';
+
+    var withRenderer = document.getElementById(&quot;with-renderer&quot;);
+    withRenderer.insertBefore(newElement, withRenderer.firstChild);
+
+    var withoutRenderer = document.getElementById(&quot;without-renderer&quot;);
+    withoutRenderer.insertBefore(newElement.cloneNode(), withoutRenderer.firstChild);
+}
+
+function removeWebKitClassFromElementsOfClass(className)
+{
+    var allElementsToUpdate = document.querySelectorAll('.' + className);
+    for (var i = 0; i &lt; allElementsToUpdate.length; ++i)
+        allElementsToUpdate[i].classList.remove(&quot;webkit&quot;);
+}
+
+function addWebKitClassToElementsOfClass(className)
+{
+    var allElementsToUpdate = document.querySelectorAll('.' + className);
+    for (var i = 0; i &lt; allElementsToUpdate.length; ++i)
+        allElementsToUpdate[i].classList.add(&quot;webkit&quot;);
+}
+
+
+function removeElementsOfClass(className)
+{
+    var allElementsToRemove = document.querySelectorAll('.' + className);
+    for (var i = 0; i &lt; allElementsToRemove.length; ++i)
+        allElementsToRemove[i].parentElement.removeChild(allElementsToRemove[i]);
+}
+
+debug(&quot;Initialy, &amp;lt;foo&amp;gt; is the first of its type, the style should match.&quot;);
+testColor([&quot;element_5&quot;]);
+
+debug(&quot;Removing the .webkit class from the first element, nothing should match.&quot;);
+removeWebKitClassFromElementsOfClass(&quot;element_1&quot;);
+testColor([]);
+
+debug(&quot;Adding it back, we should be back to the original state.&quot;);
+addWebKitClassToElementsOfClass(&quot;element_1&quot;);
+testColor([&quot;element_5&quot;]);
+
+debug(&quot;Removing the .webkit class from the third element, nothing should match.&quot;);
+removeWebKitClassFromElementsOfClass(&quot;element_3&quot;);
+testColor([]);
+
+debug(&quot;Adding it back, we should be back to the original state.&quot;);
+addWebKitClassToElementsOfClass(&quot;element_3&quot;);
+testColor([&quot;element_5&quot;]);
+
+debug(&quot;Removing the .webkit class from the second element, nothing should match.&quot;);
+removeWebKitClassFromElementsOfClass(&quot;element_2&quot;);
+testColor([]);
+
+debug(&quot;Adding an element &amp;lt;target&amp;gt; on top, we should have a match again, skipping 2.&quot;);
+addElementAsFirstChild(&quot;target&quot;, &quot;element_0&quot;)
+testColor([&quot;element_5&quot;]);
+
+debug(&quot;Adding the .webkit calss back on 2, we should now match 2 elements.&quot;);
+addWebKitClassToElementsOfClass(&quot;element_2&quot;);
+testColor([&quot;element_4&quot;, &quot;element_5&quot;]);
+
+debug(&quot;Removing the element we added should put us back in the initial state.&quot;);
+removeElementsOfClass(&quot;element_0&quot;);
+testColor([&quot;element_5&quot;]);
+
+debug(&quot;Adding an element &amp;lt;target&amp;gt; on top, we should now match 4 and 5.&quot;);
+addElementAsFirstChild(&quot;target&quot;, &quot;element_0&quot;)
+testColor([&quot;element_4&quot;, &quot;element_5&quot;]);
+
+// Using nottarget is interesting because the ':nth-child()' part is not matched for those elements.
+debug(&quot;Adding an element &amp;lt;nottarget&amp;gt; on top, we should now match 3, 4 and 5.&quot;);
+addElementAsFirstChild(&quot;nottarget&quot;, &quot;element_-1&quot;)
+testColor([&quot;element_3&quot;, &quot;element_4&quot;, &quot;element_5&quot;]);
+
+debug(&quot;Adding an element &amp;lt;nottarget&amp;gt; on top, we should now match 2, 3, 4 and 5.&quot;);
+addElementAsFirstChild(&quot;nottarget&quot;, &quot;element_-2&quot;)
+testColor([&quot;element_2&quot;, &quot;element_3&quot;, &quot;element_4&quot;, &quot;element_5&quot;]);
+
+debug(&quot;Adding an element &amp;lt;target&amp;gt; on top, we should now match 1, 2, 3, 4 and 5.&quot;);
+addElementAsFirstChild(&quot;target&quot;, &quot;element_-3&quot;)
+testColor([&quot;element_1&quot;, &quot;element_2&quot;, &quot;element_3&quot;, &quot;element_4&quot;, &quot;element_5&quot;]);
+
+debug(&quot;Adding an element &amp;lt;nottarget&amp;gt; on top, we should now match 0, 1, 2, 3, 4 and 5.&quot;);
+addElementAsFirstChild(&quot;nottarget&quot;, &quot;element_-4&quot;)
+testColor([&quot;element_0&quot;, &quot;element_1&quot;, &quot;element_2&quot;, &quot;element_3&quot;, &quot;element_4&quot;, &quot;element_5&quot;]);
+
+debug(&quot;Removing one of the &amp;lt;nottarget&amp;gt;, 0 should no longer match.&quot;);
+removeElementsOfClass(&quot;element_-2&quot;);
+testColor([&quot;element_1&quot;, &quot;element_2&quot;, &quot;element_3&quot;, &quot;element_4&quot;, &quot;element_5&quot;]);
+
+debug(&quot;Removing one of the &amp;lt;target&amp;gt;, 1 should no longer match.&quot;);
+removeElementsOfClass(&quot;element_-4&quot;);
+testColor([&quot;element_2&quot;, &quot;element_3&quot;, &quot;element_4&quot;, &quot;element_5&quot;]);
+
+debug(&quot;Removing one of the &amp;lt;notarget&amp;gt;, 2 should no longer match.&quot;);
+removeElementsOfClass(&quot;element_-1&quot;);
+testColor([&quot;element_3&quot;, &quot;element_4&quot;, &quot;element_5&quot;]);
+
+debug(&quot;Removing one of the &amp;lt;target&amp;gt;, 3 should no longer match.&quot;);
+removeElementsOfClass(&quot;element_-3&quot;);
+testColor([&quot;element_4&quot;, &quot;element_5&quot;]);
+
+debug(&quot;Removing one of the &amp;lt;target&amp;gt;, 4 should no longer match.&quot;);
+removeElementsOfClass(&quot;element_0&quot;);
+testColor([&quot;element_5&quot;]);
+
+debug(&quot;Removing one of the &amp;lt;target&amp;gt;, there are only 4 siblings left, nothing can match.&quot;);
+removeElementsOfClass(&quot;element_1&quot;);
+testColor([]);
+
+&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastselectorsnthchildofcomplexselectorsexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/selectors/nth-child-of-complex-selectors-expected.txt (0 => 173853)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/selectors/nth-child-of-complex-selectors-expected.txt                                (rev 0)
+++ trunk/LayoutTests/fast/selectors/nth-child-of-complex-selectors-expected.txt        2014-09-22 22:09:13 UTC (rev 173853)
</span><span class="lines">@@ -0,0 +1,217 @@
</span><ins>+Check &quot;:nth-child(An+B of selectorList)&quot; with complex selectors.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+Testing &quot;:nth-child(2n of :root parent1&gt;testcaseA)&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of :root parent1&gt;testcaseA)').length is 5
+PASS document.querySelectorAll('#test-root :nth-child(2n of :root parent1&gt;testcaseA)')[0].id is &quot;target2&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of :root parent1&gt;testcaseA)')[1].id is &quot;target3&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of :root parent1&gt;testcaseA)')[2].id is &quot;target6&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of :root parent1&gt;testcaseA)')[3].id is &quot;target7&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of :root parent1&gt;testcaseA)')[4].id is &quot;target10&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[0]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[1]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[2]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[3]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[4]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[5]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[6]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[7]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[8]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[9]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[10]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[11]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[12]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[13]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[14]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[15]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[16]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[17]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[18]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[19]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[20]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[21]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+
+Testing &quot;:nth-child(2n of :root parent2&gt;.foo)&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of :root parent2&gt;.foo)').length is 5
+PASS document.querySelectorAll('#test-root :nth-child(2n of :root parent2&gt;.foo)')[0].id is &quot;target12&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of :root parent2&gt;.foo)')[1].id is &quot;target13&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of :root parent2&gt;.foo)')[2].id is &quot;target16&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of :root parent2&gt;.foo)')[3].id is &quot;target17&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of :root parent2&gt;.foo)')[4].id is &quot;target20&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[0]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[1]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[2]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[3]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[4]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[5]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[6]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[7]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[8]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[9]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[10]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[11]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[12]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[13]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[14]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[15]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[16]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[17]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[18]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[19]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[20]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[21]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+
+Testing &quot;:nth-child(2n of :root parent2&gt;.foo, :root parent1&gt;testcaseA)&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of :root parent2&gt;.foo, :root parent1&gt;testcaseA)').length is 10
+PASS document.querySelectorAll('#test-root :nth-child(2n of :root parent2&gt;.foo, :root parent1&gt;testcaseA)')[0].id is &quot;target2&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of :root parent2&gt;.foo, :root parent1&gt;testcaseA)')[1].id is &quot;target3&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of :root parent2&gt;.foo, :root parent1&gt;testcaseA)')[2].id is &quot;target6&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of :root parent2&gt;.foo, :root parent1&gt;testcaseA)')[3].id is &quot;target7&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of :root parent2&gt;.foo, :root parent1&gt;testcaseA)')[4].id is &quot;target10&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of :root parent2&gt;.foo, :root parent1&gt;testcaseA)')[5].id is &quot;target12&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of :root parent2&gt;.foo, :root parent1&gt;testcaseA)')[6].id is &quot;target13&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of :root parent2&gt;.foo, :root parent1&gt;testcaseA)')[7].id is &quot;target16&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of :root parent2&gt;.foo, :root parent1&gt;testcaseA)')[8].id is &quot;target17&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of :root parent2&gt;.foo, :root parent1&gt;testcaseA)')[9].id is &quot;target20&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[0]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[1]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[2]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[3]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[4]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[5]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[6]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[7]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[8]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[9]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[10]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[11]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[12]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[13]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[14]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[15]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[16]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[17]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[18]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[19]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[20]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[21]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+
+Testing &quot;&gt; * &gt; *:nth-child(2n + 1 of html div testcaseA~testcaseA + *)&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n + 1 of html div testcaseA~testcaseA + *)').length is 12
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n + 1 of html div testcaseA~testcaseA + *)')[0].id is &quot;target1&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n + 1 of html div testcaseA~testcaseA + *)')[1].id is &quot;target2&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n + 1 of html div testcaseA~testcaseA + *)')[2].id is &quot;target3&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n + 1 of html div testcaseA~testcaseA + *)')[3].id is &quot;target4&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n + 1 of html div testcaseA~testcaseA + *)')[4].id is &quot;target7&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n + 1 of html div testcaseA~testcaseA + *)')[5].id is &quot;target8&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n + 1 of html div testcaseA~testcaseA + *)')[6].id is &quot;target11&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n + 1 of html div testcaseA~testcaseA + *)')[7].id is &quot;target12&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n + 1 of html div testcaseA~testcaseA + *)')[8].id is &quot;target13&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n + 1 of html div testcaseA~testcaseA + *)')[9].id is &quot;target15&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n + 1 of html div testcaseA~testcaseA + *)')[10].id is &quot;target17&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n + 1 of html div testcaseA~testcaseA + *)')[11].id is &quot;target19&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[0]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[1]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[2]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[3]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[4]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[5]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[6]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[7]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[8]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[9]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[10]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[11]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[12]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[13]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[14]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[15]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[16]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[17]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[18]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[19]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[20]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[21]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+
+Testing &quot;&gt; * &gt; *:nth-child(2n+1 of html .foo)&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n+1 of html .foo)').length is 15
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n+1 of html .foo)')[0].id is &quot;target1&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n+1 of html .foo)')[1].id is &quot;target2&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n+1 of html .foo)')[2].id is &quot;target3&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n+1 of html .foo)')[3].id is &quot;target4&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n+1 of html .foo)')[4].id is &quot;target5&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n+1 of html .foo)')[5].id is &quot;target6&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n+1 of html .foo)')[6].id is &quot;target7&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n+1 of html .foo)')[7].id is &quot;target8&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n+1 of html .foo)')[8].id is &quot;target9&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n+1 of html .foo)')[9].id is &quot;target10&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n+1 of html .foo)')[10].id is &quot;target11&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n+1 of html .foo)')[11].id is &quot;target14&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n+1 of html .foo)')[12].id is &quot;target15&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n+1 of html .foo)')[13].id is &quot;target18&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n+1 of html .foo)')[14].id is &quot;target19&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[0]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[1]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[2]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[3]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[4]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[5]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[6]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[7]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[8]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[9]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[10]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[11]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[12]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[13]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[14]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[15]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[16]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[17]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[18]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[19]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[20]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[21]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+
+Testing &quot;&gt; * &gt; *:nth-child(2n+1 of html div testcaseA~testcaseA + *, html .foo)&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n+1 of html div testcaseA~testcaseA + *, html .foo)').length is 11
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n+1 of html div testcaseA~testcaseA + *, html .foo)')[0].id is &quot;target1&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n+1 of html div testcaseA~testcaseA + *, html .foo)')[1].id is &quot;target2&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n+1 of html div testcaseA~testcaseA + *, html .foo)')[2].id is &quot;target3&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n+1 of html div testcaseA~testcaseA + *, html .foo)')[3].id is &quot;target4&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n+1 of html div testcaseA~testcaseA + *, html .foo)')[4].id is &quot;target7&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n+1 of html div testcaseA~testcaseA + *, html .foo)')[5].id is &quot;target8&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n+1 of html div testcaseA~testcaseA + *, html .foo)')[6].id is &quot;target11&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n+1 of html div testcaseA~testcaseA + *, html .foo)')[7].id is &quot;target14&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n+1 of html div testcaseA~testcaseA + *, html .foo)')[8].id is &quot;target16&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n+1 of html div testcaseA~testcaseA + *, html .foo)')[9].id is &quot;target18&quot;
+PASS document.querySelectorAll('#test-root &gt; * &gt; *:nth-child(2n+1 of html div testcaseA~testcaseA + *, html .foo)')[10].id is &quot;target20&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[0]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[1]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[2]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[3]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[4]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[5]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[6]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[7]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[8]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[9]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[10]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[11]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[12]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[13]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[14]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[15]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[16]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[17]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[18]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[19]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[20]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[21]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsfastselectorsnthchildofcomplexselectorshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/selectors/nth-child-of-complex-selectors.html (0 => 173853)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/selectors/nth-child-of-complex-selectors.html                                (rev 0)
+++ trunk/LayoutTests/fast/selectors/nth-child-of-complex-selectors.html        2014-09-22 22:09:13 UTC (rev 173853)
</span><span class="lines">@@ -0,0 +1,86 @@
</span><ins>+&lt;!doctype html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;style&gt;
+#test-root * {
+    background-color: red;
+}
+&lt;/style&gt;
+&lt;style id=&quot;style&quot;&gt;
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+    &lt;div style=&quot;display:none&quot; id=&quot;test-root&quot;&gt;
+        &lt;parent1&gt;
+            &lt;testcaseA id=&quot;target1&quot;&gt;&lt;/testcaseA&gt;
+            &lt;testcaseB id=&quot;target2&quot;&gt;&lt;/testcaseB&gt;
+            &lt;testcaseA id=&quot;target3&quot;&gt;&lt;/testcaseA&gt;
+            &lt;testcaseB id=&quot;target4&quot;&gt;&lt;/testcaseB&gt;
+            &lt;testcaseA id=&quot;target5&quot;&gt;&lt;/testcaseA&gt;
+            &lt;testcaseB id=&quot;target6&quot;&gt;&lt;/testcaseB&gt;
+            &lt;testcaseA id=&quot;target7&quot;&gt;&lt;/testcaseA&gt;
+            &lt;testcaseB id=&quot;target8&quot;&gt;&lt;/testcaseB&gt;
+            &lt;testcaseA id=&quot;target9&quot;&gt;&lt;/testcaseA&gt;
+            &lt;testcaseB id=&quot;target10&quot;&gt;&lt;/testcaseB&gt;
+        &lt;/parent1&gt;
+        &lt;parent2&gt;
+            &lt;testcaseA class=&quot;foo&quot; id=&quot;target11&quot;&gt;&lt;/testcaseA&gt;
+            &lt;testcaseA class=&quot;bar&quot; id=&quot;target12&quot;&gt;&lt;/testcaseA&gt;
+            &lt;testcaseA class=&quot;foo&quot; id=&quot;target13&quot;&gt;&lt;/testcaseA&gt;
+            &lt;testcaseA class=&quot;bar&quot; id=&quot;target14&quot;&gt;&lt;/testcaseA&gt;
+            &lt;testcaseA class=&quot;foo&quot; id=&quot;target15&quot;&gt;&lt;/testcaseA&gt;
+            &lt;testcaseA class=&quot;bar&quot; id=&quot;target16&quot;&gt;&lt;/testcaseA&gt;
+            &lt;testcaseA class=&quot;foo&quot; id=&quot;target17&quot;&gt;&lt;/testcaseA&gt;
+            &lt;testcaseA class=&quot;bar&quot; id=&quot;target18&quot;&gt;&lt;/testcaseA&gt;
+            &lt;testcaseA class=&quot;foo&quot; id=&quot;target19&quot;&gt;&lt;/testcaseA&gt;
+            &lt;testcaseA class=&quot;bar&quot; id=&quot;target20&quot;&gt;&lt;/testcaseA&gt;
+        &lt;/parent2&gt;
+    &lt;/div&gt;
+&lt;/body&gt;
+&lt;script&gt;
+description('Check &quot;:nth-child(An+B of selectorList)&quot; with complex selectors.');
+
+function testQuerySelector(selector, expectedIds) {
+    shouldBe(&quot;document.querySelectorAll('&quot; + selector + &quot;').length&quot;, '' + expectedIds.length);
+    for (var i = 0; i &lt; expectedIds.length; ++i)
+        shouldBeEqualToString(&quot;document.querySelectorAll('&quot; + selector + &quot;')[&quot; + i + &quot;].id&quot;, expectedIds[i]);
+}
+
+function testStyling(selector, expectedIds) {
+    var stylingElement = document.getElementById(&quot;style&quot;);
+    stylingElement.innerHTML = '' + selector + ' { background-color: rgb(10, 100, 200); }';
+
+    var allTestCases = document.querySelectorAll(&quot;#test-root *&quot;);
+    for (var i = 0; i &lt; allTestCases.length; ++i) {
+        var expectMatch = expectedIds.indexOf(allTestCases[i].id) &gt;= 0;
+        shouldBeEqualToString('getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[' + i + ']).backgroundColor', expectMatch ? 'rgb(10, 100, 200)' : 'rgb(255, 0, 0)');
+    }
+
+    stylingElement.innerHTML = '';
+}
+
+function testSelector(selector, expectedIds) {
+    debug(&quot;Testing \&quot;&quot; + selector + &quot;\&quot;&quot;);
+    testQuerySelector(&quot;#test-root &quot; + selector, expectedIds);
+    testStyling(&quot;#test-root &quot; + selector, expectedIds);
+    debug(&quot;&quot;);
+}
+
+testSelector(':nth-child(2n of :root parent1&gt;testcaseA)', [&quot;target2&quot;, &quot;target3&quot;, &quot;target6&quot;, &quot;target7&quot;, &quot;target10&quot;]);
+
+testSelector(':nth-child(2n of :root parent2&gt;.foo)', [&quot;target12&quot;, &quot;target13&quot;, &quot;target16&quot;, &quot;target17&quot;, &quot;target20&quot;]);
+
+// Since the two above are disjoint sets, the combined selector should match the combined results.
+testSelector(':nth-child(2n of :root parent2&gt;.foo, :root parent1&gt;testcaseA)', [&quot;target2&quot;, &quot;target3&quot;, &quot;target6&quot;, &quot;target7&quot;, &quot;target10&quot;, &quot;target12&quot;, &quot;target13&quot;, &quot;target16&quot;, &quot;target17&quot;, &quot;target20&quot;]);
+
+
+testSelector('&gt; * &gt; *:nth-child(2n + 1 of html div testcaseA~testcaseA + *)', [&quot;target1&quot;, &quot;target2&quot;, &quot;target3&quot;, &quot;target4&quot;, &quot;target7&quot;, &quot;target8&quot;, &quot;target11&quot;, &quot;target12&quot;, &quot;target13&quot;, &quot;target15&quot;, &quot;target17&quot;, &quot;target19&quot;]);
+
+testSelector('&gt; * &gt; *:nth-child(2n+1 of html .foo)', [&quot;target1&quot;, &quot;target2&quot;, &quot;target3&quot;, &quot;target4&quot;, &quot;target5&quot;, &quot;target6&quot;, &quot;target7&quot;, &quot;target8&quot;, &quot;target9&quot;, &quot;target10&quot;, &quot;target11&quot;, &quot;target14&quot;, &quot;target15&quot;, &quot;target18&quot;, &quot;target19&quot;]);
+
+testSelector('&gt; * &gt; *:nth-child(2n+1 of html div testcaseA~testcaseA + *, html .foo)', [&quot;target1&quot;, &quot;target2&quot;, &quot;target3&quot;, &quot;target4&quot;, &quot;target7&quot;, &quot;target8&quot;, &quot;target11&quot;, &quot;target14&quot;, &quot;target16&quot;, &quot;target18&quot;, &quot;target20&quot;]);
+
+&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastselectorsnthchildofselectorlistexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/selectors/nth-child-of-selector-list-expected.txt (0 => 173853)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/selectors/nth-child-of-selector-list-expected.txt                                (rev 0)
+++ trunk/LayoutTests/fast/selectors/nth-child-of-selector-list-expected.txt        2014-09-22 22:09:13 UTC (rev 173853)
</span><span class="lines">@@ -0,0 +1,380 @@
</span><ins>+Check &quot;:nth-child(An+B of selectorList)&quot; with a selector list.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+Testing &quot;:nth-child(2n of *, :not(*), *)&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of *, :not(*), *)').length is 15
+PASS document.querySelectorAll('#test-root :nth-child(2n of *, :not(*), *)')[0].id is &quot;testcase2&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of *, :not(*), *)')[1].id is &quot;testcase4&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of *, :not(*), *)')[2].id is &quot;testcase6&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of *, :not(*), *)')[3].id is &quot;testcase8&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of *, :not(*), *)')[4].id is &quot;testcase10&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of *, :not(*), *)')[5].id is &quot;testcase12&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of *, :not(*), *)')[6].id is &quot;testcase14&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of *, :not(*), *)')[7].id is &quot;testcase16&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of *, :not(*), *)')[8].id is &quot;testcase18&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of *, :not(*), *)')[9].id is &quot;testcase20&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of *, :not(*), *)')[10].id is &quot;testcase22&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of *, :not(*), *)')[11].id is &quot;testcase24&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of *, :not(*), *)')[12].id is &quot;testcase26&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of *, :not(*), *)')[13].id is &quot;testcase28&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of *, :not(*), *)')[14].id is &quot;testcase30&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[0]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[1]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[2]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[3]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[4]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[5]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[6]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[7]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[8]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[9]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[10]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[11]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[12]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[13]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[14]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[15]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[16]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[17]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[18]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[19]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[20]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[21]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[22]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[23]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[24]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[25]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[26]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[27]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[28]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[29]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+
+Testing &quot;:nth-child(2n of :not(*), :empty:not(:empty), [attribute1][attribute2][attribute3], .foo.bar.baz.bazoo, :not([id]), :not([class]))&quot;
+PASS document.querySelectorAll('#test-root :nth-child(2n of :not(*), :empty:not(:empty), [attribute1][attribute2][attribute3], .foo.bar.baz.bazoo, :not([id]), :not([class]))').length is 0
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[0]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[1]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[2]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[3]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[4]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[5]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[6]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[7]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[8]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[9]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[10]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[11]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[12]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[13]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[14]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[15]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[16]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[17]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[18]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[19]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[20]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[21]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[22]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[23]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[24]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[25]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[26]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[27]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[28]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[29]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+
+Testing &quot;:nth-child(odd of testcaseA, testcaseB)&quot;
+PASS document.querySelectorAll('#test-root :nth-child(odd of testcaseA, testcaseB)').length is 15
+PASS document.querySelectorAll('#test-root :nth-child(odd of testcaseA, testcaseB)')[0].id is &quot;testcase1&quot;
+PASS document.querySelectorAll('#test-root :nth-child(odd of testcaseA, testcaseB)')[1].id is &quot;testcase3&quot;
+PASS document.querySelectorAll('#test-root :nth-child(odd of testcaseA, testcaseB)')[2].id is &quot;testcase5&quot;
+PASS document.querySelectorAll('#test-root :nth-child(odd of testcaseA, testcaseB)')[3].id is &quot;testcase7&quot;
+PASS document.querySelectorAll('#test-root :nth-child(odd of testcaseA, testcaseB)')[4].id is &quot;testcase9&quot;
+PASS document.querySelectorAll('#test-root :nth-child(odd of testcaseA, testcaseB)')[5].id is &quot;testcase11&quot;
+PASS document.querySelectorAll('#test-root :nth-child(odd of testcaseA, testcaseB)')[6].id is &quot;testcase13&quot;
+PASS document.querySelectorAll('#test-root :nth-child(odd of testcaseA, testcaseB)')[7].id is &quot;testcase15&quot;
+PASS document.querySelectorAll('#test-root :nth-child(odd of testcaseA, testcaseB)')[8].id is &quot;testcase17&quot;
+PASS document.querySelectorAll('#test-root :nth-child(odd of testcaseA, testcaseB)')[9].id is &quot;testcase19&quot;
+PASS document.querySelectorAll('#test-root :nth-child(odd of testcaseA, testcaseB)')[10].id is &quot;testcase21&quot;
+PASS document.querySelectorAll('#test-root :nth-child(odd of testcaseA, testcaseB)')[11].id is &quot;testcase23&quot;
+PASS document.querySelectorAll('#test-root :nth-child(odd of testcaseA, testcaseB)')[12].id is &quot;testcase25&quot;
+PASS document.querySelectorAll('#test-root :nth-child(odd of testcaseA, testcaseB)')[13].id is &quot;testcase27&quot;
+PASS document.querySelectorAll('#test-root :nth-child(odd of testcaseA, testcaseB)')[14].id is &quot;testcase29&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[0]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[1]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[2]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[3]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[4]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[5]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[6]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[7]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[8]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[9]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[10]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[11]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[12]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[13]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[14]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[15]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[16]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[17]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[18]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[19]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[20]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[21]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[22]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[23]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[24]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[25]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[26]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[27]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[28]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[29]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+
+Testing &quot;:nth-child(even of .foo, .bar, .baz)&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of .foo, .bar, .baz)').length is 15
+PASS document.querySelectorAll('#test-root :nth-child(even of .foo, .bar, .baz)')[0].id is &quot;testcase2&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of .foo, .bar, .baz)')[1].id is &quot;testcase4&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of .foo, .bar, .baz)')[2].id is &quot;testcase6&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of .foo, .bar, .baz)')[3].id is &quot;testcase8&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of .foo, .bar, .baz)')[4].id is &quot;testcase10&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of .foo, .bar, .baz)')[5].id is &quot;testcase12&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of .foo, .bar, .baz)')[6].id is &quot;testcase14&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of .foo, .bar, .baz)')[7].id is &quot;testcase16&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of .foo, .bar, .baz)')[8].id is &quot;testcase18&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of .foo, .bar, .baz)')[9].id is &quot;testcase20&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of .foo, .bar, .baz)')[10].id is &quot;testcase22&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of .foo, .bar, .baz)')[11].id is &quot;testcase24&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of .foo, .bar, .baz)')[12].id is &quot;testcase26&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of .foo, .bar, .baz)')[13].id is &quot;testcase28&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of .foo, .bar, .baz)')[14].id is &quot;testcase30&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[0]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[1]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[2]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[3]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[4]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[5]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[6]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[7]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[8]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[9]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[10]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[11]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[12]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[13]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[14]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[15]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[16]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[17]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[18]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[19]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[20]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[21]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[22]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[23]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[24]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[25]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[26]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[27]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[28]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[29]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+
+Testing &quot;:nth-child(odd of [attribute1], [attribute2=value2])&quot;
+PASS document.querySelectorAll('#test-root :nth-child(odd of [attribute1], [attribute2=value2])').length is 15
+PASS document.querySelectorAll('#test-root :nth-child(odd of [attribute1], [attribute2=value2])')[0].id is &quot;testcase1&quot;
+PASS document.querySelectorAll('#test-root :nth-child(odd of [attribute1], [attribute2=value2])')[1].id is &quot;testcase3&quot;
+PASS document.querySelectorAll('#test-root :nth-child(odd of [attribute1], [attribute2=value2])')[2].id is &quot;testcase5&quot;
+PASS document.querySelectorAll('#test-root :nth-child(odd of [attribute1], [attribute2=value2])')[3].id is &quot;testcase7&quot;
+PASS document.querySelectorAll('#test-root :nth-child(odd of [attribute1], [attribute2=value2])')[4].id is &quot;testcase9&quot;
+PASS document.querySelectorAll('#test-root :nth-child(odd of [attribute1], [attribute2=value2])')[5].id is &quot;testcase11&quot;
+PASS document.querySelectorAll('#test-root :nth-child(odd of [attribute1], [attribute2=value2])')[6].id is &quot;testcase13&quot;
+PASS document.querySelectorAll('#test-root :nth-child(odd of [attribute1], [attribute2=value2])')[7].id is &quot;testcase15&quot;
+PASS document.querySelectorAll('#test-root :nth-child(odd of [attribute1], [attribute2=value2])')[8].id is &quot;testcase17&quot;
+PASS document.querySelectorAll('#test-root :nth-child(odd of [attribute1], [attribute2=value2])')[9].id is &quot;testcase19&quot;
+PASS document.querySelectorAll('#test-root :nth-child(odd of [attribute1], [attribute2=value2])')[10].id is &quot;testcase21&quot;
+PASS document.querySelectorAll('#test-root :nth-child(odd of [attribute1], [attribute2=value2])')[11].id is &quot;testcase23&quot;
+PASS document.querySelectorAll('#test-root :nth-child(odd of [attribute1], [attribute2=value2])')[12].id is &quot;testcase25&quot;
+PASS document.querySelectorAll('#test-root :nth-child(odd of [attribute1], [attribute2=value2])')[13].id is &quot;testcase27&quot;
+PASS document.querySelectorAll('#test-root :nth-child(odd of [attribute1], [attribute2=value2])')[14].id is &quot;testcase29&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[0]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[1]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[2]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[3]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[4]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[5]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[6]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[7]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[8]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[9]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[10]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[11]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[12]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[13]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[14]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[15]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[16]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[17]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[18]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[19]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[20]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[21]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[22]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[23]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[24]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[25]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[26]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[27]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[28]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[29]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+
+Testing &quot;:nth-child(even of [attribute3$=&quot;3&quot;], :empty)&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [attribute3$=&quot;3&quot;], :empty)').length is 16
+PASS document.querySelectorAll('#test-root :nth-child(even of [attribute3$=&quot;3&quot;], :empty)')[0].id is &quot;testcase2&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [attribute3$=&quot;3&quot;], :empty)')[1].id is &quot;testcase6&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [attribute3$=&quot;3&quot;], :empty)')[2].id is &quot;testcase10&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [attribute3$=&quot;3&quot;], :empty)')[3].id is &quot;testcase14&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [attribute3$=&quot;3&quot;], :empty)')[4].id is &quot;testcase15&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [attribute3$=&quot;3&quot;], :empty)')[5].id is &quot;testcase16&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [attribute3$=&quot;3&quot;], :empty)')[6].id is &quot;testcase18&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [attribute3$=&quot;3&quot;], :empty)')[7].id is &quot;testcase19&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [attribute3$=&quot;3&quot;], :empty)')[8].id is &quot;testcase20&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [attribute3$=&quot;3&quot;], :empty)')[9].id is &quot;testcase22&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [attribute3$=&quot;3&quot;], :empty)')[10].id is &quot;testcase23&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [attribute3$=&quot;3&quot;], :empty)')[11].id is &quot;testcase24&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [attribute3$=&quot;3&quot;], :empty)')[12].id is &quot;testcase26&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [attribute3$=&quot;3&quot;], :empty)')[13].id is &quot;testcase27&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [attribute3$=&quot;3&quot;], :empty)')[14].id is &quot;testcase29&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [attribute3$=&quot;3&quot;], :empty)')[15].id is &quot;testcase30&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[0]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[1]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[2]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[3]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[4]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[5]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[6]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[7]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[8]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[9]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[10]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[11]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[12]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[13]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[14]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[15]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[16]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[17]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[18]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[19]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[20]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[21]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[22]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[23]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[24]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[25]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[26]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[27]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[28]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[29]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+
+Testing &quot;:nth-child(even of [id][attribute3$=&quot;3&quot;], [id]:empty)&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute3$=&quot;3&quot;], [id]:empty)').length is 16
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute3$=&quot;3&quot;], [id]:empty)')[0].id is &quot;testcase2&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute3$=&quot;3&quot;], [id]:empty)')[1].id is &quot;testcase6&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute3$=&quot;3&quot;], [id]:empty)')[2].id is &quot;testcase10&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute3$=&quot;3&quot;], [id]:empty)')[3].id is &quot;testcase14&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute3$=&quot;3&quot;], [id]:empty)')[4].id is &quot;testcase15&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute3$=&quot;3&quot;], [id]:empty)')[5].id is &quot;testcase16&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute3$=&quot;3&quot;], [id]:empty)')[6].id is &quot;testcase18&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute3$=&quot;3&quot;], [id]:empty)')[7].id is &quot;testcase19&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute3$=&quot;3&quot;], [id]:empty)')[8].id is &quot;testcase20&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute3$=&quot;3&quot;], [id]:empty)')[9].id is &quot;testcase22&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute3$=&quot;3&quot;], [id]:empty)')[10].id is &quot;testcase23&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute3$=&quot;3&quot;], [id]:empty)')[11].id is &quot;testcase24&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute3$=&quot;3&quot;], [id]:empty)')[12].id is &quot;testcase26&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute3$=&quot;3&quot;], [id]:empty)')[13].id is &quot;testcase27&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute3$=&quot;3&quot;], [id]:empty)')[14].id is &quot;testcase29&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute3$=&quot;3&quot;], [id]:empty)')[15].id is &quot;testcase30&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[0]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[1]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[2]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[3]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[4]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[5]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[6]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[7]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[8]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[9]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[10]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[11]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[12]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[13]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[14]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[15]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[16]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[17]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[18]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[19]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[20]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[21]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[22]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[23]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[24]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[25]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[26]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[27]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[28]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[29]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+
+Testing &quot;:nth-child(even of [id][attribute2*=&quot;alue&quot;], .foo.bar)&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute2*=&quot;alue&quot;], .foo.bar)').length is 15
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute2*=&quot;alue&quot;], .foo.bar)')[0].id is &quot;testcase3&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute2*=&quot;alue&quot;], .foo.bar)')[1].id is &quot;testcase4&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute2*=&quot;alue&quot;], .foo.bar)')[2].id is &quot;testcase6&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute2*=&quot;alue&quot;], .foo.bar)')[3].id is &quot;testcase10&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute2*=&quot;alue&quot;], .foo.bar)')[4].id is &quot;testcase12&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute2*=&quot;alue&quot;], .foo.bar)')[5].id is &quot;testcase13&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute2*=&quot;alue&quot;], .foo.bar)')[6].id is &quot;testcase14&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute2*=&quot;alue&quot;], .foo.bar)')[7].id is &quot;testcase16&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute2*=&quot;alue&quot;], .foo.bar)')[8].id is &quot;testcase20&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute2*=&quot;alue&quot;], .foo.bar)')[9].id is &quot;testcase22&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute2*=&quot;alue&quot;], .foo.bar)')[10].id is &quot;testcase23&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute2*=&quot;alue&quot;], .foo.bar)')[11].id is &quot;testcase24&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute2*=&quot;alue&quot;], .foo.bar)')[12].id is &quot;testcase26&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute2*=&quot;alue&quot;], .foo.bar)')[13].id is &quot;testcase27&quot;
+PASS document.querySelectorAll('#test-root :nth-child(even of [id][attribute2*=&quot;alue&quot;], .foo.bar)')[14].id is &quot;testcase30&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[0]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[1]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[2]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[3]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[4]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[5]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[6]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[7]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[8]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[9]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[10]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[11]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[12]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[13]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[14]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[15]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[16]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[17]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[18]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[19]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[20]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[21]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[22]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[23]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[24]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[25]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[26]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[27]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[28]).backgroundColor is &quot;rgb(255, 0, 0)&quot;
+PASS getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[29]).backgroundColor is &quot;rgb(10, 100, 200)&quot;
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsfastselectorsnthchildofselectorlisthtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/selectors/nth-child-of-selector-list.html (0 => 173853)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/selectors/nth-child-of-selector-list.html                                (rev 0)
+++ trunk/LayoutTests/fast/selectors/nth-child-of-selector-list.html        2014-09-22 22:09:13 UTC (rev 173853)
</span><span class="lines">@@ -0,0 +1,102 @@
</span><ins>+&lt;!doctype html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;style&gt;
+#test-root * {
+    background-color: red;
+}
+&lt;/style&gt;
+&lt;style id=&quot;style&quot;&gt;
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+    &lt;div style=&quot;display:none&quot; id=&quot;test-root&quot;&gt;
+        &lt;testcaseA id=&quot;testcase1&quot; attribute1=&quot;value1&quot; class=&quot;bar baz bazoo&quot; attribute3=&quot;value3&quot;&gt;Not empty&lt;/testcaseA&gt;
+        &lt;testcaseB id=&quot;testcase2&quot; class=&quot;bar baz bazoo&quot; attribute2=&quot;value2&quot; attribute3=&quot;value3&quot;&gt;&lt;/testcaseB&gt;
+        &lt;testcaseA id=&quot;testcase3&quot; attribute1=&quot;value1&quot; class=&quot;foo baz bazoo&quot;&gt;Not empty&lt;/testcaseA&gt;
+        &lt;testcaseB id=&quot;testcase4&quot; attribute1=&quot;value1&quot; class=&quot;foo bar bazoo&quot;&gt;Not empty&lt;/testcaseB&gt;
+        &lt;testcaseA id=&quot;testcase5&quot; class=&quot;foo baz bazoo&quot; attribute2=&quot;value2&quot; attribute3=&quot;value3&quot;&gt;Not empty&lt;/testcaseA&gt;
+        &lt;testcaseB id=&quot;testcase6&quot; attribute1=&quot;value1&quot; class=&quot;foo bar baz&quot; attribute3=&quot;value3&quot;&gt;Not empty&lt;/testcaseB&gt;
+        &lt;testcaseA id=&quot;testcase7&quot; attribute1=&quot;value1&quot; class=&quot;bar baz bazoo&quot;&gt;Not empty&lt;/testcaseA&gt;
+        &lt;testcaseB id=&quot;testcase8&quot; attribute1=&quot;value1&quot; class=&quot;foo baz bazoo&quot;&gt;Not empty&lt;/testcaseB&gt;
+        &lt;testcaseA id=&quot;testcase9&quot; class=&quot;foo bar bazoo&quot; attribute2=&quot;value2&quot; attribute3=&quot;value3&quot;&gt;&lt;/testcaseA&gt;
+        &lt;testcaseB id=&quot;testcase10&quot; attribute1=&quot;value1&quot; class=&quot;foo bar bazoo&quot; attribute3=&quot;value3&quot;&gt;Not empty&lt;/testcaseB&gt;
+        &lt;testcaseA id=&quot;testcase11&quot; attribute1=&quot;value1&quot; class=&quot;foo bar baz&quot;&gt;Not empty&lt;/testcaseA&gt;
+        &lt;testcaseB id=&quot;testcase12&quot; attribute1=&quot;value1&quot; class=&quot;bar baz bazoo&quot;&gt;Not empty&lt;/testcaseB&gt;
+        &lt;testcaseA id=&quot;testcase13&quot; attribute1=&quot;value1&quot; class=&quot;foo baz bazoo&quot; attribute3=&quot;value3&quot;&gt;Not empty&lt;/testcaseA&gt;
+        &lt;testcaseB id=&quot;testcase14&quot; class=&quot;foo bar baz&quot; attribute2=&quot;value2&quot;&gt;Not empty&lt;/testcaseB&gt;
+        &lt;testcaseA id=&quot;testcase15&quot; attribute1=&quot;value1&quot; class=&quot;foo bar bazoo&quot;&gt;Not empty&lt;/testcaseA&gt;
+        &lt;testcaseB id=&quot;testcase16&quot; attribute1=&quot;value1&quot; class=&quot;foo bar baz&quot; attribute3=&quot;value3&quot;&gt;Not empty&lt;/testcaseB&gt;
+        &lt;testcaseA id=&quot;testcase17&quot; attribute1=&quot;value1&quot; class=&quot;bar baz bazoo&quot; attribute3=&quot;value3&quot;&gt;Not empty&lt;/testcaseA&gt;
+        &lt;testcaseB id=&quot;testcase18&quot; attribute1=&quot;value1&quot; class=&quot;foo baz bazoo&quot;&gt;Not empty&lt;/testcaseB&gt;
+        &lt;testcaseA id=&quot;testcase19&quot; attribute1=&quot;value1&quot; class=&quot;foo bar bazoo&quot;&gt;Not empty&lt;/testcaseA&gt;
+        &lt;testcaseB id=&quot;testcase20&quot; class=&quot;bar baz bazoo&quot; attribute2=&quot;value2&quot; attribute3=&quot;value3&quot;&gt;Not empty&lt;/testcaseB&gt;
+        &lt;testcaseA id=&quot;testcase21&quot; attribute1=&quot;value1&quot; class=&quot;foo bar baz&quot; attribute3=&quot;value3&quot;&gt;&lt;/testcaseA&gt;
+        &lt;testcaseB id=&quot;testcase22&quot; attribute1=&quot;value1&quot; class=&quot;bar baz bazoo&quot;&gt;Not empty&lt;/testcaseB&gt;
+        &lt;testcaseA id=&quot;testcase23&quot; attribute1=&quot;value1&quot; class=&quot;foo baz bazoo&quot;&gt;Not empty&lt;/testcaseA&gt;
+        &lt;testcaseB id=&quot;testcase24&quot; attribute1=&quot;value1&quot; class=&quot;foo bar bazoo&quot; attribute3=&quot;value3&quot;&gt;Not empty&lt;/testcaseB&gt;
+        &lt;testcaseA id=&quot;testcase25&quot; attribute1=&quot;value1&quot; class=&quot;foo bar baz&quot; attribute3=&quot;value3&quot;&gt;Not empty&lt;/testcaseA&gt;
+        &lt;testcaseB id=&quot;testcase26&quot; attribute1=&quot;value1&quot; class=&quot;bar baz bazoo&quot;&gt;Not empty&lt;/testcaseB&gt;
+        &lt;testcaseA id=&quot;testcase27&quot; class=&quot;foo baz bazoo&quot; attribute2=&quot;value2&quot;&gt;&lt;/testcaseA&gt;
+        &lt;testcaseB id=&quot;testcase28&quot; attribute1=&quot;value1&quot; class=&quot;foo baz bazoo&quot; attribute3=&quot;value3&quot;&gt;Not empty&lt;/testcaseB&gt;
+        &lt;testcaseA id=&quot;testcase29&quot; attribute1=&quot;value1&quot; class=&quot;foo bar bazoo&quot;&gt;Not empty&lt;/testcaseA&gt;
+        &lt;testcaseB id=&quot;testcase30&quot; attribute1=&quot;value1&quot; class=&quot;foo bar baz&quot;&gt;Not empty&lt;/testcaseB&gt;
+    &lt;/div&gt;
+&lt;/body&gt;
+&lt;script&gt;
+description('Check &quot;:nth-child(An+B of selectorList)&quot; with a selector list.');
+
+function testQuerySelector(selector, expectedIds) {
+    shouldBe(&quot;document.querySelectorAll('&quot; + selector + &quot;').length&quot;, '' + expectedIds.length);
+    for (var i = 0; i &lt; expectedIds.length; ++i)
+        shouldBeEqualToString(&quot;document.querySelectorAll('&quot; + selector + &quot;')[&quot; + i + &quot;].id&quot;, expectedIds[i]);
+}
+
+function testStyling(selector, expectedIds) {
+    var stylingElement = document.getElementById(&quot;style&quot;);
+    stylingElement.innerHTML = '' + selector + ' { background-color: rgb(10, 100, 200); }';
+
+    var allTestCases = document.querySelectorAll(&quot;#test-root *&quot;);
+    for (var i = 0; i &lt; allTestCases.length; ++i) {
+        var expectMatch = expectedIds.indexOf(allTestCases[i].id) &gt;= 0;
+        shouldBeEqualToString('getComputedStyle(document.querySelectorAll(&quot;#test-root *&quot;)[' + i + ']).backgroundColor', expectMatch ? 'rgb(10, 100, 200)' : 'rgb(255, 0, 0)');
+    }
+
+    stylingElement.innerHTML = '';
+}
+
+function testSelector(selector, expectedIds) {
+    debug(&quot;Testing \&quot;&quot; + selector + &quot;\&quot;&quot;);
+    testQuerySelector(&quot;#test-root &quot; + selector, expectedIds);
+    testStyling(&quot;#test-root &quot; + selector, expectedIds);
+    debug(&quot;&quot;);
+}
+
+// Since :not(*) never match anything, this should be equivalent to :nth-child(2n).
+testSelector(&quot;:nth-child(2n of *, :not(*), *)&quot;, [&quot;testcase2&quot;, &quot;testcase4&quot;, &quot;testcase6&quot;, &quot;testcase8&quot;, &quot;testcase10&quot;, &quot;testcase12&quot;, &quot;testcase14&quot;, &quot;testcase16&quot;, &quot;testcase18&quot;, &quot;testcase20&quot;, &quot;testcase22&quot;, &quot;testcase24&quot;, &quot;testcase26&quot;, &quot;testcase28&quot;, &quot;testcase30&quot;]);
+
+// The selector list can never match anything.
+testSelector(&quot;:nth-child(2n of :not(*), :empty:not(:empty), [attribute1][attribute2][attribute3], .foo.bar.baz.bazoo, :not([id]), :not([class]))&quot;, []);
+
+// Filtering with &quot;testcaseA, testcaseB&quot; matches everything too, that should be equivalent to :nth-child(odd).
+testSelector(&quot;:nth-child(odd of testcaseA, testcaseB)&quot;, [&quot;testcase1&quot;, &quot;testcase3&quot;, &quot;testcase5&quot;, &quot;testcase7&quot;, &quot;testcase9&quot;, &quot;testcase11&quot;, &quot;testcase13&quot;, &quot;testcase15&quot;, &quot;testcase17&quot;, &quot;testcase19&quot;, &quot;testcase21&quot;, &quot;testcase23&quot;, &quot;testcase25&quot;, &quot;testcase27&quot;, &quot;testcase29&quot;]);
+
+// Matching all the classes should match everything like :nth-child(even).
+testSelector(&quot;:nth-child(even of .foo, .bar, .baz)&quot;, [&quot;testcase2&quot;, &quot;testcase4&quot;, &quot;testcase6&quot;, &quot;testcase8&quot;, &quot;testcase10&quot;, &quot;testcase12&quot;, &quot;testcase14&quot;, &quot;testcase16&quot;, &quot;testcase18&quot;, &quot;testcase20&quot;, &quot;testcase22&quot;, &quot;testcase24&quot;, &quot;testcase26&quot;, &quot;testcase28&quot;, &quot;testcase30&quot;]);
+
+// Every element has an attribute, this should be equivalent to :nth-child(odd)
+testSelector(&quot;:nth-child(odd of [attribute1], [attribute2=value2])&quot;, [&quot;testcase1&quot;, &quot;testcase3&quot;, &quot;testcase5&quot;, &quot;testcase7&quot;, &quot;testcase9&quot;, &quot;testcase11&quot;, &quot;testcase13&quot;, &quot;testcase15&quot;, &quot;testcase17&quot;, &quot;testcase19&quot;, &quot;testcase21&quot;, &quot;testcase23&quot;, &quot;testcase25&quot;, &quot;testcase27&quot;, &quot;testcase29&quot;]);
+
+// Any element with an odd number of (attribute3 or empty) above.
+testSelector(':nth-child(even of [attribute3$=&quot;3&quot;], :empty)', [&quot;testcase2&quot;, &quot;testcase6&quot;, &quot;testcase10&quot;, &quot;testcase14&quot;, &quot;testcase15&quot;, &quot;testcase16&quot;, &quot;testcase18&quot;, &quot;testcase19&quot;, &quot;testcase20&quot;, &quot;testcase22&quot;, &quot;testcase23&quot;, &quot;testcase24&quot;, &quot;testcase26&quot;, &quot;testcase27&quot;, &quot;testcase29&quot;, &quot;testcase30&quot;]);
+
+// Any element with an odd number of (attribute3 or empty) above. Overqualified with id to test compound selectors.
+testSelector(':nth-child(even of [id][attribute3$=&quot;3&quot;], [id]:empty)', [&quot;testcase2&quot;, &quot;testcase6&quot;, &quot;testcase10&quot;, &quot;testcase14&quot;, &quot;testcase15&quot;, &quot;testcase16&quot;, &quot;testcase18&quot;, &quot;testcase19&quot;, &quot;testcase20&quot;, &quot;testcase22&quot;, &quot;testcase23&quot;, &quot;testcase24&quot;, &quot;testcase26&quot;, &quot;testcase27&quot;, &quot;testcase29&quot;, &quot;testcase30&quot;]);
+
+// id is always there but attribute2 is uncommon. The classes .foo.bar matches many elements.
+testSelector(':nth-child(even of [id][attribute2*=&quot;alue&quot;], .foo.bar)', [&quot;testcase3&quot;, &quot;testcase4&quot;, &quot;testcase6&quot;, &quot;testcase10&quot;, &quot;testcase12&quot;, &quot;testcase13&quot;, &quot;testcase14&quot;, &quot;testcase16&quot;, &quot;testcase20&quot;, &quot;testcase22&quot;, &quot;testcase23&quot;, &quot;testcase24&quot;, &quot;testcase26&quot;, &quot;testcase27&quot;, &quot;testcase30&quot;]);
+
+&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (173852 => 173853)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-09-22 22:08:02 UTC (rev 173852)
+++ trunk/Source/WebCore/ChangeLog        2014-09-22 22:09:13 UTC (rev 173853)
</span><span class="lines">@@ -1,3 +1,29 @@
</span><ins>+2014-09-22  Benjamin Poulain  &lt;bpoulain@apple.com&gt;
+
+        Add the baseline implementation of :nth-child(An+B of selector-list)
+        https://bugs.webkit.org/show_bug.cgi?id=136975
+
+        Reviewed by Darin Adler.
+
+        Tests: fast/css/nth-child-of-classname.html
+               fast/css/nth-child-of-complex-selector.html
+               fast/css/nth-child-of-compound-selector.html
+               fast/css/nth-child-of-tagname.html
+               fast/selectors/nth-child-of-basics.html
+               fast/selectors/nth-child-of-class-style-update.html
+               fast/selectors/nth-child-of-complex-selectors.html
+               fast/selectors/nth-child-of-selector-list.html
+
+        * css/SelectorChecker.cpp:
+        (WebCore::SelectorChecker::checkOne):
+        Pretty basic:
+        -Go over the previous siblings.
+        -For each sibling, test the selector list. If it matches, increase the count.
+
+        * cssjit/SelectorCompiler.cpp:
+        (WebCore::SelectorCompiler::addPseudoClassType):
+        Skip any case of the new selector. This will be implemented separately.
+
</ins><span class="cx"> 2014-09-19  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Implement 'vhea', 'vmtx', and 'kern' tables in SVG -&gt; OTF converter
</span></span></pre></div>
<a id="trunkSourceWebCorecssSelectorCheckercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/SelectorChecker.cpp (173852 => 173853)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/SelectorChecker.cpp        2014-09-22 22:08:02 UTC (rev 173852)
+++ trunk/Source/WebCore/css/SelectorChecker.cpp        2014-09-22 22:09:13 UTC (rev 173853)
</span><span class="lines">@@ -666,11 +666,37 @@
</span><span class="cx">                 if (context.resolvingMode == Mode::ResolvingStyle)
</span><span class="cx">                     element-&gt;setStyleIsAffectedByPreviousSibling();
</span><span class="cx"> 
</span><del>-                int count = 1 + countElementsBefore(element, context.resolvingMode == Mode::ResolvingStyle);
</del><ins>+                int count = 1;
+#if ENABLE(CSS_SELECTORS_LEVEL4)
+                if (const CSSSelectorList* selectorList = selector-&gt;selectorList()) {
+                    for (Element* sibling = ElementTraversal::previousSibling(element); sibling; sibling = ElementTraversal::previousSibling(sibling)) {
+                        if (context.resolvingMode == Mode::ResolvingStyle)
+                            sibling-&gt;setAffectsNextSiblingElementStyle();
+
+                        for (const CSSSelector* subselector = selectorList-&gt;first(); subselector; subselector = CSSSelectorList::next(subselector)) {
+                            CheckingContextWithStatus subcontext(context);
+                            subcontext.element = sibling;
+                            subcontext.selector = subselector;
+                            subcontext.inFunctionalPseudoClass = true;
+                            subcontext.firstSelectorOfTheFragment = subselector;
+                            PseudoId ignoreDynamicPseudo = NOPSEUDO;
+                            if (matchRecursively(subcontext, ignoreDynamicPseudo) == SelectorMatches) {
+                                ASSERT(ignoreDynamicPseudo == NOPSEUDO);
+                                ++count;
+                                break;
+                            }
+                        }
+                    }
+                } else
+#endif
+                {
+                    count += countElementsBefore(element, context.resolvingMode == Mode::ResolvingStyle);
+                    if (context.resolvingMode == Mode::ResolvingStyle)
+                        element-&gt;setChildIndex(count);
+                }
+
</ins><span class="cx">                 if (context.resolvingMode == Mode::ResolvingStyle) {
</span><del>-                    RenderStyle* childStyle = context.elementStyle ? context.elementStyle : element-&gt;renderStyle();
-                    element-&gt;setChildIndex(count);
-                    if (childStyle)
</del><ins>+                    if (RenderStyle* childStyle = context.elementStyle ? context.elementStyle : element-&gt;renderStyle())
</ins><span class="cx">                         childStyle-&gt;setUnique();
</span><span class="cx">                 }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorecssjitSelectorCompilercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/cssjit/SelectorCompiler.cpp (173852 => 173853)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/cssjit/SelectorCompiler.cpp        2014-09-22 22:08:02 UTC (rev 173852)
+++ trunk/Source/WebCore/cssjit/SelectorCompiler.cpp        2014-09-22 22:09:13 UTC (rev 173853)
</span><span class="lines">@@ -552,6 +552,9 @@
</span><span class="cx">             if (!selector.parseNth())
</span><span class="cx">                 return FunctionType::CannotMatchAnything;
</span><span class="cx"> 
</span><ins>+            if (selector.selectorList())
+                return FunctionType::CannotCompile;
+
</ins><span class="cx">             int a = selector.nthA();
</span><span class="cx">             int b = selector.nthB();
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>