Rajout de doctrine/orm
[zf2.biz/application_blanche.git] / vendor / doctrine / orm / tests / Doctrine / Tests / ORM / Functional / Ticket / DDC237Test.php
diff --git a/vendor/doctrine/orm/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC237Test.php b/vendor/doctrine/orm/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC237Test.php
new file mode 100644 (file)
index 0000000..413e564
--- /dev/null
@@ -0,0 +1,112 @@
+<?php
+
+namespace Doctrine\Tests\ORM\Functional\Ticket;
+
+require_once __DIR__ . '/../../../TestInit.php';
+
+class DDC237Test extends \Doctrine\Tests\OrmFunctionalTestCase
+{
+    protected function setUp()
+    {
+        parent::setUp();
+        $this->_schemaTool->createSchema(array(
+            $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC237EntityX'),
+            $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC237EntityY'),
+            $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC237EntityZ')
+        ));
+    }
+
+    public function testUninitializedProxyIsInitializedOnFetchJoin()
+    {
+        $x = new DDC237EntityX;
+        $y = new DDC237EntityY;
+        $z = new DDC237EntityZ;
+
+        $x->data = 'X';
+        $y->data = 'Y';
+        $z->data = 'Z';
+
+        $x->y = $y;
+        $z->y = $y;
+
+        $this->_em->persist($x);
+        $this->_em->persist($y);
+        $this->_em->persist($z);
+
+        $this->_em->flush();
+        $this->_em->clear();
+
+        $x2 = $this->_em->find(get_class($x), $x->id); // proxy injected for Y
+        $this->assertInstanceOf('Doctrine\ORM\Proxy\Proxy', $x2->y);
+        $this->assertFalse($x2->y->__isInitialized__);
+
+        // proxy for Y is in identity map
+
+        $z2 = $this->_em->createQuery('select z,y from ' . get_class($z) . ' z join z.y y where z.id = ?1')
+                ->setParameter(1, $z->id)
+                ->getSingleResult();
+        $this->assertInstanceOf('Doctrine\ORM\Proxy\Proxy', $z2->y);
+        $this->assertTrue($z2->y->__isInitialized__);
+        $this->assertEquals('Y', $z2->y->data);
+        $this->assertEquals($y->id, $z2->y->id);
+
+        // since the Y is the same, the instance from the identity map is
+        // used, even if it is a proxy.
+
+        $this->assertNotSame($x, $x2);
+        $this->assertNotSame($z, $z2);
+        $this->assertSame($z2->y, $x2->y);
+        $this->assertInstanceOf('Doctrine\ORM\Proxy\Proxy', $z2->y);
+
+    }
+}
+
+
+/**
+ * @Entity @Table(name="ddc237_x")
+ */
+class DDC237EntityX
+{
+    /**
+     * @Id @Column(type="integer") @GeneratedValue
+     */
+    public $id;
+    /**
+     * @Column(type="string")
+     */
+    public $data;
+    /**
+     * @OneToOne(targetEntity="DDC237EntityY")
+     * @JoinColumn(name="y_id", referencedColumnName="id")
+     */
+    public $y;
+}
+
+
+/** @Entity @Table(name="ddc237_y") */
+class DDC237EntityY
+{
+    /**
+     * @Id @Column(type="integer") @GeneratedValue
+     */
+    public $id;
+    /**
+     * @Column(type="string")
+     */
+    public $data;
+}
+
+/** @Entity @Table(name="ddc237_z") */
+class DDC237EntityZ
+{
+    /** @Id @Column(type="integer") @GeneratedValue */
+    public $id;
+    /** @Column(type="string") */
+    public $data;
+
+    /**
+     * @OneToOne(targetEntity="DDC237EntityY")
+     * @JoinColumn(name="y_id", referencedColumnName="id")
+     */
+    public $y;
+}
\ No newline at end of file