annotate vendor/dflydev/dot-access-data/tests/Dflydev/DotAccessData/DataTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
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 }