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\Test\VarDumperTestTrait;
|
Chris@0
|
16
|
Chris@0
|
17 /**
|
Chris@0
|
18 * @author Grégoire Pineau <lyrixx@lyrixx.info>
|
Chris@0
|
19 */
|
Chris@0
|
20 class SplCasterTest extends TestCase
|
Chris@0
|
21 {
|
Chris@0
|
22 use VarDumperTestTrait;
|
Chris@0
|
23
|
Chris@0
|
24 public function getCastFileInfoTests()
|
Chris@0
|
25 {
|
Chris@17
|
26 return [
|
Chris@17
|
27 [__FILE__, <<<'EOTXT'
|
Chris@0
|
28 SplFileInfo {
|
Chris@0
|
29 %Apath: "%sCaster"
|
Chris@0
|
30 filename: "SplCasterTest.php"
|
Chris@0
|
31 basename: "SplCasterTest.php"
|
Chris@0
|
32 pathname: "%sSplCasterTest.php"
|
Chris@0
|
33 extension: "php"
|
Chris@0
|
34 realPath: "%sSplCasterTest.php"
|
Chris@0
|
35 aTime: %s-%s-%d %d:%d:%d
|
Chris@0
|
36 mTime: %s-%s-%d %d:%d:%d
|
Chris@0
|
37 cTime: %s-%s-%d %d:%d:%d
|
Chris@17
|
38 inode: %i
|
Chris@0
|
39 size: %d
|
Chris@0
|
40 perms: 0%d
|
Chris@0
|
41 owner: %d
|
Chris@0
|
42 group: %d
|
Chris@0
|
43 type: "file"
|
Chris@0
|
44 writable: true
|
Chris@0
|
45 readable: true
|
Chris@0
|
46 executable: false
|
Chris@0
|
47 file: true
|
Chris@0
|
48 dir: false
|
Chris@0
|
49 link: false
|
Chris@0
|
50 %A}
|
Chris@0
|
51 EOTXT
|
Chris@17
|
52 ],
|
Chris@17
|
53 ['https://google.com/about', <<<'EOTXT'
|
Chris@0
|
54 SplFileInfo {
|
Chris@0
|
55 %Apath: "https://google.com"
|
Chris@0
|
56 filename: "about"
|
Chris@0
|
57 basename: "about"
|
Chris@0
|
58 pathname: "https://google.com/about"
|
Chris@0
|
59 extension: ""
|
Chris@0
|
60 realPath: false
|
Chris@0
|
61 %A}
|
Chris@0
|
62 EOTXT
|
Chris@17
|
63 ],
|
Chris@17
|
64 ];
|
Chris@0
|
65 }
|
Chris@0
|
66
|
Chris@0
|
67 /** @dataProvider getCastFileInfoTests */
|
Chris@0
|
68 public function testCastFileInfo($file, $dump)
|
Chris@0
|
69 {
|
Chris@0
|
70 $this->assertDumpMatchesFormat($dump, new \SplFileInfo($file));
|
Chris@0
|
71 }
|
Chris@0
|
72
|
Chris@0
|
73 public function testCastFileObject()
|
Chris@0
|
74 {
|
Chris@0
|
75 $var = new \SplFileObject(__FILE__);
|
Chris@0
|
76 $var->setFlags(\SplFileObject::DROP_NEW_LINE | \SplFileObject::SKIP_EMPTY);
|
Chris@0
|
77 $dump = <<<'EOTXT'
|
Chris@0
|
78 SplFileObject {
|
Chris@0
|
79 %Apath: "%sCaster"
|
Chris@0
|
80 filename: "SplCasterTest.php"
|
Chris@0
|
81 basename: "SplCasterTest.php"
|
Chris@0
|
82 pathname: "%sSplCasterTest.php"
|
Chris@0
|
83 extension: "php"
|
Chris@0
|
84 realPath: "%sSplCasterTest.php"
|
Chris@0
|
85 aTime: %s-%s-%d %d:%d:%d
|
Chris@0
|
86 mTime: %s-%s-%d %d:%d:%d
|
Chris@0
|
87 cTime: %s-%s-%d %d:%d:%d
|
Chris@17
|
88 inode: %i
|
Chris@0
|
89 size: %d
|
Chris@0
|
90 perms: 0%d
|
Chris@0
|
91 owner: %d
|
Chris@0
|
92 group: %d
|
Chris@0
|
93 type: "file"
|
Chris@0
|
94 writable: true
|
Chris@0
|
95 readable: true
|
Chris@0
|
96 executable: false
|
Chris@0
|
97 file: true
|
Chris@0
|
98 dir: false
|
Chris@0
|
99 link: false
|
Chris@0
|
100 %AcsvControl: array:%d [
|
Chris@0
|
101 0 => ","
|
Chris@0
|
102 1 => """
|
Chris@0
|
103 %A]
|
Chris@0
|
104 flags: DROP_NEW_LINE|SKIP_EMPTY
|
Chris@0
|
105 maxLineLen: 0
|
Chris@0
|
106 fstat: array:26 [
|
Chris@0
|
107 "dev" => %d
|
Chris@17
|
108 "ino" => %i
|
Chris@0
|
109 "nlink" => %d
|
Chris@0
|
110 "rdev" => 0
|
Chris@0
|
111 "blksize" => %i
|
Chris@0
|
112 "blocks" => %i
|
Chris@0
|
113 …20
|
Chris@0
|
114 ]
|
Chris@0
|
115 eof: false
|
Chris@0
|
116 key: 0
|
Chris@0
|
117 }
|
Chris@0
|
118 EOTXT;
|
Chris@0
|
119 $this->assertDumpMatchesFormat($dump, $var);
|
Chris@0
|
120 }
|
Chris@0
|
121
|
Chris@0
|
122 /**
|
Chris@0
|
123 * @dataProvider provideCastSplDoublyLinkedList
|
Chris@0
|
124 */
|
Chris@0
|
125 public function testCastSplDoublyLinkedList($modeValue, $modeDump)
|
Chris@0
|
126 {
|
Chris@0
|
127 $var = new \SplDoublyLinkedList();
|
Chris@0
|
128 $var->setIteratorMode($modeValue);
|
Chris@0
|
129 $dump = <<<EOTXT
|
Chris@0
|
130 SplDoublyLinkedList {
|
Chris@0
|
131 %Amode: $modeDump
|
Chris@0
|
132 dllist: []
|
Chris@0
|
133 }
|
Chris@0
|
134 EOTXT;
|
Chris@0
|
135 $this->assertDumpMatchesFormat($dump, $var);
|
Chris@0
|
136 }
|
Chris@0
|
137
|
Chris@0
|
138 public function provideCastSplDoublyLinkedList()
|
Chris@0
|
139 {
|
Chris@17
|
140 return [
|
Chris@17
|
141 [\SplDoublyLinkedList::IT_MODE_FIFO, 'IT_MODE_FIFO | IT_MODE_KEEP'],
|
Chris@17
|
142 [\SplDoublyLinkedList::IT_MODE_LIFO, 'IT_MODE_LIFO | IT_MODE_KEEP'],
|
Chris@17
|
143 [\SplDoublyLinkedList::IT_MODE_FIFO | \SplDoublyLinkedList::IT_MODE_DELETE, 'IT_MODE_FIFO | IT_MODE_DELETE'],
|
Chris@17
|
144 [\SplDoublyLinkedList::IT_MODE_LIFO | \SplDoublyLinkedList::IT_MODE_DELETE, 'IT_MODE_LIFO | IT_MODE_DELETE'],
|
Chris@17
|
145 ];
|
Chris@0
|
146 }
|
Chris@16
|
147
|
Chris@16
|
148 public function testCastObjectStorageIsntModified()
|
Chris@16
|
149 {
|
Chris@16
|
150 $var = new \SplObjectStorage();
|
Chris@16
|
151 $var->attach(new \stdClass());
|
Chris@16
|
152 $var->rewind();
|
Chris@16
|
153 $current = $var->current();
|
Chris@16
|
154
|
Chris@16
|
155 $this->assertDumpMatchesFormat('%A', $var);
|
Chris@16
|
156 $this->assertSame($current, $var->current());
|
Chris@16
|
157 }
|
Chris@16
|
158
|
Chris@16
|
159 public function testCastObjectStorageDumpsInfo()
|
Chris@16
|
160 {
|
Chris@16
|
161 $var = new \SplObjectStorage();
|
Chris@16
|
162 $var->attach(new \stdClass(), new \DateTime());
|
Chris@16
|
163
|
Chris@16
|
164 $this->assertDumpMatchesFormat('%ADateTime%A', $var);
|
Chris@16
|
165 }
|
Chris@16
|
166
|
Chris@16
|
167 public function testCastArrayObject()
|
Chris@16
|
168 {
|
Chris@16
|
169 if (\defined('HHVM_VERSION')) {
|
Chris@16
|
170 $this->markTestSkipped('HHVM as different internal details.');
|
Chris@16
|
171 }
|
Chris@17
|
172 $var = new \ArrayObject([123]);
|
Chris@16
|
173 $var->foo = 234;
|
Chris@16
|
174
|
Chris@16
|
175 $expected = <<<EOTXT
|
Chris@16
|
176 ArrayObject {
|
Chris@16
|
177 +"foo": 234
|
Chris@16
|
178 flag::STD_PROP_LIST: false
|
Chris@16
|
179 flag::ARRAY_AS_PROPS: false
|
Chris@16
|
180 iteratorClass: "ArrayIterator"
|
Chris@16
|
181 storage: array:1 [
|
Chris@16
|
182 0 => 123
|
Chris@16
|
183 ]
|
Chris@0
|
184 }
|
Chris@16
|
185 EOTXT;
|
Chris@16
|
186 $this->assertDumpEquals($expected, $var);
|
Chris@16
|
187 }
|
Chris@16
|
188
|
Chris@16
|
189 public function testArrayIterator()
|
Chris@16
|
190 {
|
Chris@16
|
191 if (\defined('HHVM_VERSION')) {
|
Chris@16
|
192 $this->markTestSkipped('HHVM as different internal details.');
|
Chris@16
|
193 }
|
Chris@17
|
194 $var = new MyArrayIterator([234]);
|
Chris@16
|
195
|
Chris@16
|
196 $expected = <<<EOTXT
|
Chris@16
|
197 Symfony\Component\VarDumper\Tests\Caster\MyArrayIterator {
|
Chris@16
|
198 -foo: 123
|
Chris@16
|
199 flag::STD_PROP_LIST: false
|
Chris@16
|
200 flag::ARRAY_AS_PROPS: false
|
Chris@16
|
201 storage: array:1 [
|
Chris@16
|
202 0 => 234
|
Chris@16
|
203 ]
|
Chris@16
|
204 }
|
Chris@16
|
205 EOTXT;
|
Chris@16
|
206 $this->assertDumpEquals($expected, $var);
|
Chris@16
|
207 }
|
Chris@16
|
208 }
|
Chris@16
|
209
|
Chris@16
|
210 class MyArrayIterator extends \ArrayIterator
|
Chris@16
|
211 {
|
Chris@16
|
212 private $foo = 123;
|
Chris@16
|
213 }
|