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