From c28bb8f1f6e6739c95f3a3a7d9f0abf92b6593f0 Mon Sep 17 00:00:00 2001 From: Jeroen Vermeulen Date: Tue, 29 Jul 2025 22:37:28 +0200 Subject: [PATCH 1/3] Result output now defaults to plain as described in the README. Reduced some duplicate code in the process. --- src/Command/SitemapChecker.php | 37 ++++++---------------- src/ResultRender/CsvResultRender.php | 4 +++ src/ResultRender/HtmlResultRender.php | 4 +++ src/ResultRender/JsonResultRender.php | 4 +++ src/ResultRender/PlainResultRender.php | 4 +++ src/ResultRender/ResultRenderInterface.php | 1 + src/ResultRender/XmlResultRender.php | 4 +++ 7 files changed, 31 insertions(+), 27 deletions(-) diff --git a/src/Command/SitemapChecker.php b/src/Command/SitemapChecker.php index 3875f6f..c6f1e6a 100644 --- a/src/Command/SitemapChecker.php +++ b/src/Command/SitemapChecker.php @@ -213,35 +213,18 @@ protected function execute(InputInterface $input, OutputInterface $output):int $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 From 49e819869ea264bb42282e0537002eaaf4714d94 Mon Sep 17 00:00:00 2001 From: Jeroen Vermeulen Date: Tue, 29 Jul 2025 22:43:38 +0200 Subject: [PATCH 2/3] Added tests for resultRenderer->getType() --- tests/ResultRenderer/CsvResultRendererTest.php | 6 ++++++ tests/ResultRenderer/HtmlResultRendererTest.php | 6 ++++++ tests/ResultRenderer/JsonResultRendererTest.php | 6 ++++++ tests/ResultRenderer/PlainResultRendererTest.php | 6 ++++++ tests/ResultRenderer/XmlResultRendererTest.php | 6 ++++++ 5 files changed, 30 insertions(+) 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('
  • Response Code: 200
  • ', $renderedResult); } + public function testHtmlRenderReturnsType() + { + $resultRenderer = new HtmlResultRender(); + $this->assertEquals('HTML', $resultRenderer->getType()); + } + } \ No newline at end of file diff --git a/tests/ResultRenderer/JsonResultRendererTest.php b/tests/ResultRenderer/JsonResultRendererTest.php index c7c9456..f5b1554 100644 --- a/tests/ResultRenderer/JsonResultRendererTest.php +++ b/tests/ResultRenderer/JsonResultRendererTest.php @@ -16,4 +16,10 @@ public function testJsonRenderPrintsResultCorrectly() $this->assertStringContainsString('"response_code":200', $renderedResult); } + public function testJsonRenderReturnsType() + { + $resultRenderer = new JsonResultRender(); + $this->assertEquals('JSON', $resultRenderer->getType()); + } + } \ No newline at end of file diff --git a/tests/ResultRenderer/PlainResultRendererTest.php b/tests/ResultRenderer/PlainResultRendererTest.php index a9c48a3..56754bb 100644 --- a/tests/ResultRenderer/PlainResultRendererTest.php +++ b/tests/ResultRenderer/PlainResultRendererTest.php @@ -14,4 +14,10 @@ public function testPlainRenderPrintsResultCorrectly() $this->assertStringContainsString('https://www.example.com/ Title 200', $renderedResult); } + public function testPlainRenderReturnsType() + { + $resultRenderer = new PlainResultRender(); + $this->assertEquals('plain', $resultRenderer->getType()); + } + } \ No newline at end of file diff --git a/tests/ResultRenderer/XmlResultRendererTest.php b/tests/ResultRenderer/XmlResultRendererTest.php index 48eb62f..8cd3fe5 100644 --- a/tests/ResultRenderer/XmlResultRendererTest.php +++ b/tests/ResultRenderer/XmlResultRendererTest.php @@ -16,4 +16,10 @@ public function testXmlRenderPrintsResultCorrectly() $this->assertStringContainsString('200', $renderedResult); } + public function testXmlRenderReturnsType() + { + $resultRenderer = new XmlResultRender(); + $this->assertEquals('XML', $resultRenderer->getType()); + } + } \ No newline at end of file From e1083b03befec52a6b33d5de1efb1e354759f990 Mon Sep 17 00:00:00 2001 From: Jeroen Vermeulen Date: Tue, 29 Jul 2025 22:53:25 +0200 Subject: [PATCH 3/3] Always newline after progress bar. --- src/Command/SitemapChecker.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Command/SitemapChecker.php b/src/Command/SitemapChecker.php index c6f1e6a..47e1c53 100644 --- a/src/Command/SitemapChecker.php +++ b/src/Command/SitemapChecker.php @@ -204,13 +204,13 @@ 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)); } else {