From 7024926f10bb7ed475e1c863c8154e5fb6183ec3 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Wed, 16 Aug 2017 15:07:48 +0200 Subject: [PATCH] #6623 splitting test scenario into two bits --- .../ORM/Hydration/AbstractHydratorTest.php | 110 ++++++++++++------ 1 file changed, 77 insertions(+), 33 deletions(-) diff --git a/tests/Doctrine/Tests/ORM/Hydration/AbstractHydratorTest.php b/tests/Doctrine/Tests/ORM/Hydration/AbstractHydratorTest.php index 1d02b6c2b..40a3d0323 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/AbstractHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/AbstractHydratorTest.php @@ -2,13 +2,13 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; -use Doctrine\DBAL\Connection; -use Doctrine\ORM\EntityManagerInterface; use Doctrine\Common\EventManager; +use Doctrine\DBAL\Connection; use Doctrine\DBAL\Driver\Statement; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Events; -use Doctrine\ORM\Query\ResultSetMapping; use Doctrine\ORM\Internal\Hydration\AbstractHydrator; +use Doctrine\ORM\Query\ResultSetMapping; use Doctrine\Tests\OrmFunctionalTestCase; /** @@ -16,6 +16,56 @@ use Doctrine\Tests\OrmFunctionalTestCase; */ class AbstractHydratorTest extends OrmFunctionalTestCase { + /** + * @var EventManager|\PHPUnit_Framework_MockObject_MockObject + */ + private $mockEventManager; + + /** + * @var Statement|\PHPUnit_Framework_MockObject_MockObject + */ + private $mockStatement; + + /** + * @var ResultSetMapping|\PHPUnit_Framework_MockObject_MockObject + */ + private $mockResultMapping; + + /** + * @var AbstractHydrator + */ + private $hydrator; + + protected function setUp() : void + { + parent::setUp(); + + $mockConnection = $this->createMock(Connection::class); + $mockEntityManagerInterface = $this->createMock(EntityManagerInterface::class); + $this->mockEventManager = $this->createMock(EventManager::class); + $this->mockStatement = $this->createMock(Statement::class); + $this->mockResultMapping = $this->getMockBuilder(ResultSetMapping::class); + + $mockEntityManagerInterface + ->expects(self::any()) + ->method('getEventManager') + ->willReturn($this->mockEventManager); + $mockEntityManagerInterface + ->expects(self::any()) + ->method('getConnection') + ->willReturn($mockConnection); + $this->mockStatement + ->expects(self::any()) + ->method('fetch') + ->willReturn(false); + + $this->hydrator = $this + ->getMockBuilder(AbstractHydrator::class) + ->setConstructorArgs([$mockEntityManagerInterface]) + ->setMethods(['hydrateAllData']) + ->getMock(); + } + /** * @group DDC-3146 * @group #1515 @@ -23,46 +73,40 @@ class AbstractHydratorTest extends OrmFunctionalTestCase * Verify that the number of added events to the event listener from the abstract hydrator class is equal to the * number of removed events */ - public function testOnClearEventListenerIsDetachedOnCleanup() + public function testOnClearEventListenerIsDetachedOnCleanup() : void { - $mockConnection = $this->createMock(Connection::class); - $mockEntityManagerInterface = $this->createMock(EntityManagerInterface::class); - $mockEventManager = $this->createMock(EventManager::class); - $mockStatement = $this->createMock(Statement::class); - $mockResultMapping = $this->getMockBuilder(ResultSetMapping::class); - - $mockEntityManagerInterface->expects(self::any())->method('getEventManager')->willReturn($mockEventManager); - $mockEntityManagerInterface->expects(self::any())->method('getConnection')->willReturn($mockConnection); - $mockStatement->expects(self::once())->method('fetch')->willReturn(false); - - /* @var $mockAbstractHydrator AbstractHydrator */ - $mockAbstractHydrator = $this - ->getMockBuilder(AbstractHydrator::class) - ->setConstructorArgs([$mockEntityManagerInterface]) - ->setMethods(['hydrateAllData']) - ->getMock(); - - $mockEventManager + $this + ->mockEventManager ->expects(self::at(0)) ->method('addEventListener') - ->with([Events::onClear], $mockAbstractHydrator); + ->with([Events::onClear], $this->hydrator); - $mockEventManager + $this + ->mockEventManager ->expects(self::at(1)) ->method('removeEventListener') - ->with([Events::onClear], $mockAbstractHydrator); + ->with([Events::onClear], $this->hydrator); - $mockEventManager - ->expects(self::at(2)) + iterator_to_array($this->hydrator->iterate($this->mockStatement, $this->mockResultMapping)); + } + + /** + * @group #6623 + */ + public function testHydrateAllRegistersAndClearsAllAttachedListeners() : void + { + $this + ->mockEventManager + ->expects(self::at(0)) ->method('addEventListener') - ->with([Events::onClear], $mockAbstractHydrator); + ->with([Events::onClear], $this->hydrator); - $mockEventManager - ->expects(self::at(3)) + $this + ->mockEventManager + ->expects(self::at(1)) ->method('removeEventListener') - ->with([Events::onClear], $mockAbstractHydrator); + ->with([Events::onClear], $this->hydrator); - iterator_to_array($mockAbstractHydrator->iterate($mockStatement, $mockResultMapping)); - $mockAbstractHydrator->hydrateAll($mockStatement, $mockResultMapping); + $this->hydrator->hydrateAll($this->mockStatement, $this->mockResultMapping); } }