From 020b9c120abcf6905bf8c131ad10bf40552e79b9 Mon Sep 17 00:00:00 2001 From: Ralph Schindler Date: Fri, 4 Jan 2013 15:20:25 -0600 Subject: [PATCH] PR #2807 Added unit tests for hydrator buffer handling Signed-off-by: Ralph Schindler --- .../Zend/Db/ResultSet/AbstractResultSet.php | 6 +- .../Db/ResultSet/AbstractResultSetTest.php | 210 ++++++++++++++++++ .../HydratingResultSetIntegrationTest.php | 26 +++ .../Db/ResultSet/HydratingResultSetTest.php | 62 ++++++ ...tTest.php => ResultSetIntegrationTest.php} | 0 5 files changed, 303 insertions(+), 1 deletion(-) create mode 100644 tests/ZendTest/Db/ResultSet/AbstractResultSetTest.php create mode 100644 tests/ZendTest/Db/ResultSet/HydratingResultSetIntegrationTest.php create mode 100644 tests/ZendTest/Db/ResultSet/HydratingResultSetTest.php rename tests/ZendTest/Db/ResultSet/{ResultSetTest.php => ResultSetIntegrationTest.php} (100%) diff --git a/library/Zend/Db/ResultSet/AbstractResultSet.php b/library/Zend/Db/ResultSet/AbstractResultSet.php index 384d7971e78..0e053474b76 100644 --- a/library/Zend/Db/ResultSet/AbstractResultSet.php +++ b/library/Zend/Db/ResultSet/AbstractResultSet.php @@ -50,7 +50,10 @@ abstract class AbstractResultSet implements Iterator, ResultSetInterface */ protected $fieldCount = null; - protected $position = null; + /** + * @var int + */ + protected $position = 0; /** * Set the data source for the result set @@ -101,6 +104,7 @@ public function buffer() } elseif ($this->buffer === null) { $this->buffer = array(); } + return $this; } public function isBuffered() diff --git a/tests/ZendTest/Db/ResultSet/AbstractResultSetTest.php b/tests/ZendTest/Db/ResultSet/AbstractResultSetTest.php new file mode 100644 index 00000000000..280fa5f5eaf --- /dev/null +++ b/tests/ZendTest/Db/ResultSet/AbstractResultSetTest.php @@ -0,0 +1,210 @@ +resultSet = $this->getMockForAbstractClass('Zend\Db\ResultSet\AbstractResultSet'); + } + + /** + * @covers Zend\Db\ResultSet\AbstractResultSet::initialize + */ + public function testInitialize() + { + $resultSet = $this->getMockForAbstractClass('Zend\Db\ResultSet\AbstractResultSet'); + + $this->assertSame($resultSet, $resultSet->initialize(array( + array('id' => 1, 'name' => 'one'), + array('id' => 2, 'name' => 'two'), + array('id' => 3, 'name' => 'three'), + ))); + + $this->setExpectedException( + 'Zend\Db\ResultSet\Exception\InvalidArgumentException', + 'DataSource provided is not an array, nor does it implement Iterator or IteratorAggregate' + ); + $resultSet->initialize('foo'); + } + + /** + * @covers Zend\Db\ResultSet\AbstractResultSet::buffer + */ + public function testBuffer() + { + $resultSet = $this->getMockForAbstractClass('Zend\Db\ResultSet\AbstractResultSet'); + $this->assertSame($resultSet, $resultSet->buffer()); + + $resultSet = $this->getMockForAbstractClass('Zend\Db\ResultSet\AbstractResultSet'); + $resultSet->initialize(new \ArrayIterator(array( + array('id' => 1, 'name' => 'one'), + array('id' => 2, 'name' => 'two'), + array('id' => 3, 'name' => 'three'), + ))); + $resultSet->next(); // start iterator + $this->setExpectedException( + 'Zend\Db\ResultSet\Exception\RuntimeException', + 'Buffering must be enabled before iteration is started' + ); + $resultSet->buffer(); + } + + /** + * @covers Zend\Db\ResultSet\AbstractResultSet::isBuffered + */ + public function testIsBuffered() + { + $resultSet = $this->getMockForAbstractClass('Zend\Db\ResultSet\AbstractResultSet'); + $this->assertFalse($resultSet->isBuffered()); + $resultSet->buffer(); + $this->assertTrue($resultSet->isBuffered()); + } + + /** + * @covers Zend\Db\ResultSet\AbstractResultSet::getDataSource + */ + public function testGetDataSource() + { + $resultSet = $this->getMockForAbstractClass('Zend\Db\ResultSet\AbstractResultSet'); + $resultSet->initialize(new \ArrayIterator(array( + array('id' => 1, 'name' => 'one'), + array('id' => 2, 'name' => 'two'), + array('id' => 3, 'name' => 'three'), + ))); + $this->assertInstanceOf('\ArrayIterator', $resultSet->getDataSource()); + } + + /** + * @covers Zend\Db\ResultSet\AbstractResultSet::getFieldCount + */ + public function testGetFieldCount() + { + $resultSet = $this->getMockForAbstractClass('Zend\Db\ResultSet\AbstractResultSet'); + $resultSet->initialize(new \ArrayIterator(array( + array('id' => 1, 'name' => 'one'), + ))); + $this->assertEquals(2, $resultSet->getFieldCount()); + } + + /** + * @covers Zend\Db\ResultSet\AbstractResultSet::next + */ + public function testNext() + { + $resultSet = $this->getMockForAbstractClass('Zend\Db\ResultSet\AbstractResultSet'); + $resultSet->initialize(new \ArrayIterator(array( + array('id' => 1, 'name' => 'one'), + array('id' => 2, 'name' => 'two'), + array('id' => 3, 'name' => 'three'), + ))); + $this->assertNull($resultSet->next()); + } + + /** + * @covers Zend\Db\ResultSet\AbstractResultSet::key + */ + public function testKey() + { + $resultSet = $this->getMockForAbstractClass('Zend\Db\ResultSet\AbstractResultSet'); + $resultSet->initialize(new \ArrayIterator(array( + array('id' => 1, 'name' => 'one'), + array('id' => 2, 'name' => 'two'), + array('id' => 3, 'name' => 'three'), + ))); + $resultSet->next(); + $this->assertEquals(1, $resultSet->key()); + $resultSet->next(); + $this->assertEquals(2, $resultSet->key()); + $resultSet->next(); + $this->assertEquals(3, $resultSet->key()); + } + + /** + * @covers Zend\Db\ResultSet\AbstractResultSet::current + */ + public function testCurrent() + { + $resultSet = $this->getMockForAbstractClass('Zend\Db\ResultSet\AbstractResultSet'); + $resultSet->initialize(new \ArrayIterator(array( + array('id' => 1, 'name' => 'one'), + array('id' => 2, 'name' => 'two'), + array('id' => 3, 'name' => 'three'), + ))); + $this->assertEquals(array('id' => 1, 'name' => 'one'), $resultSet->current()); + } + + /** + * @covers Zend\Db\ResultSet\AbstractResultSet::valid + */ + public function testValid() + { + $resultSet = $this->getMockForAbstractClass('Zend\Db\ResultSet\AbstractResultSet'); + $resultSet->initialize(new \ArrayIterator(array( + array('id' => 1, 'name' => 'one'), + array('id' => 2, 'name' => 'two'), + array('id' => 3, 'name' => 'three'), + ))); + $this->assertTrue($resultSet->valid()); + $resultSet->next(); $resultSet->next(); $resultSet->next(); + $this->assertFalse($resultSet->valid()); + } + + /** + * @covers Zend\Db\ResultSet\AbstractResultSet::rewind + */ + public function testRewind() + { + $resultSet = $this->getMockForAbstractClass('Zend\Db\ResultSet\AbstractResultSet'); + $resultSet->initialize(new \ArrayIterator(array( + array('id' => 1, 'name' => 'one'), + array('id' => 2, 'name' => 'two'), + array('id' => 3, 'name' => 'three'), + ))); + $this->assertNull($resultSet->rewind()); + } + + /** + * @covers Zend\Db\ResultSet\AbstractResultSet::count + */ + public function testCount() + { + $resultSet = $this->getMockForAbstractClass('Zend\Db\ResultSet\AbstractResultSet'); + $resultSet->initialize(new \ArrayIterator(array( + array('id' => 1, 'name' => 'one'), + array('id' => 2, 'name' => 'two'), + array('id' => 3, 'name' => 'three'), + ))); + $this->assertEquals(3, $resultSet->count()); + } + + /** + * @covers Zend\Db\ResultSet\AbstractResultSet::toArray + */ + public function testToArray() + { + $resultSet = $this->getMockForAbstractClass('Zend\Db\ResultSet\AbstractResultSet'); + $resultSet->initialize(new \ArrayIterator(array( + array('id' => 1, 'name' => 'one'), + array('id' => 2, 'name' => 'two'), + array('id' => 3, 'name' => 'three'), + ))); + $this->assertEquals( + array( + array('id' => 1, 'name' => 'one'), + array('id' => 2, 'name' => 'two'), + array('id' => 3, 'name' => 'three'), + ), + $resultSet->toArray() + ); + } +} diff --git a/tests/ZendTest/Db/ResultSet/HydratingResultSetIntegrationTest.php b/tests/ZendTest/Db/ResultSet/HydratingResultSetIntegrationTest.php new file mode 100644 index 00000000000..c674b821db1 --- /dev/null +++ b/tests/ZendTest/Db/ResultSet/HydratingResultSetIntegrationTest.php @@ -0,0 +1,26 @@ +initialize(new \ArrayIterator(array( + array('id' => 1, 'name' => 'one'), + array('id' => 2, 'name' => 'two'), + ))); + $hydratingRs->buffer(); + $obj1 = $hydratingRs->current(); + $hydratingRs->rewind(); + $obj2 = $hydratingRs->current(); + $this->assertSame($obj1, $obj2); + } + +} diff --git a/tests/ZendTest/Db/ResultSet/HydratingResultSetTest.php b/tests/ZendTest/Db/ResultSet/HydratingResultSetTest.php new file mode 100644 index 00000000000..354a8edc311 --- /dev/null +++ b/tests/ZendTest/Db/ResultSet/HydratingResultSetTest.php @@ -0,0 +1,62 @@ +assertSame($hydratingRs, $hydratingRs->setObjectPrototype($prototype)); + } + + /** + * @covers Zend\Db\ResultSet\HydratingResultSet::setHydrator + */ + public function testSetHydrator() + { + $hydratingRs = new HydratingResultSet; + $this->assertSame($hydratingRs, $hydratingRs->setHydrator(new \Zend\Stdlib\Hydrator\ClassMethods())); + } + + /** + * @covers Zend\Db\ResultSet\HydratingResultSet::getHydrator + */ + public function testGetHydrator() + { + $hydratingRs = new HydratingResultSet; + $this->assertInstanceOf('Zend\Stdlib\Hydrator\ArraySerializable', $hydratingRs->getHydrator()); + } + + /** + * @covers Zend\Db\ResultSet\HydratingResultSet::current + */ + public function testCurrent() + { + $hydratingRs = new HydratingResultSet; + $hydratingRs->initialize(array( + array('id' => 1, 'name' => 'one') + )); + $obj = $hydratingRs->current(); + $this->assertInstanceOf('ArrayObject', $obj); + } + + /** + * @covers Zend\Db\ResultSet\HydratingResultSet::toArray + * @todo Implement testToArray(). + */ + public function testToArray() + { + $hydratingRs = new HydratingResultSet; + $hydratingRs->initialize(array( + array('id' => 1, 'name' => 'one') + )); + $obj = $hydratingRs->toArray(); + $this->assertInternalType('array', $obj); + } +} diff --git a/tests/ZendTest/Db/ResultSet/ResultSetTest.php b/tests/ZendTest/Db/ResultSet/ResultSetIntegrationTest.php similarity index 100% rename from tests/ZendTest/Db/ResultSet/ResultSetTest.php rename to tests/ZendTest/Db/ResultSet/ResultSetIntegrationTest.php