Skip to content

Commit 69cc1c0

Browse files
committed
Add test cases to AssociativeArrayTest.php
1 parent 064917e commit 69cc1c0

File tree

1 file changed

+126
-5
lines changed

1 file changed

+126
-5
lines changed

tests/AssociativeArrayTest.php

Lines changed: 126 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@
55
use PHPUnit\Framework\TestCase;
66
use NickLai\AssociativeArray;
77

8+
use ArrayAccess;
9+
use ArrayIterator;
10+
use Countable;
11+
use ReflectionClass;
12+
use Traversable;
13+
814
class AssociativeArrayTest extends TestCase
915
{
1016
public function testSelect()
@@ -230,25 +236,140 @@ public function testArrayAccess()
230236
['id' => 1003, 'category' => 'B', 'price' => 10],
231237
]);
232238

239+
$this->assertInstanceOf(ArrayAccess::class, $associativeArray);
240+
233241
$this->assertEquals(
234242
['id' => 1001, 'category' => 'C', 'price' => 10],
235243
$associativeArray[0]
236244
);
245+
246+
$associativeArray[] = ['id' => 1004, 'category' => 'D', 'price' => 50];
247+
248+
$this->assertTrue(isset($associativeArray[3]));
249+
$this->assertEquals(4, count($associativeArray));
250+
$this->assertEquals(1004, $associativeArray[3]['id']);
251+
252+
unset($associativeArray[3]);
253+
254+
$this->assertFalse(isset($associativeArray[3]));
255+
$this->assertEquals(3, count($associativeArray));
237256
}
238257

239-
public function testTraversable()
258+
public function testCountable()
240259
{
241260
$associativeArray = new AssociativeArray([
242261
['id' => 1001, 'category' => 'C', 'price' => 10],
243262
['id' => 1002, 'category' => 'A', 'price' => 25],
244263
['id' => 1003, 'category' => 'B', 'price' => 10],
245264
]);
246265

247-
foreach ($associativeArray as $row) {
248-
$this->assertEquals(['id' => 1001, 'category' => 'C', 'price' => 10], $row);
249-
return;
266+
$this->assertInstanceOf(Countable::class, $associativeArray);
267+
$this->assertCount(3, $associativeArray);
268+
}
269+
270+
public function testTraversable()
271+
{
272+
$data = [
273+
['id' => 1001, 'category' => 'C', 'price' => 10],
274+
['id' => 1002, 'category' => 'A', 'price' => 25],
275+
];
276+
277+
$associativeArray = new AssociativeArray($data);
278+
279+
$this->assertInstanceOf(Traversable::class, $associativeArray);
280+
281+
foreach ($associativeArray as $index => $row) {
282+
$this->assertEquals($data[$index], $row);
250283
}
284+
}
285+
286+
public function testIterable()
287+
{
288+
$data = [
289+
['id' => 1001, 'category' => 'C', 'price' => 10],
290+
['id' => 1002, 'category' => 'A', 'price' => 25],
291+
['id' => 1003, 'category' => 'B', 'price' => 10],
292+
];
293+
294+
$associativeArray = new AssociativeArray($data);
295+
296+
$this->assertInstanceOf(ArrayIterator::class, $associativeArray->getIterator());
297+
$this->assertEquals($data, $associativeArray->getIterator()->getArrayCopy());
298+
}
299+
300+
public function testArrayAccessOffsetExists()
301+
{
302+
$associativeArray = new AssociativeArray([
303+
['id' => 1001, 'category' => 'C', 'price' => 10],
304+
['id' => 1002, 'category' => 'A', 'price' => 25],
305+
['id' => 1003, 'category' => 'B', 'price' => 10],
306+
]);
307+
308+
$this->assertTrue($associativeArray->offsetExists(0));
309+
$this->assertTrue($associativeArray->offsetExists(1));
310+
$this->assertFalse($associativeArray->offsetExists(1000));
311+
}
312+
313+
public function testArrayAccessOffsetGet()
314+
{
315+
$data = [
316+
['id' => 1001, 'category' => 'C', 'price' => 10],
317+
['id' => 1002, 'category' => 'A', 'price' => 25],
318+
['id' => 1003, 'category' => 'B', 'price' => 10],
319+
];
320+
321+
$associativeArray = new AssociativeArray($data);
322+
323+
$this->assertEquals($data[0], $associativeArray->offsetGet(0));
324+
$this->assertEquals($data[1], $associativeArray->offsetGet(1));
325+
$this->assertEquals($data[2], $associativeArray->offsetGet(2));
326+
}
327+
328+
public function testArrayAccessOffsetSet()
329+
{
330+
$data = [
331+
['id' => 1001, 'category' => 'C', 'price' => 10],
332+
['id' => 1002, 'category' => 'A', 'price' => 25],
333+
['id' => 1003, 'category' => 'B', 'price' => 10],
334+
];
335+
336+
$associativeArray = new AssociativeArray($data);
337+
338+
$row = ['id' => 1004, 'category' => 'D', 'price' => 50];
339+
340+
$associativeArray->offsetSet(0, $row);
341+
$this->assertEquals($row, $associativeArray->first());
342+
343+
$associativeArray->offsetSet(null, $row);
344+
$this->assertEquals($row, $associativeArray->last());
345+
}
346+
347+
public function testArrayAccessOffsetUnset()
348+
{
349+
$associativeArray = new AssociativeArray([
350+
['id' => 1001, 'category' => 'C', 'price' => 10],
351+
['id' => 1002, 'category' => 'A', 'price' => 25],
352+
['id' => 1003, 'category' => 'B', 'price' => 10],
353+
]);
354+
355+
$associativeArray->offsetUnset(2);
356+
$this->assertFalse(isset($associativeArray[2]));
357+
}
358+
359+
public function testGetAssociativeRows()
360+
{
361+
$associativeArray = new AssociativeArray;
362+
$class = new ReflectionClass($associativeArray);
363+
$method = $class->getMethod('getAssociativeRows');
364+
$method->setAccessible(true);
365+
366+
$data = [
367+
['id' => 1001, 'category' => 'C', 'price' => 10],
368+
['id' => 1002, 'category' => 'A', 'price' => 25],
369+
['id' => 1003, 'category' => 'B', 'price' => 10],
370+
];
251371

252-
$this->assertEquals(0, 1);
372+
$this->assertSame($data, $method->invokeArgs($associativeArray, [new AssociativeArray($data)]));
373+
$this->assertSame($data, $method->invokeArgs($associativeArray, [$data]));
253374
}
254375
}

0 commit comments

Comments
 (0)