Skip to content

Commit 926726f

Browse files
committed
Rework CallbackIterator test to use data providers
1 parent f3d1ddc commit 926726f

File tree

1 file changed

+56
-38
lines changed

1 file changed

+56
-38
lines changed

tests/Model/CallbackIteratorTest.php

Lines changed: 56 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -3,68 +3,86 @@
33
namespace MongoDB\Tests\Model;
44

55
use ArrayIterator;
6+
use Generator;
7+
use Iterator;
8+
use IteratorAggregate;
69
use MongoDB\Model\CallbackIterator;
710
use MongoDB\Tests\TestCase;
811

9-
use function array_keys;
1012
use function iterator_to_array;
11-
use function strrev;
1213

1314
class CallbackIteratorTest extends TestCase
1415
{
15-
public function testArrayIteration(): void
16+
/** @dataProvider provideTests */
17+
public function testIteration($expected, $source, $callback): void
1618
{
17-
$expectedKey = 0;
18-
19-
$original = [1, 2, 3];
20-
2119
$callbackIterator = new CallbackIterator(
22-
new ArrayIterator($original),
23-
function ($value, $key) use (&$expectedKey) {
24-
$this->assertSame($expectedKey, $key);
25-
$expectedKey++;
26-
27-
return $value * 2;
28-
}
20+
$source,
21+
$callback
2922
);
3023

31-
$this->assertSame([2, 4, 6], iterator_to_array($callbackIterator));
24+
$this->assertEquals($expected, iterator_to_array($callbackIterator));
3225
}
3326

34-
public function testHashIteration(): void
27+
public static function provideTests(): Generator
3528
{
36-
$expectedKey = 0;
29+
$listIterator = new ArrayIterator([1, 2, 3]);
30+
$hashIterator = new ArrayIterator(['a' => 1, 'b' => 2, 'c' => 3]);
3731

38-
$original = ['a' => 1, 'b' => 2, 'c' => 3];
39-
$expectedKeys = array_keys($original);
32+
$iteratorAggregate = new class ($listIterator) implements IteratorAggregate
33+
{
34+
private $iterator;
4035

41-
$callbackIterator = new CallbackIterator(
42-
new ArrayIterator($original),
43-
function ($value, $key) use (&$expectedKey, $expectedKeys) {
44-
$this->assertSame($expectedKeys[$expectedKey], $key);
45-
$expectedKey++;
36+
public function __construct(Iterator $iterator)
37+
{
38+
$this->iterator = $iterator;
39+
}
4640

47-
return $value * 2;
41+
public function getIterator(): Iterator
42+
{
43+
return $this->iterator;
4844
}
49-
);
45+
};
5046

51-
$this->assertSame(['a' => 2, 'b' => 4, 'c' => 6], iterator_to_array($callbackIterator));
52-
}
47+
yield 'List with closure' => [
48+
'expected' => [2, 4, 6],
49+
'source' => $listIterator,
50+
'callback' => function ($value, $key) use ($listIterator) {
51+
self::assertSame($listIterator->key(), $key);
5352

54-
public function testWithCallable(): void
55-
{
56-
$original = ['foo', 'bar', 'baz'];
53+
return $value * 2;
54+
},
55+
];
5756

58-
$callbackIterator = new CallbackIterator(
59-
new ArrayIterator($original),
60-
[self::class, 'reverseValue']
61-
);
57+
yield 'List with callable' => [
58+
'expected' => [2, 4, 6],
59+
'source' => $listIterator,
60+
'callback' => [self::class, 'doubleValue'],
61+
];
62+
63+
yield 'Hash with closure' => [
64+
'expected' => ['a' => 2, 'b' => 4, 'c' => 6],
65+
'source' => $hashIterator,
66+
'callback' => function ($value, $key) use ($hashIterator) {
67+
self::assertSame($hashIterator->key(), $key);
6268

63-
$this->assertSame(['oof', 'rab', 'zab'], iterator_to_array($callbackIterator));
69+
return $value * 2;
70+
},
71+
];
72+
73+
yield 'IteratorAggregate with closure' => [
74+
'expected' => [2, 4, 6],
75+
'source' => $iteratorAggregate,
76+
'callback' => function ($value, $key) use ($listIterator) {
77+
self::assertSame($listIterator->key(), $key);
78+
79+
return $value * 2;
80+
},
81+
];
6482
}
6583

66-
public static function reverseValue($value, $key)
84+
public static function doubleValue($value, $key)
6785
{
68-
return strrev($value);
86+
return $value * 2;
6987
}
7088
}

0 commit comments

Comments
 (0)