|  |  |  | <?php
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace yiiunit\framework\base;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use yii\base\Vector;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ListItem
 | 
					
						
							|  |  |  | {
 | 
					
						
							|  |  |  | 	public $data='data';
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class VectorTest extends \yiiunit\TestCase
 | 
					
						
							|  |  |  | {
 | 
					
						
							|  |  |  | 	/**
 | 
					
						
							|  |  |  | 	 * @var Vector
 | 
					
						
							|  |  |  | 	 */
 | 
					
						
							|  |  |  | 	protected $vector;
 | 
					
						
							|  |  |  | 	protected $item1;
 | 
					
						
							|  |  |  | 	protected $item2;
 | 
					
						
							|  |  |  | 	protected $item3;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	protected function setUp()
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		parent::setUp();
 | 
					
						
							|  |  |  | 		$this->vector = new Vector;
 | 
					
						
							|  |  |  | 		$this->item1 = new ListItem;
 | 
					
						
							|  |  |  | 		$this->item2 = new ListItem;
 | 
					
						
							|  |  |  | 		$this->item3 = new ListItem;
 | 
					
						
							|  |  |  | 		$this->vector->add($this->item1);
 | 
					
						
							|  |  |  | 		$this->vector->add($this->item2);
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	protected function tearDown()
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		parent::tearDown();
 | 
					
						
							|  |  |  | 		$this->vector = null;
 | 
					
						
							|  |  |  | 		$this->item1 = null;
 | 
					
						
							|  |  |  | 		$this->item2 = null;
 | 
					
						
							|  |  |  | 		$this->item3 = null;
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public function testConstruct()
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		$a = array(1, 2, 3);
 | 
					
						
							|  |  |  | 		$vector = new Vector($a);
 | 
					
						
							|  |  |  | 		$this->assertEquals(3, $vector->getCount());
 | 
					
						
							|  |  |  | 		$vector2 = new Vector($this->vector);
 | 
					
						
							|  |  |  | 		$this->assertEquals(2, $vector2->getCount());
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public function testItemAt()
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		$a = array(1, 2, null, 4);
 | 
					
						
							|  |  |  | 		$vector = new Vector($a);
 | 
					
						
							|  |  |  | 		$this->assertEquals(1, $vector->itemAt(0));
 | 
					
						
							|  |  |  | 		$this->assertEquals(2, $vector->itemAt(1));
 | 
					
						
							|  |  |  | 		$this->assertNull($vector->itemAt(2));
 | 
					
						
							|  |  |  | 		$this->assertEquals(4, $vector->itemAt(3));
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public function testGetCount()
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		$this->assertEquals(2, $this->vector->getCount());
 | 
					
						
							|  |  |  | 		$this->assertEquals(2, $this->vector->Count);
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public function testAdd()
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		$this->vector->add(null);
 | 
					
						
							|  |  |  | 		$this->vector->add($this->item3);
 | 
					
						
							|  |  |  | 		$this->assertEquals(4, $this->vector->getCount());
 | 
					
						
							|  |  |  | 		$this->assertEquals(3, $this->vector->indexOf($this->item3));
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public function testInsertAt()
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		$this->vector->insertAt(0, $this->item3);
 | 
					
						
							|  |  |  | 		$this->assertEquals(3, $this->vector->getCount());
 | 
					
						
							|  |  |  | 		$this->assertEquals(2, $this->vector->indexOf($this->item2));
 | 
					
						
							|  |  |  | 		$this->assertEquals(0, $this->vector->indexOf($this->item3));
 | 
					
						
							|  |  |  | 		$this->assertEquals(1, $this->vector->indexOf($this->item1));
 | 
					
						
							|  |  |  | 		$this->setExpectedException('yii\base\InvalidParamException');
 | 
					
						
							|  |  |  | 		$this->vector->insertAt(4, $this->item3);
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public function testRemove()
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		$this->vector->remove($this->item1);
 | 
					
						
							|  |  |  | 		$this->assertEquals(1, $this->vector->getCount());
 | 
					
						
							|  |  |  | 		$this->assertEquals(-1, $this->vector->indexOf($this->item1));
 | 
					
						
							|  |  |  | 		$this->assertEquals(0, $this->vector->indexOf($this->item2));
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$this->assertEquals(false, $this->vector->remove($this->item1));
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public function testRemoveAt()
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		$this->vector->add($this->item3);
 | 
					
						
							|  |  |  | 		$this->vector->removeAt(1);
 | 
					
						
							|  |  |  | 		$this->assertEquals(-1, $this->vector->indexOf($this->item2));
 | 
					
						
							|  |  |  | 		$this->assertEquals(1, $this->vector->indexOf($this->item3));
 | 
					
						
							|  |  |  | 		$this->assertEquals(0, $this->vector->indexOf($this->item1));
 | 
					
						
							|  |  |  | 		$this->setExpectedException('yii\base\InvalidParamException');
 | 
					
						
							|  |  |  | 		$this->vector->removeAt(2);
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public function testRemoveAll()
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		$this->vector->add($this->item3);
 | 
					
						
							|  |  |  | 		$this->vector->removeAll();
 | 
					
						
							|  |  |  | 		$this->assertEquals(0, $this->vector->getCount());
 | 
					
						
							|  |  |  | 		$this->assertEquals(-1, $this->vector->indexOf($this->item1));
 | 
					
						
							|  |  |  | 		$this->assertEquals(-1, $this->vector->indexOf($this->item2));
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$this->vector->add($this->item3);
 | 
					
						
							|  |  |  | 		$this->vector->removeAll(true);
 | 
					
						
							|  |  |  | 		$this->assertEquals(0, $this->vector->getCount());
 | 
					
						
							|  |  |  | 		$this->assertEquals(-1, $this->vector->indexOf($this->item1));
 | 
					
						
							|  |  |  | 		$this->assertEquals(-1, $this->vector->indexOf($this->item2));
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public function testHas()
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		$this->assertTrue($this->vector->has($this->item1));
 | 
					
						
							|  |  |  | 		$this->assertTrue($this->vector->has($this->item2));
 | 
					
						
							|  |  |  | 		$this->assertFalse($this->vector->has($this->item3));
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public function testIndexOf()
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		$this->assertEquals(0, $this->vector->indexOf($this->item1));
 | 
					
						
							|  |  |  | 		$this->assertEquals(1, $this->vector->indexOf($this->item2));
 | 
					
						
							|  |  |  | 		$this->assertEquals(-1, $this->vector->indexOf($this->item3));
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public function testFromArray()
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		$array = array($this->item3, $this->item1);
 | 
					
						
							|  |  |  | 		$this->vector->copyFrom($array);
 | 
					
						
							|  |  |  | 		$this->assertTrue(count($array) == 2 && $this->vector[0] === $this->item3 && $this->vector[1] === $this->item1);
 | 
					
						
							|  |  |  | 		$this->setExpectedException('yii\base\InvalidParamException');
 | 
					
						
							|  |  |  | 		$this->vector->copyFrom($this);
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public function testMergeWith()
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		$array = array($this->item3, $this->item1);
 | 
					
						
							|  |  |  | 		$this->vector->mergeWith($array);
 | 
					
						
							|  |  |  | 		$this->assertTrue($this->vector->getCount() == 4 && $this->vector[0] === $this->item1 &&
 | 
					
						
							|  |  |  | 			$this->vector[3] === $this->item1);
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$a = array(1);
 | 
					
						
							|  |  |  | 		$vector = new Vector($a);
 | 
					
						
							|  |  |  | 		$this->vector->mergeWith($vector);
 | 
					
						
							|  |  |  | 		$this->assertTrue($this->vector->getCount() == 5 && $this->vector[0] === $this->item1 &&
 | 
					
						
							|  |  |  | 			$this->vector[3] === $this->item1 && $this->vector[4] === 1);
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$this->setExpectedException('yii\base\InvalidParamException');
 | 
					
						
							|  |  |  | 		$this->vector->mergeWith($this);
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public function testToArray()
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		$array = $this->vector->toArray();
 | 
					
						
							|  |  |  | 		$this->assertTrue(count($array) == 2 && $array[0] === $this->item1 && $array[1] === $this->item2);
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public function testArrayRead()
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		$this->assertTrue($this->vector[0] === $this->item1);
 | 
					
						
							|  |  |  | 		$this->assertTrue($this->vector[1] === $this->item2);
 | 
					
						
							|  |  |  | 		$this->setExpectedException('yii\base\InvalidParamException');
 | 
					
						
							|  |  |  | 		$a = $this->vector[2];
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public function testGetIterator()
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		$n = 0;
 | 
					
						
							|  |  |  | 		$found = 0;
 | 
					
						
							|  |  |  | 		foreach ($this->vector as $index => $item) {
 | 
					
						
							|  |  |  | 			foreach ($this->vector as $a => $b) {
 | 
					
						
							|  |  |  | 				// test of iterator
 | 
					
						
							|  |  |  | 			}
 | 
					
						
							|  |  |  | 			$n++;
 | 
					
						
							|  |  |  | 			if ($index === 0 && $item === $this->item1) {
 | 
					
						
							|  |  |  | 				$found++;
 | 
					
						
							|  |  |  | 			}
 | 
					
						
							|  |  |  | 			if ($index === 1 && $item === $this->item2) {
 | 
					
						
							|  |  |  | 				$found++;
 | 
					
						
							|  |  |  | 			}
 | 
					
						
							|  |  |  | 		}
 | 
					
						
							|  |  |  | 		$this->assertTrue($n == 2 && $found == 2);
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public function testArrayMisc()
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		$this->assertEquals($this->vector->Count, count($this->vector));
 | 
					
						
							|  |  |  | 		$this->assertTrue(isset($this->vector[1]));
 | 
					
						
							|  |  |  | 		$this->assertFalse(isset($this->vector[2]));
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public function testOffsetSetAdd()
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		$vector = new Vector(array(1, 2, 3));
 | 
					
						
							|  |  |  | 		$vector->offsetSet(null, 4);
 | 
					
						
							|  |  |  | 		$this->assertEquals(array(1, 2, 3, 4), $vector->toArray());
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public function testOffsetSetReplace()
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		$vector = new Vector(array(1, 2, 3));
 | 
					
						
							|  |  |  | 		$vector->offsetSet(1, 4);
 | 
					
						
							|  |  |  | 		$this->assertEquals(array(1, 4, 3), $vector->toArray());
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public function testOffsetUnset()
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		$vector = new Vector(array(1, 2, 3));
 | 
					
						
							|  |  |  | 		$vector->offsetUnset(1);
 | 
					
						
							|  |  |  | 		$this->assertEquals(array(1, 3), $vector->toArray());
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public function testIteratorCurrent()
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		$vector = new Vector(array('value1', 'value2'));
 | 
					
						
							|  |  |  | 		$val = $vector->getIterator()->current();
 | 
					
						
							|  |  |  | 		$this->assertEquals('value1', $val);
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | }
 |