<!DOCTYPE html>
<meta charset="utf-8">
<title>DOMParser: parseFromString() with stylesheets</title>
<link rel="help" href="https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring">
<link rel="help" href="https://drafts.csswg.org/cssom/#dom-document-stylesheets">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
"use strict";

test(() => {
  const parser = new DOMParser();
  const doc = parser.parseFromString("<style>div { color: green; }</style>", "text/html");

  assert_equals(doc.styleSheets.length, 1, "Document should have one stylesheet");
}, "DOMParser-created document should have accessible styleSheets collection with one style element");

test(() => {
  const parser = new DOMParser();
  const doc = parser.parseFromString("<style>div { color: green; }</style>", "text/html");

  assert_equals(doc.styleSheets.length, 1, "Document should have one stylesheet");
  const sheet = doc.styleSheets[0];
  assert_true(sheet instanceof CSSStyleSheet, "styleSheets[0] should be a CSSStyleSheet");
}, "DOMParser-created document styleSheets should contain CSSStyleSheet objects");

test(() => {
  const parser = new DOMParser();
  const doc = parser.parseFromString("<style>div { color: green; } p { color: red; }</style>", "text/html");

  assert_equals(doc.styleSheets.length, 1, "Document should have one stylesheet");
  const sheet = doc.styleSheets[0];
  assert_equals(sheet.cssRules.length, 2, "Stylesheet should have two CSS rules");
}, "DOMParser-created document styleSheets should have accessible cssRules");

test(() => {
  const parser = new DOMParser();
  const doc = parser.parseFromString(
    "<style>div { color: green; }</style><style>p { color: red; }</style>",
    "text/html"
  );

  assert_equals(doc.styleSheets.length, 2, "Document should have two stylesheets");
}, "DOMParser-created document should expose multiple style elements in styleSheets");

test(() => {
  const parser = new DOMParser();
  const html = `
    <!DOCTYPE html>
    <html>
      <head>
        <style>
          .test { color: blue; }
        </style>
      </head>
      <body>
        <div class="test">Hello</div>
      </body>
    </html>
  `;
  const doc = parser.parseFromString(html, "text/html");

  assert_equals(doc.styleSheets.length, 1, "Document should have one stylesheet");
  const sheet = doc.styleSheets[0];
  assert_equals(sheet.cssRules.length, 1, "Stylesheet should have one CSS rule");
  assert_equals(sheet.cssRules[0].selectorText, ".test", "CSS rule should have correct selector");
}, "DOMParser-created document with full HTML structure should have accessible styleSheets");

test(() => {
  const parser = new DOMParser();
  const doc = parser.parseFromString("<div>No styles</div>", "text/html");

  assert_equals(doc.styleSheets.length, 0, "Document without style elements should have empty styleSheets");
}, "DOMParser-created document without style elements should have empty styleSheets collection");

</script>
