| <!doctype html> |
| <title>CSS Selectors: :is() and :where() error recovery</title> |
| <link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io"> |
| <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3676"> |
| <link rel="help" href="https://drafts.csswg.org/selectors-4/#matches"> |
| <link rel="help" href="https://drafts.csswg.org/selectors-4/#zero-matches"> |
| <link rel="help" href="https://drafts.csswg.org/selectors-4/#typedef-forgiving-selector-list"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <style id="test-sheet"> |
| random-selector { color: blue; } |
| </style> |
| <div id="test-div"></div> |
| <script> |
| let rule = document.getElementById("test-sheet").sheet.cssRules[0]; |
| test(function() { |
| for (let pseudo of ["is", "where"]) { |
| rule.selectorText = "random-selector"; |
| let invalidSelector = `:${pseudo}(:total-nonsense)`; |
| rule.selectorText = invalidSelector; |
| assert_not_equals( |
| rule.selectorText, |
| "random-selector", |
| "Should've parsed", |
| ); |
| assert_not_equals( |
| rule.selectorText, |
| invalidSelector, |
| "Should not be considered valid and parsed as-is", |
| ); |
| let emptyList = `:${pseudo}()`; |
| assert_equals( |
| rule.selectorText, |
| emptyList, |
| "Should be serialized as an empty selector-list", |
| ); |
| assert_equals(document.querySelector(emptyList), null, "Should never match, but should parse"); |
| for (let mixedList of [ |
| `:${pseudo}(:total-nonsense, #test-div)`, |
| `:${pseudo}(:total-nonsense and-more-stuff, #test-div)`, |
| `:${pseudo}(weird-token || and-more-stuff, #test-div)`, |
| ]) { |
| rule.selectorText = mixedList; |
| assert_equals( |
| rule.selectorText, |
| `:${pseudo}(#test-div)`, |
| `${mixedList}: Should ignore invalid selectors`, |
| ); |
| let testDiv = document.getElementById("test-div"); |
| assert_equals(document.querySelector(mixedList), testDiv, "Should correctly match"); |
| assert_equals(getComputedStyle(testDiv).color, "rgb(0, 0, 255)", "test element should be blue"); |
| } |
| } |
| }); |
| </script> |