123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- <?php
- /*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * 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 <p@tchwork.com>
- */
- 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" => %d
- "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(
- <<<'EOTXT'
- Closure($x) {
- %Ause: {
- $a: 123
- $b: & 123
- }
- file: "%sReflectionCasterTest.php"
- line: "68 to 68"
- }
- EOTXT
- , $var
- );
- }
- public function testFromCallableClosureCaster()
- {
- if (\defined('HHVM_VERSION_ID')) {
- $this->markTestSkipped('Not for HHVM.');
- }
- $var = [
- (new \ReflectionMethod($this, __FUNCTION__))->getClosure($this),
- (new \ReflectionMethod(__CLASS__, 'tearDownAfterClass'))->getClosure(),
- ];
- $this->assertDumpMatchesFormat(
- <<<EOTXT
- array:2 [
- 0 => Symfony\Component\VarDumper\Tests\Caster\ReflectionCasterTest::testFromCallableClosureCaster() {
- this: Symfony\Component\VarDumper\Tests\Caster\ReflectionCasterTest { …}
- file: "%sReflectionCasterTest.php"
- line: "%d to %d"
- }
- 1 => %sTestCase::tearDownAfterClass() {
- file: "%sTestCase.php"
- line: "%d to %d"
- }
- ]
- EOTXT
- , $var
- );
- }
- public function testClosureCasterExcludingVerbosity()
- {
- $var = function &($a = 5) {};
- $this->assertDumpEquals('Closure&($a = 5) { …5}', $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
- );
- }
- 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
- );
- }
- public function testReturnType()
- {
- $f = eval('return function ():int {};');
- $line = __LINE__ - 1;
- $this->assertDumpMatchesFormat(
- <<<EOTXT
- Closure(): int {
- returnType: "int"
- class: "Symfony\Component\VarDumper\Tests\Caster\ReflectionCasterTest"
- this: Symfony\Component\VarDumper\Tests\Caster\ReflectionCasterTest { …}
- file: "%sReflectionCasterTest.php($line) : eval()'d code"
- line: "1 to 1"
- }
- EOTXT
- , $f
- );
- }
- public function testGenerator()
- {
- if (\extension_loaded('xdebug')) {
- $this->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, [$r, $r->getExecutingGenerator()]);
- foreach ($generator as $v) {
- }
- $expectedDump = <<<'EODUMP'
- Generator {
- closed: true
- }
- EODUMP;
- $this->assertDumpMatchesFormat($expectedDump, $generator);
- }
- }
- function reflectionParameterFixture(NotLoadableClass $arg1 = null, $arg2)
- {
- }
|