['name' => 'Derp'], 'b' => ['name' => 'Derpina'] ]; $values = [20, 21]; $iterator = new InsertIterator($items, 'age', $values); $result = $iterator->toArray(); $expected = [ 'a' => ['name' => 'Derp', 'age' => 20], 'b' => ['name' => 'Derpina', 'age' => 21] ]; $this->assertSame($expected, $result); } /** * Test insert deep path * * @return void */ public function testInsertDeepPath() { $items = [ 'a' => ['name' => 'Derp', 'a' => ['deep' => ['thing' => 1]]], 'b' => ['name' => 'Derpina', 'a' => ['deep' => ['thing' => 2]]], ]; $values = new \ArrayIterator([20, 21]); $iterator = new InsertIterator($items, 'a.deep.path', $values); $result = $iterator->toArray(); $expected = [ 'a' => ['name' => 'Derp', 'a' => ['deep' => ['thing' => 1, 'path' => 20]]], 'b' => ['name' => 'Derpina', 'a' => ['deep' => ['thing' => 2, 'path' => 21]]], ]; $this->assertSame($expected, $result); } /** * Test that missing properties in the path will skip inserting * * @return void */ public function testInsertDeepPathMissingStep() { $items = [ 'a' => ['name' => 'Derp', 'a' => ['deep' => ['thing' => 1]]], 'b' => ['name' => 'Derpina', 'a' => ['nested' => 2]], ]; $values = [20, 21]; $iterator = new InsertIterator($items, 'a.deep.path', $values); $result = $iterator->toArray(); $expected = [ 'a' => ['name' => 'Derp', 'a' => ['deep' => ['thing' => 1, 'path' => 20]]], 'b' => ['name' => 'Derpina', 'a' => ['nested' => 2]], ]; $this->assertSame($expected, $result); } /** * Tests that the iterator will insert values as long as there still exist * some in the values array * * @return void */ public function testInsertTargetCountBigger() { $items = [ 'a' => ['name' => 'Derp'], 'b' => ['name' => 'Derpina'] ]; $values = [20]; $iterator = new InsertIterator($items, 'age', $values); $result = $iterator->toArray(); $expected = [ 'a' => ['name' => 'Derp', 'age' => 20], 'b' => ['name' => 'Derpina'] ]; $this->assertSame($expected, $result); } /** * Tests that the iterator will insert values as long as there still exist * some in the values array * * @return void */ public function testInsertSourceBigger() { $items = [ 'a' => ['name' => 'Derp'], 'b' => ['name' => 'Derpina'] ]; $values = [20, 21, 23]; $iterator = new InsertIterator($items, 'age', $values); $result = $iterator->toArray(); $expected = [ 'a' => ['name' => 'Derp', 'age' => 20], 'b' => ['name' => 'Derpina', 'age' => 21] ]; $this->assertSame($expected, $result); } /** * Tests the iterator can be rewound * * @return void */ public function testRewind() { $items = [ 'a' => ['name' => 'Derp'], 'b' => ['name' => 'Derpina'], ]; $values = [20, 21]; $iterator = new InsertIterator($items, 'age', $values); $iterator->next(); $this->assertEquals(['name' => 'Derpina', 'age' => 21], $iterator->current()); $iterator->rewind(); $result = $iterator->toArray(); $expected = [ 'a' => ['name' => 'Derp', 'age' => 20], 'b' => ['name' => 'Derpina', 'age' => 21] ]; $this->assertSame($expected, $result); } }