Rajout de doctrine/orm
[zf2.biz/application_blanche.git] / vendor / doctrine / orm / tests / Doctrine / Tests / ORM / Mapping / AnnotationDriverTest.php
diff --git a/vendor/doctrine/orm/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php b/vendor/doctrine/orm/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php
new file mode 100644 (file)
index 0000000..4d7715e
--- /dev/null
@@ -0,0 +1,340 @@
+<?php
+
+namespace Doctrine\Tests\ORM\Mapping;
+
+use Doctrine\ORM\Mapping\ClassMetadata;
+use Doctrine\ORM\Events;
+
+require_once __DIR__ . '/../../TestInit.php';
+
+class AnnotationDriverTest extends AbstractMappingDriverTest
+{
+    /**
+     * @group DDC-268
+     */
+    public function testLoadMetadataForNonEntityThrowsException()
+    {
+        $cm = new ClassMetadata('stdClass');
+        $cm->initializeReflection(new \Doctrine\Common\Persistence\Mapping\RuntimeReflectionService);
+        $reader = new \Doctrine\Common\Annotations\AnnotationReader(new \Doctrine\Common\Cache\ArrayCache());
+        $annotationDriver = new \Doctrine\ORM\Mapping\Driver\AnnotationDriver($reader);
+
+        $this->setExpectedException('Doctrine\ORM\Mapping\MappingException');
+        $annotationDriver->loadMetadataForClass('stdClass', $cm);
+    }
+
+    /**
+     * @group DDC-268
+     */
+    public function testColumnWithMissingTypeDefaultsToString()
+    {
+        $cm = new ClassMetadata('Doctrine\Tests\ORM\Mapping\ColumnWithoutType');
+        $cm->initializeReflection(new \Doctrine\Common\Persistence\Mapping\RuntimeReflectionService);
+        $annotationDriver = $this->_loadDriver();
+
+        $annotationDriver->loadMetadataForClass('Doctrine\Tests\ORM\Mapping\InvalidColumn', $cm);
+        $this->assertEquals('string', $cm->fieldMappings['id']['type']);
+    }
+
+    /**
+     * @group DDC-318
+     */
+    public function testGetAllClassNamesIsIdempotent()
+    {
+        $annotationDriver = $this->_loadDriverForCMSModels();
+        $original = $annotationDriver->getAllClassNames();
+
+        $annotationDriver = $this->_loadDriverForCMSModels();
+        $afterTestReset = $annotationDriver->getAllClassNames();
+
+        $this->assertEquals($original, $afterTestReset);
+    }
+
+    /**
+     * @group DDC-318
+     */
+    public function testGetAllClassNamesIsIdempotentEvenWithDifferentDriverInstances()
+    {
+        $annotationDriver = $this->_loadDriverForCMSModels();
+        $original = $annotationDriver->getAllClassNames();
+
+        $annotationDriver = $this->_loadDriverForCMSModels();
+        $afterTestReset = $annotationDriver->getAllClassNames();
+
+        $this->assertEquals($original, $afterTestReset);
+    }
+
+    /**
+     * @group DDC-318
+     */
+    public function testGetAllClassNamesReturnsAlreadyLoadedClassesIfAppropriate()
+    {
+        $rightClassName = 'Doctrine\Tests\Models\CMS\CmsUser';
+        $this->_ensureIsLoaded($rightClassName);
+
+        $annotationDriver = $this->_loadDriverForCMSModels();
+        $classes = $annotationDriver->getAllClassNames();
+
+        $this->assertContains($rightClassName, $classes);
+    }
+
+    /**
+     * @group DDC-318
+     */
+    public function testGetClassNamesReturnsOnlyTheAppropriateClasses()
+    {
+        $extraneousClassName = 'Doctrine\Tests\Models\ECommerce\ECommerceCart';
+        $this->_ensureIsLoaded($extraneousClassName);
+
+        $annotationDriver = $this->_loadDriverForCMSModels();
+        $classes = $annotationDriver->getAllClassNames();
+
+        $this->assertNotContains($extraneousClassName, $classes);
+    }
+
+    protected function _loadDriverForCMSModels()
+    {
+        $annotationDriver = $this->_loadDriver();
+        $annotationDriver->addPaths(array(__DIR__ . '/../../Models/CMS/'));
+        return $annotationDriver;
+    }
+
+    protected function _loadDriver()
+    {
+        return $this->createAnnotationDriver();
+    }
+
+    protected function _ensureIsLoaded($entityClassName)
+    {
+        new $entityClassName;
+    }
+
+    /**
+     * @group DDC-671
+     *
+     * Entities for this test are in AbstractMappingDriverTest
+     */
+    public function testJoinTablesWithMappedSuperclassForAnnotationDriver()
+    {
+        $annotationDriver = $this->_loadDriver();
+        $annotationDriver->addPaths(array(__DIR__ . '/../../Models/DirectoryTree/'));
+
+        $em = $this->_getTestEntityManager();
+        $em->getConfiguration()->setMetadataDriverImpl($annotationDriver);
+        $factory = new \Doctrine\ORM\Mapping\ClassMetadataFactory();
+        $factory->setEntityManager($em);
+
+        $classPage = $factory->getMetadataFor('Doctrine\Tests\Models\DirectoryTree\File');
+        $this->assertEquals('Doctrine\Tests\Models\DirectoryTree\File', $classPage->associationMappings['parentDirectory']['sourceEntity']);
+
+        $classDirectory = $factory->getMetadataFor('Doctrine\Tests\Models\DirectoryTree\Directory');
+        $this->assertEquals('Doctrine\Tests\Models\DirectoryTree\Directory', $classDirectory->associationMappings['parentDirectory']['sourceEntity']);
+    }
+
+    /**
+     * @group DDC-945
+     */
+    public function testInvalidMappedSuperClassWithManyToManyAssociation()
+    {
+        $annotationDriver = $this->_loadDriver();
+
+        $em = $this->_getTestEntityManager();
+        $em->getConfiguration()->setMetadataDriverImpl($annotationDriver);
+        $factory = new \Doctrine\ORM\Mapping\ClassMetadataFactory();
+        $factory->setEntityManager($em);
+
+        $this->setExpectedException('Doctrine\ORM\Mapping\MappingException',
+            "It is illegal to put an inverse side one-to-many or many-to-many association on ".
+            "mapped superclass 'Doctrine\Tests\ORM\Mapping\InvalidMappedSuperClass#users'");
+        $usingInvalidMsc = $factory->getMetadataFor('Doctrine\Tests\ORM\Mapping\UsingInvalidMappedSuperClass');
+    }
+
+    /**
+     * @group DDC-1050
+     */
+    public function testInvalidMappedSuperClassWithInheritanceInformation()
+    {
+        $annotationDriver = $this->_loadDriver();
+
+        $em = $this->_getTestEntityManager();
+        $em->getConfiguration()->setMetadataDriverImpl($annotationDriver);
+        $factory = new \Doctrine\ORM\Mapping\ClassMetadataFactory();
+        $factory->setEntityManager($em);
+
+        $this->setExpectedException('Doctrine\ORM\Mapping\MappingException',
+            "Its not supported to define inheritance information on a mapped ".
+            "superclass 'Doctrine\Tests\ORM\Mapping\MappedSuperClassInheritence'.");
+        $usingInvalidMsc = $factory->getMetadataFor('Doctrine\Tests\ORM\Mapping\MappedSuperClassInheritence');
+    }
+
+    /**
+     * @group DDC-1034
+     */
+    public function testInheritanceSkipsParentLifecycleCallbacks()
+    {
+        $annotationDriver = $this->_loadDriver();
+
+        $cm = new ClassMetadata('Doctrine\Tests\ORM\Mapping\AnnotationChild');
+        $em = $this->_getTestEntityManager();
+        $em->getConfiguration()->setMetadataDriverImpl($annotationDriver);
+        $factory = new \Doctrine\ORM\Mapping\ClassMetadataFactory();
+        $factory->setEntityManager($em);
+
+        $cm = $factory->getMetadataFor('Doctrine\Tests\ORM\Mapping\AnnotationChild');
+        $this->assertEquals(array("postLoad" => array("postLoad"), "preUpdate" => array("preUpdate")), $cm->lifecycleCallbacks);
+
+        $cm = $factory->getMetadataFor('Doctrine\Tests\ORM\Mapping\AnnotationParent');
+        $this->assertEquals(array("postLoad" => array("postLoad"), "preUpdate" => array("preUpdate")), $cm->lifecycleCallbacks);
+    }
+
+    /**
+     * @group DDC-1156
+     */
+    public function testMappedSuperclassInMiddleOfInheritanceHierachy()
+    {
+        $annotationDriver = $this->_loadDriver();
+
+        $em = $this->_getTestEntityManager();
+        $em->getConfiguration()->setMetadataDriverImpl($annotationDriver);
+        $factory = new \Doctrine\ORM\Mapping\ClassMetadataFactory();
+        $factory->setEntityManager($em);
+
+        $cm = $factory->getMetadataFor('Doctrine\Tests\ORM\Mapping\ChildEntity');
+    }
+
+    public function testInvalidFetchOptionThrowsException()
+    {
+        $annotationDriver = $this->_loadDriver();
+
+        $em = $this->_getTestEntityManager();
+        $em->getConfiguration()->setMetadataDriverImpl($annotationDriver);
+        $factory = new \Doctrine\ORM\Mapping\ClassMetadataFactory();
+        $factory->setEntityManager($em);
+
+        $this->setExpectedException('Doctrine\ORM\Mapping\MappingException',
+            "Entity 'Doctrine\Tests\ORM\Mapping\InvalidFetchOption' has a mapping with invalid fetch mode 'eager");
+        $cm = $factory->getMetadataFor('Doctrine\Tests\ORM\Mapping\InvalidFetchOption');
+    }
+}
+
+/**
+ * @Entity
+ */
+class ColumnWithoutType
+{
+    /** @Id @Column */
+    public $id;
+}
+
+/**
+ * @MappedSuperclass
+ */
+class InvalidMappedSuperClass
+{
+    /**
+     * @ManyToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", mappedBy="invalid")
+     */
+    private $users;
+}
+
+/**
+ * @Entity
+ */
+class UsingInvalidMappedSuperClass extends InvalidMappedSuperClass
+{
+    /**
+     * @Id @Column(type="integer") @GeneratedValue
+     */
+    private $id;
+}
+
+/**
+ * @MappedSuperclass
+ * @InheritanceType("JOINED")
+ * @DiscriminatorMap({"test" = "ColumnWithoutType"})
+ */
+class MappedSuperClassInheritence
+{
+
+}
+
+/**
+ * @Entity
+ * @InheritanceType("JOINED")
+ * @DiscriminatorMap({"parent" = "AnnotationParent", "child" = "AnnotationChild"})
+ * @HasLifecycleCallbacks
+ */
+class AnnotationParent
+{
+    /**
+     * @Id @Column(type="integer") @GeneratedValue
+     */
+    private $id;
+
+    /**
+     * @PostLoad
+     */
+    public function postLoad()
+    {
+
+    }
+
+    /**
+     * @PreUpdate
+     */
+    public function preUpdate()
+    {
+
+    }
+}
+
+/**
+ * @Entity
+ * @HasLifecycleCallbacks
+ */
+class AnnotationChild extends AnnotationParent
+{
+
+}
+
+/**
+ * @Entity
+ * @InheritanceType("SINGLE_TABLE")
+ * @DiscriminatorMap({"s"="SuperEntity", "c"="ChildEntity"})
+ */
+class SuperEntity
+{
+    /** @Id @Column(type="string") */
+    private $id;
+}
+
+/**
+ * @MappedSuperclass
+ */
+class MiddleMappedSuperclass extends SuperEntity
+{
+    /** @Column(type="string") */
+    private $name;
+}
+
+/**
+ * @Entity
+ */
+class ChildEntity extends MiddleMappedSuperclass
+{
+    /**
+     * @Column(type="string")
+     */
+    private $text;
+}
+
+/**
+ * @Entity
+ */
+class InvalidFetchOption
+{
+    /**
+     * @OneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", fetch="eager")
+     */
+    private $collection;
+}