Rajout de doctrine/orm
[zf2.biz/galerie.git] / vendor / doctrine / orm / tests / Doctrine / Tests / ORM / Functional / Ticket / DDC837Test.php
1 <?php
2 namespace Doctrine\Tests\ORM\Functional\Ticket;
3
4 require_once __DIR__ . '/../../../TestInit.php';
5
6 class DDC837Test extends \Doctrine\Tests\OrmFunctionalTestCase
7 {
8     protected function setUp()
9     {
10         parent::setUp();
11         $this->_schemaTool->createSchema(array(
12             $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC837Super'),
13             $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC837Class1'),
14             $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC837Class2'),
15             $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC837Class3'),
16             $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC837Aggregate'),
17         ));
18     }
19
20     /**
21      * @group DDC-837
22      */
23     public function testIssue()
24     {
25         //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger);
26
27         $c1 = new DDC837Class1();
28         $c1->title = "Foo";
29         $c1->description = "Foo";
30         $aggregate1 = new DDC837Aggregate('test1');
31         $c1->aggregate = $aggregate1;
32
33         $c2 = new DDC837Class2();
34         $c2->title = "Bar";
35         $c2->description = "Bar";
36         $c2->text = "Bar";
37         $aggregate2 = new DDC837Aggregate('test2');
38         $c2->aggregate = $aggregate2;
39
40         $c3 = new DDC837Class3();
41         $c3->apples = "Baz";
42         $c3->bananas = "Baz";
43
44         $this->_em->persist($c1);
45         $this->_em->persist($aggregate1);
46         $this->_em->persist($c2);
47         $this->_em->persist($aggregate2);
48         $this->_em->persist($c3);
49         $this->_em->flush();
50         $this->_em->clear();
51
52         // Test Class1
53         $e1 = $this->_em->find('Doctrine\Tests\ORM\Functional\Ticket\DDC837Super', $c1->id);
54
55         $this->assertInstanceOf('Doctrine\Tests\ORM\Functional\Ticket\DDC837Class1', $e1);
56         $this->assertEquals('Foo', $e1->title);
57         $this->assertEquals('Foo', $e1->description);
58         $this->assertInstanceOf(__NAMESPACE__ . '\DDC837Aggregate', $e1->aggregate);
59         $this->assertEquals('test1', $e1->aggregate->getSysname());
60
61         // Test Class 2
62         $e2 = $this->_em->find('Doctrine\Tests\ORM\Functional\Ticket\DDC837Super', $c2->id);
63
64         $this->assertInstanceOf('Doctrine\Tests\ORM\Functional\Ticket\DDC837Class2', $e2);
65         $this->assertEquals('Bar', $e2->title);
66         $this->assertEquals('Bar', $e2->description);
67         $this->assertEquals('Bar', $e2->text);
68         $this->assertInstanceOf(__NAMESPACE__ . '\DDC837Aggregate', $e2->aggregate);
69         $this->assertEquals('test2', $e2->aggregate->getSysname());
70
71         $all = $this->_em->getRepository(__NAMESPACE__.'\DDC837Super')->findAll();
72
73         foreach ($all as $obj) {
74             if ($obj instanceof DDC837Class1) {
75                 $this->assertEquals('Foo', $obj->title);
76                 $this->assertEquals('Foo', $obj->description);
77             } else if ($obj instanceof DDC837Class2) {
78                 $this->assertTrue($e2 === $obj);
79                 $this->assertEquals('Bar', $obj->title);
80                 $this->assertEquals('Bar', $obj->description);
81                 $this->assertEquals('Bar', $obj->text);
82             } else if ($obj instanceof DDC837Class3) {
83                 $this->assertEquals('Baz', $obj->apples);
84                 $this->assertEquals('Baz', $obj->bananas);
85             } else {
86                 $this->fail('Instance of DDC837Class1, DDC837Class2 or DDC837Class3 expected.');
87             }
88         }
89     }
90 }
91
92 /**
93  * @Entity
94  * @Table(name="DDC837Super")
95  * @InheritanceType("JOINED")
96  * @DiscriminatorColumn(name="type", type="string")
97  * @DiscriminatorMap({"class1" = "DDC837Class1", "class2" = "DDC837Class2", "class3"="DDC837Class3"})
98  */
99 abstract class DDC837Super
100 {
101     /**
102      * @Id @Column(name="id", type="integer")
103      * @GeneratedValue(strategy="AUTO")
104     */
105     public $id;
106 }
107
108 /**
109  * @Entity
110  */
111 class DDC837Class1 extends DDC837Super
112 {
113     /**
114      * @Column(name="title", type="string", length=150)
115      */
116     public $title;
117
118     /**
119      * @Column(name="content", type="string", length=500)
120      */
121     public $description;
122
123     /**
124      * @OneToOne(targetEntity="DDC837Aggregate")
125      */
126     public $aggregate;
127 }
128
129 /**
130  * @Entity
131  */
132 class DDC837Class2 extends DDC837Super
133 {
134     /**
135      * @Column(name="title", type="string", length=150)
136      */
137     public $title;
138
139     /**
140      * @Column(name="content", type="string", length=500)
141      */
142     public $description;
143
144     /**
145      * @Column(name="text", type="text")
146      */
147     public $text;
148
149     /**
150      * @OneToOne(targetEntity="DDC837Aggregate")
151      */
152     public $aggregate;
153 }
154
155 /**
156  * An extra class to demonstrate why title and description aren't in Super
157  *
158  * @Entity
159  */
160 class DDC837Class3 extends DDC837Super
161 {
162     /**
163      * @Column(name="title", type="string", length=150)
164      */
165     public $apples;
166
167     /**
168      * @Column(name="content", type="string", length=500)
169      */
170     public $bananas;
171 }
172
173 /**
174  * @Entity
175  */
176 class DDC837Aggregate
177 {
178     /**
179      * @Id @Column(name="id", type="integer")
180      * @GeneratedValue
181      */
182     public $id;
183
184     /**
185      * @Column(name="sysname", type="string")
186      */
187     protected $sysname;
188
189     public function __construct($sysname)
190     {
191         $this->sysname = $sysname;
192     }
193
194     public function getSysname()
195     {
196         return $this->sysname;
197     }
198 }