| <!doctype html> |
| <title>CSS Selectors @nest parsing</title> |
| <link rel="author" title="Adam Argyle" href="mailto:argyle@google.com"> |
| <link rel="help" href="https://drafts.csswg.org/css-nesting-1/"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| |
| <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> |