Title: [285921] trunk/LayoutTests
Revision
285921
Author
[email protected]
Date
2021-11-17 02:29:44 -0800 (Wed, 17 Nov 2021)

Log Message

Update web-platform-tests/css/selectors
https://bugs.webkit.org/show_bug.cgi?id=233246

Reviewed by Alexey Shvayka.

LayoutTests/imported/w3c:

WPT updates.

* resources/import-expectations.json:
* web-platform-tests/css/selectors/first-letter-flag-001-expected.html: Added.
* web-platform-tests/css/selectors/first-letter-flag-001.html: Added.
* web-platform-tests/css/selectors/focus-visible-004.html:
* web-platform-tests/css/selectors/has-argument-with-explicit-scope.tentative-expected.txt: Added.
* web-platform-tests/css/selectors/has-argument-with-explicit-scope.tentative.html: Added.
* web-platform-tests/css/selectors/has-basic-expected.txt:
* web-platform-tests/css/selectors/has-basic.html:
* web-platform-tests/css/selectors/has-matches-to-uninserted-elements-expected.txt: Added.
* web-platform-tests/css/selectors/has-matches-to-uninserted-elements.html: Added.
* web-platform-tests/css/selectors/has-relative-argument-expected.txt:
* web-platform-tests/css/selectors/has-relative-argument.html:
* web-platform-tests/css/selectors/invalidation/attribute-or-elemental-selectors-in-has-expected.txt: Added.
* web-platform-tests/css/selectors/invalidation/attribute-or-elemental-selectors-in-has.html: Added.
* web-platform-tests/css/selectors/invalidation/w3c-import.log:
* web-platform-tests/css/selectors/nesting-expected.html: Added.
* web-platform-tests/css/selectors/nesting-parsing-expected.txt: Added.
* web-platform-tests/css/selectors/nesting-parsing.html: Added.
* web-platform-tests/css/selectors/nesting.html: Added.
* web-platform-tests/css/selectors/parsing/parse-has-expected.txt:
* web-platform-tests/css/selectors/parsing/parse-has.html:
* web-platform-tests/css/selectors/selection-image-001-expected-mismatch.html: Renamed from LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-001-expected.html.
* web-platform-tests/css/selectors/selection-image-002-expected-mismatch.html: Renamed from LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-002-expected.html.
* web-platform-tests/css/selectors/w3c-import.log:
* web-platform-tests/css/selectors/xml-class-selector-expected.xml: Added.
* web-platform-tests/css/selectors/xml-class-selector.xml: Added.

LayoutTests:

* TestExpectations:

Modified Paths

Added Paths

Removed Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (285920 => 285921)


--- trunk/LayoutTests/ChangeLog	2021-11-17 09:18:30 UTC (rev 285920)
+++ trunk/LayoutTests/ChangeLog	2021-11-17 10:29:44 UTC (rev 285921)
@@ -1,3 +1,12 @@
+2021-11-17  Antti Koivisto  <[email protected]>
+
+        Update web-platform-tests/css/selectors
+        https://bugs.webkit.org/show_bug.cgi?id=233246
+
+        Reviewed by Alexey Shvayka.
+
+        * TestExpectations:
+
 2021-11-17  Rob Buis  <[email protected]>
 
         Null check clonedParent

Modified: trunk/LayoutTests/TestExpectations (285920 => 285921)


--- trunk/LayoutTests/TestExpectations	2021-11-17 09:18:30 UTC (rev 285920)
+++ trunk/LayoutTests/TestExpectations	2021-11-17 10:29:44 UTC (rev 285921)
@@ -1476,6 +1476,8 @@
 webkit.org/b/64861 imported/w3c/web-platform-tests/css/selectors/selectors-dir-selector-ltr-001.html [ ImageOnlyFailure ]
 webkit.org/b/64861 imported/w3c/web-platform-tests/css/selectors/selectors-dir-selector-rtl-001.html [ ImageOnlyFailure ]
 webkit.org/b/64861 imported/w3c/web-platform-tests/css/selectors/selectors-dir-selector-white-space-001.html [ ImageOnlyFailure ]
+webkit.org/b/223497 imported/w3c/web-platform-tests/css/selectors/nesting.html [ ImageOnlyFailure ]
+imported/w3c/web-platform-tests/css/selectors/xml-class-selector.xml [ ImageOnlyFailure ]
 
 # ref for this is under a directory that is not yet imported
 webkit.org/b/209735 imported/w3c/web-platform-tests/css/selectors/root-siblings.htm [ Skip ]

Modified: trunk/LayoutTests/imported/w3c/ChangeLog (285920 => 285921)


--- trunk/LayoutTests/imported/w3c/ChangeLog	2021-11-17 09:18:30 UTC (rev 285920)
+++ trunk/LayoutTests/imported/w3c/ChangeLog	2021-11-17 10:29:44 UTC (rev 285921)
@@ -1,3 +1,39 @@
+2021-11-17  Antti Koivisto  <[email protected]>
+
+        Update web-platform-tests/css/selectors
+        https://bugs.webkit.org/show_bug.cgi?id=233246
+
+        Reviewed by Alexey Shvayka.
+
+        WPT updates.
+
+        * resources/import-expectations.json:
+        * web-platform-tests/css/selectors/first-letter-flag-001-expected.html: Added.
+        * web-platform-tests/css/selectors/first-letter-flag-001.html: Added.
+        * web-platform-tests/css/selectors/focus-visible-004.html:
+        * web-platform-tests/css/selectors/has-argument-with-explicit-scope.tentative-expected.txt: Added.
+        * web-platform-tests/css/selectors/has-argument-with-explicit-scope.tentative.html: Added.
+        * web-platform-tests/css/selectors/has-basic-expected.txt:
+        * web-platform-tests/css/selectors/has-basic.html:
+        * web-platform-tests/css/selectors/has-matches-to-uninserted-elements-expected.txt: Added.
+        * web-platform-tests/css/selectors/has-matches-to-uninserted-elements.html: Added.
+        * web-platform-tests/css/selectors/has-relative-argument-expected.txt:
+        * web-platform-tests/css/selectors/has-relative-argument.html:
+        * web-platform-tests/css/selectors/invalidation/attribute-or-elemental-selectors-in-has-expected.txt: Added.
+        * web-platform-tests/css/selectors/invalidation/attribute-or-elemental-selectors-in-has.html: Added.
+        * web-platform-tests/css/selectors/invalidation/w3c-import.log:
+        * web-platform-tests/css/selectors/nesting-expected.html: Added.
+        * web-platform-tests/css/selectors/nesting-parsing-expected.txt: Added.
+        * web-platform-tests/css/selectors/nesting-parsing.html: Added.
+        * web-platform-tests/css/selectors/nesting.html: Added.
+        * web-platform-tests/css/selectors/parsing/parse-has-expected.txt:
+        * web-platform-tests/css/selectors/parsing/parse-has.html:
+        * web-platform-tests/css/selectors/selection-image-001-expected-mismatch.html: Renamed from LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-001-expected.html.
+        * web-platform-tests/css/selectors/selection-image-002-expected-mismatch.html: Renamed from LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-002-expected.html.
+        * web-platform-tests/css/selectors/w3c-import.log:
+        * web-platform-tests/css/selectors/xml-class-selector-expected.xml: Added.
+        * web-platform-tests/css/selectors/xml-class-selector.xml: Added.
+
 2021-11-16  Rob Buis  <[email protected]>
 
         Re-add 'style' to contain:strict and contain:content CSS properties

Modified: trunk/LayoutTests/imported/w3c/resources/import-expectations.json (285920 => 285921)


--- trunk/LayoutTests/imported/w3c/resources/import-expectations.json	2021-11-17 09:18:30 UTC (rev 285920)
+++ trunk/LayoutTests/imported/w3c/resources/import-expectations.json	2021-11-17 10:29:44 UTC (rev 285921)
@@ -321,7 +321,7 @@
     "web-platform-tests/html/semantics/forms/textfieldselection/textfieldselection-setRangeText.html": "skip", 
     "web-platform-tests/html/semantics/forms/the-textarea-element": "import", 
     "web-platform-tests/html/semantics/interactive-elements/the-dialog-element/": "import", 
