Skip to content
This repository has been archived by the owner on Jan 31, 2020. It is now read-only.

Commit

Permalink
Merge branch 'hotfix/3838'
Browse files Browse the repository at this point in the history
  • Loading branch information
weierophinney committed Feb 20, 2013
175 parents f7d6cbb + 7e2b798 + 3ed1ead + 87505b6 + c229265 + eb61c8f + efcb00e + 0a0842f + b6d0c88 + 7edee62 + 60ea64c + a08bcca + b40ec3e + 63172ed + 448f428 + 92a516a + 5ecbc99 + a2df21b + 4de87f2 + 7c259ec + a22bdcb + 084ad9f + 9414e5a + 489be93 + cb39e7e + 54a28dc + c9c769e + dda791d + 70d382a + 8bbad0e + 9321185 + 7ab35a6 + b93694e + 3ea7087 + 0fe3d3a + bd5e189 + d1cba17 + 8d75392 + 3fb5b55 + 6cb0ccb + 30aa565 + 8409977 + 8074ba0 + 8f92486 + 94860d1 + 05d33c4 + 425826b + f0e91f0 + e31468f + 7d2af87 + 2e4dc80 + 19d128f + 1b9e4b2 + 1c46483 + fdda3f2 + 595fcd1 + 213395c + 8e514a8 + 2f30186 + bb4ed65 + 132d5b6 + 030ff33 + f2f20f3 + a50e133 + 4c554ee + dbfb1b8 + ccab83f + 00b350f + 78945d0 + f0e5f4b + ceb7d8c + 9e124d1 + 3de5912 + b6a974a + 10a6438 + cb6c1e7 + 18afd6c + 3baf1bd + c800904 + f52dcb8 + 126ccb2 + e7d6206 + e2d24ab + ec1abfc + 290ea90 + 9f4ca1b + edaa760 + c4c0c95 + d21f055 + 5b18029 + e6b97af + 010fb36 + 64c7b8d + 636523e + 4cc2cd6 + e34098a + 16367cd + 943c77f + 8226e5b + 0b47726 + 3cd8a03 + cc4782c + 9c653a6 + 656dbe5 + 9bce1ba + 7dc18ca + 861130d + 2d2ffbd + 4f413a5 + 2e1067a + 1d082e4 + e8aeb79 + b562091 + ff2fdc3 + 4aa72c0 + 1bb67ac + cd015c8 + 5e89910 + 0c21258 + dd54faf + 57f9063 + b88ce2e + af68643 + 06cd3b4 + 2c71b71 + ee02c35 + 9456314 + 5a77a7b + e98a077 + 738f2e6 + cb1e63c + 736df07 + d0a0154 + 990523c + 78687de + a5b6e79 + 6e9dfe9 + e201a1c + d9b45ef + 76222ad + 16d67da + 1ab2258 + b81d711 + ed2e9bc + 61efe82 + f353ea5 + 1f02519 + 58c1fe8 + ed502d9 + 2defba6 + 4885013 + 06a8384 + 17d9eed + 3b21b5d + c62101c + 909ef34 + 13d376a + 8a75367 + 98a3cf5 + 270f2c4 + 3038cfa + 1112202 + c8fb359 + 8d37cd0 + 4d868a7 + 555cb91 + 7ac5858 + 8103f1f + 9fe9c96 + a3ecac6 + 10e77c1 + e0d3e13 + 19ad608 + e0d665c + dadd94b commit df43daf
Show file tree
Hide file tree
Showing 3 changed files with 111 additions and 2 deletions.
15 changes: 13 additions & 2 deletions src/ArrayObject.php
Original file line number Diff line number Diff line change
Expand Up @@ -178,11 +178,22 @@ public function count()
/**
* Exchange the array for another one.
*
* @param array $data
* @param array|ArrayObject $data
* @return array
*/
public function exchangeArray(array $data)
public function exchangeArray($data)
{
if (!is_array($data) && !is_object($data)) {
throw new Exception\InvalidArgumentException('Passed variable is not an array or object, using empty array instead');
}

if (is_object($data) && ($data instanceof ArrayObject || $data instanceof \ArrayObject)) {
$data = $data->getArrayCopy();
}
if (!is_array($data)) {
$data = (array) $data;
}

$storage = $this->storage;

$this->storage = $data;
Expand Down
47 changes: 47 additions & 0 deletions test/ArrayObjectTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,51 @@ public function testExchangeArray()
$this->assertSame(array('bar' => 'baz'), $ar->getArrayCopy());
}

