ValueMergersTest::lastDataProvider()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 6
dl 0
loc 8
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
namespace Graze\ArrayMerger\Test\Unit;
4
5
use Graze\ArrayMerger\Test\TestCase;
6
use Graze\ArrayMerger\ValueMerger\BothValues;
7
use Graze\ArrayMerger\ValueMerger\FirstNonNullValue;
8
use Graze\ArrayMerger\ValueMerger\FirstValue;
9
use Graze\ArrayMerger\ValueMerger\LastNonNullValue;
10
use Graze\ArrayMerger\ValueMerger\LastValue;
11
use Graze\ArrayMerger\ValueMerger\ProductValue;
12
use Graze\ArrayMerger\ValueMerger\RandomValue;
13
use Graze\ArrayMerger\ValueMerger\SumValue;
14
use Graze\ArrayMerger\ValueMerger\ValueMergerInterface;
15
16
class ValueMergersTest extends TestCase
17
{
18
    /**
19
     * @dataProvider firstDataProvider
20
     * @dataProvider lastDataProvider
21
     * @dataProvider firstNonNullDataProvider
22
     * @dataProvider lastNonNullDataProvider
23
     * @dataProvider sumDataProvider
24
     * @dataProvider productDataProvider
25
     * @dataProvider bothDataProvider
26
     * @dataProvider randomDataProvider
27
     *
28
     * @param ValueMergerInterface $merger
29
     * @param mixed                $left
30
     * @param mixed                $right
31
     * @param mixed                $result
32
     */
33
    public function testMerger(ValueMergerInterface $merger, $left, $right, $result)
34
    {
35
        $this->assertEquals(
36
            $result,
37
            $merger->merge($left, $right),
38
            "Merger: " . get_class($merger) . " expected: " . print_r($result, true)
39
        );
40
    }
41
42
    /**
43
     * @return array
44
     */
45
    public function firstDataProvider()
46
    {
47
        $merger = new FirstValue();
48
        return [
49
            [$merger, "Left", "Right", "Left"],
50
            [$merger, "Left", null, "Left"],
51
            [$merger, null, "Right", null],
52
            [$merger, null, null, null],
53
        ];
54
    }
55
56
    /**
57
     * @return array
58
     */
59
    public function lastDataProvider()
60
    {
61
        $merger = new LastValue();
62
        return [
63
            [$merger, "Left", "Right", "Right"],
64
            [$merger, "Left", null, null],
65
            [$merger, null, "Right", "Right"],
66
            [$merger, null, null, null],
67
        ];
68
    }
69
70
    /**
71
     * @return array
72
     */
73
    public function firstNonNullDataProvider()
74
    {
75
        $merger = new FirstNonNullValue();
76
        return [
77
            [$merger, "Left", "Right", "Left"],
78
            [$merger, "Left", null, "Left"],
79
            [$merger, null, "Right", "Right"],
80
            [$merger, null, null, null],
81
        ];
82
    }
83
84
    /**
85
     * @return array
86
     */
87
    public function lastNonNullDataProvider()
88
    {
89
        $merger = new LastNonNullValue();
90
        return [
91
            [$merger, "Left", "Right", "Right"],
92
            [$merger, "Left", null, "Left"],
93
            [$merger, null, "Right", "Right"],
94
            [$merger, null, null, null],
95
        ];
96
    }
97
98
    /**
99
     * @return array
100
     */
101
    public function sumDataProvider()
102
    {
103
        $merger = new SumValue();
104
        return [
105
            [$merger, 1, 2, 3],
106
            [$merger, 1.5, 2, 3.5],
107
            [$merger, "left", 2, 2], // defaults to last value merger
108
            [new SumValue(new FirstValue()), "left", 2, "left"],
109
        ];
110
    }
111
112
    /**
113
     * @return array
114
     */
115
    public function productDataProvider()
116
    {
117
        $merger = new ProductValue();
118
        return [
119
            [$merger, 1, 2, 2],
120
            [$merger, 1.5, 2, 3],
121
            [$merger, "left", 2, 2], // defaults to last value merger
122
            [new ProductValue(new FirstValue()), "left", 2, "left"],
123
        ];
124
    }
125
126
    /**
127
     * @return array
128
     */
129
    public function bothDataProvider()
130
    {
131
        $merger = new BothValues();
132
        return [
133
            [$merger, "Left", "Right", ["Left", "Right"]],
134
            [$merger, "Left", null, ["Left", null]],
135
            [$merger, null, "Right", [null, "Right"]],
136
            [$merger, null, null, [null, null]],
137
        ];
138
    }
139
140
    /**
141
     * @return array
142
     */
143
    public function randomDataProvider()
144
    {
145
        $merger = new RandomValue(1234);
146
        if (PHP_VERSION_ID >= 70100) {
147
            return [
148
                [$merger, "Left", "Right", "Left"],
149
                [$merger, "Left", null, "Left"],
150
                [$merger, null, "Right", "Right"],
151
            ];
152
        } else {
153
            return [
154
                [$merger, "Left", "Right", "Right"],
155
                [$merger, "Left", null, "Left"],
156
                [$merger, null, "Right", null],
157
            ];
158
        }
159
    }
160
}
161