From 7c535d4c8057c8ae1b0391e092376efce3e7e56a Mon Sep 17 00:00:00 2001 From: Vasek Purchart Date: Thu, 28 Apr 2022 12:47:25 +0200 Subject: [PATCH] Test baseline end of file newlines --- .../BaselineNeonErrorFormatterTest.php | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/tests/PHPStan/Command/ErrorFormatter/BaselineNeonErrorFormatterTest.php b/tests/PHPStan/Command/ErrorFormatter/BaselineNeonErrorFormatterTest.php index 44d52fb7242..10ae4cf44a3 100644 --- a/tests/PHPStan/Command/ErrorFormatter/BaselineNeonErrorFormatterTest.php +++ b/tests/PHPStan/Command/ErrorFormatter/BaselineNeonErrorFormatterTest.php @@ -6,11 +6,22 @@ use Nette\Neon\Neon; use PHPStan\Analyser\Error; use PHPStan\Command\AnalysisResult; +use PHPStan\Command\ErrorsConsoleStyle; +use PHPStan\Command\Symfony\SymfonyOutput; +use PHPStan\Command\Symfony\SymfonyStyle; use PHPStan\File\SimpleRelativePathHelper; +use PHPStan\ShouldNotHappenException; use PHPStan\Testing\ErrorFormatterTestCase; +use PHPUnit\Framework\Assert; +use Symfony\Component\Console\Input\StringInput; +use Symfony\Component\Console\Output\StreamOutput; +use function fopen; use function mt_srand; +use function rewind; use function shuffle; use function sprintf; +use function stream_get_contents; +use function substr; use function trim; class BaselineNeonErrorFormatterTest extends ErrorFormatterTestCase @@ -284,4 +295,65 @@ public function testOutputOrdering(array $errors): void ); } + /** + * @return Generator}> + */ + public function endOfFileNewlinesProvider(): Generator + { + yield 'one error' => [ + 'errors' => [ + new Error('Error #1', 'TestfileA', 1), + ], + ]; + + yield 'no errors' => [ + 'errors' => [], + ]; + } + + /** + * @dataProvider endOfFileNewlinesProvider + * + * @param list $errors + */ + public function testEndOfFileNewlines(array $errors): void + { + $formatter = new BaselineNeonErrorFormatter(new SimpleRelativePathHelper(self::DIRECTORY_PATH)); + $result = new AnalysisResult( + [ + new Error('Error #1', 'TestfileA', 1), + ], + [], + [], + [], + false, + null, + true, + ); + + $resource = fopen('php://memory', 'w', false); + if ($resource === false) { + throw new ShouldNotHappenException(); + } + $outputStream = new StreamOutput($resource, StreamOutput::VERBOSITY_NORMAL, false); + + $errorConsoleStyle = new ErrorsConsoleStyle(new StringInput(''), $outputStream); + $output = new SymfonyOutput($outputStream, new SymfonyStyle($errorConsoleStyle)); + + $formatter->formatErrors( + $result, + $output, + ); + + rewind($outputStream->getStream()); + + $content = stream_get_contents($outputStream->getStream()); + if ($content === false) { + throw new ShouldNotHappenException(); + } + + Assert::assertSame("\n\n", substr($content, -2)); + Assert::assertNotSame("\n", substr($content, -3, 1)); + } + }