Skip to content

Commit 64f0a1c

Browse files
committed
Merge remote-tracking branch 'origin/master'
2 parents 0e65566 + 261c0f2 commit 64f0a1c

3 files changed

Lines changed: 214 additions & 0 deletions

File tree

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ php:
55
- 7.1
66
- 7.2
77
- 7.3
8+
- 7.4
89

910
dist: xenial
1011

src/ArrayReader.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,14 @@ public function findChronos(string $key, Chronos $default = null)
283283
*/
284284
public function find(string $path, $default = null)
285285
{
286+
if (array_key_exists($path, $this->data)) {
287+
return $this->data[$path] ?? $default;
288+
}
289+
290+
if (strpos($path, '.') === false) {
291+
return $default;
292+
}
293+
286294
$pathKeys = explode('.', $path);
287295

288296
$arrayCopyOrValue = $this->data;

tests/ArrayReaderTest.php

Lines changed: 205 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,109 @@
1111
*/
1212
class ArrayReaderTest extends TestCase
1313
{
14+
/**
15+
* Test.
16+
*
17+
* @dataProvider providerGetInt
18+
*
19+
* @param mixed $data The data
20+
* @param string $key The lookup key
21+
* @param mixed $default The default value
22+
* @param mixed $expected The expected value
23+
*
24+
* @return void
25+
*/
26+
public function testGetInt($data, string $key, $default, $expected)
27+
{
28+
$reader = new ArrayReader($data);
29+
static::assertSame($expected, $reader->getInt($key, $default));
30+
}
31+
32+
/**
33+
* Test.
34+
*
35+
* @dataProvider providerGetIntError
36+
*
37+
* @param mixed $data The data
38+
* @param string $key The lookup key
39+
* @param mixed $default The default value
40+
*
41+
* @return void
42+
*/
43+
public function testGetIntError($data, string $key, $default)
44+
{
45+
$reader = new ArrayReader($data);
46+
47+
$this->expectException(InvalidArgumentException::class);
48+
49+
$reader->getInt($key, $default);
50+
}
51+
52+
/**
53+
* Test.
54+
*
55+
* @dataProvider providerFindInt
56+
*
57+
* @param mixed $data The data
58+
* @param string $key The lookup key
59+
* @param mixed $default The default value
60+
* @param mixed $expected The expected value
61+
*
62+
* @return void
63+
*/
64+
public function testFindInt($data, string $key, $default, $expected)
65+
{
66+
$reader = new ArrayReader($data);
67+
static::assertSame($expected, $reader->findInt($key, $default));
68+
}
69+
70+
/**
71+
* Provider.
72+
*
73+
* @return array[] The test data
74+
*/
75+
public function providerGetInt(): array
76+
{
77+
return [
78+
[[0, 1, 2, 3], 0, null, 0],
79+
[[0, 1, 2, 3], 1, null, 1],
80+
[[0, 1, 2, 3], 2, null, 2],
81+
[[0, 1, 2, 3], 3, null, 3],
82+
];
83+
}
84+
85+
/**
86+
* Provider.
87+
*
88+
* @return array[] The test data
89+
*/
90+
public function providerGetIntError(): array
91+
{
92+
return [
93+
[[0, 1, 2, 3], 4, null],
94+
[[0, 1, 2, 3, null], 4, null],
95+
[[0, 1, 2, null, 4], 3, null],
96+
];
97+
}
98+
99+
/**
100+
* Provider.
101+
*
102+
* @return array[] The test data
103+
*/
104+
public function providerFindInt(): array
105+
{
106+
return [
107+
[[0, 1, 2, 3], 0, null, 0],
108+
[[0, 1, 2, 3], 1, null, 1],
109+
[[0, 1, 2, 3], 2, null, 2],
110+
[[0, 1, 2, 3], 3, null, 3],
111+
[[0, 1, 2, 3], 4, null, null],
112+
[[0, 1, 2, 3, null], 4, null, null],
113+
[[0, 1, 2, null, 4], 3, null, null],
114+
];
115+
}
116+
14117
/**
15118
* Test.
16119
*
@@ -115,4 +218,106 @@ public function providerFindString(): array
115218
[['key' => ['key2' => 'value']], 'key.nope', 'default', 'default'],
116219
];
117220
}
221+
222+
/**
223+
* Test.
224+
*
225+
* @dataProvider providerGetArray
226+
*
227+
* @param mixed $data The data
228+
* @param string $key The lookup key
229+
* @param mixed $default The default value
230+
* @param mixed $expected The expected value
231+
*
232+
* @return void
233+
*/
234+
public function testGetArray($data, string $key, $default, $expected)
235+
{
236+
$reader = new ArrayReader($data);
237+
static::assertSame($expected, $reader->getArray($key, $default));
238+
}
239+
240+
/**
241+
* Provider.
242+
*
243+
* @return array[] The test data
244+
*/
245+
public function providerGetArray(): array
246+
{
247+
return [
248+
[[[1, 2, 3, 4], [2, 3, 4, 5, 6]], 0, null, [1, 2, 3, 4]],
249+
[[[1, 2, 3, 4], [2, 3, 4, 5, 6]], 1, null, [2, 3, 4, 5, 6]],
250+
[[['key' => 'value'], ['key2' => 'value2']], 0, null, ['key' => 'value']],
251+
[[['key' => 'value'], ['key2' => 'value2']], 1, null, ['key2' => 'value2']],
252+
];
253+
}
254+
255+
/**
256+
* Test.
257+
*
258+
* @dataProvider providerGetArrayError
259+
*
260+
* @param mixed $data The data
261+
* @param string $key The lookup key
262+
* @param mixed $default The default value
263+
*
264+
* @return void
265+
*/
266+
public function testGetArrayError($data, string $key, $default)
267+
{
268+
$reader = new ArrayReader($data);
269+
270+
$this->expectException(InvalidArgumentException::class);
271+
272+
$reader->getArray($key, $default);
273+
}
274+
275+
/**
276+
* Provider.
277+
*
278+
* @return array[] The test data
279+
*/
280+
public function providerGetArrayError(): array
281+
{
282+
return [
283+
[[[1, 2, 3, 4], [2, 3, 4, 5, 6]], 2, null],
284+
[[['key' => 'value'], ['key2' => 'value2']], 2, null],
285+
];
286+
}
287+
288+
/**
289+
* Test.
290+
*
291+
* @dataProvider providerFindArray
292+
*
293+
* @param mixed $data The data
294+
* @param string $key The lookup key
295+
* @param mixed $default The default value
296+
* @param mixed $expected The expected value
297+
*
298+
* @return void
299+
*/
300+
public function testFindArray($data, string $key, $default, $expected)
301+
{
302+
$reader = new ArrayReader($data);
303+
static::assertSame($expected, $reader->findArray($key, $default));
304+
}
305+
306+
/**
307+
* Provider.
308+
*
309+
* @return array[] The test data
310+
*/
311+
public function providerFindArray(): array
312+
{
313+
return [
314+
[[[1, 2, 3, 4], [2, 3, 4, 5, 6]], 0, null, [1, 2, 3, 4]],
315+
[[[1, 2, 3, 4], [2, 3, 4, 5, 6]], 1, null, [2, 3, 4, 5, 6]],
316+
[[[1, 2, 3, 4], [2, 3, 4, 5, 6]], 2, [], []],
317+
[[[1, 2, 3, 4], [2, 3, 4, 5, 6]], 2, null, null],
318+
[[['key' => 'value'], ['key2' => 'value2']], 0, null, ['key' => 'value']],
319+
[[['key' => 'value'], ['key2' => 'value2']], 1, null, ['key2' => 'value2']],
320+
[[['key' => 'value'], ['key2' => 'value2']], 2, null, null],
321+
];
322+
}
118323
}

0 commit comments

Comments
 (0)