353 lines
13 KiB
PHP
353 lines
13 KiB
PHP
<?php
|
|
|
|
/**
|
|
* This file is part of the Propel package.
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*
|
|
* @license MIT License
|
|
*/
|
|
|
|
require_once 'tools/helpers/bookstore/BookstoreTestBase.php';
|
|
|
|
/**
|
|
* Test class for PropelCollection.
|
|
*
|
|
* @author Francois Zaninotto
|
|
* @version $Id: PropelCollectionTest.php 1348 2009-12-03 21:49:00Z francois $
|
|
* @package runtime.collection
|
|
*/
|
|
class PropelCollectionTest extends BookstoreTestBase
|
|
{
|
|
public function testArrayAccess()
|
|
{
|
|
$data = array('bar1', 'bar2', 'bar3');
|
|
$col = new PropelCollection($data);
|
|
$this->assertEquals('bar1', $col[0], 'PropelCollection allows access via $foo[$index]');
|
|
$this->assertEquals('bar2', $col[1], 'PropelCollection allows access via $foo[$index]');
|
|
$this->assertEquals('bar3', $col[2], 'PropelCollection allows access via $foo[$index]');
|
|
}
|
|
|
|
public function testGetData()
|
|
{
|
|
$col = new PropelCollection();
|
|
$this->assertEquals(array(), $col->getData(), 'getData() returns an empty array for empty collections');
|
|
$data = array('bar1', 'bar2', 'bar3');
|
|
$col = new PropelCollection($data);
|
|
$this->assertEquals($data, $col->getData(), 'getData() returns the collection data');
|
|
$col[0] = 'bar4';
|
|
$this->assertEquals('bar1', $data[0], 'getData() returns a copy of the collection data');
|
|
}
|
|
|
|
public function testSetData()
|
|
{
|
|
$col = new PropelCollection();
|
|
$col->setData(array());
|
|
$this->assertEquals(array(), $col->getArrayCopy(), 'setData() can set data to an empty array');
|
|
|
|
$data = array('bar1', 'bar2', 'bar3');
|
|
$col = new PropelCollection();
|
|
$col->setData($data);
|
|
$this->assertEquals($data, $col->getArrayCopy(), 'setData() sets the collection data');
|
|
}
|
|
|
|
public function testGetPosition()
|
|
{
|
|
$col = new PropelCollection();
|
|
$this->assertEquals(0, $col->getPosition(), 'getPosition() returns 0 on an empty collection');
|
|
$data = array('bar1', 'bar2', 'bar3');
|
|
$col = new PropelCollection($data);
|
|
$expectedPositions = array(0, 1, 2);
|
|
foreach ($col as $element) {
|
|
$this->assertEquals(array_shift($expectedPositions), $col->getPosition(), 'getPosition() returns the current position');
|
|
$this->assertEquals($element, $col->getCurrent(), 'getPosition() does not change the current position');
|
|
}
|
|
}
|
|
|
|
public function testGetFirst()
|
|
{
|
|
$col = new PropelCollection();
|
|
$this->assertNull($col->getFirst(), 'getFirst() returns null on an empty collection');
|
|
$data = array('bar1', 'bar2', 'bar3');
|
|
$col = new PropelCollection($data);
|
|
$this->assertEquals('bar1', $col->getFirst(), 'getFirst() returns value of the first element in the collection');
|
|
}
|
|
|
|
public function testIsFirst()
|
|
{
|
|
$col = new PropelCollection();
|
|
$this->assertTrue($col->isFirst(), 'isFirst() returns true on an empty collection');
|
|
$data = array('bar1', 'bar2', 'bar3');
|
|
$col = new PropelCollection($data);
|
|
$expectedRes = array(true, false, false);
|
|
foreach ($col as $element) {
|
|
$this->assertEquals(array_shift($expectedRes), $col->isFirst(), 'isFirst() returns true only for the first element');
|
|
$this->assertEquals($element, $col->getCurrent(), 'isFirst() does not change the current position');
|
|
}
|
|
}
|
|
|
|
public function testGetPrevious()
|
|
{
|
|
$col = new PropelCollection();
|
|
$this->assertNull($col->getPrevious(), 'getPrevious() returns null on an empty collection');
|
|
$data = array('bar1', 'bar2', 'bar3');
|
|
$col = new PropelCollection($data);
|
|
$this->assertNull($col->getPrevious(), 'getPrevious() returns null when the internal pointer is at the beginning of the list');
|
|
$col->getNext();
|
|
$this->assertEquals('bar1', $col->getPrevious(), 'getPrevious() returns the previous element');
|
|
$this->assertEquals('bar1', $col->getCurrent(), 'getPrevious() decrements the internal pointer');
|
|
}
|
|
|
|
public function testGetCurrent()
|
|
{
|
|
$col = new PropelCollection();
|
|
$this->assertNull($col->getCurrent(), 'getCurrent() returns null on an empty collection');
|
|
$data = array('bar1', 'bar2', 'bar3');
|
|
$col = new PropelCollection($data);
|
|
$this->assertEquals('bar1', $col->getCurrent(), 'getCurrent() returns the value of the first element when the internal pointer is at the beginning of the list');
|
|
foreach ($col as $key => $value) {
|
|
$this->assertEquals($value, $col->getCurrent(), 'getCurrent() returns the value of the current element in the collection');
|
|
}
|
|
}
|
|
|
|
public function testGetNext()
|
|
{
|
|
$col = new PropelCollection();
|
|
$this->assertNull($col->getNext(), 'getNext() returns null on an empty collection');
|
|
$data = array('bar1', 'bar2', 'bar3');
|
|
$col = new PropelCollection($data);
|
|
$this->assertEquals('bar2', $col->getNext(), 'getNext() returns the second element when the internal pointer is at the beginning of the list');
|
|
$this->assertEquals('bar2', $col->getCurrent(), 'getNext() increments the internal pointer');
|
|
$col->getNext();
|
|
$this->assertNull($col->getNext(), 'getNext() returns null when the internal pointer is at the end of the list');
|
|
}
|
|
|
|
public function testGetLast()
|
|
{
|
|
$col = new PropelCollection();
|
|
$this->assertNull($col->getLast(), 'getLast() returns null on an empty collection');
|
|
$data = array('bar1', 'bar2', 'bar3');
|
|
$col = new PropelCollection($data);
|
|
$this->assertEquals('bar3', $col->getLast(), 'getLast() returns the last element');
|
|
$this->assertEquals('bar3', $col->getCurrent(), 'getLast() moves the internal pointer to the last element');
|
|
}
|
|
|
|
public function testIsLAst()
|
|
{
|
|
$col = new PropelCollection();
|
|
$this->assertTrue($col->isLast(), 'isLast() returns true on an empty collection');
|
|
$data = array('bar1', 'bar2', 'bar3');
|
|
$col = new PropelCollection($data);
|
|
$expectedRes = array(false, false, true);
|
|
foreach ($col as $element) {
|
|
$this->assertEquals(array_shift($expectedRes), $col->isLast(), 'isLast() returns true only for the last element');
|
|
$this->assertEquals($element, $col->getCurrent(), 'isLast() does not change the current position');
|
|
}
|
|
}
|
|
|
|
public function testIsEmpty()
|
|
{
|
|
$col = new PropelCollection();
|
|
$this->assertTrue($col->isEmpty(), 'isEmpty() returns true on an empty collection');
|
|
$data = array('bar1', 'bar2', 'bar3');
|
|
$col = new PropelCollection($data);
|
|
$this->assertFalse($col->isEmpty(), 'isEmpty() returns false on a non empty collection');
|
|
}
|
|
|
|
public function testIsOdd()
|
|
{
|
|
$col = new PropelCollection();
|
|
$this->assertFalse($col->isOdd(), 'isOdd() returns false on an empty collection');
|
|
$data = array('bar1', 'bar2', 'bar3');
|
|
$col = new PropelCollection();
|
|
$col->setData($data);
|
|
foreach ($col as $key => $value) {
|
|
$this->assertEquals((boolean) ($key % 2), $col->isOdd(), 'isOdd() returns true only when the key is odd');
|
|
}
|
|
}
|
|
|
|
public function testIsEven()
|
|
{
|
|
$col = new PropelCollection();
|
|
$this->assertTrue($col->isEven(), 'isEven() returns true on an empty collection');
|
|
$data = array('bar1', 'bar2', 'bar3');
|
|
$col = new PropelCollection();
|
|
$col->setData($data);
|
|
foreach ($col as $key => $value) {
|
|
$this->assertEquals(!(boolean) ($key % 2), $col->isEven(), 'isEven() returns true only when the key is even');
|
|
}
|
|
}
|
|
|
|
public function testGet()
|
|
{
|
|
$col = new PropelCollection(array('foo', 'bar'));
|
|
$this->assertEquals('foo', $col->get(0), 'get() returns an element from its key');
|
|
}
|
|
|
|
/**
|
|
* @expectedException PropelException
|
|
*/
|
|
public function testGetUnknownOffset()
|
|
{
|
|
$col = new PropelCollection();
|
|
$bar = $col->get('foo');
|
|
}
|
|
|
|
public function testPop()
|
|
{
|
|
$col = new PropelCollection();
|
|
$this->assertNull($col->pop(), 'pop() returns null on an empty collection');
|
|
$data = array('bar1', 'bar2', 'bar3');
|
|
$col = new PropelCollection($data);
|
|
$this->assertEquals('bar3', $col->pop(), 'pop() returns the last element of the collection');
|
|
$this->assertEquals(array('bar1', 'bar2'), $col->getData(), 'pop() removes the last element of the collection');
|
|
}
|
|
|
|
public function testShift()
|
|
{
|
|
$col = new PropelCollection();
|
|
$this->assertNull($col->shift(), 'shift() returns null on an empty collection');
|
|
$data = array('bar1', 'bar2', 'bar3');
|
|
$col = new PropelCollection($data);
|
|
$this->assertEquals('bar1', $col->shift(), 'shift() returns the first element of the collection');
|
|
$this->assertEquals(array('bar2', 'bar3'), $col->getData(), 'shift() removes the first element of the collection');
|
|
}
|
|
|
|
public function testPrepend()
|
|
{
|
|
$col = new PropelCollection();
|
|
$this->assertEquals(1, $col->prepend('a'), 'prepend() returns 1 on an empty collection');
|
|
$data = array('bar1', 'bar2', 'bar3');
|
|
$col = new PropelCollection($data);
|
|
$this->assertEquals(4, $col->prepend('bar4'), 'prepend() returns the new number of elements in the collection when adding a variable');
|
|
$this->assertEquals(array('bar4', 'bar1', 'bar2', 'bar3'), $col->getData(), 'prepend() adds new element to the beginning of the collection');
|
|
}
|
|
|
|
public function testSet()
|
|
{
|
|
$col = new PropelCollection();
|
|
$col->set(4, 'bar');
|
|
$this->assertEquals(array(4 => 'bar'), $col->getData(), 'set() adds an element to the collection with a key');
|
|
|
|
$col = new PropelCollection();
|
|
$col->set(null, 'foo');
|
|
$col->set(null, 'bar');
|
|
$this->assertEquals(array('foo', 'bar'), $col->getData(), 'set() adds an element to the collection without a key');
|
|
}
|
|
|
|
public function testRemove()
|
|
{
|
|
$col = new PropelCollection();
|
|
$col[0] = 'bar';
|
|
$col[1] = 'baz';
|
|
$col->remove(1);
|
|
$this->assertEquals(array('bar'), $col->getData(), 'remove() removes an element from its key');
|
|
}
|
|
|
|
/**
|
|
* @expectedException PropelException
|
|
*/
|
|
public function testRemoveUnknownOffset()
|
|
{
|
|
$col = new PropelCollection();
|
|
$col->remove(2);
|
|
}
|
|
|
|
public function testClear()
|
|
{
|
|
$col = new PropelCollection();
|
|
$col->clear();
|
|
$this->assertEquals(array(), $col->getData(), 'clear() empties the collection');
|
|
$data = array('bar1', 'bar2', 'bar3');
|
|
$col = new PropelCollection($data);
|
|
$col->clear();
|
|
$this->assertEquals(array(), $col->getData(), 'clear() empties the collection');
|
|
}
|
|
|
|
public function testContains()
|
|
{
|
|
$col = new PropelCollection();
|
|
$this->assertFalse($col->contains('foo_1'), 'contains() returns false on an empty collection');
|
|
$data = array('bar1', 'bar2', 'bar3');
|
|
$col = new PropelCollection($data);
|
|
$this->assertTrue($col->contains('bar1'), 'contains() returns true when the key exists');
|
|
$this->assertFalse($col->contains('bar4'), 'contains() returns false when the key does not exist');
|
|
}
|
|
|
|
public function testSearch()
|
|
{
|
|
$col = new PropelCollection();
|
|
$this->assertFalse($col->search('bar1'), 'search() returns false on an empty collection');
|
|
$data = array('bar1', 'bar2', 'bar3');
|
|
$col = new PropelCollection($data);
|
|
$this->assertEquals(1, $col->search('bar2'), 'search() returns the key when the element exists');
|
|
$this->assertFalse($col->search('bar4'), 'search() returns false when the element does not exist');
|
|
}
|
|
|
|
public function testSerializable()
|
|
{
|
|
$data = array('bar1', 'bar2', 'bar3');
|
|
$col = new PropelCollection($data);
|
|
$col->setModel('Foo');
|
|
$serializedCol = serialize($col);
|
|
|
|
$col2 = unserialize($serializedCol);
|
|
$this->assertEquals($col, $col2, 'PropelCollection is serializable');
|
|
}
|
|
|
|
public function testGetIterator()
|
|
{
|
|
$data = array('bar1', 'bar2', 'bar3');
|
|
$col = new PropelCollection($data);
|
|
$it1 = $col->getIterator();
|
|
$it2 = $col->getIterator();
|
|
$this->assertNotSame($it1, $it2, 'getIterator() returns always a new iterator');
|
|
}
|
|
|
|
public function testGetInternalIterator()
|
|
{
|
|
$data = array('bar1', 'bar2', 'bar3');
|
|
$col = new PropelCollection($data);
|
|
$it1 = $col->getInternalIterator();
|
|
$it2 = $col->getINternalIterator();
|
|
$this->assertSame($it1, $it2, 'getInternalIterator() returns always the same iterator');
|
|
$col->getInternalIterator()->next();
|
|
$this->assertEquals('bar2', $col->getInternalIterator()->current(), 'getInternalIterator() returns always the same iterator');
|
|
}
|
|
|
|
public function testGetPeerClass()
|
|
{
|
|
$col = new PropelCollection();
|
|
$col->setModel('Book');
|
|
$this->assertEquals('BookPeer', $col->getPeerClass(), 'getPeerClass() returns the Peer class for the collection model');
|
|
}
|
|
|
|
/**
|
|
* @expectedException PropelException
|
|
*/
|
|
public function testGetPeerClassNoModel()
|
|
{
|
|
$col = new PropelCollection();
|
|
$col->getPeerClass();
|
|
}
|
|
|
|
public function testGetConnection()
|
|
{
|
|
$col = new PropelCollection();
|
|
$col->setModel('Book');
|
|
$con = Propel::getConnection(BookPeer::DATABASE_NAME);
|
|
$this->assertEquals($con, $col->getConnection(), 'getConnection() returns a connection for the collection model');
|
|
$con = Propel::getConnection(BookPeer::DATABASE_NAME, Propel::CONNECTION_WRITE);
|
|
$this->assertEquals($con, $col->getConnection(Propel::CONNECTION_WRITE), 'getConnection() accepts a connection type parameter');
|
|
}
|
|
|
|
/**
|
|
* @expectedException PropelException
|
|
*/
|
|
public function testGetConnectionNoModel()
|
|
{
|
|
$col = new PropelCollection();
|
|
$col->getConnection();
|
|
}
|
|
|
|
} |