Commit 4167a295 by Taylor Otwell

added tests for arr::first.

parent de2eabdf
<?php namespace Laravel;
use Closure;
class Arr {
/**
......@@ -9,14 +11,6 @@ class Arr {
* also be accessed using JavaScript "dot" style notation. Retrieving items nested
* in multiple arrays is supported.
*
* <code>
* // Get the "name" item from the array
* $name = Arr::get(array('name' => 'Fred'), 'name');
*
* // Get the "age" item from the array, or return 25 if it doesn't exist
* $name = Arr::get(array('name' => 'Fred'), 'age', 25);
* </code>
*
* @param array $array
* @param string $key
* @param mixed $default
......@@ -30,7 +24,7 @@ class Arr {
{
if ( ! is_array($array) or ! array_key_exists($segment, $array))
{
return ($default instanceof \Closure) ? call_user_func($default) : $default;
return ($default instanceof Closure) ? call_user_func($default) : $default;
}
$array = $array[$segment];
......@@ -46,11 +40,6 @@ class Arr {
* a variable depth, such as configuration arrays. Like the Arr::get
* method, JavaScript "dot" syntax is supported.
*
* <code>
* // Set an array's "name" item to "Fred"
* Arr::set($array, 'name', 'Fred');
* </code>
*
* @param array $array
* @param string $key
* @param mixed $value
......@@ -80,21 +69,18 @@ class Arr {
/**
* Return the first element in an array which passes a given truth test.
*
* <code>
* // Get the first element in an array that is less than 2
* $value = Arr::first(array(4, 3, 2, 1), function($key, $value) {return $value < 2;});
* </code>
*
* @param array $array
* @param Closure $callback
* @return mixed
*/
public static function first($array, $callback)
public static function first($array, $callback, $default = null)
{
foreach ($array as $key => $value)
{
if (call_user_func($callback, $key, $value)) return $value;
}
return ($default instanceof Closure) ? call_user_func($default) : $default;
}
}
\ No newline at end of file
......@@ -36,6 +36,26 @@ class ArrTest extends PHPUnit_Framework_TestCase {
}
/**
* @dataProvider getArray
*/
public function testFirstMethodReturnsFirstItemPassingTruthTest($array)
{
$array['email2'] = 'taylor@hotmail.com';
$this->assertEquals('taylorotwell@gmail.com', Arr::first($array, function($k, $v) {return substr($v, 0, 3) == 'tay';}));
}
/**
* @dataProvider getArray
*/
public function testFirstMethodReturnsDefaultWhenNoItemExists($array)
{
$this->assertNull(Arr::first($array, function($k, $v) {return $v === 'something';}));
$this->assertEquals('default', Arr::first($array, function($k, $v) {return $v === 'something';}, 'default'));
$this->assertEquals('default', Arr::first($array, function($k, $v) {return $v === 'something';}, function() {return 'default';}));
}
public function getArray()
{
return array(array(
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment