Adds compact printer

This commit is contained in:
Nuno Maduro
2022-09-16 16:27:23 +01:00
parent 7a41a540f2
commit 9fd8610390
9 changed files with 127 additions and 74 deletions

View File

@ -14,6 +14,16 @@ use Symfony\Component\Console\Output\OutputInterface;
// Ensures Collision's Printer is registered. // Ensures Collision's Printer is registered.
$_SERVER['COLLISION_PRINTER'] = 'DefaultPrinter'; $_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. // Used when Pest is required using composer.
$vendorPath = dirname(__DIR__, 4) . '/vendor/autoload.php'; $vendorPath = dirname(__DIR__, 4) . '/vendor/autoload.php';
@ -38,19 +48,20 @@ use Symfony\Component\Console\Output\OutputInterface;
); );
$isDecorated = $argv->getParameterOption('--colors', 'always') !== 'never'; $isDecorated = $argv->getParameterOption('--colors', 'always') !== 'never';
$output = new ConsoleOutput(ConsoleOutput::VERBOSITY_NORMAL, $isDecorated); $output = new ConsoleOutput(ConsoleOutput::VERBOSITY_NORMAL, $isDecorated);
$container = Container::getInstance(); $container = Container::getInstance();
$container->add(TestSuite::class, $testSuite); $container->add(TestSuite::class, $testSuite);
$container->add(OutputInterface::class, $output); $container->add(OutputInterface::class, $output);
$args = $_SERVER['argv'];
if ($argv->hasParameterOption('--test-directory')) {
foreach ($args as $key => $value) { foreach ($args as $key => $value) {
if (strpos($value, '--test-directory') !== false) { if (str_contains($value, '--test-directory')) {
unset($args[$key]); unset($args[$key]);
} }
if (str_contains($value, '--compact')) {
unset($args[$key]);
} }
} }

View File

@ -4,21 +4,14 @@ declare(strict_types=1);
namespace Pest; namespace Pest;
use PHPUnit\TestRunner\TestResult\Facade;
use PHPUnit\TextUI\Application; use PHPUnit\TextUI\Application;
use PHPUnit\TextUI\Configuration\Registry; use PHPUnit\TextUI\Exception;
/** /**
* @internal * @internal
*/ */
final class Kernel final class Kernel
{ {
private const SUCCESS_EXIT = 0;
private const FAILURE_EXIT = 1;
private const EXCEPTION_EXIT = 2;
/** /**
* The Kernel bootstrappers. * The Kernel bootstrappers.
* *
@ -55,6 +48,8 @@ final class Kernel
* Handles the given argv. * Handles the given argv.
* *
* @param array<int, string> $argv * @param array<int, string> $argv
*
* @throws Exception
*/ */
public function handle(array $argv): int public function handle(array $argv): int
{ {
@ -64,10 +59,8 @@ final class Kernel
$argv, false, $argv, false,
); );
$returnCode = $this->returnCode();
return (new Plugins\Actions\AddsOutput())->__invoke( 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;
}
} }

View File

@ -5,6 +5,7 @@ declare(strict_types=1);
namespace Pest\PendingCalls; namespace Pest\PendingCalls;
use Closure; use Closure;
use NunoMaduro\Collision\Adapters\Phpunit\Printers\DefaultPrinter;
use Pest\TestSuite; use Pest\TestSuite;
/** /**
@ -52,6 +53,13 @@ final class UsesCall
$this->targets = [$filename]; $this->targets = [$filename];
} }
public function compact(): self
{
DefaultPrinter::compact(true);
return $this;
}
/** /**
* The directories or file where the * The directories or file where the
* class or traits should be used. * class or traits should be used.

85
src/Result.php Normal file
View File

@ -0,0 +1,85 @@
<?php
declare(strict_types=1);
namespace Pest;
use PHPUnit\TestRunner\TestResult\Facade;
use PHPUnit\TextUI\Configuration\Registry;
/**
* @internal
*/
final class Result
{
private const SUCCESS_EXIT = 0;
private const FAILURE_EXIT = 1;
private const EXCEPTION_EXIT = 2;
/**
* If the exit code is different from 0.
*/
public static function failed(): bool
{
return ! self::ok();
}
/**
* If the exit code is exactly 0.
*/
public static function ok(): bool
{
return self::exitCode() === 0;
}
/**
* Get the test execution's exit code.
*/
public static function exitCode(): 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;
}
}

View File

@ -773,4 +773,6 @@
WARN Tests\Visual\TeamCity WARN Tests\Visual\TeamCity
- it is can successfully call all public methods → Not supported yet. - 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

View File

@ -1,10 +1,8 @@
<?php <?php
use Pest\Factories\Attributes\Covers;
use Pest\PendingCalls\TestCall; use Pest\PendingCalls\TestCall;
use Pest\TestSuite; use Pest\TestSuite;
use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\CoversFunction;
use Tests\Fixtures\Covers\CoversClass1; use Tests\Fixtures\Covers\CoversClass1;
use Tests\Fixtures\Covers\CoversClass2; use Tests\Fixtures\Covers\CoversClass2;
use Tests\Fixtures\Covers\CoversClass3; use Tests\Fixtures\Covers\CoversClass3;

View File

@ -2,8 +2,9 @@
namespace Tests\Fixtures\Covers; namespace Tests\Fixtures\Covers;
class CoversClass1 { class CoversClass1
public function foo() { {
public function foo()
{
} }
} }

View File

@ -2,4 +2,6 @@
namespace Tests\Fixtures\Covers; namespace Tests\Fixtures\Covers;
class CoversClass2 {} class CoversClass2
{
}

View File

@ -2,4 +2,6 @@
namespace Tests\Fixtures\Covers; namespace Tests\Fixtures\Covers;
class CoversClass3 {} class CoversClass3
{
}