diff --git a/src/Command/SitemapChecker.php b/src/Command/SitemapChecker.php index 3875f6f..47e1c53 100644 --- a/src/Command/SitemapChecker.php +++ b/src/Command/SitemapChecker.php @@ -204,44 +204,27 @@ protected function execute(InputInterface $input, OutputInterface $output):int } $progressBar->finish(); + // We don't want to print our next output after the progress bar. + $output->writeln(''); $resultFile = $input->getOption('result-file'); if ($resultFile === NULL) { - // Write a blank line to print the results correctly. $resultRender = new PlainResultRender(); - $output->writeln(''); $output->writeln($resultRender->render($results)); } - elseif (is_string($resultFile) && str_contains($resultFile, '.csv')) { - $io->info('Writing CSV file.'); - $resultRender = new CsvResultRender(); - $renderedResult = $resultRender->render($results); - file_put_contents($resultFile, $renderedResult); - } - elseif (is_string($resultFile) && str_contains($resultFile, '.json')) { - $io->info('Writing JSON file.'); - $resultRender = new JsonResultRender(); - $renderedResult = $resultRender->render($results); - file_put_contents($resultFile, $renderedResult); - } - elseif (is_string($resultFile) && str_contains($resultFile, '.xml')) { - $io->info('Writing XML file.'); - $resultRender = new XmlResultRender(); - $renderedResult = $resultRender->render($results); - file_put_contents($resultFile, $renderedResult); - } - elseif (is_string($resultFile) && str_contains($resultFile, '.html')) { - $io->info('Writing HTML file.'); - $resultRender = new HtmlResultRender(); - $renderedResult = $resultRender->render($results); - file_put_contents($resultFile, $renderedResult); - } else { - $io->error('Invalid output format found.'); - return Command::INVALID; + $resultExt = strtolower(pathinfo($resultFile, PATHINFO_EXTENSION)); + $resultRender = match ($resultExt) { + 'csv' => new CsvResultRender(), + 'json' => new JsonResultRender(), + 'xml' => new XmlResultRender(), + 'html' => new HtmlResultRender(), + default => new PlainResultRender(), + }; + $io->info(sprintf('Writing %s file.', $resultRender->getType())); + file_put_contents($resultFile, $resultRender->render($results)); } - return Command::SUCCESS; } diff --git a/src/ResultRender/CsvResultRender.php b/src/ResultRender/CsvResultRender.php index b536e8d..1bf7bed 100644 --- a/src/ResultRender/CsvResultRender.php +++ b/src/ResultRender/CsvResultRender.php @@ -20,5 +20,9 @@ public function render(ResultCollectionInterface $resultCollection): string return $string; } + public function getType(): string + { + return 'CSV'; + } } \ No newline at end of file diff --git a/src/ResultRender/HtmlResultRender.php b/src/ResultRender/HtmlResultRender.php index 79e3422..6e52234 100644 --- a/src/ResultRender/HtmlResultRender.php +++ b/src/ResultRender/HtmlResultRender.php @@ -36,5 +36,9 @@ public function render(ResultCollectionInterface $resultCollection): string EOL; } + public function getType(): string + { + return 'HTML'; + } } \ No newline at end of file diff --git a/src/ResultRender/JsonResultRender.php b/src/ResultRender/JsonResultRender.php index f3b4045..6a4b189 100644 --- a/src/ResultRender/JsonResultRender.php +++ b/src/ResultRender/JsonResultRender.php @@ -23,5 +23,9 @@ public function render(ResultCollectionInterface $resultCollection): string return json_encode($array, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK) ?: ''; } + public function getType(): string + { + return 'JSON'; + } } \ No newline at end of file diff --git a/src/ResultRender/PlainResultRender.php b/src/ResultRender/PlainResultRender.php index 331e3ac..b33100f 100644 --- a/src/ResultRender/PlainResultRender.php +++ b/src/ResultRender/PlainResultRender.php @@ -15,5 +15,9 @@ public function render(ResultCollectionInterface $resultCollection): string return $string; } + public function getType(): string + { + return 'plain'; + } } \ No newline at end of file diff --git a/src/ResultRender/ResultRenderInterface.php b/src/ResultRender/ResultRenderInterface.php index a4d6dfc..c37a5c8 100644 --- a/src/ResultRender/ResultRenderInterface.php +++ b/src/ResultRender/ResultRenderInterface.php @@ -6,4 +6,5 @@ interface ResultRenderInterface { public function render(ResultCollectionInterface $resultCollection): string; + public function getType(): string; } \ No newline at end of file diff --git a/src/ResultRender/XmlResultRender.php b/src/ResultRender/XmlResultRender.php index be210b2..d7f0a58 100644 --- a/src/ResultRender/XmlResultRender.php +++ b/src/ResultRender/XmlResultRender.php @@ -22,5 +22,9 @@ public function render(ResultCollectionInterface $resultCollection): string return $xml->asXML() ?: ''; } + public function getType(): string + { + return 'XML'; + } } \ No newline at end of file diff --git a/tests/ResultRenderer/CsvResultRendererTest.php b/tests/ResultRenderer/CsvResultRendererTest.php index 22e5237..69e8378 100644 --- a/tests/ResultRenderer/CsvResultRendererTest.php +++ b/tests/ResultRenderer/CsvResultRendererTest.php @@ -13,4 +13,10 @@ public function testCsvRenderPrintsResultCorrectly() $this->assertStringContainsString('"https://www.example.com/","Title","200"', $renderedResult); } + public function testCsvRenderReturnsType() + { + $resultRenderer = new CsvResultRender(); + $this->assertEquals('CSV', $resultRenderer->getType()); + } + } \ No newline at end of file diff --git a/tests/ResultRenderer/HtmlResultRendererTest.php b/tests/ResultRenderer/HtmlResultRendererTest.php index 9ea75de..93a6aea 100644 --- a/tests/ResultRenderer/HtmlResultRendererTest.php +++ b/tests/ResultRenderer/HtmlResultRendererTest.php @@ -17,4 +17,10 @@ public function testHtmlRenderPrintsResultCorrectly() $this->assertStringContainsString('