Skip to content

Commit 5540635

Browse files
committed
Improve test coverage
1 parent e2f4027 commit 5540635

File tree

1 file changed

+163
-4
lines changed

1 file changed

+163
-4
lines changed

test/ArrayFunctionsTest.php

Lines changed: 163 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,178 @@ public function testArrayFlatten() {
3636
}
3737

3838
public function testArrayBlend() {
39-
//@todo: I'm not entirely sure how to test this
39+
// Test blending arrays without specifying keys
40+
$arrays = array(
41+
'fruits' => array('apple', 'banana', 'cherry'),
42+
'vegetables' => array('carrot', 'broccoli', 'spinach'),
43+
'meats' => array('chicken', 'beef', 'pork')
44+
);
45+
46+
$expected = array('apple', 'banana', 'cherry', 'carrot', 'broccoli', 'spinach', 'chicken', 'beef', 'pork');
47+
$this->assertEquals($expected, array_blend($arrays));
48+
49+
// Test blending arrays with specific keys
50+
$keys = array('fruits', 'meats');
51+
$expected = array('apple', 'banana', 'cherry', 'chicken', 'beef', 'pork');
52+
$this->assertEquals($expected, array_blend($arrays, $keys));
53+
54+
// Test with empty arrays
55+
$arrays = array(
56+
'fruits' => array(),
57+
'vegetables' => array('carrot', 'broccoli'),
58+
'empty' => array()
59+
);
60+
61+
$expected = array('carrot', 'broccoli');
62+
$this->assertEquals($expected, array_blend($arrays));
63+
64+
// Test with non-array values (should be skipped)
65+
$arrays = array(
66+
'fruits' => array('apple', 'banana'),
67+
'number' => 42,
68+
'vegetables' => array('carrot')
69+
);
70+
71+
$expected = array('apple', 'banana', 'carrot');
72+
$this->assertEquals($expected, array_blend($arrays));
4073
}
4174

4275
public function testArrayKeyArray() {
43-
76+
// Test with numeric keys
77+
$arrays = array(
78+
array('id' => 1, 'name' => 'John', 'role' => 'Developer'),
79+
array('id' => 2, 'name' => 'Jane', 'role' => 'Designer'),
80+
array('id' => 3, 'name' => 'Bob', 'role' => 'Manager')
81+
);
82+
83+
$expected = array(1, 2, 3);
84+
$this->assertEquals($expected, array_key_array($arrays, 'id'));
85+
86+
// Test with string keys
87+
$expected = array('John', 'Jane', 'Bob');
88+
$this->assertEquals($expected, array_key_array($arrays, 'name'));
89+
90+
// Test with associative array keys
91+
$arrays = array(
92+
'user1' => array('id' => 101, 'name' => 'Alice'),
93+
'user2' => array('id' => 102, 'name' => 'Charlie'),
94+
'user3' => array('id' => 103, 'name' => 'Dave')
95+
);
96+
97+
$expected = array('user1' => 101, 'user2' => 102, 'user3' => 103);
98+
$this->assertEquals($expected, array_key_array($arrays, 'id'));
99+
100+
// Test with mixed content
101+
$arrays = array(
102+
array('id' => 201, 'data' => 'value1'),
103+
array('id' => 202, 'data' => array('nested' => 'value2')),
104+
array('id' => 203, 'data' => 42)
105+
);
106+
107+
$expected = array('value1', array('nested' => 'value2'), 42);
108+
$this->assertEquals($expected, array_key_array($arrays, 'data'));
44109
}
45110

46111
public function testArrayKeysArray() {
47-
112+
// Test with multiple keys
113+
$arrays = array(
114+
array('id' => 1, 'name' => 'John', 'role' => 'Developer', 'age' => 30),
115+
array('id' => 2, 'name' => 'Jane', 'role' => 'Designer', 'age' => 28),
116+
array('id' => 3, 'name' => 'Bob', 'role' => 'Manager', 'age' => 35)
117+
);
118+
119+
$keys = array('id', 'name');
120+
$expected = array(
121+
array('id' => 1, 'name' => 'John'),
122+
array('id' => 2, 'name' => 'Jane'),
123+
array('id' => 3, 'name' => 'Bob')
124+
);
125+
$this->assertEquals($expected, array_keys_array($arrays, $keys));
126+
127+
// Test with a single key (passed as string)
128+
$expected = array(
129+
array('id' => 1),
130+
array('id' => 2),
131+
array('id' => 3)
132+
);
133+
$this->assertEquals($expected, array_keys_array($arrays, 'id'));
134+
135+
// Test with a single key (passed as array)
136+
$this->assertEquals($expected, array_keys_array($arrays, array('id')));
137+
138+
// Test with associative array keys
139+
$arrays = array(
140+
'user1' => array('id' => 101, 'name' => 'Alice', 'dept' => 'Engineering'),
141+
'user2' => array('id' => 102, 'name' => 'Charlie', 'dept' => 'Marketing'),
142+
'user3' => array('id' => 103, 'name' => 'Dave', 'dept' => 'Sales')
143+
);
144+
145+
$keys = array('id', 'dept');
146+
$expected = array(
147+
'user1' => array('id' => 101, 'dept' => 'Engineering'),
148+
'user2' => array('id' => 102, 'dept' => 'Marketing'),
149+
'user3' => array('id' => 103, 'dept' => 'Sales')
150+
);
151+
$this->assertEquals($expected, array_keys_array($arrays, $keys));
48152
}
49153

50154
public function testArrayKeyRefill() {
51-
155+
// Test with missing keys and default empty array fill
156+
$array = array(
157+
'key1' => 'value1',
158+
'key3' => 'value3'
159+
);
160+
161+
$keys = array('key1', 'key2', 'key3', 'key4');
162+
$expected = array(
163+
'key1' => 'value1',
164+
'key2' => array(),
165+
'key3' => 'value3',
166+
'key4' => array()
167+
);
168+
169+
$this->assertEquals($expected, array_key_refill($array, $keys));
170+
171+
// Test with custom fill value (string)
172+
$expected = array(
173+
'key1' => 'value1',
174+
'key2' => 'default',
175+
'key3' => 'value3',
176+
'key4' => 'default'
177+
);
178+
179+
$this->assertEquals($expected, array_key_refill($array, $keys, 'default'));
180+
181+
// Test with custom fill value (number)
182+
$expected = array(
183+
'key1' => 'value1',
184+
'key2' => 0,
185+
'key3' => 'value3',
186+
'key4' => 0
187+
);
188+
189+
$this->assertEquals($expected, array_key_refill($array, $keys, 0));
190+
191+
// Test with custom fill value (array)
192+
$fillArray = array('status' => 'empty');
193+
$expected = array(
194+
'key1' => 'value1',
195+
'key2' => $fillArray,
196+
'key3' => 'value3',
197+
'key4' => $fillArray
198+
);
199+
200+
$this->assertEquals($expected, array_key_refill($array, $keys, $fillArray));
201+
202+
// Test with no missing keys
203+
$array = array(
204+
'a' => 1,
205+
'b' => 2,
206+
'c' => 3
207+
);
208+
209+
$keys = array('a', 'b', 'c');
210+
$this->assertEquals($array, array_key_refill($array, $keys, 'unused'));
52211
}
53212

54213

0 commit comments

Comments
 (0)