mirror of
https://github.com/pestphp/pest.git
synced 2026-03-10 09:47:23 +01:00
introduced argument mapping, added pest coverage
This commit is contained in:
102
src/Actions/MapArguments.php
Normal file
102
src/Actions/MapArguments.php
Normal file
@ -0,0 +1,102 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Pest\Actions;
|
||||
|
||||
use Pest\Console\Paratest\Runner;
|
||||
use Pest\Contracts\Plugins\HandlesArguments;
|
||||
use Pest\Plugin\Loader;
|
||||
use Pest\Support\Container;
|
||||
use Pest\Support\Coverage;
|
||||
use Pest\TestSuite;
|
||||
use Symfony\Component\Console\Input\ArgvInput;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
||||
final class MapArguments
|
||||
{
|
||||
public static function toParatest(TestSuite $testSuite): void
|
||||
{
|
||||
var_dump($_SERVER['argv']);
|
||||
self::coverage();
|
||||
self::registerPlugins();
|
||||
self::parallel();
|
||||
self::color();
|
||||
var_dump($_SERVER['argv']);
|
||||
}
|
||||
|
||||
public static function toPest(TestSuite $testSuite): void
|
||||
{
|
||||
self::inParallel($testSuite);
|
||||
}
|
||||
|
||||
private static function registerPlugins(): void
|
||||
{
|
||||
$plugins = Loader::getPlugins(HandlesArguments::class);
|
||||
|
||||
/** @var HandlesArguments $plugin */
|
||||
foreach ($plugins as $plugin) {
|
||||
$_SERVER['argv'] = $plugin->handleArguments($_SERVER['argv']);
|
||||
}
|
||||
}
|
||||
|
||||
private static function parallel(): void
|
||||
{
|
||||
if (self::unsetArgument('--parallel')) {
|
||||
self::setArgument('--runner', Runner::class);
|
||||
}
|
||||
}
|
||||
|
||||
private static function inParallel(TestSuite $testSuite): void
|
||||
{
|
||||
if (self::unsetArgument('--isInParallel')) {
|
||||
$testSuite->isInParallel = true;
|
||||
}
|
||||
}
|
||||
|
||||
private static function color(): void
|
||||
{
|
||||
$argv = new ArgvInput();
|
||||
$isDecorated = $argv->getParameterOption('--colors', 'always') !== 'never';
|
||||
|
||||
self::unsetArgument('--colors');
|
||||
//refactor later
|
||||
self::unsetArgument('--colors=always');
|
||||
self::unsetArgument('--colors=auto');
|
||||
self::unsetArgument('--colors=never');
|
||||
|
||||
if ($isDecorated) {
|
||||
self::setArgument('--colors');
|
||||
}
|
||||
}
|
||||
|
||||
private static function coverage(): void
|
||||
{
|
||||
if (! Coverage::isAvailable()) {
|
||||
Container::getInstance()->get(OutputInterface::class)->writeln(
|
||||
"\n <fg=white;bg=red;options=bold> ERROR </> No code coverage driver is available.</>",
|
||||
);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
private static function unsetArgument(string $argument): bool
|
||||
{
|
||||
if (($key = array_search($argument, $_SERVER['argv'])) !== false) {
|
||||
unset($_SERVER['argv'][$key]);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private static function setArgument(string $argument, string $value = null): void
|
||||
{
|
||||
$_SERVER['argv'][] = $argument;
|
||||
|
||||
if ($value !== null) {
|
||||
$_SERVER['argv'][] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -14,6 +14,7 @@ use ParaTest\Runners\PHPUnit\ResultPrinter;
|
||||
use ParaTest\Runners\PHPUnit\RunnerInterface;
|
||||
use ParaTest\Runners\PHPUnit\SuiteLoader;
|
||||
use Pest\Factories\TestCaseFactory;
|
||||
use Pest\Plugins\Coverage;
|
||||
use Pest\TestSuite;
|
||||
use PHPUnit\TextUI\TestRunner;
|
||||
use SebastianBergmann\Timer\Timer;
|
||||
@ -227,6 +228,12 @@ final class Runner implements RunnerInterface
|
||||
$this->output->writeln(
|
||||
sprintf('done [%s]', $timer->stop()->asString())
|
||||
);
|
||||
|
||||
if ($this->options->coveragePhp() && file_exists(\Pest\Support\Coverage::getPath())) {
|
||||
$coveragePlugin = new Coverage($this->output);
|
||||
$coveragePlugin->coverage = true;
|
||||
$coveragePlugin->addOutput(0);
|
||||
}
|
||||
}
|
||||
|
||||
private function hasCoverage(): bool
|
||||
|
||||
Reference in New Issue
Block a user