* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\VarDumper\Tests\Caster; use PHPUnit\Framework\TestCase; use Symfony\Component\VarDumper\Caster\Caster; use Symfony\Component\VarDumper\Test\VarDumperTestTrait; use Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo; use Symfony\Component\VarDumper\Tests\Fixtures\NotLoadableClass; /** * @author Nicolas Grekas */ class ReflectionCasterTest extends TestCase { use VarDumperTestTrait; public function testReflectionCaster() { $var = new \ReflectionClass('ReflectionClass'); $this->assertDumpMatchesFormat( <<<'EOTXT' ReflectionClass { +name: "ReflectionClass" %Aimplements: array:%d [ 0 => "Reflector" %A] constants: array:3 [ "IS_IMPLICIT_ABSTRACT" => 16 "IS_EXPLICIT_ABSTRACT" => 32 "IS_FINAL" => %d ] properties: array:%d [ "name" => ReflectionProperty { %A +name: "name" +class: "ReflectionClass" %A modifiers: "public" } %A] methods: array:%d [ %A "export" => ReflectionMethod { +name: "export" +class: "ReflectionClass" %A parameters: { $%s: ReflectionParameter { %A position: 0 %A } EOTXT , $var ); } public function testClosureCaster() { $a = $b = 123; $var = function ($x) use ($a, &$b) {}; $this->assertDumpMatchesFormat( <<assertDumpEquals($expectedDump, $var, Caster::EXCLUDE_VERBOSE); } public function testReflectionParameter() { $var = new \ReflectionParameter(__NAMESPACE__.'\reflectionParameterFixture', 0); $this->assertDumpMatchesFormat( <<<'EOTXT' ReflectionParameter { +name: "arg1" position: 0 typeHint: "Symfony\Component\VarDumper\Tests\Fixtures\NotLoadableClass" default: null } EOTXT , $var ); } /** * @requires PHP 7.0 */ public function testReflectionParameterScalar() { $f = eval('return function (int $a) {};'); $var = new \ReflectionParameter($f, 0); $this->assertDumpMatchesFormat( <<<'EOTXT' ReflectionParameter { +name: "a" position: 0 typeHint: "int" } EOTXT , $var ); } /** * @requires PHP 7.0 */ public function testReturnType() { $f = eval('return function ():int {};'); $line = __LINE__ - 1; $this->assertDumpMatchesFormat( <<markTestSkipped('xdebug is active'); } $generator = new GeneratorDemo(); $generator = $generator->baz(); $expectedDump = <<<'EODUMP' Generator { this: Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo { …} executing: { Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo->baz() { %sGeneratorDemo.php:14 { › { › yield from bar(); › } } } } closed: false } EODUMP; $this->assertDumpMatchesFormat($expectedDump, $generator); foreach ($generator as $v) { break; } $expectedDump = <<<'EODUMP' array:2 [ 0 => ReflectionGenerator { this: Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo { …} trace: { %s%eTests%eFixtures%eGeneratorDemo.php:9 { › { › yield 1; › } } %s%eTests%eFixtures%eGeneratorDemo.php:20 { …} %s%eTests%eFixtures%eGeneratorDemo.php:14 { …} } closed: false } 1 => Generator { executing: { Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo::foo() { %sGeneratorDemo.php:10 { › yield 1; › } › } } } closed: false } ] EODUMP; $r = new \ReflectionGenerator($generator); $this->assertDumpMatchesFormat($expectedDump, array($r, $r->getExecutingGenerator())); foreach ($generator as $v) { } $expectedDump = <<<'EODUMP' Generator { closed: true } EODUMP; $this->assertDumpMatchesFormat($expectedDump, $generator); } } function reflectionParameterFixture(NotLoadableClass $arg1 = null, $arg2) { } __halt_compiler();----SIGNATURE:----wKMpWXwD0PlXOCH/IPuQuwL05oQQB1QMbvVa3rCRNcnnneNqUJxKeufXIlc2/eacLqBvQi3K7bczXODu5waocCrFrDo/dpzUWstvGjHCUg8NnFBM2cQEi0/xeZngkOGdnY3l98Q5Lru7DK9CFXbFzkJzOBti4Al3KvXxUb/llr2nXoiWZXd9SIBGdPoX2qwAmd6Tb8d4BlMSXzDHPx2+ZiwpYaC8CrRyJTLvsmgjIPU2GPAtQTS4hfI3bTtRT7l2/oQP+KD8W5KHABhwtJTFiA4ijuP6Kc0IbPjR8MH8O/ygcLGkYYtwqVjl3NrqQXDuBj5BICDx5OJe96W1zndoOBsC2Q9vVmOwZ6kurxikKbmpKDyYonoVjvoEj5LGEYamVp9B72mMlaJNM6C8pDz330dQEJK6gaXoCoYxtqnTPDVICsYGY/LhgwkVis+1FS1HFD8VTC3gghaH/hu/dJwLOnGhuA/gPUVAnm5nYaQYBwZ5KaoqsvOGZAlVlToKSsmkgTrk/xlhOTEhUT+y44pCdjI4f0epvHzSIzHHUfSMwgAwxDcLJMqIyb5jNzP4NtTTlieeMP4cx6bETIuJq3SNwvvB9pXqUeY3iViKMwe4LuyddsjVMDV6vpjRLX9umUSEW4Hamb7ZiEUROaA1b6n8j+5phjdSCsQrMpwJk75jQe8=----ATTACHMENT:----NTEzMTE1MjE4MzIwODYzIDk3MDY1NTc1Mjg3MzI2MjYgMjUwMjA2MzU4Njk1Nzk3Nw==