Rajout de doctrine/orm
[zf2.biz/galerie.git] / vendor / doctrine / orm / tests / Doctrine / Tests / ORM / Functional / Ticket / DDC258Test.php
1 <?php
2 namespace Doctrine\Tests\ORM\Functional\Ticket;
3
4 require_once __DIR__ . '/../../../TestInit.php';
5
6 class DDC258Test extends \Doctrine\Tests\OrmFunctionalTestCase
7 {
8     protected function setUp()
9     {
10         parent::setUp();
11         $this->_schemaTool->createSchema(array(
12             $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC258Super'),
13             $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC258Class1'),
14             $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC258Class2'),
15             $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC258Class3'),
16         ));
17     }
18
19     /**
20      * @group DDC-258
21      */
22     public function testIssue()
23     {
24         //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger);
25
26         $c1 = new DDC258Class1();
27         $c1->title = "Foo";
28         $c1->description = "Foo";
29
30         $c2 = new DDC258Class2();
31         $c2->title = "Bar";
32         $c2->description = "Bar";
33         $c2->text = "Bar";
34
35         $c3 = new DDC258Class3();
36         $c3->apples = "Baz";
37         $c3->bananas = "Baz";
38
39         $this->_em->persist($c1);
40         $this->_em->persist($c2);
41         $this->_em->persist($c3);
42         $this->_em->flush();
43         $this->_em->clear();
44
45         $e2 = $this->_em->find('Doctrine\Tests\ORM\Functional\Ticket\DDC258Super', $c2->id);
46
47         $this->assertInstanceOf('Doctrine\Tests\ORM\Functional\Ticket\DDC258Class2', $e2);
48         $this->assertEquals('Bar', $e2->title);
49         $this->assertEquals('Bar', $e2->description);
50         $this->assertEquals('Bar', $e2->text);
51
52         $all = $this->_em->getRepository(__NAMESPACE__.'\DDC258Super')->findAll();
53
54         foreach ($all as $obj) {
55             if ($obj instanceof DDC258Class1) {
56                 $this->assertEquals('Foo', $obj->title);
57                 $this->assertEquals('Foo', $obj->description);
58             } else if ($obj instanceof DDC258Class2) {
59                 $this->assertTrue($e2 === $obj);
60                 $this->assertEquals('Bar', $obj->title);
61                 $this->assertEquals('Bar', $obj->description);
62                 $this->assertEquals('Bar', $obj->text);
63             } else if ($obj instanceof DDC258Class3) {
64                 $this->assertEquals('Baz', $obj->apples);
65                 $this->assertEquals('Baz', $obj->bananas);
66             } else {
67                 $this->fail('Instance of DDC258Class1, DDC258Class2 or DDC258Class3 expected.');
68             }
69         }
70     }
71 }
72
73 /**
74  * @Entity
75  * @Table(name="DDC258Super")
76  * @InheritanceType("JOINED")
77  * @DiscriminatorColumn(name="type", type="string")
78  * @DiscriminatorMap({"class1" = "DDC258Class1", "class2" = "DDC258Class2", "class3"="DDC258Class3"})
79  */
80 abstract class DDC258Super
81 {
82     /**
83      * @Id @Column(name="id", type="integer")
84      * @GeneratedValue(strategy="AUTO")
85     */
86     public $id;
87 }
88
89 /**
90  * @Entity
91  */
92 class DDC258Class1 extends DDC258Super
93 {
94     /**
95      * @Column(name="title", type="string", length=150)
96      */
97     public $title;
98
99     /**
100      * @Column(name="content", type="string", length=500)
101      */
102     public $description;
103 }
104
105 /**
106  * @Entity
107  */
108 class DDC258Class2 extends DDC258Super
109 {
110     /**
111      * @Column(name="title", type="string", length=150)
112      */
113     public $title;
114
115     /**
116      * @Column(name="content", type="string", length=500)
117      */
118     public $description;
119
120     /**
121      * @Column(name="text", type="text")
122      */
123     public $text;
124 }
125
126 /**
127  * An extra class to demonstrate why title and description aren't in Super
128  *
129  * @Entity
130  */
131 class DDC258Class3 extends DDC258Super
132 {
133     /**
134      * @Column(name="title", type="string", length=150)
135      */
136     public $apples;
137
138     /**
139      * @Column(name="content", type="string", length=500)
140      */
141     public $bananas;
142 }