| <!DOCTYPE html> |
| <title>@scope - deeply nested</title> |
| <link rel="help" href="https://drafts.csswg.org/css-cascade-6/#scope-atrule"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <style> |
| main * { background-color: black; } |
| </style> |
| <main id=main></main> |
| <script> |
| |
| // @scope (.s0) { @scope (.s1) { ... span {} ... } } |
| function createStyleSheet(length, i) { |
| if (length == 0) |
| return 'span { background-color: green; }'; |
| if (i === undefined) |
| i = 0; |
| return ` |
| @scope (.s${i}) { |
| ${createStyleSheet(length - 1, i + 1)} |
| } |
| `.trim(); |
| } |
| |
| // <div class=s0><div class=s1>...<span></span>...</div></div> |
| function createElementChain(length, i) { |
| if (length < 1) |
| throw 'Invalid length'; |
| if (i === undefined) |
| i = 0; |
| let e = document.createElement('div'); |
| e.classList.add(`s${i}`); |
| if (length > 1) |
| e.append(createElementChain(length - 1, i + 1)); |
| else |
| e.append(document.createElement('span')); |
| return e; |
| } |
| |
| const COUNT = 90; |
| |
| let style_node = document.createElement('style'); |
| style_node.textContent = createStyleSheet(COUNT); |
| main.append(style_node); |
| |
| main.append(createElementChain(COUNT)); |
| |
| test(() => { |
| for (let span of main.querySelectorAll('span')) |
| assert_equals(getComputedStyle(span).backgroundColor, 'rgb(0, 128, 0)'); |
| }, 'Deep @scope nesting'); |
| </script> |