mirror of
https://github.com/pestphp/pest.git
synced 2026-03-06 07:47: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.
|
// Ensures Collision's Printer is registered.
|
||||||
$_SERVER['COLLISION_PRINTER'] = 'DefaultPrinter';
|
$_SERVER['COLLISION_PRINTER'] = 'DefaultPrinter';
|
||||||
|
|
||||||
$args = $_SERVER['argv'];
|
$arguments = $originalArguments = $_SERVER['argv'];
|
||||||
|
|
||||||
$dirty = false;
|
$dirty = false;
|
||||||
$todo = false;
|
$todo = false;
|
||||||
|
|
||||||
foreach ($args as $key => $value) {
|
foreach ($arguments as $key => $value) {
|
||||||
if ($value === '--compact') {
|
if ($value === '--compact') {
|
||||||
$_SERVER['COLLISION_PRINTER_COMPACT'] = 'true';
|
$_SERVER['COLLISION_PRINTER_COMPACT'] = 'true';
|
||||||
unset($args[$key]);
|
unset($arguments[$key]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($value === '--profile') {
|
if ($value === '--profile') {
|
||||||
$_SERVER['COLLISION_PRINTER_PROFILE'] = 'true';
|
$_SERVER['COLLISION_PRINTER_PROFILE'] = 'true';
|
||||||
unset($args[$key]);
|
unset($arguments[$key]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (str_contains($value, '--test-directory')) {
|
if (str_contains($value, '--test-directory')) {
|
||||||
unset($args[$key]);
|
unset($arguments[$key]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($value === '--dirty') {
|
if ($value === '--dirty') {
|
||||||
$dirty = true;
|
$dirty = true;
|
||||||
unset($args[$key]);
|
unset($arguments[$key]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (in_array($value, ['--todo', '--todos'], true)) {
|
if (in_array($value, ['--todo', '--todos'], true)) {
|
||||||
$todo = true;
|
$todo = true;
|
||||||
unset($args[$key]);
|
unset($arguments[$key]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (str_contains($value, '--teamcity')) {
|
if (str_contains($value, '--teamcity')) {
|
||||||
unset($args[$key]);
|
unset($arguments[$key]);
|
||||||
$args[] = '--no-output';
|
$arguments[] = '--no-output';
|
||||||
unset($_SERVER['COLLISION_PRINTER']);
|
unset($_SERVER['COLLISION_PRINTER']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -88,7 +88,7 @@ use Symfony\Component\Console\Output\ConsoleOutput;
|
|||||||
try {
|
try {
|
||||||
$kernel = Kernel::boot($testSuite, $input, $output);
|
$kernel = Kernel::boot($testSuite, $input, $output);
|
||||||
|
|
||||||
$result = $kernel->handle($args);
|
$result = $kernel->handle($originalArguments, $arguments);
|
||||||
|
|
||||||
$kernel->shutdown();
|
$kernel->shutdown();
|
||||||
} catch (Throwable|Error $e) {
|
} 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\CallsAddsOutput;
|
||||||
use Pest\Plugins\Actions\CallsBoot;
|
use Pest\Plugins\Actions\CallsBoot;
|
||||||
use Pest\Plugins\Actions\CallsHandleArguments;
|
use Pest\Plugins\Actions\CallsHandleArguments;
|
||||||
|
use Pest\Plugins\Actions\CallsHandleOriginalArguments;
|
||||||
use Pest\Plugins\Actions\CallsShutdown;
|
use Pest\Plugins\Actions\CallsShutdown;
|
||||||
use Pest\Support\Container;
|
use Pest\Support\Container;
|
||||||
use PHPUnit\TestRunner\TestResult\Facade;
|
use PHPUnit\TestRunner\TestResult\Facade;
|
||||||
@ -59,6 +60,11 @@ final class Kernel
|
|||||||
->add(OutputInterface::class, $output)
|
->add(OutputInterface::class, $output)
|
||||||
->add(Container::class, $container);
|
->add(Container::class, $container);
|
||||||
|
|
||||||
|
$kernel = new self(
|
||||||
|
new Application(),
|
||||||
|
$output,
|
||||||
|
);
|
||||||
|
|
||||||
foreach (self::BOOTSTRAPPERS as $bootstrapper) {
|
foreach (self::BOOTSTRAPPERS as $bootstrapper) {
|
||||||
$bootstrapper = Container::getInstance()->get($bootstrapper);
|
$bootstrapper = Container::getInstance()->get($bootstrapper);
|
||||||
assert($bootstrapper instanceof Bootstrapper);
|
assert($bootstrapper instanceof Bootstrapper);
|
||||||
@ -68,11 +74,6 @@ final class Kernel
|
|||||||
|
|
||||||
CallsBoot::execute();
|
CallsBoot::execute();
|
||||||
|
|
||||||
$kernel = new self(
|
|
||||||
new Application(),
|
|
||||||
$output,
|
|
||||||
);
|
|
||||||
|
|
||||||
Container::getInstance()->add(self::class, $kernel);
|
Container::getInstance()->add(self::class, $kernel);
|
||||||
|
|
||||||
return $kernel;
|
return $kernel;
|
||||||
@ -81,14 +82,16 @@ final class Kernel
|
|||||||
/**
|
/**
|
||||||
* Runs the application, and returns the exit code.
|
* 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 {
|
try {
|
||||||
$this->application->run($args);
|
$this->application->run($arguments);
|
||||||
} catch (NoDirtyTestsFound) {
|
} catch (NoDirtyTestsFound) {
|
||||||
$this->output->writeln([
|
$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