1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
<!doctype html>
<title>CSS Selectors 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>
let [ss] = document.styleSheets
const beforeEach = () => {
while (ss.rules.length)
ss.removeRule(0)
}
const testRules = [
`.foo {\n & { color: green; }\n}`, // 🐰
`.foo {\n &.bar { color: green; }\n}`,
`.foo {\n & .bar { color: green; }\n}`,
`.foo {\n & > .bar { color: green; }\n}`,
`.foo {\n > .bar { color: green; }\n}`,
`.foo {\n > & .bar { color: green; }\n}`,
`.foo {\n + .bar & { color: green; }\n}`,
`.foo {\n .test > & .bar { color: green; }\n}`,
`.foo {\n + .bar, .foo, > .lol { color: green; }\n}`,
`.foo {\n &:is(.bar, &.baz) { color: green; }\n}`,
`.foo {\n .bar& { color: green; }\n}`,
`.foo {\n .bar & { color: green; }\n}`,
`.foo {\n .bar > & { color: green; }\n}`,
`.foo, .bar {\n & + .baz, &.qux { color: green; }\n}`,
`.foo {\n & .bar & .baz & .qux { color: green; }\n}`,
`.foo {\n @media (min-width: 50px) { color: green; }\n}`,
`main {\n & > section, & > article {\n & > header { color: green; }\n}\n}`,
]
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>
|