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@17
|
25 private $referenceArray = [
|
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@17
|
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@17
|
51 return [
|
Chris@17
|
52 [
|
Chris@0
|
53 0,
|
Chris@17
|
54 [],
|
Chris@17
|
55 ],
|
Chris@17
|
56 [
|
Chris@0
|
57 Caster::EXCLUDE_PUBLIC,
|
Chris@17
|
58 [
|
Chris@0
|
59 'null' => null,
|
Chris@0
|
60 'empty' => false,
|
Chris@0
|
61 'public' => 'pub',
|
Chris@17
|
62 ],
|
Chris@17
|
63 ],
|
Chris@17
|
64 [
|
Chris@0
|
65 Caster::EXCLUDE_NULL,
|
Chris@17
|
66 [
|
Chris@0
|
67 'null' => null,
|
Chris@17
|
68 ],
|
Chris@17
|
69 ],
|
Chris@17
|
70 [
|
Chris@0
|
71 Caster::EXCLUDE_EMPTY,
|
Chris@17
|
72 [
|
Chris@0
|
73 'null' => null,
|
Chris@0
|
74 'empty' => false,
|
Chris@17
|
75 ],
|
Chris@17
|
76 ],
|
Chris@17
|
77 [
|
Chris@0
|
78 Caster::EXCLUDE_VIRTUAL,
|
Chris@17
|
79 [
|
Chris@0
|
80 "\0~\0virtual" => 'virt',
|
Chris@17
|
81 ],
|
Chris@17
|
82 ],
|
Chris@17
|
83 [
|
Chris@0
|
84 Caster::EXCLUDE_DYNAMIC,
|
Chris@17
|
85 [
|
Chris@0
|
86 "\0+\0dynamic" => 'dyn',
|
Chris@17
|
87 ],
|
Chris@17
|
88 ],
|
Chris@17
|
89 [
|
Chris@0
|
90 Caster::EXCLUDE_PROTECTED,
|
Chris@17
|
91 [
|
Chris@0
|
92 "\0*\0protected" => 'prot',
|
Chris@17
|
93 ],
|
Chris@17
|
94 ],
|
Chris@17
|
95 [
|
Chris@0
|
96 Caster::EXCLUDE_PRIVATE,
|
Chris@17
|
97 [
|
Chris@0
|
98 "\0Foo\0private" => 'priv',
|
Chris@17
|
99 ],
|
Chris@17
|
100 ],
|
Chris@17
|
101 [
|
Chris@0
|
102 Caster::EXCLUDE_VERBOSE,
|
Chris@17
|
103 [
|
Chris@0
|
104 'public' => 'pub',
|
Chris@0
|
105 "\0*\0protected" => 'prot',
|
Chris@17
|
106 ],
|
Chris@17
|
107 ['public', "\0*\0protected"],
|
Chris@17
|
108 ],
|
Chris@17
|
109 [
|
Chris@0
|
110 Caster::EXCLUDE_NOT_IMPORTANT,
|
Chris@17
|
111 [
|
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@17
|
117 ],
|
Chris@17
|
118 ['public', "\0*\0protected"],
|
Chris@17
|
119 ],
|
Chris@17
|
120 [
|
Chris@0
|
121 Caster::EXCLUDE_VIRTUAL | Caster::EXCLUDE_DYNAMIC,
|
Chris@17
|
122 [
|
Chris@0
|
123 "\0~\0virtual" => 'virt',
|
Chris@0
|
124 "\0+\0dynamic" => 'dyn',
|
Chris@17
|
125 ],
|
Chris@17
|
126 ],
|
Chris@17
|
127 [
|
Chris@0
|
128 Caster::EXCLUDE_NOT_IMPORTANT | Caster::EXCLUDE_VERBOSE,
|
Chris@0
|
129 $this->referenceArray,
|
Chris@17
|
130 ['public', "\0*\0protected"],
|
Chris@17
|
131 ],
|
Chris@17
|
132 [
|
Chris@0
|
133 Caster::EXCLUDE_NOT_IMPORTANT | Caster::EXCLUDE_EMPTY,
|
Chris@17
|
134 [
|
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@17
|
141 ],
|
Chris@17
|
142 ['public', 'empty'],
|
Chris@17
|
143 ],
|
Chris@17
|
144 [
|
Chris@0
|
145 Caster::EXCLUDE_VERBOSE | Caster::EXCLUDE_EMPTY | Caster::EXCLUDE_STRICT,
|
Chris@17
|
146 [
|
Chris@0
|
147 'empty' => false,
|
Chris@17
|
148 ],
|
Chris@17
|
149 ['public', 'empty'],
|
Chris@17
|
150 ],
|
Chris@17
|
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 }
|