plus-8.x-4.x-dev/tests/src/Unit/ArrayObjectTest.php
tests/src/Unit/ArrayObjectTest.php
<?php
namespace Drupal\Tests\plus\Unit;
use Drupal\Tests\UnitTestCase;
use Drupal\plus\Utility\ArrayObject;
/**
* @coversDefaultClass Drupal\plus\Utility\ArrayObject
*
* @group Utility
*/
class ArrayObjectTest extends UnitTestCase {
/**
* Tests the constructor.
*
* @covers ::__construct
*/
public function testConstruct() {
$array = new ArrayObject();
$this->assertInstanceOf(ArrayObject::class, $array);
}
/**
* Tests the static create method.
*
* @covers ::__get
* @covers ::__set
* @covers ::create
* @covers ::get
* @covers ::offsetGet
* @covers ::offsetSet
* @covers ::set
*/
public function testCreate() {
$original = ['prop' => 123];
$obj = ArrayObject::create($original);
foreach ([1, 2, 3, 4] as $value) {
switch ($value) {
// Test setting by property.
case 1:
$obj->prop = $value;
break;
// Test setting by array index.
case 2:
$obj['prop'] = $value;
break;
// Test setting by method.
case 3:
$obj->set('prop', $value);
break;
// Test setting by reference.
case 4:
$ref =& $obj->prop;
$ref = $value;
break;
}
// Ensure ::get returns the correct value.
$this->assertSame($value, $obj->get('prop'));
// Ensure ::__get returns the correct value.
$this->assertSame($value, $obj->prop);
// Ensure ::offsetGet returns the correct value.
$this->assertSame($value, $obj['prop']);
}
// Ensure the original array has not changed.
$this->assertSame(123, $original['prop']);
}
/**
* Tests the static create method.
*
* @covers ::__get
* @covers ::__set
* @covers ::create
* @covers ::get
* @covers ::offsetGet
* @covers ::offsetSet
* @covers ::set
*/
public function testReference() {
$original = ['prop' => 123];
$obj = ArrayObject::reference($original);
foreach ([1, 2, 3, 4] as $value) {
switch ($value) {
// Test setting by property.
case 1:
$obj->prop = $value;
break;
// Test setting by array index.
case 2:
$obj['prop'] = $value;
break;
// Test setting by method.
case 3:
$obj->set('prop', $value);
break;
// Test setting by reference.
case 4:
$ref =& $obj->prop;
$ref = $value;
break;
}
// Ensure ::get returns the correct value.
$this->assertSame($value, $obj->get('prop'));
// Ensure ::__get returns the correct value.
$this->assertSame($value, $obj->prop);
// Ensure ::offsetGet returns the correct value.
$this->assertSame($value, $obj['prop']);
}
// Ensure the original array has the same value as the last value from loop.
$this->assertSame($value, $original['prop']);
}
/**
* Tests the flatten method.
*
* @covers ::flatten
*/
public function testFlatten() {
$array = ArrayObject::create(['one', ['two'], [['three']], 4]);
$this->assertSame(['one', ['two'], [['three']], 4], $array->value());
$this->assertSame(['one', 'two', 'three', 4], $array->flatten()->value());
}
}
