*
* 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==