From 9fd861039077bb514cae786e025662b2ab3792c1 Mon Sep 17 00:00:00 2001 From: Nuno Maduro Date: Fri, 16 Sep 2022 16:27:23 +0100 Subject: [PATCH] Adds `compact` printer --- bin/pest | 23 +++++-- src/Kernel.php | 64 ++----------------- src/PendingCalls/UsesCall.php | 8 +++ src/Result.php | 85 ++++++++++++++++++++++++++ tests/.snapshots/success.txt | 4 +- tests/Features/Covers.php | 2 - tests/Fixtures/Covers/CoversClass1.php | 7 ++- tests/Fixtures/Covers/CoversClass2.php | 4 +- tests/Fixtures/Covers/CoversClass3.php | 4 +- 9 files changed, 127 insertions(+), 74 deletions(-) create mode 100644 src/Result.php diff --git a/bin/pest b/bin/pest index 2071865c..dff09836 100755 --- a/bin/pest +++ b/bin/pest @@ -14,6 +14,16 @@ use Symfony\Component\Console\Output\OutputInterface; // Ensures Collision's Printer is registered. $_SERVER['COLLISION_PRINTER'] = 'DefaultPrinter'; + $args = $_SERVER['argv']; + + foreach ($args as $key => $value) { + if (str_contains($value, '--compact')) { + $_SERVER['COLLISION_PRINTER_COMPACT'] = 'true'; + + break; + } + } + // Used when Pest is required using composer. $vendorPath = dirname(__DIR__, 4) . '/vendor/autoload.php'; @@ -38,19 +48,20 @@ use Symfony\Component\Console\Output\OutputInterface; ); $isDecorated = $argv->getParameterOption('--colors', 'always') !== 'never'; + $output = new ConsoleOutput(ConsoleOutput::VERBOSITY_NORMAL, $isDecorated); $container = Container::getInstance(); $container->add(TestSuite::class, $testSuite); $container->add(OutputInterface::class, $output); - $args = $_SERVER['argv']; + foreach ($args as $key => $value) { + if (str_contains($value, '--test-directory')) { + unset($args[$key]); + } - if ($argv->hasParameterOption('--test-directory')) { - foreach ($args as $key => $value) { - if (strpos($value, '--test-directory') !== false) { - unset($args[$key]); - } + if (str_contains($value, '--compact')) { + unset($args[$key]); } } diff --git a/src/Kernel.php b/src/Kernel.php index 7210f6b6..821dc6a7 100644 --- a/src/Kernel.php +++ b/src/Kernel.php @@ -4,21 +4,14 @@ declare(strict_types=1); namespace Pest; -use PHPUnit\TestRunner\TestResult\Facade; use PHPUnit\TextUI\Application; -use PHPUnit\TextUI\Configuration\Registry; +use PHPUnit\TextUI\Exception; /** * @internal */ final class Kernel { - private const SUCCESS_EXIT = 0; - - private const FAILURE_EXIT = 1; - - private const EXCEPTION_EXIT = 2; - /** * The Kernel bootstrappers. * @@ -55,6 +48,8 @@ final class Kernel * Handles the given argv. * * @param array $argv + * + * @throws Exception */ public function handle(array $argv): int { @@ -64,10 +59,8 @@ final class Kernel $argv, false, ); - $returnCode = $this->returnCode(); - return (new Plugins\Actions\AddsOutput())->__invoke( - $returnCode, + Result::exitCode(), ); } @@ -78,53 +71,4 @@ final class Kernel { // .. } - - /** - * Returns the exit code, based on the facade's result. - */ - private function returnCode(): int - { - $result = Facade::result(); - - $returnCode = self::FAILURE_EXIT; - - if ($result->wasSuccessfulIgnoringPhpunitWarnings() - && ! $result->hasTestTriggeredPhpunitWarningEvents()) { - $returnCode = self::SUCCESS_EXIT; - } - - $configuration = Registry::get(); - - if ($configuration->failOnEmptyTestSuite() && $result->numberOfTests() === 0) { - $returnCode = self::FAILURE_EXIT; - } - - if ($result->wasSuccessfulIgnoringPhpunitWarnings()) { - if ($configuration->failOnRisky() && $result->hasTestConsideredRiskyEvents()) { - $returnCode = self::FAILURE_EXIT; - } - - $warnings = $result->numberOfTestsWithTestTriggeredPhpunitWarningEvents() - + $result->numberOfTestsWithTestTriggeredWarningEvents() - + $result->numberOfTestsWithTestTriggeredPhpWarningEvents(); - - if ($configuration->failOnWarning() && $warnings > 0) { - $returnCode = self::FAILURE_EXIT; - } - - if ($configuration->failOnIncomplete() && $result->hasTestMarkedIncompleteEvents()) { - $returnCode = self::FAILURE_EXIT; - } - - if ($configuration->failOnSkipped() && $result->hasTestSkippedEvents()) { - $returnCode = self::FAILURE_EXIT; - } - } - - if ($result->hasTestErroredEvents()) { - return self::EXCEPTION_EXIT; - } - - return $returnCode; - } } diff --git a/src/PendingCalls/UsesCall.php b/src/PendingCalls/UsesCall.php index 6e267200..fc297698 100644 --- a/src/PendingCalls/UsesCall.php +++ b/src/PendingCalls/UsesCall.php @@ -5,6 +5,7 @@ declare(strict_types=1); namespace Pest\PendingCalls; use Closure; +use NunoMaduro\Collision\Adapters\Phpunit\Printers\DefaultPrinter; use Pest\TestSuite; /** @@ -52,6 +53,13 @@ final class UsesCall $this->targets = [$filename]; } + public function compact(): self + { + DefaultPrinter::compact(true); + + return $this; + } + /** * The directories or file where the * class or traits should be used. diff --git a/src/Result.php b/src/Result.php new file mode 100644 index 00000000..457c6662 --- /dev/null +++ b/src/Result.php @@ -0,0 +1,85 @@ +wasSuccessfulIgnoringPhpunitWarnings() + && ! $result->hasTestTriggeredPhpunitWarningEvents()) { + $returnCode = self::SUCCESS_EXIT; + } + + $configuration = Registry::get(); + + if ($configuration->failOnEmptyTestSuite() && $result->numberOfTests() === 0) { + $returnCode = self::FAILURE_EXIT; + } + + if ($result->wasSuccessfulIgnoringPhpunitWarnings()) { + if ($configuration->failOnRisky() && $result->hasTestConsideredRiskyEvents()) { + $returnCode = self::FAILURE_EXIT; + } + + $warnings = $result->numberOfTestsWithTestTriggeredPhpunitWarningEvents() + + $result->numberOfTestsWithTestTriggeredWarningEvents() + + $result->numberOfTestsWithTestTriggeredPhpWarningEvents(); + + if ($configuration->failOnWarning() && $warnings > 0) { + $returnCode = self::FAILURE_EXIT; + } + + if ($configuration->failOnIncomplete() && $result->hasTestMarkedIncompleteEvents()) { + $returnCode = self::FAILURE_EXIT; + } + + if ($configuration->failOnSkipped() && $result->hasTestSkippedEvents()) { + $returnCode = self::FAILURE_EXIT; + } + } + + if ($result->hasTestErroredEvents()) { + return self::EXCEPTION_EXIT; + } + + return $returnCode; + } +} diff --git a/tests/.snapshots/success.txt b/tests/.snapshots/success.txt index 0a969770..844d3f30 100644 --- a/tests/.snapshots/success.txt +++ b/tests/.snapshots/success.txt @@ -773,4 +773,6 @@ WARN Tests\Visual\TeamCity - it is can successfully call all public methods → Not supported yet. - Tests: 4 incompleted, 1 todo, 18 skipped, 515 passed (1299 assertions) + Tests: 4 incomplete, 1 todo, 18 skipped, 515 passed (1294 assertions) + Duration: 1.01s + diff --git a/tests/Features/Covers.php b/tests/Features/Covers.php index 834dfcd6..3ee6ae81 100644 --- a/tests/Features/Covers.php +++ b/tests/Features/Covers.php @@ -1,10 +1,8 @@