You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

213 lines
5.7 KiB

<?php
class ListItem
{
public $data='data';
}
class VectorTest extends \yii\test\TestCase
{
protected $vector;
protected $item1, $item2, $item3;
public function setUp()
{
$this->vector=new \yii\base\Vector;
$this->item1=new ListItem;
$this->item2=new ListItem;
$this->item3=new ListItem;
$this->vector->add($this->item1);
$this->vector->add($this->item2);
}
public function tearDown()
{
$this->vector=null;
$this->item1=null;
$this->item2=null;
$this->item3=null;
}
public function testConstruct()
{
$a=array(1,2,3);
$vector=new \yii\base\Vector($a);
$this->assertEquals(3,$vector->getCount());
$vector2=new \yii\base\Vector($this->vector);
$this->assertEquals(2,$vector2->getCount());
}
public function testReadOnly()
{
$vector = new \yii\base\Vector(array(), true);
$this->assertEquals(true, $vector->readOnly, 'List is not read-only');
$vector = new \yii\base\Vector(array(), false);
$this->assertEquals(false, $vector->readOnly, 'List is read-only');
}
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\Exception');
$this->vector->insertAt(4,$this->item3);
}
public function testCanNotInsertWhenReadOnly()
{
$vector = new \yii\base\Vector(array(), true);
$this->setExpectedException('yii\base\Exception');
$vector->insertAt(1, 2);
}
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\Exception');
$this->vector->removeAt(2);
}
public function testCanNotRemoveWhenReadOnly()
{
$vector = new \yii\base\Vector(array(1, 2, 3), true);
$this->setExpectedException('yii\base\Exception');
$vector->removeAt(2);
}
public function testClear()
{
$this->vector->clear();
$this->assertEquals(0,$this->vector->getCount());
$this->assertEquals(-1,$this->vector->indexOf($this->item1));
$this->assertEquals(-1,$this->vector->indexOf($this->item2));
}
public function testContains()
{
$this->assertTrue($this->vector->contains($this->item1));
$this->assertTrue($this->vector->contains($this->item2));
$this->assertFalse($this->vector->contains($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 testCopyFrom()
{
$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\Exception');
$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);
$this->setExpectedException('yii\base\Exception');
$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\Exception');
$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 \yii\base\Vector(array(1, 2, 3));
$vector->offsetSet(null, 4);
$this->assertEquals(array(1, 2, 3, 4), $vector->toArray());
}
public function testOffsetSetReplace()
{
$vector = new \yii\base\Vector(array(1, 2, 3));
$vector->offsetSet(1, 4);
$this->assertEquals(array(1, 4, 3), $vector->toArray());
}
public function testOffsetUnset()
{
$vector = new \yii\base\Vector(array(1, 2, 3));
$vector->offsetUnset(1);
$this->assertEquals(array(1, 3), $vector->toArray());
}
public function testIteratorCurrent()
{
$vector = new \yii\base\Vector(array('value1', 'value2'));
$val = $vector->getIterator()->current();
$this->assertEquals('value1', $val);
}
}