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

IterableFlattenTest::testNonScalarKeys()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 30
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 17
nc 2
nop 0
dl 0
loc 30
rs 9.7
c 0
b 0
f 0
1
<?php
2
3
namespace Jasny\Tests;
4
5
use PHPUnit\Framework\TestCase;
6
use function Jasny\iterable_flatten;
7
8
/**
9
 * @covers \Jasny\iterable_flatten
10
 */
11
class IterableFlattenTest extends TestCase
12
{
13
    use ProvideIterablesTrait;
14
    use LazyExecutionIteratorTrait;
15
16
    public function test()
17
    {
18
        $values = [
19
            ['one', 'two'],
20
            ['three', 'four', 'five'],
21
            [],
22
            'six',
23
            ['seven']
24
        ];
25
26
        $iterator = iterable_flatten($values);
27
28
        $result = iterator_to_array($iterator);
29
30
        $expected = ['one', 'two', 'three', 'four', 'five', 'six', 'seven'];
31
        $this->assertEquals($expected, $result);
32
    }
33
34
    public function testKeys()
35
    {
36
        $values = [
37
            ['one' => 'uno', 'two' => 'dos'],
38
            ['three' => 'tres', 'four' => 'cuatro', 'five' => 'cinco'],
39
            [],
40
            'six' => 'seis',
41
            ['seven' => 'sept']
42
        ];
43
44
        $iterator = iterable_flatten($values, true);
45
46
        $result = iterator_to_array($iterator);
47
48
        $expected = ['one' => 'uno', 'two' => 'dos', 'three' => 'tres', 'four' => 'cuatro', 'five' => 'cinco',
49
            'six' => 'seis', 'seven' => 'sept'];
50
        $this->assertEquals($expected, $result);
51
    }
52
53
    public function testNoKeys()
54
    {
55
        $values = [
56
            ['one' => 'uno', 'two' => 'dos'],
57
            ['three' => 'tres', 'four' => 'cuatro', 'five' => 'cinco'],
58
            [],
59
            'six' => 'seis',
60
            ['seven' => 'sept']
61
        ];
62
63
        $iterator = iterable_flatten($values, false);
64
65
        $result = iterator_to_array($iterator);
66
67
        $expected = ['uno', 'dos', 'tres', 'cuatro', 'cinco', 'seis', 'sept'];
68
        $this->assertEquals($expected, $result);
69
    }
70
71
    public function iteratorsProvider()
72
    {
73
        $values = [
74
            new \ArrayIterator(['one', 'two']),
75
            new \ArrayObject(['three', 'four', 'five']),
76
            new \EmptyIterator(),
77
            'six',
78
            ['seven']
79
        ];
80
81
        return $this->provideIterables($values, true);
82
    }
83
84
    /**
85
     * @dataProvider iteratorsProvider
86
     */
87
    public function testIterators($values)
88
    {
89
        $iterator = iterable_flatten($values);
90
        $result = iterator_to_array($iterator);
91
92
        $expected = ['one', 'two', 'three', 'four', 'five', 'six', 'seven'];
93
        $this->assertEquals($expected, $result);
94
    }
95
    
96
    public function testNonScalarKeys()
97
    {
98
        $generator = function ($keys, $values) {
99
            foreach ($keys as $i => $key) {
100
                yield $key => $values[$i];
101
            }
102
        };
103
104
        $values = $generator(
105
            [0, 1, null, (object)[]],
106
            [
107
                $generator(['d', 2.4], ['one', 'two']),
108
                ['d' => 'three'],
109
                'four',
110
                'five'
111
            ]
112
        );
113
114
        $iterator = iterable_flatten($values, true);
115
116
        $resultKeys = [];
117
        $resultValues = [];
118
119
        foreach ($iterator as $key => $value) {
120
            $resultKeys[] = $key;
121
            $resultValues[] = $value;
122
        }
123
124
        $this->assertEquals(['d', 2.4, 'd', null, (object)[]], $resultKeys);
125
        $this->assertEquals(['one', 'two', 'three', 'four', 'five'], $resultValues);
126
    }
127
128
    public function testEmpty()
129
    {
130
        $iterator = iterable_flatten(new \EmptyIterator());
131
132
        $result = iterator_to_array($iterator);
133
134
        $this->assertEquals([], $result);
135
    }
136
137
    /**
138
     * Test that nothing happens when not iterating
139
     */
140
    public function testLazyExecution()
141
    {
142
        $iterator = $this->createLazyExecutionIterator();
143
144
        iterable_flatten($iterator);
145
146
        $this->assertTrue(true, "No warning");
147
    }
148
}
149