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: }