diff --git a/resources/views/docs/mobile/4/edge-components/text.md b/resources/views/docs/mobile/4/edge-components/text.md index 604bb096..de099f67 100644 --- a/resources/views/docs/mobile/4/edge-components/text.md +++ b/resources/views/docs/mobile/4/edge-components/text.md @@ -152,7 +152,7 @@ Use the `dark:` prefix with Tailwind classes or pass a dark-mode color override. diff --git a/tests/Feature/DocumentationRenderingTest.php b/tests/Feature/DocumentationRenderingTest.php new file mode 100644 index 00000000..1535797b --- /dev/null +++ b/tests/Feature/DocumentationRenderingTest.php @@ -0,0 +1,72 @@ + 'test-token']); + Http::fake([ + '*' => Http::response(['blocks' => []], 200), + ]); + } + + #[Test] + public function text_page_shows_example_blade_expression_literally_instead_of_evaluating_it(): void + { + $this->withoutVite() + ->get('/docs/mobile/4/edge-components/text') + ->assertOk() + ->assertSee('{{ $variable }}'); + } + + #[Test] + public function every_documentation_page_renders_without_evaluating_example_variables(): void + { + /** @var ViewFactory $factory */ + $factory = resolve(ViewFactory::class); + $factory->addExtension('md', 'blade'); + + $base = resource_path('views/docs'); + $iterator = new \RecursiveIteratorIterator( + new \RecursiveDirectoryIterator($base, \FilesystemIterator::SKIP_DOTS) + ); + + $failures = []; + + foreach ($iterator as $file) { + if ($file->getExtension() !== 'md' || str_starts_with($file->getBasename(), '_')) { + continue; + } + + $view = 'docs/'.substr($file->getPathname(), strlen($base) + 1, -3); + + try { + $factory->make($view, ['user' => null])->render(); + } catch (\Throwable $e) { + $failures[$view] = $e->getMessage(); + } + } + + $this->assertSame( + [], + $failures, + 'Documentation pages must escape example Blade expressions with @{{ }} or @verbatim. ' + .'These pages threw while rendering: '.json_encode($failures, JSON_PRETTY_PRINT), + ); + } +}