| <!DOCTYPE html> | 
 | <title>CSS Nesting: CSSNestedDeclarations CSSOM (whitespace)</title> | 
 | <link rel="help" href="https://drafts.csswg.org/css-nesting-1/#nested-declarations-rule"> | 
 | <script src="/resources/testharness.js"></script> | 
 | <script src="/resources/testharnessreport.js"></script> | 
 | <script> | 
 |   // https://drafts.csswg.org/cssom/#serialize-a-css-rule | 
 |   test(() => { | 
 |     let s = new CSSStyleSheet(); | 
 |     s.replaceSync(` | 
 |       .a { | 
 |         & { } | 
 |         left: 1px; | 
 |         & { } | 
 |         right: 1px; | 
 |       } | 
 |     `); | 
 |     assert_equals(s.cssRules.length, 1); | 
 |     let a_rule = s.cssRules[0]; | 
 |     assert_equals(a_rule.cssRules.length, 4); | 
 |     for (let child_rule of a_rule.cssRules) { | 
 |       child_rule.style = ''; | 
 |     } | 
 |     assert_equals(a_rule.cssText, '.a {\n  & { }\n  & { }\n}'); | 
 |   }, 'Empty CSSNestedDeclarations do not affect outer serialization'); | 
 |  | 
 |   // https://drafts.csswg.org/cssom/#serialize-a-css-rule | 
 |   test(() => { | 
 |     let s = new CSSStyleSheet(); | 
 |     s.replaceSync(` | 
 |       .a { | 
 |         @media (width > 1px) { | 
 |           & { } | 
 |           left: 1px; | 
 |           & { } | 
 |           right: 1px; | 
 |         } | 
 |       } | 
 |     `); | 
 |     assert_equals(s.cssRules.length, 1); | 
 |     let outer = s.cssRules[0]; | 
 |     assert_equals(outer.cssRules.length, 1); | 
 |  | 
 |     // @media | 
 |     let media = outer.cssRules[0]; | 
 |     assert_equals(media.cssRules.length, 4); | 
 |     for (let child_rule of media.cssRules) { | 
 |       child_rule.style = ''; | 
 |     } | 
 |     assert_equals(media.cssText, '@media (width > 1px) {\n  & { }\n  & { }\n}'); | 
 |   }, 'Empty CSSNestedDeclarations do not affect outer serialization (nested grouping rule)'); | 
 | </script> |