createAnnotationDriver(); $this->em = $this->_getTestEntityManager(); $this->em->getConfiguration()->setMetadataDriverImpl($annotationDriver); $this->factory = new ClassMetadataFactory; $this->factory->setEntityManager($this->em); $this->listener = new ResolveTargetEntityListener; } /** * @group DDC-1544 */ public function testResolveTargetEntityListenerCanResolveTargetEntity() { $evm = $this->em->getEventManager(); $this->listener->addResolveTargetEntity( 'Doctrine\Tests\ORM\Tools\ResolveTargetInterface', 'Doctrine\Tests\ORM\Tools\ResolveTargetEntity', array() ); $this->listener->addResolveTargetEntity( 'Doctrine\Tests\ORM\Tools\TargetInterface', 'Doctrine\Tests\ORM\Tools\TargetEntity', array() ); $evm->addEventListener(Events::loadClassMetadata, $this->listener); $cm = $this->factory->getMetadataFor('Doctrine\Tests\ORM\Tools\ResolveTargetEntity'); $meta = $cm->associationMappings; $this->assertSame('Doctrine\Tests\ORM\Tools\TargetEntity', $meta['manyToMany']['targetEntity']); $this->assertSame('Doctrine\Tests\ORM\Tools\ResolveTargetEntity', $meta['manyToOne']['targetEntity']); $this->assertSame('Doctrine\Tests\ORM\Tools\ResolveTargetEntity', $meta['oneToMany']['targetEntity']); $this->assertSame('Doctrine\Tests\ORM\Tools\TargetEntity', $meta['oneToOne']['targetEntity']); } } interface ResolveTargetInterface { public function getId(); } interface TargetInterface extends ResolveTargetInterface { } /** * @Entity */ class ResolveTargetEntity implements ResolveTargetInterface { /** * @Id * @Column(type="integer") * @GeneratedValue(strategy="AUTO") */ private $id; /** * @ManyToMany(targetEntity="Doctrine\Tests\ORM\Tools\TargetInterface") */ private $manyToMany; /** * @ManyToOne(targetEntity="Doctrine\Tests\ORM\Tools\ResolveTargetInterface", inversedBy="oneToMany") */ private $manyToOne; /** * @OneToMany(targetEntity="Doctrine\Tests\ORM\Tools\ResolveTargetInterface", mappedBy="manyToOne") */ private $oneToMany; /** * @OneToOne(targetEntity="Doctrine\Tests\ORM\Tools\TargetInterface") * @JoinColumn(name="target_entity_id", referencedColumnName="id") */ private $oneToOne; public function getId() { return $this->id; } } /** * @Entity */ class TargetEntity implements TargetInterface { /** * @Id * @Column(type="integer") * @GeneratedValue(strategy="AUTO") */ private $id; public function getId() { return $this->id; } }