public function testExchangeArrayPhpArrayObject()
{
$ar = new ArrayObject(array('foo' => 'bar'));
$old = $ar->exchangeArray(new \ArrayObject(array('bar' => 'baz')));

$this->assertSame(array('foo' => 'bar'), $old);
$this->assertSame(array('bar' => 'baz'), $ar->getArrayCopy());
}

public function testExchangeArrayStdlibArrayObject()
{
$ar = new ArrayObject(array('foo' => 'bar'));
$old = $ar->exchangeArray(new ArrayObject(array('bar' => 'baz')));

$this->assertSame(array('foo' => 'bar'), $old);
$this->assertSame(array('bar' => 'baz'), $ar->getArrayCopy());
}

public function testExchangeArrayTestAssetIterator()
{
$ar = new ArrayObject();
$ar->exchangeArray(new TestAsset\ArrayObjectIterator(array('foo' => 'bar')));

// make sure it does what php array object does:
$ar2 = new \ArrayObject();
$ar2->exchangeArray(new TestAsset\ArrayObjectIterator(array('foo' => 'bar')));

$this->assertEquals($ar2->getArrayCopy(), $ar->getArrayCopy());
}

public function testExchangeArrayArrayIterator()
{
$ar = new ArrayObject();
$ar->exchangeArray(new \ArrayIterator(array('foo' => 'bar')));

$this->assertEquals(array('foo' => 'bar'), $ar->getArrayCopy());
}

public function testExchangeArrayStringArgumentFail()
{
$this->setExpectedException('InvalidArgumentException');
$ar = new ArrayObject(array('foo' => 'bar'));
$old = $ar->exchangeArray('Bacon');
}

public function testGetArrayCopy()
{
$ar = new ArrayObject(array('foo' => 'bar'));
Expand Down Expand Up @@ -302,6 +347,7 @@ public function testUasort()
if ($a == $b) {
return 0;
}

return ($a < $b) ? -1 : 1;
};
$ar = new ArrayObject(array('a' => 4, 'b' => 8, 'c' => -1, 'd' => -9, 'e' => 2, 'f' => 5, 'g' => 3, 'h' => -4));
Expand All @@ -316,6 +362,7 @@ public function testUksort()
$function = function ($a, $b) {
$a = preg_replace('@^(a|an|the) @', '', $a);
$b = preg_replace('@^(a|an|the) @', '', $b);

return strcasecmp($a, $b);
};

Expand Down
51 changes: 51 additions & 0 deletions test/TestAsset/ArrayObjectIterator.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
<?php
/**
* Zend Framework (http://framework.zend.com/)
*
* @link http://github.com/zendframework/zf2 for the canonical source repository
* @copyright Copyright (c) 2005-2013 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @package Zend_Stdlib
*/

namespace ZendTest\Stdlib\TestAsset;
class ArrayObjectIterator implements \Iterator
{

private $var = array();

public function __construct($array)
{
if (is_array($array)) {
$this->var = $array;
}
}

public function rewind()
{
reset($this->var);
}

public function current()
{
return current($this->var);
}

public function key()
{
return key($this->var);
}

public function next()
{
return next($this->var);
}

public function valid()
{
$key = key($this->var);
$var = ($key !== NULL && $key !== FALSE);

return $var;
}
}

0 comments on commit df43daf

Please sign in to comment.