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