diff --git a/tests/Browser/CascadeTest.php b/tests/Browser/CascadeTest.php new file mode 100644 index 00000000..00c1d9c4 --- /dev/null +++ b/tests/Browser/CascadeTest.php @@ -0,0 +1,180 @@ +waitForEvent('networkidle') + ->assertScript("document.readyState === 'complete' && typeof window.Alpine !== 'undefined' && typeof window.Livewire !== 'undefined'"); +} + +it('lets an application\'s unlayered rule beat a component default', function () { + // The brief's own example: a caller's plain, unlayered `.app-wide` rule against button.css's + // layered `padding-inline: var(--md-button-padding)` and `inline-size: var(--md-button-width)` + // — unlayered CSS outranks every `@layer`, however specific the layered rule is. + Route::middleware('web')->get('/cascade-unlayered-probe', fn () => Blade::render(<<<'BLADE' + + + + + @vite(config('livewire-material.showcase.vite')) + @livewireStyles + + + + + @livewireScripts + + + BLADE)); + + cascadeReady(visit('/cascade-unlayered-probe')) + ->assertScript("Math.round(document.querySelector('[data-test=\"button\"]').getBoundingClientRect().width) === 320"); +}); + +it('lets [hidden] beat a component\'s display', function () { + // The reset's `[hidden]:where(:not([hidden='until-found'])) { display: none !important }` + // sits outside every layer, so it beats a component's own `display` (button.css's `inline-flex`, + // row.css's `flex`) whatever `@layer` that rule sits in. + Route::middleware('web')->get('/cascade-hidden-probe', fn () => Blade::render(<<<'BLADE' + + + + + @vite(config('livewire-material.showcase.vite')) + @livewireStyles + + + +