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
|
<?php
declare(strict_types=1);
namespace ProxyManagerTest\Generator\Util;
use PHPUnit\Framework\TestCase;
use ProxyManager\Generator\Util\ProxiedMethodReturnExpression;
use ProxyManagerTestAsset\VoidMethodTypeHintedClass;
use ReflectionMethod;
/**
* Test to {@see ProxyManager\Generator\Util\ProxiedMethodReturnExpression}
*
* @covers \ProxyManager\Generator\Util\ProxiedMethodReturnExpression
* @group Coverage
*/
final class ProxiedMethodReturnExpressionTest extends TestCase
{
/**
* @dataProvider returnExpressionsProvider
*/
public function testGeneratedReturnExpression(
string $expression,
?ReflectionMethod $originalMethod,
string $expectedGeneratedCode
): void {
self::assertSame($expectedGeneratedCode, ProxiedMethodReturnExpression::generate($expression, $originalMethod));
}
/**
* @psalm-return array<string, array{0: string, 1: ReflectionMethod|null, 2: string}>
*/
public static function returnExpressionsProvider(): array
{
return [
'variable, no original method' => [
'$foo',
null,
'return $foo;',
],
'variable, given non-void original method' => [
'$foo',
new ReflectionMethod(self::class, 'returnExpressionsProvider'),
'return $foo;',
],
'variable, given void original method' => [
'$foo',
new ReflectionMethod(VoidMethodTypeHintedClass::class, 'returnVoid'),
"\$foo;\nreturn;",
],
'expression, no original method' => [
'(1 + 1)',
null,
'return (1 + 1);',
],
'expression, given non-void original method' => [
'(1 + 1)',
new ReflectionMethod(self::class, 'returnExpressionsProvider'),
'return (1 + 1);',
],
'expression, given void original method' => [
'(1 + 1)',
new ReflectionMethod(VoidMethodTypeHintedClass::class, 'returnVoid'),
"(1 + 1);\nreturn;",
],
];
}
}
|