Merge "Title: Refactor JS/CSS page handling to be more sane"
[lhc/web/wiklou.git] / tests / phpunit / includes / libs / ArrayUtilsTest.php
1 <?php
2 /**
3 * Test class for ArrayUtils class
4 *
5 * @group Database
6 */
7 class ArrayUtilsTest extends PHPUnit\Framework\TestCase {
8
9 use MediaWikiCoversValidator;
10
11 private $search;
12
13 /**
14 * @covers ArrayUtils::findLowerBound
15 * @dataProvider provideFindLowerBound
16 */
17 function testFindLowerBound(
18 $valueCallback, $valueCount, $comparisonCallback, $target, $expected
19 ) {
20 $this->assertSame(
21 ArrayUtils::findLowerBound(
22 $valueCallback, $valueCount, $comparisonCallback, $target
23 ), $expected
24 );
25 }
26
27 function provideFindLowerBound() {
28 $indexValueCallback = function ( $size ) {
29 return function ( $val ) use ( $size ) {
30 $this->assertTrue( $val >= 0 );
31 $this->assertTrue( $val < $size );
32 return $val;
33 };
34 };
35 $comparisonCallback = function ( $a, $b ) {
36 return $a - $b;
37 };
38
39 return [
40 [
41 $indexValueCallback( 0 ),
42 0,
43 $comparisonCallback,
44 1,
45 false,
46 ],
47 [
48 $indexValueCallback( 1 ),
49 1,
50 $comparisonCallback,
51 -1,
52 false,
53 ],
54 [
55 $indexValueCallback( 1 ),
56 1,
57 $comparisonCallback,
58 0,
59 0,
60 ],
61 [
62 $indexValueCallback( 1 ),
63 1,
64 $comparisonCallback,
65 1,
66 0,
67 ],
68 [
69 $indexValueCallback( 2 ),
70 2,
71 $comparisonCallback,
72 -1,
73 false,
74 ],
75 [
76 $indexValueCallback( 2 ),
77 2,
78 $comparisonCallback,
79 0,
80 0,
81 ],
82 [
83 $indexValueCallback( 2 ),
84 2,
85 $comparisonCallback,
86 0.5,
87 0,
88 ],
89 [
90 $indexValueCallback( 2 ),
91 2,
92 $comparisonCallback,
93 1,
94 1,
95 ],
96 [
97 $indexValueCallback( 2 ),
98 2,
99 $comparisonCallback,
100 1.5,
101 1,
102 ],
103 [
104 $indexValueCallback( 3 ),
105 3,
106 $comparisonCallback,
107 1,
108 1,
109 ],
110 [
111 $indexValueCallback( 3 ),
112 3,
113 $comparisonCallback,
114 1.5,
115 1,
116 ],
117 [
118 $indexValueCallback( 3 ),
119 3,
120 $comparisonCallback,
121 2,
122 2,
123 ],
124 [
125 $indexValueCallback( 3 ),
126 3,
127 $comparisonCallback,
128 3,
129 2,
130 ],
131 ];
132 }
133
134 /**
135 * @covers ArrayUtils::arrayDiffAssocRecursive
136 * @dataProvider provideArrayDiffAssocRecursive
137 */
138 function testArrayDiffAssocRecursive( $expected ) {
139 $args = func_get_args();
140 array_shift( $args );
141 $this->assertEquals( call_user_func_array(
142 'ArrayUtils::arrayDiffAssocRecursive', $args
143 ), $expected );
144 }
145
146 function provideArrayDiffAssocRecursive() {
147 return [
148 [
149 [],
150 [],
151 [],
152 ],
153 [
154 [],
155 [],
156 [],
157 [],
158 ],
159 [
160 [ 1 ],
161 [ 1 ],
162 [],
163 ],
164 [
165 [ 1 ],
166 [ 1 ],
167 [],
168 [],
169 ],
170 [
171 [],
172 [],
173 [ 1 ],
174 ],
175 [
176 [],
177 [],
178 [ 1 ],
179 [ 2 ],
180 ],
181 [
182 [ '' => 1 ],
183 [ '' => 1 ],
184 [],
185 ],
186 [
187 [],
188 [],
189 [ '' => 1 ],
190 ],
191 [
192 [ 1 ],
193 [ 1 ],
194 [ 2 ],
195 ],
196 [
197 [],
198 [ 1 ],
199 [ 2 ],
200 [ 1 ],
201 ],
202 [
203 [],
204 [ 1 ],
205 [ 1, 2 ],
206 ],
207 [
208 [ 1 => 1 ],
209 [ 1 => 1 ],
210 [ 1 ],
211 ],
212 [
213 [],
214 [ 1 => 1 ],
215 [ 1 ],
216 [ 1 => 1 ],
217 ],
218 [
219 [],
220 [ 1 => 1 ],
221 [ 1, 1, 1 ],
222 ],
223 [
224 [],
225 [ [] ],
226 [],
227 ],
228 [
229 [],
230 [ [ [] ] ],
231 [],
232 ],
233 [
234 [ 1, [ 1 ] ],
235 [ 1, [ 1 ] ],
236 [],
237 ],
238 [
239 [ 1 ],
240 [ 1, [ 1 ] ],
241 [ 2, [ 1 ] ],
242 ],
243 [
244 [],
245 [ 1, [ 1 ] ],
246 [ 2, [ 1 ] ],
247 [ 1, [ 2 ] ],
248 ],
249 [
250 [ 1 ],
251 [ 1, [] ],
252 [ 2 ],
253 ],
254 [
255 [],
256 [ 1, [] ],
257 [ 2 ],
258 [ 1 ],
259 ],
260 [
261 [ 1, [ 1 => 2 ] ],
262 [ 1, [ 1, 2 ] ],
263 [ 2, [ 1 ] ],
264 ],
265 [
266 [ 1 ],
267 [ 1, [ 1, 2 ] ],
268 [ 2, [ 1 ] ],
269 [ 2, [ 1 => 2 ] ],
270 ],
271 [
272 [ 1 => [ 1, 2 ] ],
273 [ 1, [ 1, 2 ] ],
274 [ 1, [ 2 ] ],
275 ],
276 [
277 [ 1 => [ [ 2, 3 ], 2 ] ],
278 [ 1, [ [ 2, 3 ], 2 ] ],
279 [ 1, [ 2 ] ],
280 ],
281 [
282 [ 1 => [ [ 2 ], 2 ] ],
283 [ 1, [ [ 2, 3 ], 2 ] ],
284 [ 1, [ [ 1 => 3 ] ] ],
285 ],
286 [
287 [ 1 => [ 1 => 2 ] ],
288 [ 1, [ [ 2, 3 ], 2 ] ],
289 [ 1, [ [ 1 => 3, 0 => 2 ] ] ],
290 ],
291 [
292 [ 1 => [ 1 => 2 ] ],
293 [ 1, [ [ 2, 3 ], 2 ] ],
294 [ 1, [ [ 1 => 3 ] ] ],
295 [ 1 => [ [ 2 ] ] ],
296 ],
297 [
298 [],
299 [ 1, [ [ 2, 3 ], 2 ] ],
300 [ 1 => [ 1 => 2, 0 => [ 1 => 3, 0 => 2 ] ], 0 => 1 ],
301 ],
302 [
303 [],
304 [ 1, [ [ 2, 3 ], 2 ] ],
305 [ 1 => [ 1 => 2 ] ],
306 [ 1 => [ [ 1 => 3 ] ] ],
307 [ 1 => [ [ 2 ] ] ],
308 [ 1 ],
309 ],
310 ];
311 }
312 }