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
- trunk/LayoutTests/ChangeLog
- trunk/LayoutTests/TestExpectations
- trunk/LayoutTests/imported/w3c/ChangeLog
- trunk/LayoutTests/imported/w3c/resources/import-expectations.json
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/focus-visible-004.html
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-basic-expected.txt
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-basic.html
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-relative-argument-expected.txt
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-relative-argument.html
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/w3c-import.log
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/parsing/parse-has-expected.txt
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/parsing/parse-has.html
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/w3c-import.log
Added Paths
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/first-letter-flag-001-expected.html
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/first-letter-flag-001.html
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-argument-with-explicit-scope.tentative-expected.txt
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-argument-with-explicit-scope.tentative.html
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-matches-to-uninserted-elements-expected.txt
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/has-matches-to-uninserted-elements.html
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/attribute-or-elemental-selectors-in-has-expected.txt
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/attribute-or-elemental-selectors-in-has.html
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/nesting-expected.html
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/nesting-parsing-expected.txt
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/nesting-parsing.html
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/nesting.html
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-001-expected-mismatch.html
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-002-expected-mismatch.html
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/xml-class-selector-expected.xml
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/xml-class-selector.xml
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>🇬🇧</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>🇬🇧 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
