From 1dae8d318fcb2f5e7aa7425ca9d8bd1a44e8c5de Mon Sep 17 00:00:00 2001 From: Austin Morris Date: Mon, 22 Jul 2013 14:39:00 -0400 Subject: [PATCH 1/5] PersistentCollection - initialize coll - create failing tests --- .../PersistentCollectionFunctionalTest.php | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 tests/Doctrine/Tests/ORM/PersistentCollectionFunctionalTest.php diff --git a/tests/Doctrine/Tests/ORM/PersistentCollectionFunctionalTest.php b/tests/Doctrine/Tests/ORM/PersistentCollectionFunctionalTest.php new file mode 100644 index 000000000..5206a70d7 --- /dev/null +++ b/tests/Doctrine/Tests/ORM/PersistentCollectionFunctionalTest.php @@ -0,0 +1,73 @@ + + */ +class PersistentCollectionFunctionalTest extends OrmFunctionalTestCase +{ + /** + * @var PersistentCollection + */ + protected $collection; + + /** + * Setup tests. + */ + public function setUp() + { + $this->useModelSet('ecommerce'); + parent::setUp(); + + $classMetaData = $this->_em->getClassMetadata('Doctrine\Tests\Models\ECommerce\ECommerceCart'); + $this->collection = new PersistentCollection($this->_em, $classMetaData, new ArrayCollection); + $this->collection->setInitialized(false); + $this->collection->setOwner(new ECommerceCart(), $classMetaData->getAssociationMapping('products')); + } + + /** + * Test that PersistentCollection::add() initializes the collection. + */ + public function testAddInitializesCollection() + { + $this->collection->add(new ECommerceProduct); + $this->assertTrue($this->collection->isInitialized()); + } + + /** + * Test that PersistentCollection::current() initializes the collection. + */ + public function testCurrentInitializesCollection() + { + $this->collection->current(); + $this->assertTrue($this->collection->isInitialized()); + } + + /** + * Test that PersistentCollection::key() initializes the collection. + */ + public function testKeyInitializesCollection() + { + $this->collection->key(); + $this->assertTrue($this->collection->isInitialized()); + } + + /** + * Test that PersistentCollection::next() initializes the collection. + */ + public function testNextInitializesCollection() + { + $this->collection->next(); + $this->assertTrue($this->collection->isInitialized()); + } +} From 39f4d46d364d17f21a873a93422a19d9b12a9e93 Mon Sep 17 00:00:00 2001 From: Austin Morris Date: Mon, 22 Jul 2013 14:42:03 -0400 Subject: [PATCH 2/5] Initialize coll when using Collection methods inside PersistentCollection --- lib/Doctrine/ORM/PersistentCollection.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/Doctrine/ORM/PersistentCollection.php b/lib/Doctrine/ORM/PersistentCollection.php index 947774542..462c23ec7 100644 --- a/lib/Doctrine/ORM/PersistentCollection.php +++ b/lib/Doctrine/ORM/PersistentCollection.php @@ -587,6 +587,8 @@ final class PersistentCollection implements Collection, Selectable */ public function add($value) { + $this->initialize(); + $this->coll->add($value); $this->changed(); @@ -757,6 +759,8 @@ final class PersistentCollection implements Collection, Selectable */ public function key() { + $this->initialize(); + return $this->coll->key(); } @@ -765,6 +769,8 @@ final class PersistentCollection implements Collection, Selectable */ public function current() { + $this->initialize(); + return $this->coll->current(); } @@ -773,6 +779,8 @@ final class PersistentCollection implements Collection, Selectable */ public function next() { + $this->initialize(); + return $this->coll->next(); } From f9f14139cf314910591a311b9aaa26861e0102cf Mon Sep 17 00:00:00 2001 From: Austin Morris Date: Mon, 22 Jul 2013 18:54:02 -0400 Subject: [PATCH 3/5] do not initialize coll on add() --- lib/Doctrine/ORM/PersistentCollection.php | 2 -- .../Tests/ORM/PersistentCollectionFunctionalTest.php | 9 --------- 2 files changed, 11 deletions(-) diff --git a/lib/Doctrine/ORM/PersistentCollection.php b/lib/Doctrine/ORM/PersistentCollection.php index 462c23ec7..8d0fef757 100644 --- a/lib/Doctrine/ORM/PersistentCollection.php +++ b/lib/Doctrine/ORM/PersistentCollection.php @@ -587,8 +587,6 @@ final class PersistentCollection implements Collection, Selectable */ public function add($value) { - $this->initialize(); - $this->coll->add($value); $this->changed(); diff --git a/tests/Doctrine/Tests/ORM/PersistentCollectionFunctionalTest.php b/tests/Doctrine/Tests/ORM/PersistentCollectionFunctionalTest.php index 5206a70d7..fbce752f7 100644 --- a/tests/Doctrine/Tests/ORM/PersistentCollectionFunctionalTest.php +++ b/tests/Doctrine/Tests/ORM/PersistentCollectionFunctionalTest.php @@ -35,15 +35,6 @@ class PersistentCollectionFunctionalTest extends OrmFunctionalTestCase $this->collection->setOwner(new ECommerceCart(), $classMetaData->getAssociationMapping('products')); } - /** - * Test that PersistentCollection::add() initializes the collection. - */ - public function testAddInitializesCollection() - { - $this->collection->add(new ECommerceProduct); - $this->assertTrue($this->collection->isInitialized()); - } - /** * Test that PersistentCollection::current() initializes the collection. */ From 11d09702dac5e087aebbbc32af2508db472419dc Mon Sep 17 00:00:00 2001 From: Austin Morris Date: Tue, 23 Jul 2013 09:01:01 -0400 Subject: [PATCH 4/5] remove redundant require_once for TestInit.php --- .../Doctrine/Tests/ORM/PersistentCollectionFunctionalTest.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/Doctrine/Tests/ORM/PersistentCollectionFunctionalTest.php b/tests/Doctrine/Tests/ORM/PersistentCollectionFunctionalTest.php index fbce752f7..d168c0502 100644 --- a/tests/Doctrine/Tests/ORM/PersistentCollectionFunctionalTest.php +++ b/tests/Doctrine/Tests/ORM/PersistentCollectionFunctionalTest.php @@ -5,11 +5,8 @@ namespace Doctrine\Tests\ORM; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\ORM\PersistentCollection; use Doctrine\Tests\Models\ECommerce\ECommerceCart; -use Doctrine\Tests\Models\ECommerce\ECommerceProduct; use Doctrine\Tests\OrmFunctionalTestCase; -require_once __DIR__ . '/../TestInit.php'; - /** * Tests the initialization of persistent collections. * @author Austin Morris From 43df8216917ceb28f4d65d19526c76deadd358a8 Mon Sep 17 00:00:00 2001 From: Austin Morris Date: Tue, 23 Jul 2013 09:40:46 -0400 Subject: [PATCH 5/5] convert PersistentCollection functional tests to unit tests --- .../PersistentCollectionFunctionalTest.php | 61 ------------------- .../Tests/ORM/PersistentCollectionTest.php | 56 +++++++++++++++-- 2 files changed, 51 insertions(+), 66 deletions(-) delete mode 100644 tests/Doctrine/Tests/ORM/PersistentCollectionFunctionalTest.php diff --git a/tests/Doctrine/Tests/ORM/PersistentCollectionFunctionalTest.php b/tests/Doctrine/Tests/ORM/PersistentCollectionFunctionalTest.php deleted file mode 100644 index d168c0502..000000000 --- a/tests/Doctrine/Tests/ORM/PersistentCollectionFunctionalTest.php +++ /dev/null @@ -1,61 +0,0 @@ - - */ -class PersistentCollectionFunctionalTest extends OrmFunctionalTestCase -{ - /** - * @var PersistentCollection - */ - protected $collection; - - /** - * Setup tests. - */ - public function setUp() - { - $this->useModelSet('ecommerce'); - parent::setUp(); - - $classMetaData = $this->_em->getClassMetadata('Doctrine\Tests\Models\ECommerce\ECommerceCart'); - $this->collection = new PersistentCollection($this->_em, $classMetaData, new ArrayCollection); - $this->collection->setInitialized(false); - $this->collection->setOwner(new ECommerceCart(), $classMetaData->getAssociationMapping('products')); - } - - /** - * Test that PersistentCollection::current() initializes the collection. - */ - public function testCurrentInitializesCollection() - { - $this->collection->current(); - $this->assertTrue($this->collection->isInitialized()); - } - - /** - * Test that PersistentCollection::key() initializes the collection. - */ - public function testKeyInitializesCollection() - { - $this->collection->key(); - $this->assertTrue($this->collection->isInitialized()); - } - - /** - * Test that PersistentCollection::next() initializes the collection. - */ - public function testNextInitializesCollection() - { - $this->collection->next(); - $this->assertTrue($this->collection->isInitialized()); - } -} diff --git a/tests/Doctrine/Tests/ORM/PersistentCollectionTest.php b/tests/Doctrine/Tests/ORM/PersistentCollectionTest.php index fd0dffbf2..9b9a067fc 100644 --- a/tests/Doctrine/Tests/ORM/PersistentCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/PersistentCollectionTest.php @@ -6,16 +6,21 @@ use Doctrine\Common\Collections\ArrayCollection; use Doctrine\ORM\PersistentCollection; use Doctrine\Tests\Mocks\ConnectionMock; use Doctrine\Tests\Mocks\EntityManagerMock; -use Doctrine\Tests\Models\ECommerce\ECommerceProduct; - -require_once __DIR__ . '/../TestInit.php'; +use Doctrine\Tests\Models\ECommerce\ECommerceCart; +use Doctrine\Tests\OrmTestCase; /** - * Tests the lazy-loading capabilities of the PersistentCollection. + * Tests the lazy-loading capabilities of the PersistentCollection and the initialization of collections. * @author Giorgio Sironi + * @author Austin Morris */ -class PersistentCollectionTest extends \Doctrine\Tests\OrmTestCase +class PersistentCollectionTest extends OrmTestCase { + /** + * @var PersistentCollection + */ + protected $collection; + private $_connectionMock; private $_emMock; @@ -27,6 +32,17 @@ class PersistentCollectionTest extends \Doctrine\Tests\OrmTestCase $this->_emMock = EntityManagerMock::create($this->_connectionMock); } + /** + * Set up the PersistentCollection used for collection initialization tests. + */ + public function setUpPersistentCollection() + { + $classMetaData = $this->_emMock->getClassMetadata('Doctrine\Tests\Models\ECommerce\ECommerceCart'); + $this->collection = new PersistentCollection($this->_emMock, $classMetaData, new ArrayCollection); + $this->collection->setInitialized(false); + $this->collection->setOwner(new ECommerceCart(), $classMetaData->getAssociationMapping('products')); + } + public function testCanBePutInLazyLoadingMode() { $class = $this->_emMock->getClassMetadata('Doctrine\Tests\Models\ECommerce\ECommerceProduct'); @@ -34,4 +50,34 @@ class PersistentCollectionTest extends \Doctrine\Tests\OrmTestCase $collection->setInitialized(false); $this->assertFalse($collection->isInitialized()); } + + /** + * Test that PersistentCollection::current() initializes the collection. + */ + public function testCurrentInitializesCollection() + { + $this->setUpPersistentCollection(); + $this->collection->current(); + $this->assertTrue($this->collection->isInitialized()); + } + + /** + * Test that PersistentCollection::key() initializes the collection. + */ + public function testKeyInitializesCollection() + { + $this->setUpPersistentCollection(); + $this->collection->key(); + $this->assertTrue($this->collection->isInitialized()); + } + + /** + * Test that PersistentCollection::next() initializes the collection. + */ + public function testNextInitializesCollection() + { + $this->setUpPersistentCollection(); + $this->collection->next(); + $this->assertTrue($this->collection->isInitialized()); + } }