diff --git a/src/CssInliner.php b/src/CssInliner.php index 7d613942..78c2e720 100644 --- a/src/CssInliner.php +++ b/src/CssInliner.php @@ -1080,7 +1080,7 @@ private function removeUnsupportedOfTypePseudoClasses(string $selectorPart): str */ private function copyUninlinableCssToStyleNode(CssDocument $cssDocument): void { - $css = $cssDocument->renderAtRules(); + $css = $cssDocument->renderNonConditionalAtRules(); // avoid including unneeded class dependency if there are no rules if ($this->getMatchingUninlinableCssRules() !== []) { diff --git a/src/Utilities/CssDocument.php b/src/Utilities/CssDocument.php index 305dff86..ec5cf41f 100644 --- a/src/Utilities/CssDocument.php +++ b/src/Utilities/CssDocument.php @@ -41,7 +41,7 @@ class CssDocument * * @var string */ - private $atRules; + private $nonConditionalAtRules; /** * @param string $css @@ -53,7 +53,7 @@ public function __construct(string $css) = $this->extractImportAndCharsetRules($cssWithoutComments); [$this->styleRules, $cssAtRules] = $this->extractNonConditionalAtRules($cssWithoutCommentsCharsetOrImport); - $this->atRules = $cssImportRules . $cssAtRules; + $this->nonConditionalAtRules = $cssImportRules . $cssAtRules; } /** @@ -93,13 +93,14 @@ public function getStyleRulesData(array $allowedMediaTypes): array /** * Renders at-rules from the parsed CSS that are valid and not conditional group rules (i.e. not rules such as - * `@media` which contain style rules whose data is returned by {@see getStyleRulesData}). + * `@media` which contain style rules whose data is returned by {@see getStyleRulesData}). Also does not render + * `@charset` rules; these are discarded (only UTF-8 is supported). * * @return string */ - public function renderAtRules(): string + public function renderNonConditionalAtRules(): string { - return $this->atRules; + return $this->nonConditionalAtRules; } /** diff --git a/tests/Unit/Utilities/CssDocumentTest.php b/tests/Unit/Utilities/CssDocumentTest.php index 82d6dddf..81352a10 100644 --- a/tests/Unit/Utilities/CssDocumentTest.php +++ b/tests/Unit/Utilities/CssDocumentTest.php @@ -269,7 +269,7 @@ public function rendersValidNonConditionalAtRule(string $atRuleCss, string $cssB { $subject = new CssDocument($cssBefore . $atRuleCss); - $result = $subject->renderAtRules(); + $result = $subject->renderNonConditionalAtRules(); self::assertStringContainsString(\trim($atRuleCss), $result); } @@ -307,7 +307,7 @@ public function rendersMultipleNonConditionalAtRules(string $cssBetween): void { $subject = new CssDocument('@import "foo.css";' . $cssBetween . self::VALID_AT_FONT_FACE_RULE); - $result = $subject->renderAtRules(); + $result = $subject->renderNonConditionalAtRules(); // The content of the rendered rules is covered by other tests. Here just check the number of rendered rules. self::assertSame(2, \substr_count($result, '@')); @@ -338,7 +338,7 @@ public function discardsAtCharsetRule(): void { $subject = new CssDocument('@charset "UTF-8";'); - $result = $subject->renderAtRules(); + $result = $subject->renderNonConditionalAtRules(); self::assertSame('', $result); } @@ -355,7 +355,7 @@ public function notRendersInvalidNonConditionalAtRule(string $atRuleCss, string { $subject = new CssDocument($cssBefore . $atRuleCss); - $result = $subject->renderAtRules(); + $result = $subject->renderNonConditionalAtRules(); self::assertThat( \trim($result), @@ -396,7 +396,7 @@ public function notRendersAtMediaRule(): void { $subject = new CssDocument('@media screen { p { color: red; } }'); - $result = $subject->renderAtRules(); + $result = $subject->renderNonConditionalAtRules(); self::assertSame('', $result); }