Failed Conditions
Branch master (01ba0d)
by Arnold
06:58 queued 01:45
created

IterableReverseTest   A

Complexity

Total Complexity 12

Size/Duplication

Total Lines 101
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 38
dl 0
loc 101
rs 10
c 0
b 0
f 0
wmc 12
1
<?php
2
3
namespace Jasny\Tests;
4
5
use PHPUnit\Framework\TestCase;
6
use function Jasny\iterable_reverse;
7
8
/**
9
 * @covers \Jasny\iterable_reverse
10
 */
11
class IterableReverseTest extends TestCase
12
{
13
    use ProvideIterablesTrait;
14
    use LazyExecutionIteratorTrait;
15
16
    public function provider()
17
    {
18
        $tests = $this->provideIterables(range(3, 12), true);
19
20
        foreach ($tests as &$test) {
21
            $test[1] = array_reverse($test[1]);
22
        }
23
24
        return $tests;
25
    }
26
27
    /**
28
     * @dataProvider provider
29
     */
30
    public function test($values, $expected)
31
    {
32
        $iterator = iterable_reverse($values);
33
        $result = iterator_to_array($iterator);
34
35
        $this->assertEquals($expected, $result);
36
    }
37
38
39
    public function preserveKeysProvider()
40
    {
41
        $tests = $this->provideIterables(range(3, 12));
42
43
        foreach ($tests as &$test) {
44
            $test[1] = array_reverse($test[1], true);
45
        }
46
47
        return $tests;
48
    }
49
50
    /**
51
     * @dataProvider preserveKeysProvider
52
     */
53
    public function testPreserveKeys($values, $expected)
54
    {
55
        $iterator = iterable_reverse($values, true);
56
        $result = iterator_to_array($iterator);
57
58
        $this->assertEquals($expected, $result);
59
    }
60
61
    public function testGenerator()
62
    {
63
        $keys = [(object)['a' => 'a'], ['b' => 'b'], null, 'd', 'd'];
64
65
        $loop = function($keys) {
66
            foreach ($keys as $i => $key) {
67
                yield $key => $i + 1;
68
            }
69
        };
70
71
        $generator = $loop($keys);
72
        $iterator = iterable_reverse($generator, true);
73
74
        $resultKeys = [];
75
        $resultValues = [];
76
77
        foreach ($iterator as $key => $value) {
78
            $resultKeys[] = $key;
79
            $resultValues[] = $value;
80
        }
81
82
        $this->assertEquals([5, 4, 3, 2, 1], $resultValues);
83
        $this->assertEquals(array_reverse($keys, false), $resultKeys);
84
    }
85
86
    public function testEmpty()
87
    {
88
        $iterator = iterable_reverse(new \EmptyIterator());
89
        $result = iterator_to_array($iterator);
90
        
91
        $this->assertEquals([], $result);
92
    }
93
94
    public function testEmptyPreserveKeys()
95
    {
96
        $iterator = iterable_reverse(new \EmptyIterator(), true);
97
        $result = iterator_to_array($iterator);
98
99
        $this->assertEquals([], $result);
100
    }
101
102
    /**
103
     * Test that nothing happens when not iterating
104
     */
105
    public function testLazyExecution()
106
    {
107
        $iterator = $this->createLazyExecutionIterator();
108
109
        iterable_reverse($iterator);
110
111
        $this->assertTrue(true, "No warning");
112
    }
113
}
114