Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 /*
|
Chris@0
|
4 * This file is part of the Symfony package.
|
Chris@0
|
5 *
|
Chris@0
|
6 * (c) Fabien Potencier <fabien@symfony.com>
|
Chris@0
|
7 *
|
Chris@0
|
8 * For the full copyright and license information, please view the LICENSE
|
Chris@0
|
9 * file that was distributed with this source code.
|
Chris@0
|
10 */
|
Chris@0
|
11
|
Chris@0
|
12 namespace Symfony\Component\VarDumper\Tests\Caster;
|
Chris@0
|
13
|
Chris@0
|
14 use PHPUnit\Framework\TestCase;
|
Chris@0
|
15 use Symfony\Component\VarDumper\Caster\Caster;
|
Chris@0
|
16 use Symfony\Component\VarDumper\Test\VarDumperTestTrait;
|
Chris@0
|
17
|
Chris@0
|
18 /**
|
Chris@0
|
19 * @author Nicolas Grekas <p@tchwork.com>
|
Chris@0
|
20 */
|
Chris@0
|
21 class CasterTest extends TestCase
|
Chris@0
|
22 {
|
Chris@0
|
23 use VarDumperTestTrait;
|
Chris@0
|
24
|
Chris@0
|
25 private $referenceArray = array(
|
Chris@0
|
26 'null' => null,
|
Chris@0
|
27 'empty' => false,
|
Chris@0
|
28 'public' => 'pub',
|
Chris@0
|
29 "\0~\0virtual" => 'virt',
|
Chris@0
|
30 "\0+\0dynamic" => 'dyn',
|
Chris@0
|
31 "\0*\0protected" => 'prot',
|
Chris@0
|
32 "\0Foo\0private" => 'priv',
|
Chris@0
|
33 );
|
Chris@0
|
34
|
Chris@0
|
35 /**
|
Chris@0
|
36 * @dataProvider provideFilter
|
Chris@0
|
37 */
|
Chris@0
|
38 public function testFilter($filter, $expectedDiff, $listedProperties = null)
|
Chris@0
|
39 {
|
Chris@0
|
40 if (null === $listedProperties) {
|
Chris@0
|
41 $filteredArray = Caster::filter($this->referenceArray, $filter);
|
Chris@0
|
42 } else {
|
Chris@0
|
43 $filteredArray = Caster::filter($this->referenceArray, $filter, $listedProperties);
|
Chris@0
|
44 }
|
Chris@0
|
45
|
Chris@0
|
46 $this->assertSame($expectedDiff, array_diff_assoc($this->referenceArray, $filteredArray));
|
Chris@0
|
47 }
|
Chris@0
|
48
|
Chris@0
|
49 public function provideFilter()
|
Chris@0
|
50 {
|
Chris@0
|
51 return array(
|
Chris@0
|
52 array(
|
Chris@0
|
53 0,
|
Chris@0
|
54 array(),
|
Chris@0
|
55 ),
|
Chris@0
|
56 array(
|
Chris@0
|
57 Caster::EXCLUDE_PUBLIC,
|
Chris@0
|
58 array(
|
Chris@0
|
59 'null' => null,
|
Chris@0
|
60 'empty' => false,
|
Chris@0
|
61 'public' => 'pub',
|
Chris@0
|
62 ),
|
Chris@0
|
63 ),
|
Chris@0
|
64 array(
|
Chris@0
|
65 Caster::EXCLUDE_NULL,
|
Chris@0
|
66 array(
|
Chris@0
|
67 'null' => null,
|
Chris@0
|
68 ),
|
Chris@0
|
69 ),
|
Chris@0
|
70 array(
|
Chris@0
|
71 Caster::EXCLUDE_EMPTY,
|
Chris@0
|
72 array(
|
Chris@0
|
73 'null' => null,
|
Chris@0
|
74 'empty' => false,
|
Chris@0
|
75 ),
|
Chris@0
|
76 ),
|
Chris@0
|
77 array(
|
Chris@0
|
78 Caster::EXCLUDE_VIRTUAL,
|
Chris@0
|
79 array(
|
Chris@0
|
80 "\0~\0virtual" => 'virt',
|
Chris@0
|
81 ),
|
Chris@0
|
82 ),
|
Chris@0
|
83 array(
|
Chris@0
|
84 Caster::EXCLUDE_DYNAMIC,
|
Chris@0
|
85 array(
|
Chris@0
|
86 "\0+\0dynamic" => 'dyn',
|
Chris@0
|
87 ),
|
Chris@0
|
88 ),
|
Chris@0
|
89 array(
|
Chris@0
|
90 Caster::EXCLUDE_PROTECTED,
|
Chris@0
|
91 array(
|
Chris@0
|
92 "\0*\0protected" => 'prot',
|
Chris@0
|
93 ),
|
Chris@0
|
94 ),
|
Chris@0
|
95 array(
|
Chris@0
|
96 Caster::EXCLUDE_PRIVATE,
|
Chris@0
|
97 array(
|
Chris@0
|
98 "\0Foo\0private" => 'priv',
|
Chris@0
|
99 ),
|
Chris@0
|
100 ),
|
Chris@0
|
101 array(
|
Chris@0
|
102 Caster::EXCLUDE_VERBOSE,
|
Chris@0
|
103 array(
|
Chris@0
|
104 'public' => 'pub',
|
Chris@0
|
105 "\0*\0protected" => 'prot',
|
Chris@0
|
106 ),
|
Chris@0
|
107 array('public', "\0*\0protected"),
|
Chris@0
|
108 ),
|
Chris@0
|
109 array(
|
Chris@0
|
110 Caster::EXCLUDE_NOT_IMPORTANT,
|
Chris@0
|
111 array(
|
Chris@0
|
112 'null' => null,
|
Chris@0
|
113 'empty' => false,
|
Chris@0
|
114 "\0~\0virtual" => 'virt',
|
Chris@0
|
115 "\0+\0dynamic" => 'dyn',
|
Chris@0
|
116 "\0Foo\0private" => 'priv',
|
Chris@0
|
117 ),
|
Chris@0
|
118 array('public', "\0*\0protected"),
|
Chris@0
|
119 ),
|
Chris@0
|
120 array(
|
Chris@0
|
121 Caster::EXCLUDE_VIRTUAL | Caster::EXCLUDE_DYNAMIC,
|
Chris@0
|
122 array(
|
Chris@0
|
123 "\0~\0virtual" => 'virt',
|
Chris@0
|
124 "\0+\0dynamic" => 'dyn',
|
Chris@0
|
125 ),
|
Chris@0
|
126 ),
|
Chris@0
|
127 array(
|
Chris@0
|
128 Caster::EXCLUDE_NOT_IMPORTANT | Caster::EXCLUDE_VERBOSE,
|
Chris@0
|
129 $this->referenceArray,
|
Chris@0
|
130 array('public', "\0*\0protected"),
|
Chris@0
|
131 ),
|
Chris@0
|
132 array(
|
Chris@0
|
133 Caster::EXCLUDE_NOT_IMPORTANT | Caster::EXCLUDE_EMPTY,
|
Chris@0
|
134 array(
|
Chris@0
|
135 'null' => null,
|
Chris@0
|
136 'empty' => false,
|
Chris@0
|
137 "\0~\0virtual" => 'virt',
|
Chris@0
|
138 "\0+\0dynamic" => 'dyn',
|
Chris@0
|
139 "\0*\0protected" => 'prot',
|
Chris@0
|
140 "\0Foo\0private" => 'priv',
|
Chris@0
|
141 ),
|
Chris@0
|
142 array('public', 'empty'),
|
Chris@0
|
143 ),
|
Chris@0
|
144 array(
|
Chris@0
|
145 Caster::EXCLUDE_VERBOSE | Caster::EXCLUDE_EMPTY | Caster::EXCLUDE_STRICT,
|
Chris@0
|
146 array(
|
Chris@0
|
147 'empty' => false,
|
Chris@0
|
148 ),
|
Chris@0
|
149 array('public', 'empty'),
|
Chris@0
|
150 ),
|
Chris@0
|
151 );
|
Chris@0
|
152 }
|
Chris@0
|
153
|
Chris@0
|
154 /**
|
Chris@0
|
155 * @requires PHP 7.0
|
Chris@0
|
156 */
|
Chris@0
|
157 public function testAnonymousClass()
|
Chris@0
|
158 {
|
Chris@0
|
159 $c = eval('return new class extends stdClass { private $foo = "foo"; };');
|
Chris@0
|
160
|
Chris@0
|
161 $this->assertDumpMatchesFormat(
|
Chris@0
|
162 <<<'EOTXT'
|
Chris@0
|
163 stdClass@anonymous {
|
Chris@0
|
164 -foo: "foo"
|
Chris@0
|
165 }
|
Chris@0
|
166 EOTXT
|
Chris@0
|
167 , $c
|
Chris@0
|
168 );
|
Chris@0
|
169
|
Chris@0
|
170 $c = eval('return new class { private $foo = "foo"; };');
|
Chris@0
|
171
|
Chris@0
|
172 $this->assertDumpMatchesFormat(
|
Chris@0
|
173 <<<'EOTXT'
|
Chris@0
|
174 @anonymous {
|
Chris@0
|
175 -foo: "foo"
|
Chris@0
|
176 }
|
Chris@0
|
177 EOTXT
|
Chris@0
|
178 , $c
|
Chris@0
|
179 );
|
Chris@0
|
180 }
|
Chris@0
|
181 }
|