File: ProxiedMethodReturnExpressionTest.php

package info (click to toggle)
php-proxy-manager 2.11.1%2B1.0.18-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,624 kB
  • sloc: php: 14,438; makefile: 25
file content (69 lines) | stat: -rw-r--r-- 2,223 bytes parent folder | download
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;",
            ],
        ];
    }
}