-    "web-platform-tests/html/semantics/interactive-elements/the-summary-element": "skip",
+    "web-platform-tests/html/semantics/interactive-elements/the-summary-element": "skip", 
     "web-platform-tests/html/semantics/links/downloading-resources": "import", 
     "web-platform-tests/html/semantics/links/following-hyperlinks": "skip", 
     "web-platform-tests/html/semantics/links/links-created-by-a-and-area-elements": "skip", 

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/first-letter-flag-001-expected.html (0 => 285921)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/first-letter-flag-001-expected.html	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/first-letter-flag-001-expected.html	2021-11-17 10:29:44 UTC (rev 285921)
@@ -0,0 +1,12 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>::first-letter with a Regional-Indicator flag symbol - reference</title>
+<style>
+  p {
+    font: 24px/3 serif;
+  }
+  span {
+    font-size: 2em;
+  }
+</style>
+<p><span>&#x1F1EC;&#x1F1E7;</span> UK flag

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/first-letter-flag-001.html (0 => 285921)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/first-letter-flag-001.html	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/first-letter-flag-001.html	2021-11-17 10:29:44 UTC (rev 285921)
@@ -0,0 +1,16 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>::first-letter with a Regional-Indicator flag symbol</title>
+<meta name="assert" content="::first-letter should apply to symbol characters">
+<link rel=help href=""
+<link rel=help href=""
+<link rel=match href=""
+<style>
+  p {
+    font: 24px/3 serif;
+  }
+  p::first-letter {
+    font-size: 2em;
+  }
+</style>
+<p>&#x1F1EC;&#x1F1E7; UK flag

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/focus-visible-004.html (285920 => 285921)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/focus-visible-004.html	2021-11-17 09:18:30 UTC (rev 285920)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/focus-visible-004.html	2021-11-17 10:29:44 UTC (rev 285921)
@@ -29,7 +29,7 @@
 
     .check {
       -webkit-appearance: none;
-      -webkit-appearance: none;
+      appearance: none;
     }
   </style>
 </head>

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-argument-with-explicit-scope.tentative-expected.txt (0 => 285921)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-argument-with-explicit-scope.tentative-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-argument-with-explicit-scope.tentative-expected.txt	2021-11-17 10:29:44 UTC (rev 285921)
@@ -0,0 +1,15 @@
+
+PASS :has(:scope) matches expected elements on scope1
+FAIL :has(:scope .c) matches expected elements on scope1 assert_equals: expected "" but got "d02"
+PASS :has(.a :scope) matches expected elements on scope1
+FAIL .a:has(:scope) .c matches expected elements on scope1 assert_equals: expected "d02,d03" but got ""
+FAIL .a:has(:scope) .c and :is(.a :scope .c) returns same elements on scope1 assert_equals: expected "d02,d03" but got ""
+PASS .a:has(:scope) .c matches expected elements on scope2
+PASS .a:has(:scope) .c and :is(.a :scope .c) returns same elements on scope2
+PASS .c:has(:is(:scope .d)) matches expected elements on scope1
+PASS .c:has(:is(:scope .d)) and :scope .c:has(.d) returns same elements on scope1
+PASS .c:has(:is(:scope .d)) and .c:has(.d) returns same elements on scope1
+PASS .c:has(:is(:scope .d)) matches expected elements on scope2
+PASS .c:has(:is(:scope .d)) and :scope .c:has(.d) returns same elements on scope2
+PASS .c:has(:is(:scope .d)) and .c:has(.d) returns same elements on scope2
+

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-argument-with-explicit-scope.tentative.html (0 => 285921)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-argument-with-explicit-scope.tentative.html	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-argument-with-explicit-scope.tentative.html	2021-11-17 10:29:44 UTC (rev 285921)
@@ -0,0 +1,69 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>:has pseudo class behavior with explicit ':scope' in its argument</title>
+<link rel="author" title="Byungwoo Lee" href=""
+<link rel="help" href=""
+<script src=""
+<script src=""
+
+<main>
+ <div id=d01 class="a">
+  <div id=scope1 class="b">
+    <div id=d02 class="c">
+      <div id=d03 class="c">
+        <div id=d04 class="d"></div>
+      </div>
+    </div>
+    <div id=d05 class="e"></div>
+  </div>
+ </div>
+ <div id=d06>
+  <div id=scope2 class="b">
+    <div id=d07 class="c">
+      <div id=d08 class="c">
+        <div id=d09></div>
+      </div>
+    </div>
+  </div>
+ </div>
+</div>
+
+<script>
+  function formatElements(elements) {
+    return elements.map(e => e.id).sort().join();
+  }
+
+  // Test that |selector| returns the given elements in the given scope element
+  function test_selector_all(scope, selector, expected) {
+    test(function() {
+      let actual = Array.from(scope.querySelectorAll(selector));
+      assert_equals(formatElements(actual), formatElements(expected));
+    }, `${selector} matches expected elements on ${scope.id}`);
+  }
+
+  // Test that |selector1| and |selector2| returns same elements in the given scope element
+  function compare_selector_all(scope, selector1, selector2) {
+    test(function() {
+      let result1 = Array.from(scope.querySelectorAll(selector1));
+      let result2 = Array.from(scope.querySelectorAll(selector2));
+      assert_equals(formatElements(result1), formatElements(result2));
+    }, `${selector1} and ${selector2} returns same elements on ${scope.id}`);
+  }
+
+  // descendants of a scope element cannot have the scope element as its descendant
+  test_selector_all(scope1, ':has(:scope)', []);
+  test_selector_all(scope1, ':has(:scope .c)', []);
+  test_selector_all(scope1, ':has(.a :scope)', []);
+
+  // there can be more simple and efficient alternative for a ':scope' in ':has'
+  test_selector_all(scope1, '.a:has(:scope) .c', [d02, d03]);
+  compare_selector_all(scope1, '.a:has(:scope) .c', ':is(.a :scope .c)');
+  test_selector_all(scope2, '.a:has(:scope) .c', []);
+  compare_selector_all(scope2, '.a:has(:scope) .c', ':is(.a :scope .c)');
+  test_selector_all(scope1, '.c:has(:is(:scope .d))', [d02, d03]);
+  compare_selector_all(scope1, '.c:has(:is(:scope .d))', ':scope .c:has(.d)');
+  compare_selector_all(scope1, '.c:has(:is(:scope .d))', '.c:has(.d)');
+  test_selector_all(scope2, '.c:has(:is(:scope .d))', []);
+  compare_selector_all(scope2, '.c:has(:is(:scope .d))', ':scope .c:has(.d)');
+  compare_selector_all(scope2, '.c:has(:is(:scope .d))', '.c:has(.d)');
+</script>

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-basic-expected.txt (285920 => 285921)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-basic-expected.txt	2021-11-17 09:18:30 UTC (rev 285920)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-basic-expected.txt	2021-11-17 10:29:44 UTC (rev 285921)
@@ -11,14 +11,11 @@
 PASS .sibling:has(.descendant) ~ .target matches expected elements
 PASS :has(.sibling:has(.descendant) ~ .target) matches expected elements
 PASS :has(.sibling:has(.descendant) ~ .target) ~ .parent > .descendant matches expected elements
-PASS :has(:scope .target) matches expected elements
-PASS :has(:scope > .parent) matches expected elements
+PASS :has(> .parent) matches expected elements
 PASS :has(> .target) matches expected elements
