|
@@ -91,4 +91,86 @@ class ArrayHelperTest extends \PHPUnit_Framework_TestCase
|
|
|
])
|
|
|
);
|
|
|
}
|
|
|
+
|
|
|
+ public function multimapProvider()
|
|
|
+ {
|
|
|
+ return [
|
|
|
+ [
|
|
|
+ ['a' => 1, 'b' => 2, 'c' => 3],
|
|
|
+ function($k, $v) { return [$k => $v]; },
|
|
|
+ ['a' => 1, 'b' => 2, 'c' => 3],
|
|
|
+ ],
|
|
|
+ [
|
|
|
+ ['a' => 1, 'b' => 2, 'c' => 3],
|
|
|
+ function($k, $v) { return [$v => $k]; },
|
|
|
+ [1 => 'a', 2 => 'b', 3 => 'c'],
|
|
|
+ ],
|
|
|
+ [
|
|
|
+ ['a' => 1, 'b' => 2, 'c' => 3],
|
|
|
+ function($k, $v) { return [strtoupper($k) => $v * $v]; },
|
|
|
+ ['A' => 1, 'B' => 4, 'C' => 9],
|
|
|
+ ],
|
|
|
+ [
|
|
|
+ ['a' => 1, 'b' => 2, 'c' => 3],
|
|
|
+ function($k, $v) { return [$k => null]; },
|
|
|
+ ['a' => null, 'b' => null, 'c' => null],
|
|
|
+ ],
|
|
|
+ [
|
|
|
+ ['a' => 1, 'b' => 2, 'b' => 3],
|
|
|
+ function($k, $v) { return [$k => $v]; },
|
|
|
+ ['a' => 1, 'b' => 3],
|
|
|
+ ],
|
|
|
+ [
|
|
|
+ ['a' => 1, 'b' => 2, 'c' => 3],
|
|
|
+ function($k, $v) { return ($v % 2) ? [$k => $v * $v] : null; },
|
|
|
+ ['a' => 1, 'c' => 9],
|
|
|
+ ],
|
|
|
+ [
|
|
|
+ ['a' => 1, 'b' => 2, 'c' => 3],
|
|
|
+ function($k, $v) { return ($v % 2) ? [$k => $v * $v] : []; },
|
|
|
+ ['a' => 1, 'c' => 9],
|
|
|
+ ],
|
|
|
+ [
|
|
|
+ ['a' => 1, 'b' => 2, 'c' => 3],
|
|
|
+ function($k, $v) { return [$k => $v, $k.'^2' => $v * $v]; },
|
|
|
+ ['a' => 1, 'a^2' => 1, 'b' => 2, 'b^2' => 4, 'c' => 3, 'c^2' => 9],
|
|
|
+ ],
|
|
|
+ [
|
|
|
+ ['a' => 1, 'b' => 2, 'c' => 3],
|
|
|
+ function($k, $v) { return [$k => [[$v]], strtoupper($k) => []]; },
|
|
|
+ ['a' => [[1]], 'A' => [], 'b' => [[2]], 'B' => [], 'c' => [[3]], 'C' => []],
|
|
|
+ ],
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * @dataProvider multimapProvider
|
|
|
+ */
|
|
|
+ public function testMultimap($source, $callback, $expected)
|
|
|
+ {
|
|
|
+ $this->assertSame($expected, ArrayHelper::multimap($source, $callback));
|
|
|
+ }
|
|
|
+
|
|
|
+ public function multimapUnexpectedValueProvider()
|
|
|
+ {
|
|
|
+ return [
|
|
|
+ [
|
|
|
+ ['a' => 1, 'b' => 2, 'c' => 3],
|
|
|
+ function($k, $v) { return $v; },
|
|
|
+ ],
|
|
|
+ [
|
|
|
+ ['a' => 1, 'b' => 2, 'c' => 3],
|
|
|
+ function($k, $v) { return 'string'; },
|
|
|
+ ],
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * @dataProvider multimapUnexpectedValueProvider
|
|
|
+ * @expectedException \UnexpectedValueException
|
|
|
+ */
|
|
|
+ public function testMultimapUnexpectedValue($source, $callback)
|
|
|
+ {
|
|
|
+ ArrayHelper::multimap($source, $callback);
|
|
|
+ }
|
|
|
}
|