<!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>
