1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
<?php
declare(strict_types=1);
namespace Mockery\Tests\Mockery;
use Generator;
use Mockery\Adapter\Phpunit\MockeryTestCase;
use Mockery\Reflector;
use PHPUnit\Framework\Attributes\DataProvider;
use ReflectionClass;
/**
* @coversDefaultClass \Mockery\Reflector
*/
class ReflectorTest extends MockeryTestCase
{
/**
* @covers \Mockery\Reflector::getTypeHint
*/
#[DataProvider('typeHintDataProvider')]
public function testGetTypeHint(string $class, string $expectedTypeHint): void
{
$refClass = new ReflectionClass($class);
$refMethod = $refClass->getMethods()[0];
$refParam = $refMethod->getParameters()[0];
self::assertSame(
$expectedTypeHint,
Reflector::getTypeHint($refParam)
);
}
public static function typeHintDataProvider(): Generator
{
$isPHPLessThan8 = \PHP_VERSION_ID < 80000;
yield from [
[ParentClass::class, '\Mockery\Tests\Mockery\ParentClass'],
[ChildClass::class, '\Mockery\Tests\Mockery\ParentClass'],
NullableObject::class => [NullableObject::class, $isPHPLessThan8 ? '?object' : 'object|null'],
];
}
#[DataProvider('provideReservedWords')]
public function testIsReservedWord(string $type): void
{
self::assertTrue(Reflector::isReservedWord($type));
}
public static function provideReservedWords(): Generator
{
foreach ([
'bool',
'false',
'float',
'int',
'iterable',
'mixed',
'never',
'null',
'object',
'string',
'true',
'void'
] as $type) {
yield $type => [$type];
}
}
}
class ParentClass
{
public function __invoke(self $arg): void
{
}
}
class ChildClass extends ParentClass
{
public function __invoke(parent $arg): void
{
}
}
class NullableObject
{
public function __invoke(?object $arg): void
{
}
}
|