diff --git a/bin/pest b/bin/pest index d6bcc1b4..27374535 100755 --- a/bin/pest +++ b/bin/pest @@ -13,39 +13,39 @@ use Symfony\Component\Console\Output\ConsoleOutput; // Ensures Collision's Printer is registered. $_SERVER['COLLISION_PRINTER'] = 'DefaultPrinter'; - $args = $_SERVER['argv']; + $arguments = $originalArguments = $_SERVER['argv']; $dirty = false; $todo = false; - foreach ($args as $key => $value) { + foreach ($arguments as $key => $value) { if ($value === '--compact') { $_SERVER['COLLISION_PRINTER_COMPACT'] = 'true'; - unset($args[$key]); + unset($arguments[$key]); } if ($value === '--profile') { $_SERVER['COLLISION_PRINTER_PROFILE'] = 'true'; - unset($args[$key]); + unset($arguments[$key]); } if (str_contains($value, '--test-directory')) { - unset($args[$key]); + unset($arguments[$key]); } if ($value === '--dirty') { $dirty = true; - unset($args[$key]); + unset($arguments[$key]); } if (in_array($value, ['--todo', '--todos'], true)) { $todo = true; - unset($args[$key]); + unset($arguments[$key]); } if (str_contains($value, '--teamcity')) { - unset($args[$key]); - $args[] = '--no-output'; + unset($arguments[$key]); + $arguments[] = '--no-output'; unset($_SERVER['COLLISION_PRINTER']); } } @@ -88,7 +88,7 @@ use Symfony\Component\Console\Output\ConsoleOutput; try { $kernel = Kernel::boot($testSuite, $input, $output); - $result = $kernel->handle($args); + $result = $kernel->handle($originalArguments, $arguments); $kernel->shutdown(); } catch (Throwable|Error $e) { diff --git a/src/Contracts/Plugins/HandlesOriginalArguments.php b/src/Contracts/Plugins/HandlesOriginalArguments.php new file mode 100644 index 00000000..ae4e7a54 --- /dev/null +++ b/src/Contracts/Plugins/HandlesOriginalArguments.php @@ -0,0 +1,18 @@ + $arguments + */ + public function handleOriginalArguments(array $arguments): void; +} diff --git a/src/Kernel.php b/src/Kernel.php index c5267a79..38f82d93 100644 --- a/src/Kernel.php +++ b/src/Kernel.php @@ -9,6 +9,7 @@ use Pest\Exceptions\NoDirtyTestsFound; use Pest\Plugins\Actions\CallsAddsOutput; use Pest\Plugins\Actions\CallsBoot; use Pest\Plugins\Actions\CallsHandleArguments; +use Pest\Plugins\Actions\CallsHandleOriginalArguments; use Pest\Plugins\Actions\CallsShutdown; use Pest\Support\Container; use PHPUnit\TestRunner\TestResult\Facade; @@ -59,6 +60,11 @@ final class Kernel ->add(OutputInterface::class, $output) ->add(Container::class, $container); + $kernel = new self( + new Application(), + $output, + ); + foreach (self::BOOTSTRAPPERS as $bootstrapper) { $bootstrapper = Container::getInstance()->get($bootstrapper); assert($bootstrapper instanceof Bootstrapper); @@ -68,11 +74,6 @@ final class Kernel CallsBoot::execute(); - $kernel = new self( - new Application(), - $output, - ); - Container::getInstance()->add(self::class, $kernel); return $kernel; @@ -81,14 +82,16 @@ final class Kernel /** * Runs the application, and returns the exit code. * - * @param array $args + * @param array $arguments */ - public function handle(array $args): int + public function handle(array $originalArguments, array $arguments): int { - $args = CallsHandleArguments::execute($args); + CallsHandleOriginalArguments::execute($originalArguments); + + $arguments = CallsHandleArguments::execute($arguments); try { - $this->application->run($args); + $this->application->run($arguments); } catch (NoDirtyTestsFound) { $this->output->writeln([ '', diff --git a/src/Plugins/Actions/CallsHandleOriginalArguments.php b/src/Plugins/Actions/CallsHandleOriginalArguments.php new file mode 100644 index 00000000..5917df7b --- /dev/null +++ b/src/Plugins/Actions/CallsHandleOriginalArguments.php @@ -0,0 +1,31 @@ + $argv + */ + public static function execute(array $argv): void + { + $plugins = Loader::getPlugins(Plugins\HandlesOriginalArguments::class); + + /** @var Plugins\HandlesOriginalArguments $plugin */ + foreach ($plugins as $plugin) { + $plugin->handleOriginalArguments($argv); + } + } +}