e basta. Questo test non giudica l'estetica: verifica che * i modi vecchi non rientrino dalla finestra, cosa che succede da sola alla * prossima pagina scritta copiando una vecchia. * * Legge i sorgenti, quindi non serve ne' applicazione ne' database. */ class StileUnificatoTest extends TestCase { /** Viste dell'applicazione: quelle pubblicate da pacchetti terzi non ci riguardano. */ private const ESCLUSI = [ 'resources/views/vendor/', // I template dei PDF non sono pagine: li impagina dompdf, che di // Tailwind e delle nostre classi non sa niente. 'resources/views/pdf/', ]; /** * @return array percorsi relativi delle viste da controllare */ private static function viste(): array { $radice = dirname(__DIR__, 2); $iterator = new \RecursiveIteratorIterator( new \RecursiveDirectoryIterator($radice . '/resources/views', \FilesystemIterator::SKIP_DOTS) ); $viste = []; foreach ($iterator as $file) { /** @var \SplFileInfo $file */ if (! $file->isFile() || ! str_ends_with($file->getFilename(), '.blade.php')) { continue; } $relativo = str_replace('\\', '/', substr($file->getPathname(), strlen($radice) + 1)); foreach (self::ESCLUSI as $escluso) { if (str_starts_with($relativo, $escluso)) { continue 2; } } $viste[] = $relativo; } sort($viste); return $viste; } public static function vistePerProvider(): array { return array_map(fn (string $vista) => [$vista], self::viste()); } private function contenuto(string $vista): string { return (string) file_get_contents(dirname(__DIR__, 2) . '/' . $vista); } #[DataProvider('vistePerProvider')] public function test_nessuna_vista_usa_le_vecchie_classi_dei_pulsanti(string $vista): void { $html = $this->rimuoviCommenti($this->contenuto($vista)); $this->assertStringNotContainsString('btn-action', $html, "{$vista}: .btn-action non esiste piu', usa ."); $this->assertStringNotContainsString('btn-primary-', $html, "{$vista}: .btn-primary-* non esiste piu', usa ."); } /** * onmouseover/onmouseout servivano a simulare :hover su pulsanti con lo * stile inline. Non funzionano da tastiera e non lasciano traccia nel * foglio di stile: se ricompaiono, e' ricomparso anche il pulsante scritto * a mano. */ #[DataProvider('vistePerProvider')] public function test_nessuna_vista_simula_l_hover_con_javascript_inline(string $vista): void { $html = $this->rimuoviCommenti($this->contenuto($vista)); $this->assertStringNotContainsString('onmouseover', $html, "{$vista}: l'hover si scrive nel CSS, non in un attributo."); $this->assertStringNotContainsString('onmouseout', $html, "{$vista}: l'hover si scrive nel CSS, non in un attributo."); } /** * Un