feat: adds mutates

This commit is contained in:
Nuno Maduro
2024-09-19 23:32:28 +01:00
parent 28772c2609
commit b98ce0ced3
2 changed files with 37 additions and 2 deletions

View File

@ -23,7 +23,7 @@
"nunomaduro/termwind": "^2.1.0", "nunomaduro/termwind": "^2.1.0",
"pestphp/pest-plugin": "^3.0.0", "pestphp/pest-plugin": "^3.0.0",
"pestphp/pest-plugin-arch": "^3.0.0", "pestphp/pest-plugin-arch": "^3.0.0",
"pestphp/pest-plugin-mutate": "^3.0.3", "pestphp/pest-plugin-mutate": "^3.0.4",
"phpunit/phpunit": "^11.3.6" "phpunit/phpunit": "^11.3.6"
}, },
"conflict": { "conflict": {

View File

@ -217,7 +217,7 @@ if (! function_exists('afterAll')) {
if (! function_exists('covers')) { if (! function_exists('covers')) {
/** /**
* Specifies which classes, or functions, a test method covers. * Specifies which classes, or functions, a test case covers.
* *
* @param array<int, string>|string $classesOrFunctions * @param array<int, string>|string $classesOrFunctions
*/ */
@ -243,3 +243,38 @@ if (! function_exists('covers')) {
} }
} }
} }
if (! function_exists('mutates')) {
/**
* Specifies which classes, enums, or traits a test case mutates.
*
* @param array<int, string>|string $targets
*/
function mutates(array|string ...$targets): void
{
$filename = Backtrace::file();
$beforeEachCall = (new BeforeEachCall(TestSuite::getInstance(), $filename));
$beforeEachCall->group('__pest_mutate_only');
/** @var MutationTestRunner $runner */
$runner = Container::getInstance()->get(MutationTestRunner::class);
/** @var \Pest\Mutate\Repositories\ConfigurationRepository $configurationRepository */
$configurationRepository = Container::getInstance()->get(ConfigurationRepository::class);
$everything = $configurationRepository->cliConfiguration->toArray()['everything'] ?? false;
$classes = $configurationRepository->cliConfiguration->toArray()['classes'] ?? false;
$paths = $configurationRepository->cliConfiguration->toArray()['paths'] ?? false;
if ($runner->isEnabled() && ! $everything && ! is_array($classes) && ! is_array($paths)) {
$beforeEachCall->only('__pest_mutate_only');
}
/** @var ConfigurationRepository $configurationRepository */
$configurationRepository = Container::getInstance()->get(ConfigurationRepository::class);
$paths = $configurationRepository->cliConfiguration->toArray()['paths'] ?? false;
if (! is_array($paths)) {
$configurationRepository->globalConfiguration('default')->class(...$targets); // @phpstan-ignore-line
}
}
}