| <!DOCTYPE html> |
| <meta charset="utf-8"> |
| <title>CSS Pseudo-Elements Test: Parsing tree-abiding pseudo-elements</title> |
| <link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#treelike"> |
| <link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com"> |
| <meta name="assert" content="This test checks the validity of various selectors containing tree-abiding pseudo-elements." /> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/css/support/parsing-testcommon.js"></script> |
| <script> |
| // Generated content pseudo-elements |
| test_valid_selector("::before"); |
| test_valid_selector("*::before", "::before"); |
| test_valid_selector("foo.bar[baz]::before"); |
| test_invalid_selector("::before *"); |
| |
| test_valid_selector("::after"); |
| test_valid_selector("*::after", "::after"); |
| test_valid_selector("foo.bar[baz]::after"); |
| test_invalid_selector("::after *"); |
| |
| // List marker pseudo-element |
| test_valid_selector("::marker"); |
| test_valid_selector("*::marker", "::marker"); |
| test_valid_selector("foo.bar[baz]::marker"); |
| test_invalid_selector("::marker *"); |
| |
| // Placeholder input pseudo-element |
| test_valid_selector("::placeholder"); |
| test_valid_selector("*::placeholder", "::placeholder"); |
| test_valid_selector("foo.bar[baz]::placeholder"); |
| test_invalid_selector("::placeholder *"); |
| |
| // Combinations of the above |
| test_invalid_selector("::before::before"); |
| test_invalid_selector("::after::before"); |
| test_invalid_selector("::marker::before"); |
| test_invalid_selector("::placeholder::before"); |
| |
| test_invalid_selector("::before::after"); |
| test_invalid_selector("::after::after"); |
| test_invalid_selector("::marker::after"); |
| test_invalid_selector("::placeholder::after"); |
| |
| test_valid_selector("::before::marker"); |
| test_valid_selector("::after::marker"); |
| test_invalid_selector("::marker::marker"); |
| test_invalid_selector("::placeholder::marker"); |
| |
| test_invalid_selector("::before::placeholder"); |
| test_invalid_selector("::after::placeholder"); |
| test_invalid_selector("::marker::placeholder"); |
| test_invalid_selector("::placeholder::placeholder"); |
| </script> |