From 3c223a59c407610db94b1d5ad16916b72eabdd5c Mon Sep 17 00:00:00 2001 From: "Fabio B. Silva" Date: Sun, 29 Jul 2012 21:04:59 -0300 Subject: [PATCH] move call listeners tests to AbstractMappingDriverTest --- .../ORM/Mapping/Driver/AnnotationDriver.php | 2 + .../ORM/Mapping/AbstractMappingDriverTest.php | 45 +++++++++++++++++-- 2 files changed, 43 insertions(+), 4 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 139795752..eaad6576b 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -427,7 +427,9 @@ class AnnotationDriver extends AbstractAnnotationDriver } $listener = new \ReflectionClass($listener); + /* @var $method \ReflectionMethod */ foreach ($listener->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) { + // find method callbacks. foreach ($this->getMethodCallbacks($method) as $value) { $metadata->addEntityListener($value[1], $listener->name, $value[0]); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index f752c292e..4cf8c669c 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -2,10 +2,14 @@ namespace Doctrine\Tests\ORM\Mapping; -use Doctrine\ORM\Mapping\ClassMetadata, - Doctrine\ORM\Mapping\ClassMetadataInfo, - Doctrine\ORM\Mapping\Driver\XmlDriver, - Doctrine\ORM\Mapping\Driver\YamlDriver; +use Doctrine\ORM\Events; +use Doctrine\ORM\Event\LifecycleEventArgs; +use Doctrine\Tests\Models\Company\CompanyFixContract; +use Doctrine\Tests\Models\Company\CompanyFlexContract; +use Doctrine\Tests\Models\Company\ContractSubscriber; + +use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\ClassMetadataInfo; require_once __DIR__ . '/../../TestInit.php'; @@ -748,6 +752,39 @@ abstract class AbstractMappingDriverTest extends \Doctrine\Tests\OrmTestCase $this->assertTrue($guestMetadata->fieldMappings['name']['unique']); } + /** + * @group DDC-1955 + */ + public function testCallEntityListeners() + { + if ( ! ($this instanceof AnnotationDriverTest)) { + $this->markTestIncomplete(); + } + + $em = $this->_getTestEntityManager(); + $factory = $this->createClassMetadataFactory($em); + $flexClass = $factory->getMetadataFor('Doctrine\Tests\Models\Company\CompanyFixContract'); + $fixClass = $factory->getMetadataFor('Doctrine\Tests\Models\Company\CompanyFlexContract'); + + ContractSubscriber::$prePersistCalls = null; + ContractSubscriber::$postPersisCalls = null; + + $fix = new CompanyFixContract(); + $fixArg = new LifecycleEventArgs($fix, $em); + + $flex = new CompanyFlexContract(); + $flexArg = new LifecycleEventArgs($fix, $em); + + $fixClass->dispatchEntityListeners(Events::prePersist, $fix, $fixArg); + $flexClass->dispatchEntityListeners(Events::prePersist, $flex, $flexArg); + + $this->assertSame($fix, ContractSubscriber::$prePersistCalls[0][0]); + $this->assertSame($fixArg, ContractSubscriber::$prePersistCalls[0][1]); + + $this->assertCount(1, ContractSubscriber::$instances); + $this->assertNull(ContractSubscriber::$postPersisCalls); + } + } /**