$sValue) { $aPrior[$sName] = getParam($sName); setParam($sName, $sValue); } try { return $fTest(); } finally { foreach ($aPrior as $sName => $sValue) setParam($sName, $sValue); } } private function withDefaultIcons(callable $fTest) { return $this->withOptions(['sys_site_icon' => '0', 'sys_site_icon_svg' => '0'], $fTest); } public function testDefaultFaviconSwitchesWithTheBrowserScheme(): void { $sHtml = $this->withDefaultIcons(fn() => BxTemplFunctions::getInstance()->getMetaIcons()); $this->assertMatchesRegularExpression('//', $sHtml); $this->assertMatchesRegularExpression('//', $sHtml); $this->assertStringContainsString("matchMedia('(prefers-color-scheme: dark)')", $sHtml); $this->assertStringContainsString('', $sDark, 'White ink on dark tabs, with no media query left for the browser to ignore.'); $this->assertStringNotContainsString('@media', $sDark); } public function testStudioKeepsItsOwnFaviconInDarkMode(): void { $sHtml = $this->withDefaultIcons(fn() => BxTemplStudioFunctions::getInstance()->getMetaIcons()); $this->assertStringContainsString('studio/template/images/icons/favicon.svg', $sHtml); $this->assertStringNotContainsString('data-bx-icon-dark', $sHtml); $this->assertStringNotContainsString('favicon-dark.svg', $sHtml); } }