| <!doctype html> |
| <html> |
| <head> |
| <script src="../../resources/js-test-pre.js"></script> |
| <style id="style-container"> |
| </style> |
| </head> |
| <body> |
| </body> |
| <script> |
| description('Test the parsing of :not(selectorList) for querySelector and style.'); |
| |
| function testInvalidSelector(selectorString) { |
| var styleContainer = document.getElementById('style-container'); |
| styleContainer.innerHTML = ':not(' + selectorString + ') { }'; |
| const parsed = document.getElementById('style-container').sheet.cssRules.length == 1; |
| debug(`selector '${styleContainer.innerHTML}' parsed: ${parsed ? "YES" : "NO"}`); |
| styleContainer.innerHTML = ''; |
| } |
| |
| var invalidSelectors = [ |
| // Pseudo elements. |
| "::first-letter", |
| "::first-line", |
| "::before", |
| "::after", |
| ":first-letter", |
| ":first-line", |
| ":before", |
| ":after", |
| |
| // Not selectors. |
| "", |
| " ", |
| ",", |
| |
| ".123class", |
| "#123id", |
| "[]", |
| "()", |
| ")", |
| "{}", |
| "}", |
| |
| // Empty functional pseudo classes. |
| ":not()", |
| ":is()", |
| ":matches()", |
| ":nth-child()", |
| ":nth-child(2n of)", |
| |
| // Unbalanced parenthesized functional pseudo classes. |
| ":not(", |
| ":is(", |
| ":matches(", |
| ":nth-child(2n+1 of", |
| ]; |
| |
| debug("1 invalid selectors"); |
| for (var i = 0; i < invalidSelectors.length; ++i) { |
| var selectorString = invalidSelectors[i]; |
| testInvalidSelector(selectorString); |
| } |
| |
| </script> |
| <script src="../../resources/js-test-post.js"></script> |
| </html> |