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