mirror of
https://github.com/pestphp/pest.git
synced 2026-03-05 23:37:22 +01:00
fix: --watch plugin access to original arguments
This commit is contained in:
20
bin/pest
20
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) {
|
||||
|
||||
18
src/Contracts/Plugins/HandlesOriginalArguments.php
Normal file
18
src/Contracts/Plugins/HandlesOriginalArguments.php
Normal file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Pest\Contracts\Plugins;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
interface HandlesOriginalArguments
|
||||
{
|
||||
/**
|
||||
* Adds original arguments before the Test Suite execution.
|
||||
*
|
||||
* @param array<int, string> $arguments
|
||||
*/
|
||||
public function handleOriginalArguments(array $arguments): void;
|
||||
}
|
||||
@ -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<int, string> $args
|
||||
* @param array<int, string> $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([
|
||||
'',
|
||||
|
||||
31
src/Plugins/Actions/CallsHandleOriginalArguments.php
Normal file
31
src/Plugins/Actions/CallsHandleOriginalArguments.php
Normal file
@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Pest\Plugins\Actions;
|
||||
|
||||
use Pest\Contracts\Plugins;
|
||||
use Pest\Plugin\Loader;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
final class CallsHandleOriginalArguments
|
||||
{
|
||||
/**
|
||||
* Executes the Plugin action.
|
||||
*
|
||||
* Transform the input arguments by passing it to the relevant plugins.
|
||||
*
|
||||
* @param array<int, string> $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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user