mirror of
https://github.com/pestphp/pest.git
synced 2026-03-06 07:47:22 +01:00
more fixes
This commit is contained in:
@ -215,8 +215,10 @@ 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 method covers.
|
||||||
|
*
|
||||||
|
* @param array<int, string>|string $classesOrFunctions
|
||||||
*/
|
*/
|
||||||
function covers(string ...$classesOrFunctions): void
|
function covers(array|string ...$classesOrFunctions): void
|
||||||
{
|
{
|
||||||
$filename = Backtrace::file();
|
$filename = Backtrace::file();
|
||||||
|
|
||||||
|
|||||||
@ -514,14 +514,19 @@ final class TestCall
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the covered classes or methods.
|
* Sets the covered classes or methods.
|
||||||
|
*
|
||||||
|
* @param array<int, string>|string $classesOrFunctions
|
||||||
*/
|
*/
|
||||||
public function covers(string ...$classesOrFunctions): self
|
public function covers(array|string ...$classesOrFunctions): self
|
||||||
{
|
{
|
||||||
foreach ($classesOrFunctions as $classOrFunction) {
|
/** @var array<int, string> $classesOrFunctions */
|
||||||
$isClass = class_exists($classOrFunction) || trait_exists($classOrFunction);
|
$classesOrFunctions = array_reduce($classesOrFunctions, fn ($carry, $item): array => is_array($item) ? array_merge($carry, $item) : array_merge($carry, [$item]), []);
|
||||||
$isMethod = function_exists($classOrFunction);
|
|
||||||
|
|
||||||
if (! $isClass && ! $isMethod) {
|
foreach ($classesOrFunctions as $classOrFunction) {
|
||||||
|
$isClass = class_exists($classOrFunction) || trait_exists($classOrFunction) || interface_exists($classOrFunction) || enum_exists($classOrFunction);
|
||||||
|
$isFunction = function_exists($classOrFunction);
|
||||||
|
|
||||||
|
if (! $isClass && ! $isFunction) {
|
||||||
throw new InvalidArgumentException(sprintf('No class or method named "%s" has been found.', $classOrFunction));
|
throw new InvalidArgumentException(sprintf('No class or method named "%s" has been found.', $classOrFunction));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -12,35 +12,37 @@ $runCounter = 0;
|
|||||||
|
|
||||||
function testCoversFunction() {}
|
function testCoversFunction() {}
|
||||||
|
|
||||||
|
covers([CoversClass1::class]);
|
||||||
|
|
||||||
it('uses the correct PHPUnit attribute for class', function () {
|
it('uses the correct PHPUnit attribute for class', function () {
|
||||||
$attributes = (new ReflectionClass($this))->getAttributes();
|
$attributes = (new ReflectionClass($this))->getAttributes();
|
||||||
|
|
||||||
expect($attributes[1]->getName())->toBe('PHPUnit\Framework\Attributes\CoversClass');
|
expect($attributes[1]->getName())->toBe('PHPUnit\Framework\Attributes\CoversClass');
|
||||||
expect($attributes[1]->getArguments()[0])->toBe('Tests\Fixtures\Covers\CoversClass1');
|
expect($attributes[1]->getArguments()[0])->toBe('Tests\Fixtures\Covers\CoversClass1');
|
||||||
})->coversClass(CoversClass1::class);
|
});
|
||||||
|
|
||||||
it('uses the correct PHPUnit attribute for function', function () {
|
it('uses the correct PHPUnit attribute for function', function () {
|
||||||
$attributes = (new ReflectionClass($this))->getAttributes();
|
$attributes = (new ReflectionClass($this))->getAttributes();
|
||||||
|
|
||||||
expect($attributes[2]->getName())->toBe('PHPUnit\Framework\Attributes\CoversFunction');
|
expect($attributes[3]->getName())->toBe('PHPUnit\Framework\Attributes\CoversFunction');
|
||||||
expect($attributes[2]->getArguments()[0])->toBe('testCoversFunction');
|
expect($attributes[3]->getArguments()[0])->toBe('testCoversFunction');
|
||||||
})->coversFunction('testCoversFunction');
|
})->coversFunction('testCoversFunction');
|
||||||
|
|
||||||
it('guesses if the given argument is a class or function', function () {
|
it('guesses if the given argument is a class or function', function () {
|
||||||
$attributes = (new ReflectionClass($this))->getAttributes();
|
$attributes = (new ReflectionClass($this))->getAttributes();
|
||||||
|
|
||||||
expect($attributes[3]->getName())->toBe(CoversClass::class);
|
expect($attributes[5]->getName())->toBe(CoversClass::class);
|
||||||
expect($attributes[3]->getArguments()[0])->toBe(CoversClass3::class);
|
expect($attributes[5]->getArguments()[0])->toBe(CoversClass3::class);
|
||||||
|
|
||||||
expect($attributes[4]->getName())->toBe(CoversFunction::class);
|
expect($attributes[6]->getName())->toBe(CoversFunction::class);
|
||||||
expect($attributes[4]->getArguments()[0])->toBe('testCoversFunction');
|
expect($attributes[6]->getArguments()[0])->toBe('testCoversFunction');
|
||||||
})->covers(CoversClass3::class, 'testCoversFunction');
|
})->covers(CoversClass3::class, 'testCoversFunction');
|
||||||
|
|
||||||
it('uses the correct PHPUnit attribute for trait', function () {
|
it('uses the correct PHPUnit attribute for trait', function () {
|
||||||
$attributes = (new ReflectionClass($this))->getAttributes();
|
$attributes = (new ReflectionClass($this))->getAttributes();
|
||||||
|
|
||||||
expect($attributes[5]->getName())->toBe('PHPUnit\Framework\Attributes\CoversClass');
|
expect($attributes[8]->getName())->toBe('PHPUnit\Framework\Attributes\CoversClass');
|
||||||
expect($attributes[5]->getArguments()[0])->toBe('Tests\Fixtures\Covers\CoversTrait');
|
expect($attributes[8]->getArguments()[0])->toBe('Tests\Fixtures\Covers\CoversTrait');
|
||||||
})->coversClass(CoversTrait::class);
|
})->coversClass(CoversTrait::class);
|
||||||
|
|
||||||
it('uses the correct PHPUnit attribute for covers nothing', function () {
|
it('uses the correct PHPUnit attribute for covers nothing', function () {
|
||||||
|
|||||||
Reference in New Issue
Block a user