This commit is contained in:
Nuno Maduro
2023-02-07 01:06:31 +00:00
parent f48ae48677
commit 6338d762fa
6 changed files with 31 additions and 27 deletions

View File

@ -45,13 +45,13 @@ $bootPest = (static function (): void {
'phpunit-argv:',
]);
require_once __DIR__ . '/../overrides/Runner/TestSuiteLoader.php';
require_once __DIR__ . '/../overrides/Runner/Filter/NameFilterIterator.php';
require_once __DIR__.'/../overrides/Runner/TestSuiteLoader.php';
require_once __DIR__.'/../overrides/Runner/Filter/NameFilterIterator.php';
$composerAutoloadFiles = [
dirname(__DIR__, 3) . DIRECTORY_SEPARATOR . 'autoload.php',
dirname(__DIR__, 2) . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php',
dirname(__DIR__) . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php',
dirname(__DIR__, 3).DIRECTORY_SEPARATOR.'autoload.php',
dirname(__DIR__, 2).DIRECTORY_SEPARATOR.'vendor'.DIRECTORY_SEPARATOR.'autoload.php',
dirname(__DIR__).DIRECTORY_SEPARATOR.'vendor'.DIRECTORY_SEPARATOR.'autoload.php',
];
foreach ($composerAutoloadFiles as $file) {
@ -69,8 +69,8 @@ $bootPest = (static function (): void {
assert(isset($getopt['progress-file']) && is_string($getopt['progress-file']));
assert(isset($getopt['testresult-file']) && is_string($getopt['testresult-file']));
assert(!isset($getopt['teamcity-file']) || is_string($getopt['teamcity-file']));
assert(!isset($getopt['testdox-file']) || is_string($getopt['testdox-file']));
assert(! isset($getopt['teamcity-file']) || is_string($getopt['teamcity-file']));
assert(! isset($getopt['testdox-file']) || is_string($getopt['testdox-file']));
assert(isset($getopt['phpunit-argv']) && is_string($getopt['phpunit-argv']));
$phpunitArgv = unserialize($getopt['phpunit-argv'], ['allowed_classes' => false]);

View File

@ -17,7 +17,7 @@ final class Parallel implements HandlesArguments
{
use HandleArguments;
private array $handlers = [
private const HANDLERS = [
\Pest\Plugins\Parallel\Handlers\Parallel::class,
\Pest\Plugins\Parallel\Handlers\Laravel::class,
];
@ -36,8 +36,10 @@ final class Parallel implements HandlesArguments
private function argumentsContainParallelFlags(array $arguments): bool
{
return $this->hasArgument('--parallel', $arguments)
|| $this->hasArgument('-p', $arguments);
if ($this->hasArgument('--parallel', $arguments)) {
return true;
}
return $this->hasArgument('-p', $arguments);
}
private function runTestSuiteInParallel(array $arguments): int
@ -49,7 +51,7 @@ final class Parallel implements HandlesArguments
}
$filteredArguments = array_reduce(
$this->handlers,
self::HANDLERS,
fn($arguments, $handler) => (new $handler())->handle($arguments),
$arguments
);

View File

@ -27,7 +27,7 @@ final class Laravel
$this->setLaravelParallelRunner();
foreach ($args as $value) {
if (str_starts_with($value, '--runner')) {
if (str_starts_with((string) $value, '--runner')) {
$args = $this->popArgument($value, $args);
}
}
@ -41,9 +41,7 @@ final class Laravel
exit('Using parallel with Pest requires Laravel v8.55.0 or higher.');
}
ParallelRunner::resolveRunnerUsing(function (Options $options, OutputInterface $output): RunnerInterface {
return new WrapperRunner($options, $output);
});
ParallelRunner::resolveRunnerUsing(fn(Options $options, OutputInterface $output): RunnerInterface => new WrapperRunner($options, $output));
}
private static function isALaravelApplication(): bool

View File

@ -14,16 +14,18 @@ use Symfony\Component\Console\Input\ArgvInput;
final class Parallel
{
use HandleArguments;
/**
* @var string[]
*/
private const ARGS_TO_REMOVE = [
'--parallel',
'-p',
'--no-output',
];
public function handle(array $args): array
{
$argsToRemove = [
'--parallel',
'-p',
'--no-output',
];
$args = array_reduce($argsToRemove, fn ($args, $arg) => $this->popArgument($arg, $args), $args);
$args = array_reduce(self::ARGS_TO_REMOVE, fn ($args, $arg): array => $this->popArgument($arg, $args), $args);
return $this->pushArgument('--runner=' . WrapperRunner::class, $args);
}

View File

@ -44,7 +44,7 @@ final class WrapperRunner implements RunnerInterface
{
private const CYCLE_SLEEP = 10000;
private readonly ResultPrinter $printer;
private Timer $timer;
private readonly Timer $timer;
/** @var non-empty-string[] */
private array $pending = [];
@ -131,7 +131,7 @@ final class WrapperRunner implements RunnerInterface
{
$batchSize = $this->options->maxBatchSize;
while (count($this->pending) > 0 && count($this->workers) > 0) {
while ($this->pending !== [] && $this->workers !== []) {
foreach ($this->workers as $token => $worker) {
if (! $worker->isRunning()) {
throw $worker->getWorkerCrashedException();
@ -178,7 +178,7 @@ final class WrapperRunner implements RunnerInterface
private function waitForAllToFinish(): void
{
$stopped = [];
while (count($this->workers) > 0) {
while ($this->workers !== []) {
foreach ($this->workers as $index => $worker) {
if ($worker->isRunning()) {
if (! isset($stopped[$index]) && $worker->isFree()) {
@ -307,7 +307,7 @@ final class WrapperRunner implements RunnerInterface
return $exitcode;
}
protected function generateCodeCoverageReports(): void
private function generateCodeCoverageReports(): void
{
if ($this->coverageFiles === []) {
return;
@ -361,7 +361,7 @@ final class WrapperRunner implements RunnerInterface
$tests = array_filter(
$suiteLoader->files,
fn(string $filename) => ! str_ends_with($filename, "eval()'d code")
fn(string $filename): bool => ! str_ends_with($filename, "eval()'d code")
);
return [...$tests, ...TestSuite::getInstance()->tests->getFilenames()];

View File

@ -25,6 +25,8 @@ final class CompactPrinter
{
private readonly Terminal $terminal;
private readonly ConsoleOutputInterface $output;
private readonly Style $style;
private int $compactProcessed = 0;