Skip to content

Commit

Permalink
fix: Support named args in ParallelConfigFactory::detect() (#8026)
Browse files Browse the repository at this point in the history
Co-authored-by: Dariusz Rumiński <dariusz.ruminski@gmail.com>
  • Loading branch information
Wirone and keradus committed May 20, 2024
1 parent cd1922b commit 4526271
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 8 deletions.
7 changes: 5 additions & 2 deletions src/Runner/Parallel/ParallelConfig.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,11 @@
*/
final class ParallelConfig
{
private const DEFAULT_FILES_PER_PROCESS = 10;
private const DEFAULT_PROCESS_TIMEOUT = 120;
/** @internal */
public const DEFAULT_FILES_PER_PROCESS = 10;

/** @internal */
public const DEFAULT_PROCESS_TIMEOUT = 120;

private int $filesPerProcess;
private int $maxProcesses;
Expand Down
7 changes: 3 additions & 4 deletions src/Runner/Parallel/ParallelConfigFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,9 @@ public static function detect(
}

return new ParallelConfig(
...array_filter(
[self::$cpuDetector->getCount(), $filesPerProcess, $processTimeout],
static fn ($value): bool => null !== $value
)
self::$cpuDetector->getCount(),
$filesPerProcess ?? ParallelConfig::DEFAULT_FILES_PER_PROCESS,
$processTimeout ?? ParallelConfig::DEFAULT_PROCESS_TIMEOUT
);
}
}
40 changes: 38 additions & 2 deletions tests/Runner/Parallel/ParallelConfigFactoryTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

use Fidry\CpuCoreCounter\CpuCoreCounter;
use Fidry\CpuCoreCounter\Finder\DummyCpuCoreFinder;
use PhpCsFixer\Runner\Parallel\ParallelConfig;
use PhpCsFixer\Runner\Parallel\ParallelConfigFactory;
use PhpCsFixer\Tests\TestCase;

Expand Down Expand Up @@ -48,8 +49,8 @@ public function testDetectConfigurationWithoutParams(): void
$config = ParallelConfigFactory::detect();

self::assertSame(7, $config->getMaxProcesses());
self::assertSame(10, $config->getFilesPerProcess());
self::assertSame(120, $config->getProcessTimeout());
self::assertSame(ParallelConfig::DEFAULT_FILES_PER_PROCESS, $config->getFilesPerProcess());
self::assertSame(ParallelConfig::DEFAULT_PROCESS_TIMEOUT, $config->getProcessTimeout());

$cpuDetector->setValue($parallelConfigFactoryReflection, null);
}
Expand All @@ -61,4 +62,39 @@ public function testDetectConfigurationWithParams(): void
self::assertSame(22, $config->getFilesPerProcess());
self::assertSame(2_200, $config->getProcessTimeout());
}

public function testDetectConfigurationWithDefaultValue(): void
{
$config = ParallelConfigFactory::detect(null, 60);

self::assertSame(ParallelConfig::DEFAULT_FILES_PER_PROCESS, $config->getFilesPerProcess());
self::assertSame(60, $config->getProcessTimeout());
}

/**
* @requires PHP 8.0
*/
public function testDetectConfigurationWithNamedArgs(): void
{
// First argument omitted, second one provided via named argument
$config1 = \call_user_func_array([ParallelConfigFactory::class, 'detect'], ['processTimeout' => 300]);

self::assertSame(ParallelConfig::DEFAULT_FILES_PER_PROCESS, $config1->getFilesPerProcess());
self::assertSame(300, $config1->getProcessTimeout());

// Flipped order of arguments using named arguments syntax
$config2 = \call_user_func_array([ParallelConfigFactory::class, 'detect'], [
'processTimeout' => 300,
'filesPerProcess' => 5,
]);

self::assertSame(5, $config2->getFilesPerProcess());
self::assertSame(300, $config2->getProcessTimeout());

// Only first argument provided, but via named argument
$config3 = \call_user_func_array([ParallelConfigFactory::class, 'detect'], ['filesPerProcess' => 7]);

self::assertSame(7, $config3->getFilesPerProcess());
self::assertSame(ParallelConfig::DEFAULT_PROCESS_TIMEOUT, $config3->getProcessTimeout());
}
}

0 comments on commit 4526271

Please sign in to comment.