<?php
namespace Tests\Collections;
use ArrayObject;
use Collections\Dictionary;
use InvalidArgumentException;
use OutOfBoundsException;
use stdClass;
/**
* Description of CollectionTest
*
* @author italo
*/
class DictionaryTest extends CollectionsTestCase
{
/**
* @var Dictionary
*/
private $coll;
protected function setUp()
{
$this->coll = new Dictionary();
}
public function testNewInstanceWithArray()
{
$this->assertNotNull(new Dictionary(array(
'key1' => 'value1',
'key2' => array(
'key21' => 'value21',
'key22' => array(
'key221' => 'value221',
)
),
'key3' => 'value3',
'key4' => 'value4'
)));
}
public function testNewInstanceWithTraversable()
{
$traversable = new ArrayObject(array(
'key1' => 'value1',
'key2' => 'value2',
'key3' => 'value3',
'key4' => 'value4'
));
$this->assertNotNull(new Dictionary($traversable));
}
public function testNewInstance()
{
$this->assertNotNull($this->coll);
}
/**
* @expectedException InvalidArgumentException
*/
public function testInvalidElementsToInstanciate()
{
$coll = new Dictionary();
$coll->addAll('string');
}
public function testAddAllWithSomeValues()
{
$arrayList = new Dictionary();
$arrayList->add('key1', 'value1')
->add('key2', 'value2');
$secoundArrayList = new Dictionary();
$secoundArrayList->add('key3', 'value3')
->add('key4', 'value4');
$arrayList->addAll($secoundArrayList);
$this->assertEquals(array(
'key1' => 'value1',
'key2' => 'value2',
'key3' => 'value3',
'key4' => 'value4'
), $arrayList->toArray());
}
public function testAddItem()
{
$this->coll->add('key', 'testing');
$this->assertTrue(is_string((string)$this->coll));
}
/**
* @expectedException \Collections\Exception\KeyException
*/
public function testAddDuplicateKey()
{
$this->coll->add('key', 'testing');
$this->coll->add('key', 'testing2');
}
public function testSetItem()
{
$this->coll->set('key', 'testing');
$this->assertTrue(is_string((string)$this->coll));
}
public function testGetItem()
{
$this->coll->set('keyOne', 'testing');
$this->assertEquals('testing', $this->coll->get('keyOne'));
}
/**
* @expectedException OutOfBoundsException
*/
public function testGetInvalidItem()
{
$this->coll->set('keyOne', 'testing');
$this->coll->get('keyTwo');
}
public function testGetKeys()
{
$this->coll->add('keyOne', 'testing1');
$this->coll->add('keyTwo', 'testing2');
$this->coll->add('keyThree', 'testing3');
$this->assertEquals(array('keyOne', 'keyTwo', 'keyThree'), $this->coll->toKeysArrays());
}
/**
* @expectedException InvalidArgumentException
*/
public function testSetNullKey()
{
$this->coll->set(null, 'testing');
}
public function testTryGetSuccess()
{
$this->coll->add('key', 'testing');
$value = $this->coll->tryGet('key');
$this->assertEquals('testing', $value);
}
public function testTryGetError()
{
$this->coll->add('key', 'testing');
$value = $this->coll->tryGet('key2');
$this->assertNull($value);
}
public function testTryGetDefaultValue()
{
$this->coll->add('key', 'testing');
$value = $this->coll->tryGet('key2', 'testingValue');
$this->assertEquals('testingValue', $value);
}
/**
* @expectedException InvalidArgumentException
*/
public function testRemovingNonExistentEntryReturnsNull()
{
$this->assertEquals(null, $this->coll->remove('testing_does_not_exist'));
}
public function testArrayAccess()
{
$this->coll['keyOne'] = 'one';
$this->coll['keyTwo'] = 'two';
$this->assertEquals($this->coll['keyOne'], 'one');
$this->assertEquals($this->coll['keyTwo'], 'two');
unset($this->coll['keyOne']);
$this->assertEquals($this->coll->count(), 1);
$this->assertTrue(isset($this->coll['keyTwo']));
}
public function testToList()
{
$this->coll->addAll(array(1, 2, 3, 4));
$map = $this->coll->toList();
$this->assertInstanceOf('\Collections\\ArrayList', $map);
}
public function testToArray()
{
$data = [
'key1' => 'value1',
'key2' => 'value2',
'key3' => [
'key3.1' => 'value3.1'
]
];
$this->coll->addAll($data);
$this->assertEquals($data, $this->coll->toArray());
}
public function testSetObjectKey()
{
$class = new stdClass();
$this->coll->set($class, 'testing');
$this->assertEquals($this->coll->get($class), 'testing');
}
}
|