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