-PASS :has(:scope > .target) matches expected elements
+PASS :has(> .parent, > .target) matches expected elements
 PASS :has(+ #h) matches expected elements
-PASS :has(:scope + #h) matches expected elements
 PASS .parent:has(~ #h) matches expected elements
-PASS .parent:has(:scope ~ #h) matches expected elements
 PASS .sibling:has(.descendant) matches expected element
 PASS closest(.ancestor:has(.descendant)) returns expected element
 PASS :has(.target ~ .sibling .descendant) matches expectedly

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-basic.html (285920 => 285921)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-basic.html	2021-11-17 09:18:30 UTC (rev 285920)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-basic.html	2021-11-17 10:29:44 UTC (rev 285921)
@@ -74,14 +74,11 @@
   test_selector_all(
       ':has(.sibling:has(.descendant) ~ .target) ~ .parent > .descendant',
       [g, i, j]);
-  test_selector_all(':has(:scope .target)', [a, b, f, h]);
-  test_selector_all(':has(:scope > .parent)', [a]);
+  test_selector_all(':has(> .parent)', [a]);
   test_selector_all(':has(> .target)', [b, f, h]);
-  test_selector_all(':has(:scope > .target)', [b, f, h]);
+  test_selector_all(':has(> .parent, > .target)', [a, b, f, h]);
   test_selector_all(':has(+ #h)', [f]);
-  test_selector_all(':has(:scope + #h)', [f]);
   test_selector_all('.parent:has(~ #h)', [b, f]);
-  test_selector_all('.parent:has(:scope ~ #h)', [b, f]);
   test_selector('.sibling:has(.descendant)', c);
   test_closest(k, '.ancestor:has(.descendant)', h);
   test_matches(h, ':has(.target ~ .sibling .descendant)', true);

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-matches-to-uninserted-elements-expected.txt (0 => 285921)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-matches-to-uninserted-elements-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-matches-to-uninserted-elements-expected.txt	2021-11-17 10:29:44 UTC (rev 285921)
@@ -0,0 +1,14 @@
+
+PASS :has(child) matches expectedly
+PASS :has(> child) matches expectedly
+PASS :has(descendant) matches expectedly
+PASS :has(> descendant) matches expectedly
+PASS :has(~ direct_sibling) matches expectedly
+PASS :has(+ direct_sibling) matches expectedly
+PASS :has(~ indirect_sibling) matches expectedly
+PASS :has(+ indirect_sibling) matches expectedly
+PASS :has(*) matches expectedly
+PASS :has(> *) matches expectedly
+PASS :has(~ *) matches expectedly
+PASS :has(+ *) matches expectedly
+

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-matches-to-uninserted-elements.html (0 => 285921)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-matches-to-uninserted-elements.html	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-matches-to-uninserted-elements.html	2021-11-17 10:29:44 UTC (rev 285921)
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Matches :has pseudo class to uninserted elements</title>
+<link rel="author" title="Byungwoo Lee" href=""
+<script src=""
+<script src=""
+<link rel="help" href=""
+
+<script>
+  // Test that |selector| returns matching status.
+  function test_matches(node, selector, expected) {
+    test(function() {
+      assert_equals(node.matches(selector), expected);
+    }, `${selector} matches expectedly`);
+  }
+
+  subject = document.createElement('subject');
+
+  subject.innerHTML = '<child></child>';
+  test_matches(subject, ':has(child)', true);
+  test_matches(subject, ':has(> child)', true);
+
+  subject.innerHTML = '<child><descendant></descendant></child>';
+  test_matches(subject, ':has(descendant)', true);
+  test_matches(subject, ':has(> descendant)', false);
+
+  subject.innerHTML = '<child></child><direct_sibling></direct_sibling><indirect_sibling></indirect_sibling>';
+  test_matches(subject.firstChild, ':has(~ direct_sibling)', true);
+  test_matches(subject.firstChild, ':has(+ direct_sibling)', true);
+  test_matches(subject.firstChild, ':has(~ indirect_sibling)', true);
+  test_matches(subject.firstChild, ':has(+ indirect_sibling)', false);
+
+  test_matches(subject, ':has(*)', true);
+  test_matches(subject, ':has(> *)', true);
+  test_matches(subject, ':has(~ *)', false);
+  test_matches(subject, ':has(+ *)', false);
+</script>

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-relative-argument-expected.txt (285920 => 285921)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-relative-argument-expected.txt	2021-11-17 09:18:30 UTC (rev 285920)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-relative-argument-expected.txt	2021-11-17 10:29:44 UTC (rev 285921)
@@ -1,129 +1,43 @@
 
-PASS .x:has(:scope .a) matches expected elements
-PASS .x:has(:scope .a > .b) matches expected elements
-PASS .x:has(:scope .a .b) matches expected elements
-PASS .x:has(:scope .a + .b) matches expected elements
-PASS .x:has(:scope .a ~ .b) matches expected elements
-PASS :has(.x:scope .a) matches expected elements
-PASS :has(.x:scope .a > .b) matches expected elements
-PASS :has(.x:scope .a .b) matches expected elements
-PASS :has(.x:scope .a + .b) matches expected elements
-PASS :has(.x:scope .a ~ .b) matches expected elements
-PASS :has(:scope.x .a) matches expected elements
-PASS :has(:scope.x .a > .b) matches expected elements
-PASS :has(:scope.x .a .b) matches expected elements
-PASS :has(:scope.x .a + .b) matches expected elements
-PASS :has(:scope.x .a ~ .b) matches expected elements
-PASS .x:has(:scope > .a) matches expected elements
-PASS .x:has(:scope > .a > .b) matches expected elements
-PASS .x:has(:scope > .a .b) matches expected elements
-PASS .x:has(:scope > .a + .b) matches expected elements
-PASS .x:has(:scope > .a ~ .b) matches expected elements
-PASS :has(.x:scope > .a) matches expected elements
-PASS :has(.x:scope > .a > .b) matches expected elements
-PASS :has(.x:scope > .a .b) matches expected elements
-PASS :has(.x:scope > .a + .b) matches expected elements
-PASS :has(.x:scope > .a ~ .b) matches expected elements
-PASS :has(:scope.x > .a) matches expected elements
-PASS :has(:scope.x > .a > .b) matches expected elements
-PASS :has(:scope.x > .a .b) matches expected elements
-PASS :has(:scope.x > .a + .b) matches expected elements
-PASS :has(:scope.x > .a ~ .b) matches expected elements
-PASS .x:has(:scope + .a) matches expected elements
-PASS .x:has(:scope + .a > .b) matches expected elements
-PASS .x:has(:scope + .a .b) matches expected elements
-PASS .x:has(:scope + .a + .b) matches expected elements
-PASS .x:has(:scope + .a ~ .b) matches expected elements
-PASS :has(.x:scope + .a) matches expected elements
-PASS :has(.x:scope + .a > .b) matches expected elements
-PASS :has(.x:scope + .a .b) matches expected elements
-PASS :has(.x:scope + .a + .b) matches expected elements
-PASS :has(.x:scope + .a ~ .b) matches expected elements
-PASS :has(:scope.x + .a) matches expected elements
-PASS :has(:scope.x + .a > .b) matches expected elements
-PASS :has(:scope.x + .a .b) matches expected elements
-PASS :has(:scope.x + .a + .b) matches expected elements
-PASS :has(:scope.x + .a ~ .b) matches expected elements
-PASS .x:has(:scope ~ .a) matches expected elements
-PASS .x:has(:scope ~ .a > .b) matches expected elements
-PASS .x:has(:scope ~ .a .b) matches expected elements
-PASS .x:has(:scope ~ .a + .b) matches expected elements
-PASS .x:has(:scope ~ .a + .b > .c) matches expected elements
-PASS .x:has(:scope ~ .a + .b .c) matches expected elements
-PASS :has(.x:scope ~ .a) matches expected elements
-PASS :has(.x:scope ~ .a > .b) matches expected elements
-PASS :has(.x:scope ~ .a .b) matches expected elements
-PASS :has(.x:scope ~ .a + .b) matches expected elements
-PASS :has(.x:scope ~ .a + .b > .c) matches expected elements
-PASS :has(.x:scope ~ .a + .b .c) matches expected elements
-PASS :has(:scope.x ~ .a) matches expected elements
-PASS :has(:scope.x ~ .a > .b) matches expected elements
-PASS :has(:scope.x ~ .a .b) matches expected elements
-PASS :has(:scope.x ~ .a + .b) matches expected elements
-PASS :has(:scope.x ~ .a + .b > .c) matches expected elements
-PASS :has(:scope.x ~ .a + .b .c) matches expected elements
+PASS .x:has(.a) matches expected elements
+PASS .x:has(.a > .b) matches expected elements
+PASS .x:has(.a .b) matches expected elements
+PASS .x:has(.a + .b) matches expected elements
+PASS .x:has(.a ~ .b) matches expected elements
+PASS .x:has(> .a) matches expected elements
+PASS .x:has(> .a > .b) matches expected elements
+PASS .x:has(> .a .b) matches expected elements
+PASS .x:has(> .a + .b) matches expected elements
+PASS .x:has(> .a ~ .b) matches expected elements
+PASS .x:has(+ .a) matches expected elements
+PASS .x:has(+ .a > .b) matches expected elements
+PASS .x:has(+ .a .b) matches expected elements
+PASS .x:has(+ .a + .b) matches expected elements
+PASS .x:has(+ .a ~ .b) matches expected elements
+PASS .x:has(~ .a) matches expected elements
+PASS .x:has(~ .a > .b) matches expected elements
+PASS .x:has(~ .a .b) matches expected elements
+PASS .x:has(~ .a + .b) matches expected elements
+PASS .x:has(~ .a + .b > .c) matches expected elements
+PASS .x:has(~ .a + .b .c) matches expected elements
 PASS .x:has(.d .e) matches expected elements
 PASS .x:has(.d .e) .f matches expected elements
-PASS .x:has(:scope .d .e) matches expected elements
-PASS .x:has(:scope .d .e) .f matches expected elements
-PASS .x:has(:scope > .d) matches expected elements
-PASS .x:has(:scope > .d) .f matches expected elements
-PASS .x:has(:scope ~ .d ~ .e) matches expected elements
-PASS .x:has(:scope ~ .d ~ .e) ~ .f matches expected elements
-PASS .x:has(:scope + .d ~ .e) matches expected elements
-PASS .x:has(:scope + .d ~ .e) ~ .f matches expected elements
-PASS :has(.x:scope .d .e) matches expected elements
-PASS :has(.x:scope .d .e) .f matches expected elements
-PASS :has(.x:scope > .d) matches expected elements
-PASS :has(.x:scope > .d) .f matches expected elements
-PASS :has(.x:scope ~ .d ~ .e) matches expected elements
-PASS :has(.x:scope ~ .d ~ .e) ~ .f matches expected elements
-PASS :has(.x:scope + .d ~ .e) matches expected elements
-PASS :has(.x:scope + .d ~ .e) ~ .f matches expected elements
-PASS :has(:scope.x .d .e) matches expected elements
-PASS :has(:scope.x .d .e) .f matches expected elements
-PASS :has(:scope.x > .d) matches expected elements
-PASS :has(:scope.x > .d) .f matches expected elements
-PASS :has(:scope.x ~ .d ~ .e) matches expected elements
-PASS :has(:scope.x ~ .d ~ .e) ~ .f matches expected elements
-PASS :has(:scope.x + .d ~ .e) matches expected elements
-PASS :has(:scope.x + .d ~ .e) ~ .f matches expected elements
-PASS .y:has(:scope > .g .h) matches expected elements
-PASS .y:has(:scope .g .h) matches expected elements
-PASS .y:has(:scope > .g .h) .i matches expected elements
-PASS .y:has(:scope .g .h) .i matches expected elements
-PASS .x:has(:scope + .y:has(:scope > .g .h) .i) matches expected elements
-PASS .x:has(:scope + .y:has(:scope .g .h) .i) matches expected elements
-PASS .x:has(:scope + .y:has(:scope > .g .h) .i) ~ .j matches expected elements
-PASS .x:has(:scope + .y:has(:scope .g .h) .i) ~ .j matches expected elements
-PASS .x:has(:scope ~ .y:has(:scope > .g .h) .i) matches expected elements
-PASS .x:has(:scope ~ .y:has(:scope .g .h) .i) matches expected elements
-PASS :has(.y:scope > .g .h) matches expected elements
-PASS :has(.y:scope .g .h) matches expected elements
-PASS :has(.y:scope > .g .h) .i matches expected elements
-PASS :has(.y:scope .g .h) .i matches expected elements
-PASS :has(.x:scope + :has(.y:scope > .g .h) .i) matches expected elements
-PASS :has(.x:scope + :has(.y:scope .g .h) .i) matches expected elements
-PASS :has(.x:scope + :has(.y:scope > .g .h) .i) ~ .j matches expected elements
-PASS :has(.x:scope + :has(.y:scope .g .h) .i) ~ .j matches expected elements
-PASS :has(.x:scope ~ :has(.y:scope > .g .h) .i) matches expected elements
-PASS :has(.x:scope ~ :has(.y:scope .g .h) .i) matches expected elements
-PASS :has(:scope.y > .g .h) matches expected elements
-PASS :has(:scope.y .g .h) matches expected elements
-PASS :has(:scope.y > .g .h) .i matches expected elements
-PASS :has(:scope.y .g .h) .i matches expected elements
-PASS :has(:scope.x + :has(:scope.y > .g .h) .i) matches expected elements
-PASS :has(:scope.x + :has(:scope.y .g .h) .i) matches expected elements
-PASS :has(:scope.x + :has(:scope.y > .g .h) .i) ~ .j matches expected elements
-PASS :has(:scope.x + :has(:scope.y .g .h) .i) ~ .j matches expected elements
-PASS :has(:scope.x ~ :has(:scope.y > .g .h) .i) matches expected elements
-PASS :has(:scope.x ~ :has(:scope.y .g .h) .i) matches expected elements
-PASS .x:has(.d :scope .e) matches expected elements
-PASS :has(.d .x:scope .e) matches expected elements
-PASS :has(.d :scope.x .e) matches expected elements
-PASS .x:has(.d ~ :scope ~ .e) matches expected elements
-PASS :has(.d ~ .x:scope ~ .e) matches expected elements
-PASS :has(.d ~ :scope.x ~ .e) matches expected elements
-PASS :has(:scope .d :scope) matches expected elements
-PASS :has(:scope ~ .d ~ :scope) matches expected elements
+PASS .x:has(> .d) matches expected elements
+PASS .x:has(> .d) .f matches expected elements
+PASS .x:has(~ .d ~ .e) matches expected elements
+PASS .x:has(~ .d ~ .e) ~ .f matches expected elements
+PASS .x:has(+ .d ~ .e) matches expected elements
+PASS .x:has(+ .d ~ .e) ~ .f matches expected elements
+PASS .y:has(> .g .h) matches expected elements
+PASS .y:has(.g .h) matches expected elements
+PASS .y:has(> .g .h) .i matches expected elements
+PASS .y:has(.g .h) .i matches expected elements
+PASS .x:has(+ .y:has(> .g .h) .i) matches expected elements
+PASS .x:has(+ .y:has(.g .h) .i) matches expected elements
+PASS .x:has(+ .y:has(> .g .h) .i) ~ .j matches expected elements
+PASS .x:has(+ .y:has(.g .h) .i) ~ .j matches expected elements
+PASS .x:has(~ .y:has(> .g .h) .i) matches expected elements
+PASS .x:has(~ .y:has(.g .h) .i) matches expected elements
+PASS .d .x:has(.e) matches expected elements
+PASS .d ~ .x:has(~ .e) matches expected elements
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-relative-argument.html (285920 => 285921)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-relative-argument.html	2021-11-17 09:18:30 UTC (rev 285920)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-relative-argument.html	2021-11-17 10:29:44 UTC (rev 285921)
@@ -138,139 +138,53 @@
     }, `${selector} matches expected elements`);
   }
 
-  test_selector_all('.x:has(:scope .a)', [d02, d06, d07, d09, d12]);
-  test_selector_all('.x:has(:scope .a > .b)', [d09]);
-  test_selector_all('.x:has(:scope .a .b)', [d09, d12]);
-  test_selector_all('.x:has(:scope .a + .b)', [d12]);
-  test_selector_all('.x:has(:scope .a ~ .b)', [d02, d12]);
-  test_selector_all(':has(.x:scope .a)', [d02, d06, d07, d09, d12]);
-  test_selector_all(':has(.x:scope .a > .b)', [d09]);
-  test_selector_all(':has(.x:scope .a .b)', [d09, d12]);
-  test_selector_all(':has(.x:scope .a + .b)', [d12]);
-  test_selector_all(':has(.x:scope .a ~ .b)', [d02, d12]);
-  test_selector_all(':has(:scope.x .a)', [d02, d06, d07, d09, d12]);
-  test_selector_all(':has(:scope.x .a > .b)', [d09]);
-  test_selector_all(':has(:scope.x .a .b)', [d09, d12]);
-  test_selector_all(':has(:scope.x .a + .b)', [d12]);
-  test_selector_all(':has(:scope.x .a ~ .b)', [d02, d12]);
+  test_selector_all('.x:has(.a)', [d02, d06, d07, d09, d12]);
+  test_selector_all('.x:has(.a > .b)', [d09]);
+  test_selector_all('.x:has(.a .b)', [d09, d12]);
+  test_selector_all('.x:has(.a + .b)', [d12]);
+  test_selector_all('.x:has(.a ~ .b)', [d02, d12]);
 
-  test_selector_all('.x:has(:scope > .a)', [d02, d07, d09, d12]);
-  test_selector_all('.x:has(:scope > .a > .b)', [d09]);
-  test_selector_all('.x:has(:scope > .a .b)', [d09, d12]);
-  test_selector_all('.x:has(:scope > .a + .b)', [d12]);
-  test_selector_all('.x:has(:scope > .a ~ .b)', [d02, d12]);
-  test_selector_all(':has(.x:scope > .a)', [d02, d07, d09, d12]);
-  test_selector_all(':has(.x:scope > .a > .b)', [d09]);
-  test_selector_all(':has(.x:scope > .a .b)', [d09, d12]);
-  test_selector_all(':has(.x:scope > .a + .b)', [d12]);
-  test_selector_all(':has(.x:scope > .a ~ .b)', [d02, d12]);
-  test_selector_all(':has(:scope.x > .a)', [d02, d07, d09, d12]);
-  test_selector_all(':has(:scope.x > .a > .b)', [d09]);
-  test_selector_all(':has(:scope.x > .a .b)', [d09, d12]);
-  test_selector_all(':has(:scope.x > .a + .b)', [d12]);
-  test_selector_all(':has(:scope.x > .a ~ .b)', [d02, d12]);
+  test_selector_all('.x:has(> .a)', [d02, d07, d09, d12]);
+  test_selector_all('.x:has(> .a > .b)', [d09]);
+  test_selector_all('.x:has(> .a .b)', [d09, d12]);
+  test_selector_all('.x:has(> .a + .b)', [d12]);
+  test_selector_all('.x:has(> .a ~ .b)', [d02, d12]);
 
-  test_selector_all('.x:has(:scope + .a)', [d19, d21, d24, d28, d32, d37, d40, d46]);
-  test_selector_all('.x:has(:scope + .a > .b)', [d21]);
-  test_selector_all('.x:has(:scope + .a .b)', [d21, d24]);
-  test_selector_all('.x:has(:scope + .a + .b)', [d28, d32, d37]);
-  test_selector_all('.x:has(:scope + .a ~ .b)', [d19, d21, d24, d28, d32, d37, d40]);
-  test_selector_all(':has(.x:scope + .a)', [d19, d21, d24, d28, d32, d37, d40, d46]);
-  test_selector_all(':has(.x:scope + .a > .b)', [d21]);
-  test_selector_all(':has(.x:scope + .a .b)', [d21, d24]);
-  test_selector_all(':has(.x:scope + .a + .b)', [d28, d32, d37]);
-  test_selector_all(':has(.x:scope + .a ~ .b)', [d19, d21, d24, d28, d32, d37, d40]);
-  test_selector_all(':has(:scope.x + .a)', [d19, d21, d24, d28, d32, d37, d40, d46]);
-  test_selector_all(':has(:scope.x + .a > .b)', [d21]);
-  test_selector_all(':has(:scope.x + .a .b)', [d21, d24]);
-  test_selector_all(':has(:scope.x + .a + .b)', [d28, d32, d37]);
-  test_selector_all(':has(:scope.x + .a ~ .b)', [d19, d21, d24, d28, d32, d37, d40]);
+  test_selector_all('.x:has(+ .a)', [d19, d21, d24, d28, d32, d37, d40, d46]);
+  test_selector_all('.x:has(+ .a > .b)', [d21]);
+  test_selector_all('.x:has(+ .a .b)', [d21, d24]);
+  test_selector_all('.x:has(+ .a + .b)', [d28, d32, d37]);
+  test_selector_all('.x:has(+ .a ~ .b)', [d19, d21, d24, d28, d32, d37, d40]);
 
-  test_selector_all('.x:has(:scope ~ .a)', [d18, d19, d21, d24, d28, d32, d37, d40, d46]);
-  test_selector_all('.x:has(:scope ~ .a > .b)', [d18, d19, d21]);
-  test_selector_all('.x:has(:scope ~ .a .b)', [d18, d19, d21, d24]);
-  test_selector_all('.x:has(:scope ~ .a + .b)', [d18, d19, d21, d24, d28, d32, d37]);
-  test_selector_all('.x:has(:scope ~ .a + .b > .c)', [d18, d19, d21, d24, d28]);
-  test_selector_all('.x:has(:scope ~ .a + .b .c)', [d18, d19, d21, d24, d28, d32]);
-  test_selector_all(':has(.x:scope ~ .a)', [d18, d19, d21, d24, d28, d32, d37, d40, d46]);
-  test_selector_all(':has(.x:scope ~ .a > .b)', [d18, d19, d21]);
-  test_selector_all(':has(.x:scope ~ .a .b)', [d18, d19, d21, d24]);
-  test_selector_all(':has(.x:scope ~ .a + .b)', [d18, d19, d21, d24, d28, d32, d37]);
-  test_selector_all(':has(.x:scope ~ .a + .b > .c)', [d18, d19, d21, d24, d28]);
-  test_selector_all(':has(.x:scope ~ .a + .b .c)', [d18, d19, d21, d24, d28, d32]);
-  test_selector_all(':has(:scope.x ~ .a)', [d18, d19, d21, d24, d28, d32, d37, d40, d46]);
-  test_selector_all(':has(:scope.x ~ .a > .b)', [d18, d19, d21]);
-  test_selector_all(':has(:scope.x ~ .a .b)', [d18, d19, d21, d24]);
-  test_selector_all(':has(:scope.x ~ .a + .b)', [d18, d19, d21, d24, d28, d32, d37]);
-  test_selector_all(':has(:scope.x ~ .a + .b > .c)', [d18, d19, d21, d24, d28]);
-  test_selector_all(':has(:scope.x ~ .a + .b .c)', [d18, d19, d21, d24, d28, d32]);
+  test_selector_all('.x:has(~ .a)', [d18, d19, d21, d24, d28, d32, d37, d40, d46]);
+  test_selector_all('.x:has(~ .a > .b)', [d18, d19, d21]);
+  test_selector_all('.x:has(~ .a .b)', [d18, d19, d21, d24]);
+  test_selector_all('.x:has(~ .a + .b)', [d18, d19, d21, d24, d28, d32, d37]);
+  test_selector_all('.x:has(~ .a + .b > .c)', [d18, d19, d21, d24, d28]);
+  test_selector_all('.x:has(~ .a + .b .c)', [d18, d19, d21, d24, d28, d32]);
 
   test_selector_all('.x:has(.d .e)', [d48, d49, d50]);
   test_selector_all('.x:has(.d .e) .f', [d54]);
-  test_selector_all('.x:has(:scope .d .e)', [d48, d49, d50]);
-  test_selector_all('.x:has(:scope .d .e) .f', [d54]);
-  test_selector_all('.x:has(:scope > .d)', [d49, d50]);
-  test_selector_all('.x:has(:scope > .d) .f', [d54]);
-  test_selector_all('.x:has(:scope ~ .d ~ .e)', [d48, d55, d56]);
-  test_selector_all('.x:has(:scope ~ .d ~ .e) ~ .f', [d60]);
-  test_selector_all('.x:has(:scope + .d ~ .e)', [d55, d56]);
-  test_selector_all('.x:has(:scope + .d ~ .e) ~ .f', [d60]);
-  test_selector_all(':has(.x:scope .d .e)', [d48, d49, d50]);
-  test_selector_all(':has(.x:scope .d .e) .f', [d54]);
-  test_selector_all(':has(.x:scope > .d)', [d49, d50]);
-  test_selector_all(':has(.x:scope > .d) .f', [d54]);
-  test_selector_all(':has(.x:scope ~ .d ~ .e)', [d48, d55, d56]);
-  test_selector_all(':has(.x:scope ~ .d ~ .e) ~ .f', [d60]);
-  test_selector_all(':has(.x:scope + .d ~ .e)', [d55, d56]);
-  test_selector_all(':has(.x:scope + .d ~ .e) ~ .f', [d60]);
-  test_selector_all(':has(:scope.x .d .e)', [d48, d49, d50]);
-  test_selector_all(':has(:scope.x .d .e) .f', [d54]);
-  test_selector_all(':has(:scope.x > .d)', [d49, d50]);
-  test_selector_all(':has(:scope.x > .d) .f', [d54]);
-  test_selector_all(':has(:scope.x ~ .d ~ .e)', [d48, d55, d56]);
-  test_selector_all(':has(:scope.x ~ .d ~ .e) ~ .f', [d60]);
-  test_selector_all(':has(:scope.x + .d ~ .e)', [d55, d56]);
-  test_selector_all(':has(:scope.x + .d ~ .e) ~ .f', [d60]);
+  test_selector_all('.x:has(> .d)', [d49, d50]);
+  test_selector_all('.x:has(> .d) .f', [d54]);
+  test_selector_all('.x:has(~ .d ~ .e)', [d48, d55, d56]);
+  test_selector_all('.x:has(~ .d ~ .e) ~ .f', [d60]);
+  test_selector_all('.x:has(+ .d ~ .e)', [d55, d56]);
+  test_selector_all('.x:has(+ .d ~ .e) ~ .f', [d60]);
 
-  test_selector_all('.y:has(:scope > .g .h)', [d63, d71])
-  test_selector_all('.y:has(:scope .g .h)', [d63, d68, d71])
-  test_selector_all('.y:has(:scope > .g .h) .i', [d67, d75])
-  test_selector_all('.y:has(:scope .g .h) .i', [d67, d75])
-  test_selector_all('.x:has(:scope + .y:has(:scope > .g .h) .i)', [d62, d70])
-  test_selector_all('.x:has(:scope + .y:has(:scope .g .h) .i)', [d62, d63, d70])
-  test_selector_all('.x:has(:scope + .y:has(:scope > .g .h) .i) ~ .j', [d77, d80])
-  test_selector_all('.x:has(:scope + .y:has(:scope .g .h) .i) ~ .j', [d77, d80])
-  test_selector_all('.x:has(:scope ~ .y:has(:scope > .g .h) .i)', [d61, d62, d69, d70])
-  test_selector_all('.x:has(:scope ~ .y:has(:scope .g .h) .i)', [d61, d62, d63, d69, d70])
-  test_selector_all(':has(.y:scope > .g .h)', [d63, d71])
-  test_selector_all(':has(.y:scope .g .h)', [d63, d68, d71])
-  test_selector_all(':has(.y:scope > .g .h) .i', [d67, d75])
-  test_selector_all(':has(.y:scope .g .h) .i', [d67, d75])
-  test_selector_all(':has(.x:scope + :has(.y:scope > .g .h) .i)', [d62, d70])
-  test_selector_all(':has(.x:scope + :has(.y:scope .g .h) .i)', [d62, d63, d70])
-  test_selector_all(':has(.x:scope + :has(.y:scope > .g .h) .i) ~ .j', [d77, d80])
-  test_selector_all(':has(.x:scope + :has(.y:scope .g .h) .i) ~ .j', [d77, d80])
-  test_selector_all(':has(.x:scope ~ :has(.y:scope > .g .h) .i)', [d61, d62, d69, d70])
-  test_selector_all(':has(.x:scope ~ :has(.y:scope .g .h) .i)', [d61, d62, d63, d69, d70])
-  test_selector_all(':has(:scope.y > .g .h)', [d63, d71])
-  test_selector_all(':has(:scope.y .g .h)', [d63, d68, d71])
-  test_selector_all(':has(:scope.y > .g .h) .i', [d67, d75])
-  test_selector_all(':has(:scope.y .g .h) .i', [d67, d75])
-  test_selector_all(':has(:scope.x + :has(:scope.y > .g .h) .i)', [d62, d70])
-  test_selector_all(':has(:scope.x + :has(:scope.y .g .h) .i)', [d62, d63, d70])
-  test_selector_all(':has(:scope.x + :has(:scope.y > .g .h) .i) ~ .j', [d77, d80])
-  test_selector_all(':has(:scope.x + :has(:scope.y .g .h) .i) ~ .j', [d77, d80])
-  test_selector_all(':has(:scope.x ~ :has(:scope.y > .g .h) .i)', [d61, d62, d69, d70])
-  test_selector_all(':has(:scope.x ~ :has(:scope.y .g .h) .i)', [d61, d62, d63, d69, d70])
+  test_selector_all('.y:has(> .g .h)', [d63, d71])
+  test_selector_all('.y:has(.g .h)', [d63, d68, d71])
+  test_selector_all('.y:has(> .g .h) .i', [d67, d75])
+  test_selector_all('.y:has(.g .h) .i', [d67, d75])
+  test_selector_all('.x:has(+ .y:has(> .g .h) .i)', [d62, d70])
+  test_selector_all('.x:has(+ .y:has(.g .h) .i)', [d62, d63, d70])
+  test_selector_all('.x:has(+ .y:has(> .g .h) .i) ~ .j', [d77, d80])
+  test_selector_all('.x:has(+ .y:has(.g .h) .i) ~ .j', [d77, d80])
+  test_selector_all('.x:has(~ .y:has(> .g .h) .i)', [d61, d62, d69, d70])
+  test_selector_all('.x:has(~ .y:has(.g .h) .i)', [d61, d62, d63, d69, d70])
 
-  test_selector_all('.x:has(.d :scope .e)', [d51, d52])
-  test_selector_all(':has(.d .x:scope .e)', [d51, d52])
-  test_selector_all(':has(.d :scope.x .e)', [d51, d52])
+  test_selector_all('.d .x:has(.e)', [d51, d52])
 
-  test_selector_all('.x:has(.d ~ :scope ~ .e)', [d57, d58])
-  test_selector_all(':has(.d ~ .x:scope ~ .e)', [d57, d58])
-  test_selector_all(':has(.d ~ :scope.x ~ .e)', [d57, d58])
+  test_selector_all('.d ~ .x:has(~ .e)', [d57, d58])
 
-  test_selector_all(':has(:scope .d :scope)', [])
-  test_selector_all(':has(:scope ~ .d ~ :scope)', [])
 </script>

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/attribute-or-elemental-selectors-in-has-expected.txt (0 => 285921)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/attribute-or-elemental-selectors-in-has-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/attribute-or-elemental-selectors-in-has-expected.txt	2021-11-17 10:29:44 UTC (rev 285921)
@@ -0,0 +1,21 @@
+
+PASS initial_color: div#div_subject.color
+PASS initial_color: div#div_child.color
+PASS initial_color: div#div_grandchild.color
+FAIL add .child to #div_child: div#div_subject.color assert_equals: expected "rgb(255, 0, 0)" but got "rgb(128, 128, 128)"
+PASS remove .child from #div_child: div#div_subject.color
+PASS add .child to #div_grandchild: div#div_subject.color
+PASS remove .child from #div_grandchild: div#div_subject.color
+FAIL add .descendant to #div_child: div#div_subject.color assert_equals: expected "rgb(0, 128, 0)" but got "rgb(128, 128, 128)"
+PASS remove .descendant from #div_child: div#div_subject.color
+FAIL add .descendant to #div_grandchild: div#div_subject.color assert_equals: expected "rgb(0, 128, 0)" but got "rgb(128, 128, 128)"
+PASS remove .descendant from #div_grandchild: div#div_subject.color
+FAIL set descendant to #div_grandchild[attrname]: div#div_subject.color assert_equals: expected "rgb(0, 0, 255)" but got "rgb(128, 128, 128)"
+PASS clear #div_grandchild[attrname]: div#div_subject.color
+FAIL change #div_grandchild to #div_descendant: div#div_subject.color assert_equals: expected "rgb(255, 255, 0)" but got "rgb(128, 128, 128)"
+PASS change #div_descendant to #div_grandchild: div#div_subject.color
+FAIL add descendant to #div_subject: div#div_subject.color assert_equals: expected "rgb(154, 205, 50)" but got "rgb(128, 128, 128)"
+PASS remove descendant from #div_subject: div#div_subject.color
+FAIL add "div > descendant" to #div_subject: div#div_subject.color assert_equals: expected "rgb(154, 205, 50)" but got "rgb(128, 128, 128)"
+PASS remove "div > descendant" from #div_subject: div#div_subject.color
+

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/attribute-or-elemental-selectors-in-has.html (0 => 285921)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/attribute-or-elemental-selectors-in-has.html	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/attribute-or-elemental-selectors-in-has.html	2021-11-17 10:29:44 UTC (rev 285921)
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Selectors Invalidation: :has() invalidation basic</title>
+<link rel="author" title="Byungwoo Lee" href=""
+<script src=""
+<script src=""
+<link rel="help" href=""
+<style>
+div, main { color: grey }
+.subject:has(> .child) { color: red }
+.subject:has(.descendant) { color: green }
+.subject:has([attrname=descendant]) { color: blue }
+.subject:has(#div_descendant) { color: yellow }
+.subject:has(descendant) { color: yellowgreen }
+</style>
+<main id=main>
+  <div id=div_subject class="subject">
+    <div id=div_child>
+      <div id=div_grandchild></div>
+    </div>
+  </div>
+</main>
+<script>
+  let grey = 'rgb(128, 128, 128)';
+  let red = 'rgb(255, 0, 0)';
+  let green = 'rgb(0, 128, 0)';
+  let blue = 'rgb(0, 0, 255)';
+  let yellow = 'rgb(255, 255, 0)';
+  let yellowgreen = 'rgb(154, 205, 50)';
+
+  function test_div(test_name, el, color) {
+    test(function() {
+      assert_equals(getComputedStyle(el).color, color);
+    }, test_name + ': div#' + el.id + '.color');
+  }
+
+  test_div('initial_color', div_subject, grey);
+  test_div('initial_color', div_child, grey);
+  test_div('initial_color', div_grandchild, grey);
+
+  div_child.classList.add('child');
+  test_div('add .child to #div_child', div_subject, red);
+  div_child.classList.remove('child');
+  test_div('remove .child from #div_child', div_subject, grey);
+
+  div_grandchild.classList.add('child');
+  test_div('add .child to #div_grandchild', div_subject, grey);
+  div_grandchild.classList.remove('child');
+  test_div('remove .child from #div_grandchild', div_subject, grey);
+
+  div_child.classList.add('descendant');
+  test_div('add .descendant to #div_child', div_subject, green);
+  div_child.classList.remove('descendant');
+  test_div('remove .descendant from #div_child', div_subject, grey);
+
+  div_grandchild.classList.add('descendant');
+  test_div('add .descendant to #div_grandchild', div_subject, green);
+  div_grandchild.classList.remove('descendant');
+  test_div('remove .descendant from #div_grandchild', div_subject, grey);
+
+  div_grandchild.setAttribute('attrname', 'descendant');
+  test_div('set descendant to #div_grandchild[attrname]', div_subject, blue);
+  div_grandchild.setAttribute('attrname', '');
+  test_div('clear #div_grandchild[attrname]', div_subject, grey);
+
+  div_grandchild.id = 'div_descendant';
+  test_div('change #div_grandchild to #div_descendant', div_subject, yellow);
+  div_descendant.id = 'div_grandchild';
+  test_div('change #div_descendant to #div_grandchild', div_subject, grey);
+
+  descendant = document.createElement('descendant');
+  div_subject.appendChild(descendant);
+  test_div('add descendant to #div_subject', div_subject, yellowgreen);
+  div_subject.removeChild(descendant);
+  test_div('remove descendant from #div_subject', div_subject, grey);
+
+  div = document.createElement('div');
+  div.appendChild(descendant);
+  div_subject.appendChild(div);
+  test_div('add "div > descendant" to #div_subject', div_subject, yellowgreen);
+  div_subject.removeChild(div);
+  test_div('remove "div > descendant" from #div_subject', div_subject, grey);
+
+</script>
\ No newline at end of file

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/w3c-import.log (285920 => 285921)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/w3c-import.log	2021-11-17 09:18:30 UTC (rev 285920)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/w3c-import.log	2021-11-17 10:29:44 UTC (rev 285921)
@@ -15,6 +15,7 @@
 ------------------------------------------------------------------------
 List of files:
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/any-link-pseudo.html
+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/attribute-or-elemental-selectors-in-has.html
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/attribute.html
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/defined.html
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/enabled-disabled.html

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/nesting-expected.html (0 => 285921)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/nesting-expected.html	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/nesting-expected.html	2021-11-17 10:29:44 UTC (rev 285921)
@@ -0,0 +1,81 @@
+<!DOCTYPE html>
+<title>@nest | basic</title>
+<link rel="author" title="Adam Argyle" href=""
+<link rel="help" href=""
+<style>
+  .test {
+    background-color: red;
+    width: 100px;
+    height: 100px;
+    display: grid;
+  }
+
+  .test-1 > div {
+    background-color: green;
+  }
+
+  .test-2 > div {
+    background-color: green;
+  }
+
+  .test-3 .test-3-child {
+    background-color: green;
+  }
+
+  .test-4 section > span > b {
+    display: inline-block;
+    background-color: green;
+    width: 100%;
+    height: 100%;
+  }
+
+  @media (min-width: 50px) {
+    .test-5 > div {
+      background-color: green;
+    }
+  }
+
+  .test-6.test {
+    background-color: green;
+  }
+
+  :is(.test-7, .t7-) + .test-7-child,
+  :is(.test-7, .t7-).t7-- {
+    background-color: green;
+  }
+
+  .test-8 {
+    background-color: green;
+  }
+
+  .test-9:is(.t9-, .test-9.t9--) {
+    background-color: green;
+  }
+
+  @supports (display: grid) {
+    .test-10 {
+      background-color: green;
+    }
+  }
+
+  body * + * {
+    margin-top: 8px;
+  }
+</style>
+<body>
+  <p>Tests pass if <strong>block is green</strong></p>
+  <div class="test test-1"><div></div></div>
+  <div class="test test-2"><div></div></div>
+  <div class="test test-3"><div class="test-3-child"></div></div>
+  <div class="test test-4">
+    <section>
+      <span><b></b></span>
+    </section>
+  </div>
+  <div class="test test-5"><div></div></div>
+  <div class="test test-6"><div></div></div>
+  <div class="test t7- t7--"><div class="test-7-child"></div></div>
+  <div class="test test-8"><div></div></div>
+  <div class="test test-9 t9-- t9-"><div></div></div>
+  <div class="test test-10"><div></div></div>
+</body>
\ No newline at end of file

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/nesting-parsing-expected.txt (0 => 285921)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/nesting-parsing-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/nesting-parsing-expected.txt	2021-11-17 10:29:44 UTC (rev 285921)
@@ -0,0 +1,14 @@
+
+FAIL .foo { & { color: green; } } assert_equals: expected ".foo { & { color: green; } }" but got ".foo { }"
+FAIL .foo { &.bar { color: green; } } assert_equals: expected ".foo { &.bar { color: green; } }" but got ".foo { }"
+FAIL .foo { & .bar { color: green; } } assert_equals: expected ".foo { & .bar { color: green; } }" but got ".foo { }"
+FAIL .foo { & > .bar { color: green; } } assert_equals: expected ".foo { & > .bar { color: green; } }" but got ".foo { }"
+FAIL .foo { &:is(.bar, &.baz) { color: green; } } assert_equals: expected ".foo { &:is(.bar, &.baz) { color: green; } }" but got ".foo { }"
+FAIL .foo { @nest .bar& { color: green; } } assert_equals: expected ".foo { @nest .bar& { color: green; } }" but got ".foo { }"
+FAIL .foo { @nest .bar & { color: green; } } assert_equals: expected ".foo { @nest .bar & { color: green; } }" but got ".foo { }"
+FAIL .foo { @nest .bar > & { color: green; } } assert_equals: expected ".foo { @nest .bar > & { color: green; } }" but got ".foo { }"
+FAIL .foo, .bar { & + .baz, &.qux { color: green; } } assert_equals: expected ".foo, .bar { & + .baz, &.qux { color: green; } }" but got ".foo, .bar { }"
+FAIL .foo { & .bar & .baz & .qux { color: green; } } assert_equals: expected ".foo { & .bar & .baz & .qux { color: green; } }" but got ".foo { }"
+FAIL .foo { @media (min-width: 50px) { color: green; } } assert_equals: expected ".foo { @media (min-width: 50px) { color: green; } }" but got ".foo { }"
+FAIL main { & > section, & > article { & > header { color: green; } } } assert_equals: expected "main { & > section, & > article { & > header { color: green; } } }" but got "main { }"
+

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/nesting-parsing.html (0 => 285921)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/nesting-parsing.html	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/nesting-parsing.html	2021-11-17 10:29:44 UTC (rev 285921)
@@ -0,0 +1,42 @@
+<!doctype html>
+<title>CSS Selectors @nest parsing</title>
+<link rel="author" title="Adam Argyle" href=""
+<link rel="help" href=""
+<script src=""
+<script src=""
+
+<style id="test-sheet"></style>
+<script type="module">
+  let [ss] = document.styleSheets
+
+  const beforeEach = () => {
+    while (ss.rules.length)
+      ss.removeRule(0)
+  }
+
+  const testRules = [
+    `.foo { & { color: green; } }`, // 🐰
+    `.foo { &.bar { color: green; } }`,
+    `.foo { & .bar { color: green; } }`,
+    `.foo { & > .bar { color: green; } }`,
+    `.foo { &:is(.bar, &.baz) { color: green; } }`,
+    `.foo { @nest .bar& { color: green; } }`,
+    `.foo { @nest .bar & { color: green; } }`,
+    `.foo { @nest .bar > & { color: green; } }`,
+    `.foo, .bar { & + .baz, &.qux { color: green; } }`,
+    `.foo { & .bar & .baz & .qux { color: green; } }`,
+    `.foo { @media (min-width: 50px) { color: green; } }`,
+    `main { & > section, & > article { & > header { color: green; } } }`,
+  ]
+
+  testRules.forEach(testRule => {
+    test(function() {
+      beforeEach()
+      ss.insertRule(testRule)
+      // todo?
+      // when parsing is being ready/prototyped,
+      // switch to crawling nested rules instead of comparing text
+      assert_equals(ss.rules[0].cssText, testRule)
+    }, testRule)
+  })
+</script>

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/nesting.html (0 => 285921)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/nesting.html	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/nesting.html	2021-11-17 10:29:44 UTC (rev 285921)
@@ -0,0 +1,97 @@
+<!DOCTYPE html>
+<title>@nest | basic</title>
+<link rel="author" title="Adam Argyle" href=""
+<link rel="help" href=""
+<link rel="match" href=""
+<style>
+  .test {
+    background-color: red;
+    width: 100px;
+    height: 100px;
+    display: grid;
+  }
+
+  .test-1 {
+    & > div {
+      background-color: green;
+    }
+  }
+
+  .test-2 {
+    @nest & > div {
+      background-color: green;
+    }
+  }
+
+  .test-3 {
+    @nest & .test-3-child {
+      background-color: green;
+    }
+  }
+
+  span > b {
+    @nest .test-4 section > & {
+      display: inline-block;
+      background-color: green;
+      width: 100%;
+      height: 100%;
+    }
+  }
+
+  .test-5 {
+    @media (min-width: 50px) {
+      background-color: green;
+    }
+  }
+
+  .test-6 {
+    &.test {
+      background-color: green;
+    }
+  }
+
+  .test-7, .t7- {
+    & + .test-7-child, &.t7-- {
+      background-color: green;
+    }
+  }
+
+  .test-8 {
+    & {
+      background-color: green;
+    }
+  }
+
+  .test-9 {
+    &:is(.t9-, &.t9--) {
+      background-color: green;
+    }
+  }
+
+  .test-10 {
+    @supports (display: grid) {
+      background-color: green;
+    }
+  }
+
+  body * + * {
+    margin-top: 8px;
+  }
+</style>
+<body>
+  <p>Tests pass if <strong>block is green</strong></p>
+  <div class="test test-1"><div></div></div>
+  <div class="test test-2"><div></div></div>
+  <div class="test test-3"><div class="test-3-child"></div></div>
+  <div class="test test-4">
+    <section>
+      <span><b></b></span>
+    </section>
+  </div>
+  <div class="test test-5"><div></div></div>
+  <div class="test test-6"><div></div></div>
+  <div class="test t7- t7--"><div class="test-7-child"></div></div>
+  <div class="test test-8"><div></div></div>
+  <div class="test test-9 t9-- t9-"><div></div></div>
+  <div class="test test-10"><div></div></div>
+</body>
\ No newline at end of file

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/parsing/parse-has-expected.txt (285920 => 285921)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/parsing/parse-has-expected.txt	2021-11-17 09:18:30 UTC (rev 285920)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/parsing/parse-has-expected.txt	2021-11-17 10:29:44 UTC (rev 285921)
@@ -8,22 +8,9 @@
 PASS ":has(:hover)" should be a valid selector
 PASS "*:has(.a)" should be a valid selector
 PASS ".a:has(.b)" should be a valid selector
-PASS ".a:has(:scope .b)" should be a valid selector
-PASS ":has(.a:scope .b)" should be a valid selector
-PASS ":has(.a .b:scope)" should be a valid selector
 PASS ".a:has(> .b)" should be a valid selector
-PASS ".a:has(:scope > .b)" should be a valid selector
-PASS ":has(.a:scope > .b)" should be a valid selector
-PASS ":has(> .a .b:scope)" should be a valid selector
 PASS ".a:has(~ .b)" should be a valid selector
-PASS ".a:has(:scope ~ .b)" should be a valid selector
-PASS ":has(.a:scope ~ .b)" should be a valid selector
-PASS ":has(~ .a .b:scope)" should be a valid selector
 PASS ".a:has(+ .b)" should be a valid selector
-PASS ".a:has(:scope + .b)" should be a valid selector
-PASS ":has(.a:scope + .b)" should be a valid selector
-PASS ":has(+ .a .b:scope)" should be a valid selector
-PASS ".a:has(:scope .b :scope)" should be a valid selector
 PASS ".a:has(.b) .c" should be a valid selector
 PASS ".a .b:has(.c)" should be a valid selector
 PASS ".a .b:has(.c .d)" should be a valid selector

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/parsing/parse-has.html (285920 => 285921)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/parsing/parse-has.html	2021-11-17 09:18:30 UTC (rev 285920)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/parsing/parse-has.html	2021-11-17 10:29:44 UTC (rev 285921)
@@ -16,22 +16,9 @@
   test_valid_selector(':has(:hover)');
   test_valid_selector('*:has(.a)', ['*:has(.a)', ':has(.a)']);
   test_valid_selector('.a:has(.b)');
-  test_valid_selector('.a:has(:scope .b)');
-  test_valid_selector(':has(.a:scope .b)');
-  test_valid_selector(':has(.a .b:scope)');
   test_valid_selector('.a:has(> .b)');
-  test_valid_selector('.a:has(:scope > .b)');
-  test_valid_selector(':has(.a:scope > .b)');
-  test_valid_selector(':has(> .a .b:scope)');
   test_valid_selector('.a:has(~ .b)');
-  test_valid_selector('.a:has(:scope ~ .b)');
-  test_valid_selector(':has(.a:scope ~ .b)');
-  test_valid_selector(':has(~ .a .b:scope)');
   test_valid_selector('.a:has(+ .b)');
-  test_valid_selector('.a:has(:scope + .b)');
-  test_valid_selector(':has(.a:scope + .b)');
-  test_valid_selector(':has(+ .a .b:scope)');
-  test_valid_selector('.a:has(:scope .b :scope)');
   test_valid_selector('.a:has(.b) .c');
   test_valid_selector('.a .b:has(.c)');
   test_valid_selector('.a .b:has(.c .d)');

Copied: trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-001-expected-mismatch.html (from rev 285920, trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-001-expected.html) (0 => 285921)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-001-expected-mismatch.html	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-001-expected-mismatch.html	2021-11-17 10:29:44 UTC (rev 285921)
@@ -0,0 +1,15 @@
+<!doctype html>
+<title>CSS Test Reference</title>
+<link rel="author" href="" title="Emilio Cobos Álvarez">
+<link rel="help" href=""
+<p>
+  Some text <img src="" some more.
+</p>
+<script>
+_onload_ = () => {
+  getSelection().removeAllRanges();
+  let r = document.createRange();
+  r.selectNode(document.documentElement);
+  getSelection().addRange(r);
+}
+</script>

Deleted: trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-001-expected.html (285920 => 285921)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-001-expected.html	2021-11-17 09:18:30 UTC (rev 285920)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-001-expected.html	2021-11-17 10:29:44 UTC (rev 285921)
@@ -1,15 +0,0 @@
-<!doctype html>
-<title>CSS Test Reference</title>
-<link rel="author" href="" title="Emilio Cobos Álvarez">
-<link rel="help" href=""
-<p>
-  Some text <img src="" some more.
-</p>
-<script>
-_onload_ = () => {
-  getSelection().removeAllRanges();
-  let r = document.createRange();
-  r.selectNode(document.documentElement);
-  getSelection().addRange(r);
-}
-</script>

Copied: trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-002-expected-mismatch.html (from rev 285920, trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-002-expected.html) (0 => 285921)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-002-expected-mismatch.html	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-002-expected-mismatch.html	2021-11-17 10:29:44 UTC (rev 285921)
@@ -0,0 +1,7 @@
+<!doctype html>
+<title>CSS Test Reference</title>
+<link rel="author" href="" title="Emilio Cobos Álvarez">
+<link rel="help" href=""
+<p>
+  Some text <img src="" some more.
+</p>

Deleted: trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-002-expected.html (285920 => 285921)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-002-expected.html	2021-11-17 09:18:30 UTC (rev 285920)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-002-expected.html	2021-11-17 10:29:44 UTC (rev 285921)
@@ -1,7 +0,0 @@
-<!doctype html>
-<title>CSS Test Reference</title>
-<link rel="author" href="" title="Emilio Cobos Álvarez">
-<link rel="help" href=""
-<p>
-  Some text <img src="" some more.
-</p>

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/w3c-import.log (285920 => 285921)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/w3c-import.log	2021-11-17 09:18:30 UTC (rev 285920)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/w3c-import.log	2021-11-17 10:29:44 UTC (rev 285921)
@@ -9,7 +9,7 @@
 
 ------------------------------------------------------------------------
 Properties requiring vendor prefixes:
-appearance
+None
 Property values requiring vendor prefixes:
 None
 ------------------------------------------------------------------------
@@ -19,6 +19,8 @@
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/any-link-dynamic-001-expected.html
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/any-link-dynamic-001.html
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/child-indexed-pseudo-class.html
+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/first-letter-flag-001-expected.html
+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/first-letter-flag-001.html
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/first-line-bidi-001-expected.html
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/first-line-bidi-001.html
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/first-line-bidi-002-expected.html
@@ -103,7 +105,9 @@
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/focus-within-shadow-005.html
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/focus-within-shadow-006-expected.html
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/focus-within-shadow-006.html
+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-argument-with-explicit-scope.tentative.html
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-basic.html
+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-matches-to-uninserted-elements.html
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-relative-argument.html
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/historical-xmlid-expected.xht
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/historical-xmlid.xht
@@ -128,6 +132,9 @@
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/is-where-visited-expected.html
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/is-where-visited.html
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/missing-right-token.html
+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/nesting-expected.html
+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/nesting-parsing.html
+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/nesting.html
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/not-complex.html
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/not-default-ns-001-expected.html
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/not-default-ns-001.html
@@ -147,11 +154,11 @@
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/scope-selector.html
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/scope-without-scoping-expected.xht
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/scope-without-scoping.html
-/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-001-expected.html
+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-001-expected-mismatch.html
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-001-no-selection-noref.html
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-001-noref.html
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-001.html
-/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-002-expected.html
+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-002-expected-mismatch.html
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-002.html
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/selector-placeholder-shown-emptify-placeholder.html
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/selector-placeholder-shown-type-change-001-expected.html
@@ -207,3 +214,5 @@
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/user-valid.html
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/webkit-pseudo-element.html
 /LayoutTests/imported/w3c/web-platform-tests/css/selectors/x-pseudo-element.html
+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/xml-class-selector-expected.xml
+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/xml-class-selector.xml

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/xml-class-selector-expected.xml (0 => 285921)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/xml-class-selector-expected.xml	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/xml-class-selector-expected.xml	2021-11-17 10:29:44 UTC (rev 285921)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <title>Class selectors in an XML namespace</title>
+  <link rel="author" href="" />
+  <body>
+    <p>The .class selector should work in any namespace. Both boxes should be green.</p>
+    <Boxes xmlns="http://foo">
+      <box>.classname selector</box>
+      <box>*[class~="classname"] selector</box>
+    </boxes>
+
+    <style>
+      box {background:green;}
+    </style>
+  </body>
+</html>

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/xml-class-selector.xml (0 => 285921)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/xml-class-selector.xml	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/xml-class-selector.xml	2021-11-17 10:29:44 UTC (rev 285921)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <title>Class selectors in an XML namespace</title>
+  <link rel="author" href="" />
+  <link rel="help" href="" />
+  <link rel="help" href="" />
+  <link rel="match" href="" />
+  <body>
+    <p>The .class selector should work in any namespace. Both boxes should be green.</p>
+    <Boxes xmlns="http://foo">
+      <box class="green">.classname selector</box>
+      <box class="green2">*[class~="classname"] selector</box>
+    </boxes>
+
+    <style>
+      box {background:red;}
+      .green {background: green;}
+      *[class~="green2"] {background: green;}
+    </style>
+  </body>
+</html>
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to