Chris@17
|
1 <?php
|
Chris@17
|
2
|
Chris@17
|
3 /*
|
Chris@17
|
4 * This file is a part of dflydev/dot-access-data.
|
Chris@17
|
5 *
|
Chris@17
|
6 * (c) Dragonfly Development Inc.
|
Chris@17
|
7 *
|
Chris@17
|
8 * For the full copyright and license information, please view the LICENSE
|
Chris@17
|
9 * file that was distributed with this source code.
|
Chris@17
|
10 */
|
Chris@17
|
11
|
Chris@17
|
12 namespace Dflydev\DotAccessData;
|
Chris@17
|
13
|
Chris@17
|
14 class DataTest extends \PHPUnit_Framework_TestCase
|
Chris@17
|
15 {
|
Chris@17
|
16 protected function getSampleData()
|
Chris@17
|
17 {
|
Chris@17
|
18 return array(
|
Chris@17
|
19 'a' => 'A',
|
Chris@17
|
20 'b' => array(
|
Chris@17
|
21 'b' => 'B',
|
Chris@17
|
22 'c' => array('C1', 'C2', 'C3'),
|
Chris@17
|
23 'd' => array(
|
Chris@17
|
24 'd1' => 'D1',
|
Chris@17
|
25 'd2' => 'D2',
|
Chris@17
|
26 'd3' => 'D3',
|
Chris@17
|
27 ),
|
Chris@17
|
28 ),
|
Chris@17
|
29 'c' => array('c1', 'c2', 'c3'),
|
Chris@17
|
30 'f' => array(
|
Chris@17
|
31 'g' => array(
|
Chris@17
|
32 'h' => 'FGH',
|
Chris@17
|
33 ),
|
Chris@17
|
34 ),
|
Chris@17
|
35 'h' => array(
|
Chris@17
|
36 'i' => 'I',
|
Chris@17
|
37 ),
|
Chris@17
|
38 'i' => array(
|
Chris@17
|
39 'j' => 'J',
|
Chris@17
|
40 ),
|
Chris@17
|
41 );
|
Chris@17
|
42 }
|
Chris@17
|
43
|
Chris@17
|
44 protected function runSampleDataTests(DataInterface $data)
|
Chris@17
|
45 {
|
Chris@17
|
46 $this->assertEquals('A', $data->get('a'));
|
Chris@17
|
47 $this->assertEquals('B', $data->get('b.b'));
|
Chris@17
|
48 $this->assertEquals(array('C1', 'C2', 'C3'), $data->get('b.c'));
|
Chris@17
|
49 $this->assertEquals('D3', $data->get('b.d.d3'));
|
Chris@17
|
50 $this->assertEquals(array('c1', 'c2', 'c3'), $data->get('c'));
|
Chris@17
|
51 $this->assertNull($data->get('foo'), 'Foo should not exist');
|
Chris@17
|
52 $this->assertNull($data->get('f.g.h.i'));
|
Chris@17
|
53 $this->assertEquals($data->get('foo', 'default-value-1'), 'default-value-1', 'Return default value');
|
Chris@17
|
54 $this->assertEquals($data->get('f.g.h.i', 'default-value-2'), 'default-value-2');
|
Chris@17
|
55 }
|
Chris@17
|
56
|
Chris@17
|
57 public function testAppend()
|
Chris@17
|
58 {
|
Chris@17
|
59 $data = new Data($this->getSampleData());
|
Chris@17
|
60
|
Chris@17
|
61 $data->append('a', 'B');
|
Chris@17
|
62 $data->append('c', 'c4');
|
Chris@17
|
63 $data->append('b.c', 'C4');
|
Chris@17
|
64 $data->append('b.d.d3', 'D3b');
|
Chris@17
|
65 $data->append('b.d.d4', 'D');
|
Chris@17
|
66 $data->append('e', 'E');
|
Chris@17
|
67 $data->append('f.a', 'b');
|
Chris@17
|
68 $data->append('h.i', 'I2');
|
Chris@17
|
69 $data->append('i.k.l', 'L');
|
Chris@17
|
70
|
Chris@17
|
71 $this->assertEquals(array('A', 'B'), $data->get('a'));
|
Chris@17
|
72 $this->assertEquals(array('c1', 'c2', 'c3', 'c4'), $data->get('c'));
|
Chris@17
|
73 $this->assertEquals(array('C1', 'C2', 'C3', 'C4'), $data->get('b.c'));
|
Chris@17
|
74 $this->assertEquals(array('D3', 'D3b'), $data->get('b.d.d3'));
|
Chris@17
|
75 $this->assertEquals(array('D'), $data->get('b.d.d4'));
|
Chris@17
|
76 $this->assertEquals(array('E'), $data->get('e'));
|
Chris@17
|
77 $this->assertEquals(array('b'), $data->get('f.a'));
|
Chris@17
|
78 $this->assertEquals(array('I', 'I2'), $data->get('h.i'));
|
Chris@17
|
79 $this->assertEquals(array('L'), $data->get('i.k.l'));
|
Chris@17
|
80
|
Chris@17
|
81 $this->setExpectedException('RuntimeException');
|
Chris@17
|
82
|
Chris@17
|
83 $data->append('', 'broken');
|
Chris@17
|
84 }
|
Chris@17
|
85
|
Chris@17
|
86 public function testSet()
|
Chris@17
|
87 {
|
Chris@17
|
88 $data = new Data;
|
Chris@17
|
89
|
Chris@17
|
90 $this->assertNull($data->get('a'));
|
Chris@17
|
91 $this->assertNull($data->get('b.c'));
|
Chris@17
|
92 $this->assertNull($data->get('d.e'));
|
Chris@17
|
93
|
Chris@17
|
94 $data->set('a', 'A');
|
Chris@17
|
95 $data->set('b.c', 'C');
|
Chris@17
|
96 $data->set('d.e', array('f' => 'F', 'g' => 'G',));
|
Chris@17
|
97
|
Chris@17
|
98 $this->assertEquals('A', $data->get('a'));
|
Chris@17
|
99 $this->assertEquals(array('c' => 'C'), $data->get('b'));
|
Chris@17
|
100 $this->assertEquals('C', $data->get('b.c'));
|
Chris@17
|
101 $this->assertEquals('F', $data->get('d.e.f'));
|
Chris@17
|
102 $this->assertEquals(array('e' => array('f' => 'F', 'g' => 'G',)), $data->get('d'));
|
Chris@17
|
103
|
Chris@17
|
104 $this->setExpectedException('RuntimeException');
|
Chris@17
|
105
|
Chris@17
|
106 $data->set('', 'broken');
|
Chris@17
|
107 }
|
Chris@17
|
108
|
Chris@17
|
109 public function testSetClobberStringInPath()
|
Chris@17
|
110 {
|
Chris@17
|
111 $data = new Data;
|
Chris@17
|
112
|
Chris@17
|
113 $data->set('a.b.c', 'Should not be able to write to a.b.c.d.e');
|
Chris@17
|
114
|
Chris@17
|
115 $this->setExpectedException('RuntimeException');
|
Chris@17
|
116
|
Chris@17
|
117 $data->set('a.b.c.d.e', 'broken');
|
Chris@17
|
118 }
|
Chris@17
|
119
|
Chris@17
|
120 public function testRemove()
|
Chris@17
|
121 {
|
Chris@17
|
122 $data = new Data($this->getSampleData());
|
Chris@17
|
123
|
Chris@17
|
124 $data->remove('a');
|
Chris@17
|
125 $data->remove('b.c');
|
Chris@17
|
126 $data->remove('b.d.d3');
|
Chris@17
|
127 $data->remove('d');
|
Chris@17
|
128 $data->remove('d.e.f');
|
Chris@17
|
129 $data->remove('empty.path');
|
Chris@17
|
130
|
Chris@17
|
131 $this->assertNull($data->get('a'));
|
Chris@17
|
132 $this->assertNull($data->get('b.c'));
|
Chris@17
|
133 $this->assertNull($data->get('b.d.d3'));
|
Chris@17
|
134 $this->assertNull(null);
|
Chris@17
|
135 $this->assertEquals('D2', $data->get('b.d.d2'));
|
Chris@17
|
136
|
Chris@17
|
137 $this->setExpectedException('RuntimeException');
|
Chris@17
|
138
|
Chris@17
|
139 $data->remove('', 'broken');
|
Chris@17
|
140 }
|
Chris@17
|
141
|
Chris@17
|
142 public function testGet()
|
Chris@17
|
143 {
|
Chris@17
|
144 $data = new Data($this->getSampleData());
|
Chris@17
|
145
|
Chris@17
|
146 $this->runSampleDataTests($data);
|
Chris@17
|
147 }
|
Chris@17
|
148
|
Chris@17
|
149 public function testHas()
|
Chris@17
|
150 {
|
Chris@17
|
151 $data = new Data($this->getSampleData());
|
Chris@17
|
152
|
Chris@17
|
153 foreach (
|
Chris@17
|
154 array('a', 'i', 'b.d', 'f.g.h', 'h.i', 'b.d.d1') as $existentKey
|
Chris@17
|
155 ) {
|
Chris@17
|
156 $this->assertTrue($data->has($existentKey));
|
Chris@17
|
157 }
|
Chris@17
|
158
|
Chris@17
|
159 foreach (
|
Chris@17
|
160 array('p', 'b.b1', 'b.c.C1', 'h.i.I', 'b.d.d1.D1') as $notExistentKey
|
Chris@17
|
161 ) {
|
Chris@17
|
162 $this->assertFalse($data->has($notExistentKey));
|
Chris@17
|
163 }
|
Chris@17
|
164 }
|
Chris@17
|
165
|
Chris@17
|
166 public function testGetData()
|
Chris@17
|
167 {
|
Chris@17
|
168 $wrappedData = new Data(array(
|
Chris@17
|
169 'wrapped' => array(
|
Chris@17
|
170 'sampleData' => $this->getSampleData()
|
Chris@17
|
171 ),
|
Chris@17
|
172 ));
|
Chris@17
|
173
|
Chris@17
|
174 $data = $wrappedData->getData('wrapped.sampleData');
|
Chris@17
|
175
|
Chris@17
|
176 $this->runSampleDataTests($data);
|
Chris@17
|
177
|
Chris@17
|
178 $this->setExpectedException('RuntimeException');
|
Chris@17
|
179
|
Chris@17
|
180 $data = $wrappedData->getData('wrapped.sampleData.a');
|
Chris@17
|
181 }
|
Chris@17
|
182
|
Chris@17
|
183 public function testImport()
|
Chris@17
|
184 {
|
Chris@17
|
185 $data = new Data();
|
Chris@17
|
186 $data->import($this->getSampleData());
|
Chris@17
|
187
|
Chris@17
|
188 $this->runSampleDataTests($data);
|
Chris@17
|
189 }
|
Chris@17
|
190
|
Chris@17
|
191 public function testImportData()
|
Chris@17
|
192 {
|
Chris@17
|
193 $data = new Data();
|
Chris@17
|
194 $data->importData(new Data($this->getSampleData()));
|
Chris@17
|
195
|
Chris@17
|
196 $this->runSampleDataTests($data);
|
Chris@17
|
197 }
|
Chris@17
|
198
|
Chris@17
|
199 public function testExport()
|
Chris@17
|
200 {
|
Chris@17
|
201 $data = new Data($this->getSampleData());
|
Chris@17
|
202
|
Chris@17
|
203 $this->assertEquals($this->getSampleData(), $data->export());
|
Chris@17
|
204 }
|
Chris@17
|
205 }
|