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\Caster\Caster; Chris@0: use Symfony\Component\VarDumper\Test\VarDumperTestTrait; Chris@0: Chris@0: /** Chris@0: * @author Nicolas Grekas Chris@0: */ Chris@0: class CasterTest extends TestCase Chris@0: { Chris@0: use VarDumperTestTrait; Chris@0: Chris@17: private $referenceArray = [ Chris@0: 'null' => null, Chris@0: 'empty' => false, Chris@0: 'public' => 'pub', Chris@0: "\0~\0virtual" => 'virt', Chris@0: "\0+\0dynamic" => 'dyn', Chris@0: "\0*\0protected" => 'prot', Chris@0: "\0Foo\0private" => 'priv', Chris@17: ]; Chris@0: Chris@0: /** Chris@0: * @dataProvider provideFilter Chris@0: */ Chris@0: public function testFilter($filter, $expectedDiff, $listedProperties = null) Chris@0: { Chris@0: if (null === $listedProperties) { Chris@0: $filteredArray = Caster::filter($this->referenceArray, $filter); Chris@0: } else { Chris@0: $filteredArray = Caster::filter($this->referenceArray, $filter, $listedProperties); Chris@0: } Chris@0: Chris@0: $this->assertSame($expectedDiff, array_diff_assoc($this->referenceArray, $filteredArray)); Chris@0: } Chris@0: Chris@0: public function provideFilter() Chris@0: { Chris@17: return [ Chris@17: [ Chris@0: 0, Chris@17: [], Chris@17: ], Chris@17: [ Chris@0: Caster::EXCLUDE_PUBLIC, Chris@17: [ Chris@0: 'null' => null, Chris@0: 'empty' => false, Chris@0: 'public' => 'pub', Chris@17: ], Chris@17: ], Chris@17: [ Chris@0: Caster::EXCLUDE_NULL, Chris@17: [ Chris@0: 'null' => null, Chris@17: ], Chris@17: ], Chris@17: [ Chris@0: Caster::EXCLUDE_EMPTY, Chris@17: [ Chris@0: 'null' => null, Chris@0: 'empty' => false, Chris@17: ], Chris@17: ], Chris@17: [ Chris@0: Caster::EXCLUDE_VIRTUAL, Chris@17: [ Chris@0: "\0~\0virtual" => 'virt', Chris@17: ], Chris@17: ], Chris@17: [ Chris@0: Caster::EXCLUDE_DYNAMIC, Chris@17: [ Chris@0: "\0+\0dynamic" => 'dyn', Chris@17: ], Chris@17: ], Chris@17: [ Chris@0: Caster::EXCLUDE_PROTECTED, Chris@17: [ Chris@0: "\0*\0protected" => 'prot', Chris@17: ], Chris@17: ], Chris@17: [ Chris@0: Caster::EXCLUDE_PRIVATE, Chris@17: [ Chris@0: "\0Foo\0private" => 'priv', Chris@17: ], Chris@17: ], Chris@17: [ Chris@0: Caster::EXCLUDE_VERBOSE, Chris@17: [ Chris@0: 'public' => 'pub', Chris@0: "\0*\0protected" => 'prot', Chris@17: ], Chris@17: ['public', "\0*\0protected"], Chris@17: ], Chris@17: [ Chris@0: Caster::EXCLUDE_NOT_IMPORTANT, Chris@17: [ Chris@0: 'null' => null, Chris@0: 'empty' => false, Chris@0: "\0~\0virtual" => 'virt', Chris@0: "\0+\0dynamic" => 'dyn', Chris@0: "\0Foo\0private" => 'priv', Chris@17: ], Chris@17: ['public', "\0*\0protected"], Chris@17: ], Chris@17: [ Chris@0: Caster::EXCLUDE_VIRTUAL | Caster::EXCLUDE_DYNAMIC, Chris@17: [ Chris@0: "\0~\0virtual" => 'virt', Chris@0: "\0+\0dynamic" => 'dyn', Chris@17: ], Chris@17: ], Chris@17: [ Chris@0: Caster::EXCLUDE_NOT_IMPORTANT | Caster::EXCLUDE_VERBOSE, Chris@0: $this->referenceArray, Chris@17: ['public', "\0*\0protected"], Chris@17: ], Chris@17: [ Chris@0: Caster::EXCLUDE_NOT_IMPORTANT | Caster::EXCLUDE_EMPTY, Chris@17: [ Chris@0: 'null' => null, Chris@0: 'empty' => false, Chris@0: "\0~\0virtual" => 'virt', Chris@0: "\0+\0dynamic" => 'dyn', Chris@0: "\0*\0protected" => 'prot', Chris@0: "\0Foo\0private" => 'priv', Chris@17: ], Chris@17: ['public', 'empty'], Chris@17: ], Chris@17: [ Chris@0: Caster::EXCLUDE_VERBOSE | Caster::EXCLUDE_EMPTY | Caster::EXCLUDE_STRICT, Chris@17: [ Chris@0: 'empty' => false, Chris@17: ], Chris@17: ['public', 'empty'], Chris@17: ], Chris@17: ]; Chris@0: } Chris@0: Chris@0: /** Chris@0: * @requires PHP 7.0 Chris@0: */ Chris@0: public function testAnonymousClass() Chris@0: { Chris@0: $c = eval('return new class extends stdClass { private $foo = "foo"; };'); Chris@0: Chris@0: $this->assertDumpMatchesFormat( Chris@0: <<<'EOTXT' Chris@0: stdClass@anonymous { Chris@0: -foo: "foo" Chris@0: } Chris@0: EOTXT Chris@0: , $c Chris@0: ); Chris@0: Chris@0: $c = eval('return new class { private $foo = "foo"; };'); Chris@0: Chris@0: $this->assertDumpMatchesFormat( Chris@0: <<<'EOTXT' Chris@0: @anonymous { Chris@0: -foo: "foo" Chris@0: } Chris@0: EOTXT Chris@0: , $c Chris@0: ); Chris@0: } Chris@0: }