Failed Conditions
Pull Request — master (#6709)
by Sergey
15:18
created

testShouldIgnoreAliasesForSingleObject()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 39
Code Lines 17

Duplication

Lines 39
Ratio 100 %

Importance

Changes 0
Metric Value
dl 39
loc 39
rs 8.8571
c 0
b 0
f 0
cc 1
eloc 17
nc 1
nop 1
1
<?php
2
3
namespace Doctrine\Tests\ORM\Functional;
4
5
use Doctrine\ORM\Query;
6
use Doctrine\Tests\Models\CMS\CmsAddressDTO;
7
use Doctrine\Tests\Models\CMS\CmsUser;
8
use Doctrine\Tests\Models\CMS\CmsEmail;
9
use Doctrine\Tests\Models\CMS\CmsAddress;
10
use Doctrine\Tests\Models\CMS\CmsPhonenumber;
11
use Doctrine\Tests\Models\CMS\CmsUserDTO;
12
use Doctrine\Tests\OrmFunctionalTestCase;
13
14
/**
15
 * @group DDC-1574
16
 */
17
class NewOperatorTest extends OrmFunctionalTestCase
18
{
19
    /**
20
     * @var array
21
     */
22
    private $fixtures;
23
24
    protected function setUp()
25
    {
26
        $this->useModelSet('cms');
27
        parent::setUp();
28
29
        $this->loadFixtures();
30
    }
31
32
    public function provideDataForHydrationMode()
33
    {
34
        return [
35
            [Query::HYDRATE_ARRAY],
36
            [Query::HYDRATE_OBJECT],
37
        ];
38
    }
39
40
    private function loadFixtures()
41
    {
42
        $u1 = new CmsUser;
43
        $u2 = new CmsUser;
44
        $u3 = new CmsUser;
45
46
        $u1->setEmail(new CmsEmail());
47
        $u1->setAddress(new CmsAddress());
48
        $u1->addPhonenumber(new CmsPhonenumber());
49
50
        $u2->setEmail(new CmsEmail());
51
        $u2->setAddress(new CmsAddress());
52
        $u2->addPhonenumber(new CmsPhonenumber());
53
        $u2->addPhonenumber(new CmsPhonenumber());
54
55
        $u3->setEmail(new CmsEmail());
56
        $u3->setAddress(new CmsAddress());
57
        $u3->addPhonenumber(new CmsPhonenumber());
58
        $u3->addPhonenumber(new CmsPhonenumber());
59
        $u3->addPhonenumber(new CmsPhonenumber());
60
61
        $u1->name               = 'Test 1';
62
        $u1->username           = '1test';
63
        $u1->status             = 'developer';
64
        $u1->email->email       = '[email protected]';
65
        $u1->address->zip       = '111111111';
66
        $u1->address->city      = 'Some City 1';
67
        $u1->address->country   = 'Some Country 2';
68
        $u1->phonenumbers[0]->phonenumber = "(11) 1111-1111";
69
70
        $u2->name               = 'Test 2';
71
        $u2->username           = '2test';
72
        $u2->status             = 'developer';
73
        $u2->email->email       = '[email protected]';
74
        $u2->address->zip       = '222222222';
75
        $u2->address->city      = 'Some City 2';
76
        $u2->address->country   = 'Some Country 2';
77
        $u2->phonenumbers[0]->phonenumber = "(22) 1111-1111";
78
        $u2->phonenumbers[1]->phonenumber = "(22) 2222-2222";
79
80
        $u3->name               = 'Test 3';
81
        $u3->username           = '3test';
82
        $u3->status             = 'developer';
83
        $u3->email->email       = '[email protected]';
84
        $u3->address->zip       = '33333333';
85
        $u3->address->city      = 'Some City 3';
86
        $u3->address->country   = 'Some Country 3';
87
        $u3->phonenumbers[0]->phonenumber = "(33) 1111-1111";
88
        $u3->phonenumbers[1]->phonenumber = "(33) 2222-2222";
89
        $u3->phonenumbers[2]->phonenumber = "(33) 3333-3333";
90
91
        $this->_em->persist($u1);
92
        $this->_em->persist($u2);
93
        $this->_em->persist($u3);
94
95
        $this->_em->flush();
96
        $this->_em->clear();
97
98
        $this->fixtures = [$u1, $u2, $u3];
99
    }
100
101
    /**
102
     * @dataProvider provideDataForHydrationMode
103
     */
104 View Code Duplication
    public function testShouldSupportsBasicUsage($hydrationMode)
105
    {
106
        $dql = "
107
            SELECT
108
                new Doctrine\Tests\Models\CMS\CmsUserDTO(
109
                    u.name,
110
                    e.email,
111
                    a.city
112
                )
113
            FROM
114
                Doctrine\Tests\Models\CMS\CmsUser u
115
            JOIN
116
                u.email e
117
            JOIN
118
                u.address a
119
            ORDER BY
120
                u.name";
121
122
        $query  = $this->_em->createQuery($dql);
123
        $result = $query->getResult($hydrationMode);
124
125
        $this->assertCount(3, $result);
126
127
        $this->assertInstanceOf(CmsUserDTO::class, $result[0]);
128
        $this->assertInstanceOf(CmsUserDTO::class, $result[1]);
129
        $this->assertInstanceOf(CmsUserDTO::class, $result[2]);
130
131
        $this->assertEquals($this->fixtures[0]->name, $result[0]->name);
132
        $this->assertEquals($this->fixtures[1]->name, $result[1]->name);
133
        $this->assertEquals($this->fixtures[2]->name, $result[2]->name);
134
135
        $this->assertEquals($this->fixtures[0]->email->email, $result[0]->email);
136
        $this->assertEquals($this->fixtures[1]->email->email, $result[1]->email);
137
        $this->assertEquals($this->fixtures[2]->email->email, $result[2]->email);
138
139
        $this->assertEquals($this->fixtures[0]->address->city, $result[0]->address);
140
        $this->assertEquals($this->fixtures[1]->address->city, $result[1]->address);
141
        $this->assertEquals($this->fixtures[2]->address->city, $result[2]->address);
142
    }
143
144
    /**
145
     * @dataProvider provideDataForHydrationMode
146
     */
147 View Code Duplication
    public function testShouldIgnoreAliasesForSingleObject($hydrationMode)
148
    {
149
        $dql = "
150
            SELECT
151
                new Doctrine\Tests\Models\CMS\CmsUserDTO(
152
                    u.name,
153
                    e.email,
154
                    a.city
155
                ) as cmsUser
156
            FROM
157
                Doctrine\Tests\Models\CMS\CmsUser u
158
            JOIN
159
                u.email e
160
            JOIN
161
                u.address a
162
            ORDER BY
163
                u.name";
164
165
        $query  = $this->_em->createQuery($dql);
166
        $result = $query->getResult($hydrationMode);
167
168
        $this->assertCount(3, $result);
169
170
        $this->assertInstanceOf(CmsUserDTO::class, $result[0]);
171
        $this->assertInstanceOf(CmsUserDTO::class, $result[1]);
172
        $this->assertInstanceOf(CmsUserDTO::class, $result[2]);
173
174
        $this->assertEquals($this->fixtures[0]->name, $result[0]->name);
175
        $this->assertEquals($this->fixtures[1]->name, $result[1]->name);
176
        $this->assertEquals($this->fixtures[2]->name, $result[2]->name);
177
178
        $this->assertEquals($this->fixtures[0]->email->email, $result[0]->email);
179
        $this->assertEquals($this->fixtures[1]->email->email, $result[1]->email);
180
        $this->assertEquals($this->fixtures[2]->email->email, $result[2]->email);
181
182
        $this->assertEquals($this->fixtures[0]->address->city, $result[0]->address);
183
        $this->assertEquals($this->fixtures[1]->address->city, $result[1]->address);
184
        $this->assertEquals($this->fixtures[2]->address->city, $result[2]->address);
185
    }
186
187
    public function testShouldAssumeFromEntityNamespaceWhenNotGiven()
188
    {
189
        $dql = "
190
            SELECT
191
                new CmsUserDTO(u.name, e.email, a.city)
192
            FROM 
193
                Doctrine\Tests\Models\CMS\CmsUser u
194
            JOIN
195
                u.email e
196
            JOIN
197
                u.address a
198
            ORDER BY
199
                u.name";
200
201
        $query  = $this->_em->createQuery($dql);
202
        $result = $query->getResult();
203
204
        $this->assertCount(3, $result);
205
206
        $this->assertInstanceOf(CmsUserDTO::class, $result[0]);
207
        $this->assertInstanceOf(CmsUserDTO::class, $result[1]);
208
        $this->assertInstanceOf(CmsUserDTO::class, $result[2]);
209
    }
210
211 View Code Duplication
    public function testShouldSupportFromEntityNamespaceAlias()
212
    {
213
        $dql = "
214
            SELECT
215
                new CmsUserDTO(u.name, e.email, a.city)
216
            FROM
217
                cms:CmsUser u
218
            JOIN
219
                u.email e
220
            JOIN
221
                u.address a
222
            ORDER BY
223
                u.name";
224
225
226
        $this->_em->getConfiguration()
227
            ->addEntityNamespace('cms', 'Doctrine\Tests\Models\CMS');
228
229
        $query  = $this->_em->createQuery($dql);
230
        $result = $query->getResult();
231
232
        $this->assertCount(3, $result);
233
234
        $this->assertInstanceOf(CmsUserDTO::class, $result[0]);
235
        $this->assertInstanceOf(CmsUserDTO::class, $result[1]);
236
        $this->assertInstanceOf(CmsUserDTO::class, $result[2]);
237
    }
238
239 View Code Duplication
    public function testShouldSupportValueObjectNamespaceAlias()
240
    {
241
        $dql = "
242
            SELECT
243
                new cms:CmsUserDTO(u.name, e.email, a.city)
244
            FROM
245
                cms:CmsUser u
246
            JOIN
247
                u.email e
248
            JOIN
249
                u.address a
250
            ORDER BY
251
                u.name";
252
253
254
        $this->_em->getConfiguration()
255
            ->addEntityNamespace('cms', 'Doctrine\Tests\Models\CMS');
256
257
        $query  = $this->_em->createQuery($dql);
258
        $result = $query->getResult();
259
260
        $this->assertCount(3, $result);
261
262
        $this->assertInstanceOf(CmsUserDTO::class, $result[0]);
263
        $this->assertInstanceOf(CmsUserDTO::class, $result[1]);
264
        $this->assertInstanceOf(CmsUserDTO::class, $result[2]);
265
    }
266
267
    public function testShouldSupportLiteralExpression()
268
    {
269
        $dql = "
270
            SELECT
271
                new Doctrine\Tests\Models\CMS\CmsUserDTO(
272
                    u.name,
273
                    '[email protected]',
274
                    FALSE,
275
                    123
276
                )
277
            FROM
278
                Doctrine\Tests\Models\CMS\CmsUser u
279
            JOIN
280
                u.email e
281
            JOIN
282
                u.address a
283
            JOIN
284
                u.phonenumbers p
285
            GROUP BY
286
                u, e, a
287
            ORDER BY
288
                u.name";
289
290
        $query  = $this->_em->createQuery($dql);
291
        $result = $query->getResult();
292
293
        $this->assertCount(3, $result);
294
295
        $this->assertInstanceOf(CmsUserDTO::class, $result[0]);
296
        $this->assertInstanceOf(CmsUserDTO::class, $result[1]);
297
        $this->assertInstanceOf(CmsUserDTO::class, $result[2]);
298
299
300
        $this->assertEquals($this->fixtures[0]->name, $result[0]->name);
301
        $this->assertEquals($this->fixtures[1]->name, $result[1]->name);
302
        $this->assertEquals($this->fixtures[2]->name, $result[2]->name);
303
304
        $this->assertEquals('[email protected]', $result[0]->email);
305
        $this->assertEquals('[email protected]', $result[1]->email);
306
        $this->assertEquals('[email protected]', $result[2]->email);
307
308
        $this->assertEquals(false, $result[0]->address);
309
        $this->assertEquals(false, $result[1]->address);
310
        $this->assertEquals(false, $result[2]->address);
311
312
        $this->assertEquals(123, $result[0]->phonenumbers);
313
        $this->assertEquals(123, $result[1]->phonenumbers);
314
        $this->assertEquals(123, $result[2]->phonenumbers);
315
    }
316
317
    public function testShouldSupportCaseExpression()
318
    {
319
        $dql = "
320
            SELECT
321
                new Doctrine\Tests\Models\CMS\CmsUserDTO(
322
                    u.name,
323
                    CASE WHEN (e.email = '[email protected]') THEN 'TEST1' ELSE 'OTHER_TEST' END
324
                )
325
            FROM
326
                Doctrine\Tests\Models\CMS\CmsUser u
327
            JOIN
328
                u.email e
329
            JOIN
330
                u.address a
331
            JOIN
332
                u.phonenumbers p
333
            GROUP BY
334
                u, e, a
335
            ORDER BY
336
                u.name";
337
338
        $query  = $this->_em->createQuery($dql);
339
        $result = $query->getResult();
340
341
        $this->assertCount(3, $result);
342
343
        $this->assertInstanceOf(CmsUserDTO::class, $result[0]);
344
        $this->assertInstanceOf(CmsUserDTO::class, $result[1]);
345
        $this->assertInstanceOf(CmsUserDTO::class, $result[2]);
346
347
348
        $this->assertEquals($this->fixtures[0]->name, $result[0]->name);
349
        $this->assertEquals($this->fixtures[1]->name, $result[1]->name);
350
        $this->assertEquals($this->fixtures[2]->name, $result[2]->name);
351
352
        $this->assertEquals('TEST1', $result[0]->email);
353
        $this->assertEquals('OTHER_TEST', $result[1]->email);
354
        $this->assertEquals('OTHER_TEST', $result[2]->email);
355
    }
356
357
    public function testShouldSupportSimpleArithmeticExpression()
358
    {
359
        $dql = "
360
            SELECT
361
                new Doctrine\Tests\Models\CMS\CmsUserDTO(
362
                    u.name,
363
                    e.email,
364
                    a.city,
365
                    a.id + u.id
366
                )
367
            FROM
368
                Doctrine\Tests\Models\CMS\CmsUser u
369
            JOIN
370
                u.email e
371
            JOIN
372
                u.address a
373
            JOIN
374
                u.phonenumbers p
375
            GROUP BY
376
                u, e, a
377
            ORDER BY
378
                u.name";
379
380
        $query  = $this->_em->createQuery($dql);
381
        $result = $query->getResult();
382
383
        $this->assertCount(3, $result);
384
385
        $this->assertInstanceOf(CmsUserDTO::class, $result[0]);
386
        $this->assertInstanceOf(CmsUserDTO::class, $result[1]);
387
        $this->assertInstanceOf(CmsUserDTO::class, $result[2]);
388
389
        $this->assertEquals($this->fixtures[0]->name, $result[0]->name);
390
        $this->assertEquals($this->fixtures[1]->name, $result[1]->name);
391
        $this->assertEquals($this->fixtures[2]->name, $result[2]->name);
392
393
        $this->assertEquals($this->fixtures[0]->email->email, $result[0]->email);
394
        $this->assertEquals($this->fixtures[1]->email->email, $result[1]->email);
395
        $this->assertEquals($this->fixtures[2]->email->email, $result[2]->email);
396
397
        $this->assertEquals($this->fixtures[0]->address->city, $result[0]->address);
398
        $this->assertEquals($this->fixtures[1]->address->city, $result[1]->address);
399
        $this->assertEquals($this->fixtures[2]->address->city, $result[2]->address);
400
401
        $this->assertEquals(
402
            ($this->fixtures[0]->address->id + $this->fixtures[0]->id),
403
            $result[0]->phonenumbers
404
        );
405
406
        $this->assertEquals(
407
            ($this->fixtures[1]->address->id + $this->fixtures[1]->id),
408
            $result[1]->phonenumbers
409
        );
410
411
        $this->assertEquals(
412
            ($this->fixtures[2]->address->id + $this->fixtures[2]->id),
413
            $result[2]->phonenumbers
414
        );
415
    }
416
417
    public function testShouldSupportAggregateFunctions()
418
    {
419
        $dql = "
420
            SELECT
421
                new Doctrine\Tests\Models\CMS\CmsUserDTO(
422
                    u.name,
423
                    e.email,
424
                    a.city,
425
                    COUNT(p)
426
                )
427
            FROM
428
                Doctrine\Tests\Models\CMS\CmsUser u
429
            JOIN
430
                u.email e
431
            JOIN
432
                u.address a
433
            JOIN
434
                u.phonenumbers p
435
            GROUP BY
436
                u, e, a
437
            ORDER BY
438
                u.name";
439
440
        $query  = $this->_em->createQuery($dql);
441
        $result = $query->getResult();
442
443
        $this->assertCount(3, $result);
444
445
        $this->assertInstanceOf(CmsUserDTO::class, $result[0]);
446
        $this->assertInstanceOf(CmsUserDTO::class, $result[1]);
447
        $this->assertInstanceOf(CmsUserDTO::class, $result[2]);
448
449
        $this->assertEquals($this->fixtures[0]->name, $result[0]->name);
450
        $this->assertEquals($this->fixtures[1]->name, $result[1]->name);
451
        $this->assertEquals($this->fixtures[2]->name, $result[2]->name);
452
453
        $this->assertEquals($this->fixtures[0]->email->email, $result[0]->email);
454
        $this->assertEquals($this->fixtures[1]->email->email, $result[1]->email);
455
        $this->assertEquals($this->fixtures[2]->email->email, $result[2]->email);
456
457
        $this->assertEquals($this->fixtures[0]->address->city, $result[0]->address);
458
        $this->assertEquals($this->fixtures[1]->address->city, $result[1]->address);
459
        $this->assertEquals($this->fixtures[2]->address->city, $result[2]->address);
460
461
        $this->assertEquals(
462
            (count($this->fixtures[0]->phonenumbers)),
463
            $result[0]->phonenumbers
464
        );
465
466
        $this->assertEquals(
467
            (count($this->fixtures[1]->phonenumbers)),
468
            $result[1]->phonenumbers
469
        );
470
471
        $this->assertEquals(
472
            (count($this->fixtures[2]->phonenumbers)),
473
            $result[2]->phonenumbers
474
        );
475
    }
476
477
    public function testShouldSupportArithmeticExpression()
478
    {
479
        $dql = "
480
            SELECT
481
                new Doctrine\Tests\Models\CMS\CmsUserDTO(
482
                    u.name,
483
                    e.email,
484
                    a.city,
485
                    COUNT(p) + u.id
486
                )
487
            FROM
488
                Doctrine\Tests\Models\CMS\CmsUser u
489
            JOIN
490
                u.email e
491
            JOIN
492
                u.address a
493
            JOIN
494
                u.phonenumbers p
495
            GROUP BY
496
                u, e, a
497
            ORDER BY
498
                u.name";
499
500
        $query  = $this->_em->createQuery($dql);
501
        $result = $query->getResult();
502
503
        $this->assertCount(3, $result);
504
505
        $this->assertInstanceOf(CmsUserDTO::class, $result[0]);
506
        $this->assertInstanceOf(CmsUserDTO::class, $result[1]);
507
        $this->assertInstanceOf(CmsUserDTO::class, $result[2]);
508
509
        $this->assertEquals($this->fixtures[0]->name, $result[0]->name);
510
        $this->assertEquals($this->fixtures[1]->name, $result[1]->name);
511
        $this->assertEquals($this->fixtures[2]->name, $result[2]->name);
512
513
        $this->assertEquals($this->fixtures[0]->email->email, $result[0]->email);
514
        $this->assertEquals($this->fixtures[1]->email->email, $result[1]->email);
515
        $this->assertEquals($this->fixtures[2]->email->email, $result[2]->email);
516
517
        $this->assertEquals($this->fixtures[0]->address->city, $result[0]->address);
518
        $this->assertEquals($this->fixtures[1]->address->city, $result[1]->address);
519
        $this->assertEquals($this->fixtures[2]->address->city, $result[2]->address);
520
521
        $this->assertEquals(
522
            (count($this->fixtures[0]->phonenumbers) + $this->fixtures[0]->id),
523
            $result[0]->phonenumbers
524
        );
525
526
        $this->assertEquals(
527
            (count($this->fixtures[1]->phonenumbers) + $this->fixtures[1]->id),
528
            $result[1]->phonenumbers
529
        );
530
531
        $this->assertEquals(
532
            (count($this->fixtures[2]->phonenumbers) + $this->fixtures[2]->id),
533
            $result[2]->phonenumbers
534
        );
535
    }
536
537 View Code Duplication
    public function testShouldSupportMultipleNewOperators()
538
    {
539
        $dql = "
540
            SELECT
541
                new CmsUserDTO(
542
                    u.name,
543
                    e.email
544
                ),
545
                new CmsAddressDTO(
546
                    a.country,
547
                    a.city
548
                )
549
            FROM
550
                Doctrine\Tests\Models\CMS\CmsUser u
551
            JOIN
552
                u.email e
553
            JOIN
554
                u.address a
555
            ORDER BY
556
                u.name";
557
558
        $query  = $this->_em->createQuery($dql);
559
        $result = $query->getResult();
560
561
        $this->assertCount(3, $result);
562
563
        $this->assertInstanceOf(CmsUserDTO::class, $result[0][0]);
564
        $this->assertInstanceOf(CmsUserDTO::class, $result[1][0]);
565
        $this->assertInstanceOf(CmsUserDTO::class, $result[2][0]);
566
567
        $this->assertInstanceOf(CmsAddressDTO::class, $result[0][1]);
568
        $this->assertInstanceOf(CmsAddressDTO::class, $result[1][1]);
569
        $this->assertInstanceOf(CmsAddressDTO::class, $result[2][1]);
570
571
        $this->assertEquals($this->fixtures[0]->name, $result[0][0]->name);
572
        $this->assertEquals($this->fixtures[1]->name, $result[1][0]->name);
573
        $this->assertEquals($this->fixtures[2]->name, $result[2][0]->name);
574
575
        $this->assertEquals($this->fixtures[0]->email->email, $result[0][0]->email);
576
        $this->assertEquals($this->fixtures[1]->email->email, $result[1][0]->email);
577
        $this->assertEquals($this->fixtures[2]->email->email, $result[2][0]->email);
578
579
580
        $this->assertEquals($this->fixtures[0]->address->city, $result[0][1]->city);
581
        $this->assertEquals($this->fixtures[1]->address->city, $result[1][1]->city);
582
        $this->assertEquals($this->fixtures[2]->address->city, $result[2][1]->city);
583
584
        $this->assertEquals($this->fixtures[0]->address->country, $result[0][1]->country);
585
        $this->assertEquals($this->fixtures[1]->address->country, $result[1][1]->country);
586
        $this->assertEquals($this->fixtures[2]->address->country, $result[2][1]->country);
587
    }
588
589 View Code Duplication
    public function testShouldSupportMultipleNewOperatorsWithAliases()
590
    {
591
        $dql = "
592
            SELECT
593
                new CmsUserDTO(
594
                    u.name,
595
                    e.email
596
                ) as cmsUser,
597
                new CmsAddressDTO(
598
                    a.country,
599
                    a.city
600
                ) as cmsAddress
601
            FROM
602
                Doctrine\Tests\Models\CMS\CmsUser u
603
            JOIN
604
                u.email e
605
            JOIN
606
                u.address a
607
            ORDER BY
608
                u.name";
609
610
        $query  = $this->_em->createQuery($dql);
611
        $result = $query->getResult();
612
613
        $this->assertCount(3, $result);
614
615
        $this->assertInstanceOf(CmsUserDTO::class, $result[0]['cmsUser']);
616
        $this->assertInstanceOf(CmsUserDTO::class, $result[1]['cmsUser']);
617
        $this->assertInstanceOf(CmsUserDTO::class, $result[2]['cmsUser']);
618
619
        $this->assertInstanceOf(CmsAddressDTO::class, $result[0]['cmsAddress']);
620
        $this->assertInstanceOf(CmsAddressDTO::class, $result[1]['cmsAddress']);
621
        $this->assertInstanceOf(CmsAddressDTO::class, $result[2]['cmsAddress']);
622
623
        $this->assertEquals($this->fixtures[0]->name, $result[0]['cmsUser']->name);
624
        $this->assertEquals($this->fixtures[1]->name, $result[1]['cmsUser']->name);
625
        $this->assertEquals($this->fixtures[2]->name, $result[2]['cmsUser']->name);
626
627
        $this->assertEquals($this->fixtures[0]->email->email, $result[0]['cmsUser']->email);
628
        $this->assertEquals($this->fixtures[1]->email->email, $result[1]['cmsUser']->email);
629
        $this->assertEquals($this->fixtures[2]->email->email, $result[2]['cmsUser']->email);
630
631
632
        $this->assertEquals($this->fixtures[0]->address->city, $result[0]['cmsAddress']->city);
633
        $this->assertEquals($this->fixtures[1]->address->city, $result[1]['cmsAddress']->city);
634
        $this->assertEquals($this->fixtures[2]->address->city, $result[2]['cmsAddress']->city);
635
636
        $this->assertEquals($this->fixtures[0]->address->country, $result[0]['cmsAddress']->country);
637
        $this->assertEquals($this->fixtures[1]->address->country, $result[1]['cmsAddress']->country);
638
        $this->assertEquals($this->fixtures[2]->address->country, $result[2]['cmsAddress']->country);
639
    }
640
641 View Code Duplication
    public function testShouldSupportMultipleNewOperatorsWithAndWithoutAliases()
642
    {
643
        $dql = "
644
            SELECT
645
                new CmsUserDTO(
646
                    u.name,
647
                    e.email
648
                ) as cmsUser,
649
                new CmsAddressDTO(
650
                    a.country,
651
                    a.city
652
                )
653
            FROM
654
                Doctrine\Tests\Models\CMS\CmsUser u
655
            JOIN
656
                u.email e
657
            JOIN
658
                u.address a
659
            ORDER BY
660
                u.name";
661
662
        $query  = $this->_em->createQuery($dql);
663
        $result = $query->getResult();
664
665
        $this->assertCount(3, $result);
666
667
        $this->assertInstanceOf(CmsUserDTO::class, $result[0]['cmsUser']);
668
        $this->assertInstanceOf(CmsUserDTO::class, $result[1]['cmsUser']);
669
        $this->assertInstanceOf(CmsUserDTO::class, $result[2]['cmsUser']);
670
671
        $this->assertInstanceOf(CmsAddressDTO::class, $result[0][0]);
672
        $this->assertInstanceOf(CmsAddressDTO::class, $result[1][0]);
673
        $this->assertInstanceOf(CmsAddressDTO::class, $result[2][0]);
674
675
        $this->assertEquals($this->fixtures[0]->name, $result[0]['cmsUser']->name);
676
        $this->assertEquals($this->fixtures[1]->name, $result[1]['cmsUser']->name);
677
        $this->assertEquals($this->fixtures[2]->name, $result[2]['cmsUser']->name);
678
679
        $this->assertEquals($this->fixtures[0]->email->email, $result[0]['cmsUser']->email);
680
        $this->assertEquals($this->fixtures[1]->email->email, $result[1]['cmsUser']->email);
681
        $this->assertEquals($this->fixtures[2]->email->email, $result[2]['cmsUser']->email);
682
683
684
        $this->assertEquals($this->fixtures[0]->address->city, $result[0][0]->city);
685
        $this->assertEquals($this->fixtures[1]->address->city, $result[1][0]->city);
686
        $this->assertEquals($this->fixtures[2]->address->city, $result[2][0]->city);
687
688
        $this->assertEquals($this->fixtures[0]->address->country, $result[0][0]->country);
689
        $this->assertEquals($this->fixtures[1]->address->country, $result[1][0]->country);
690
        $this->assertEquals($this->fixtures[2]->address->country, $result[2][0]->country);
691
    }
692
693 View Code Duplication
    public function testShouldSupportMultipleNewOperatorsAndSingleScalar()
694
    {
695
        $dql = "
696
            SELECT
697
                new CmsUserDTO(
698
                    u.name,
699
                    e.email
700
                ),
701
                new CmsAddressDTO(
702
                    a.country,
703
                    a.city
704
                ),
705
                u.status
706
            FROM
707
                Doctrine\Tests\Models\CMS\CmsUser u
708
            JOIN
709
                u.email e
710
            JOIN
711
                u.address a
712
            ORDER BY
713
                u.name";
714
715
        $query  = $this->_em->createQuery($dql);
716
        $result = $query->getResult();
717
718
        $this->assertCount(3, $result);
719
720
        $this->assertInstanceOf(CmsUserDTO::class, $result[0][0]);
721
        $this->assertInstanceOf(CmsUserDTO::class, $result[1][0]);
722
        $this->assertInstanceOf(CmsUserDTO::class, $result[2][0]);
723
724
        $this->assertInstanceOf(CmsAddressDTO::class, $result[0][1]);
725
        $this->assertInstanceOf(CmsAddressDTO::class, $result[1][1]);
726
        $this->assertInstanceOf(CmsAddressDTO::class, $result[2][1]);
727
728
        $this->assertEquals($this->fixtures[0]->name, $result[0][0]->name);
729
        $this->assertEquals($this->fixtures[1]->name, $result[1][0]->name);
730
        $this->assertEquals($this->fixtures[2]->name, $result[2][0]->name);
731
732
        $this->assertEquals($this->fixtures[0]->email->email, $result[0][0]->email);
733
        $this->assertEquals($this->fixtures[1]->email->email, $result[1][0]->email);
734
        $this->assertEquals($this->fixtures[2]->email->email, $result[2][0]->email);
735
736
737
        $this->assertEquals($this->fixtures[0]->address->city, $result[0][1]->city);
738
        $this->assertEquals($this->fixtures[1]->address->city, $result[1][1]->city);
739
        $this->assertEquals($this->fixtures[2]->address->city, $result[2][1]->city);
740
741
        $this->assertEquals($this->fixtures[0]->address->country, $result[0][1]->country);
742
        $this->assertEquals($this->fixtures[1]->address->country, $result[1][1]->country);
743
        $this->assertEquals($this->fixtures[2]->address->country, $result[2][1]->country);
744
745
        $this->assertEquals($this->fixtures[0]->status,$result[0]['status']);
746
        $this->assertEquals($this->fixtures[1]->status,$result[1]['status']);
747
        $this->assertEquals($this->fixtures[2]->status,$result[2]['status']);
748
    }
749
750 View Code Duplication
    public function testShouldSupportMultipleNewOperatorsAndSingleScalarWithAliases()
751
    {
752
        $dql = "
753
            SELECT
754
                new CmsUserDTO(
755
                    u.name,
756
                    e.email
757
                ) as cmsUser,
758
                new CmsAddressDTO(
759
                    a.country,
760
                    a.city
761
                ) as cmsAddress,
762
                u.status as cmsUserStatus
763
            FROM
764
                Doctrine\Tests\Models\CMS\CmsUser u
765
            JOIN
766
                u.email e
767
            JOIN
768
                u.address a
769
            ORDER BY
770
                u.name";
771
772
        $query  = $this->_em->createQuery($dql);
773
        $result = $query->getResult();
774
775
        $this->assertCount(3, $result);
776
777
        $this->assertInstanceOf(CmsUserDTO::class, $result[0]['cmsUser']);
778
        $this->assertInstanceOf(CmsUserDTO::class, $result[1]['cmsUser']);
779
        $this->assertInstanceOf(CmsUserDTO::class, $result[2]['cmsUser']);
780
781
        $this->assertInstanceOf(CmsAddressDTO::class, $result[0]['cmsAddress']);
782
        $this->assertInstanceOf(CmsAddressDTO::class, $result[1]['cmsAddress']);
783
        $this->assertInstanceOf(CmsAddressDTO::class, $result[2]['cmsAddress']);
784
785
        $this->assertEquals($this->fixtures[0]->name, $result[0]['cmsUser']->name);
786
        $this->assertEquals($this->fixtures[1]->name, $result[1]['cmsUser']->name);
787
        $this->assertEquals($this->fixtures[2]->name, $result[2]['cmsUser']->name);
788
789
        $this->assertEquals($this->fixtures[0]->email->email, $result[0]['cmsUser']->email);
790
        $this->assertEquals($this->fixtures[1]->email->email, $result[1]['cmsUser']->email);
791
        $this->assertEquals($this->fixtures[2]->email->email, $result[2]['cmsUser']->email);
792
793
794
        $this->assertEquals($this->fixtures[0]->address->city, $result[0]['cmsAddress']->city);
795
        $this->assertEquals($this->fixtures[1]->address->city, $result[1]['cmsAddress']->city);
796
        $this->assertEquals($this->fixtures[2]->address->city, $result[2]['cmsAddress']->city);
797
798
        $this->assertEquals($this->fixtures[0]->address->country, $result[0]['cmsAddress']->country);
799
        $this->assertEquals($this->fixtures[1]->address->country, $result[1]['cmsAddress']->country);
800
        $this->assertEquals($this->fixtures[2]->address->country, $result[2]['cmsAddress']->country);
801
802
        $this->assertEquals($this->fixtures[0]->status,$result[0]['cmsUserStatus']);
803
        $this->assertEquals($this->fixtures[1]->status,$result[1]['cmsUserStatus']);
804
        $this->assertEquals($this->fixtures[2]->status,$result[2]['cmsUserStatus']);
805
    }
806
807 View Code Duplication
    public function testShouldSupportMultipleNewOperatorsAndSingleScalarWithAndWithoutAliases()
808
    {
809
        $dql = "
810
            SELECT
811
                new CmsUserDTO(
812
                    u.name,
813
                    e.email
814
                ) as cmsUser,
815
                new CmsAddressDTO(
816
                    a.country,
817
                    a.city
818
                ),
819
                u.status
820
            FROM
821
                Doctrine\Tests\Models\CMS\CmsUser u
822
            JOIN
823
                u.email e
824
            JOIN
825
                u.address a
826
            ORDER BY
827
                u.name";
828
829
        $query  = $this->_em->createQuery($dql);
830
        $result = $query->getResult();
831
832
        $this->assertCount(3, $result);
833
834
        $this->assertInstanceOf(CmsUserDTO::class, $result[0]['cmsUser']);
835
        $this->assertInstanceOf(CmsUserDTO::class, $result[1]['cmsUser']);
836
        $this->assertInstanceOf(CmsUserDTO::class, $result[2]['cmsUser']);
837
838
        $this->assertInstanceOf(CmsAddressDTO::class, $result[0][0]);
839
        $this->assertInstanceOf(CmsAddressDTO::class, $result[1][0]);
840
        $this->assertInstanceOf(CmsAddressDTO::class, $result[2][0]);
841
842
        $this->assertEquals($this->fixtures[0]->name, $result[0]['cmsUser']->name);
843
        $this->assertEquals($this->fixtures[1]->name, $result[1]['cmsUser']->name);
844
        $this->assertEquals($this->fixtures[2]->name, $result[2]['cmsUser']->name);
845
846
        $this->assertEquals($this->fixtures[0]->email->email, $result[0]['cmsUser']->email);
847
        $this->assertEquals($this->fixtures[1]->email->email, $result[1]['cmsUser']->email);
848
        $this->assertEquals($this->fixtures[2]->email->email, $result[2]['cmsUser']->email);
849
850
851
        $this->assertEquals($this->fixtures[0]->address->city, $result[0][0]->city);
852
        $this->assertEquals($this->fixtures[1]->address->city, $result[1][0]->city);
853
        $this->assertEquals($this->fixtures[2]->address->city, $result[2][0]->city);
854
855
        $this->assertEquals($this->fixtures[0]->address->country, $result[0][0]->country);
856
        $this->assertEquals($this->fixtures[1]->address->country, $result[1][0]->country);
857
        $this->assertEquals($this->fixtures[2]->address->country, $result[2][0]->country);
858
859
        $this->assertEquals($this->fixtures[0]->status,$result[0]['status']);
860
        $this->assertEquals($this->fixtures[1]->status,$result[1]['status']);
861
        $this->assertEquals($this->fixtures[2]->status,$result[2]['status']);
862
    }
863
864 View Code Duplication
    public function testShouldSupportMultipleNewOperatorsAndMultipleScalars()
865
    {
866
        $dql = "
867
            SELECT
868
                new CmsUserDTO(
869
                    u.name,
870
                    e.email
871
                ),
872
                new CmsAddressDTO(
873
                    a.country,
874
                    a.city
875
                ),
876
                u.status,
877
                u.username
878
            FROM
879
                Doctrine\Tests\Models\CMS\CmsUser u
880
            JOIN
881
                u.email e
882
            JOIN
883
                u.address a
884
            ORDER BY
885
                u.name";
886
887
        $query  = $this->_em->createQuery($dql);
888
        $result = $query->getResult();
889
890
        $this->assertCount(3, $result);
891
892
        $this->assertInstanceOf(CmsUserDTO::class, $result[0][0]);
893
        $this->assertInstanceOf(CmsUserDTO::class, $result[1][0]);
894
        $this->assertInstanceOf(CmsUserDTO::class, $result[2][0]);
895
896
        $this->assertInstanceOf(CmsAddressDTO::class, $result[0][1]);
897
        $this->assertInstanceOf(CmsAddressDTO::class, $result[1][1]);
898
        $this->assertInstanceOf(CmsAddressDTO::class, $result[2][1]);
899
900
        $this->assertEquals($this->fixtures[0]->name, $result[0][0]->name);
901
        $this->assertEquals($this->fixtures[1]->name, $result[1][0]->name);
902
        $this->assertEquals($this->fixtures[2]->name, $result[2][0]->name);
903
904
        $this->assertEquals($this->fixtures[0]->email->email, $result[0][0]->email);
905
        $this->assertEquals($this->fixtures[1]->email->email, $result[1][0]->email);
906
        $this->assertEquals($this->fixtures[2]->email->email, $result[2][0]->email);
907
908
909
        $this->assertEquals($this->fixtures[0]->address->city, $result[0][1]->city);
910
        $this->assertEquals($this->fixtures[1]->address->city, $result[1][1]->city);
911
        $this->assertEquals($this->fixtures[2]->address->city, $result[2][1]->city);
912
913
        $this->assertEquals($this->fixtures[0]->address->country, $result[0][1]->country);
914
        $this->assertEquals($this->fixtures[1]->address->country, $result[1][1]->country);
915
        $this->assertEquals($this->fixtures[2]->address->country, $result[2][1]->country);
916
917
        $this->assertEquals($this->fixtures[0]->status,$result[0]['status']);
918
        $this->assertEquals($this->fixtures[1]->status,$result[1]['status']);
919
        $this->assertEquals($this->fixtures[2]->status,$result[2]['status']);
920
921
        $this->assertEquals($this->fixtures[0]->username,$result[0]['username']);
922
        $this->assertEquals($this->fixtures[1]->username,$result[1]['username']);
923
        $this->assertEquals($this->fixtures[2]->username,$result[2]['username']);
924
    }
925
926 View Code Duplication
    public function testShouldSupportMultipleNewOperatorsAndMultipleScalarsWithAliases()
927
    {
928
        $dql = "
929
            SELECT
930
                new CmsUserDTO(
931
                    u.name,
932
                    e.email
933
                ) as cmsUser,
934
                new CmsAddressDTO(
935
                    a.country,
936
                    a.city
937
                ) as cmsAddress,
938
                u.status as cmsUserStatus,
939
                u.username as cmsUserUsername
940
            FROM
941
                Doctrine\Tests\Models\CMS\CmsUser u
942
            JOIN
943
                u.email e
944
            JOIN
945
                u.address a
946
            ORDER BY
947
                u.name";
948
949
        $query  = $this->_em->createQuery($dql);
950
        $result = $query->getResult();
951
952
        $this->assertCount(3, $result);
953
954
        $this->assertInstanceOf(CmsUserDTO::class, $result[0]['cmsUser']);
955
        $this->assertInstanceOf(CmsUserDTO::class, $result[1]['cmsUser']);
956
        $this->assertInstanceOf(CmsUserDTO::class, $result[2]['cmsUser']);
957
958
        $this->assertInstanceOf(CmsAddressDTO::class, $result[0]['cmsAddress']);
959
        $this->assertInstanceOf(CmsAddressDTO::class, $result[1]['cmsAddress']);
960
        $this->assertInstanceOf(CmsAddressDTO::class, $result[2]['cmsAddress']);
961
962
        $this->assertEquals($this->fixtures[0]->name, $result[0]['cmsUser']->name);
963
        $this->assertEquals($this->fixtures[1]->name, $result[1]['cmsUser']->name);
964
        $this->assertEquals($this->fixtures[2]->name, $result[2]['cmsUser']->name);
965
966
        $this->assertEquals($this->fixtures[0]->email->email, $result[0]['cmsUser']->email);
967
        $this->assertEquals($this->fixtures[1]->email->email, $result[1]['cmsUser']->email);
968
        $this->assertEquals($this->fixtures[2]->email->email, $result[2]['cmsUser']->email);
969
970
971
        $this->assertEquals($this->fixtures[0]->address->city, $result[0]['cmsAddress']->city);
972
        $this->assertEquals($this->fixtures[1]->address->city, $result[1]['cmsAddress']->city);
973
        $this->assertEquals($this->fixtures[2]->address->city, $result[2]['cmsAddress']->city);
974
975
        $this->assertEquals($this->fixtures[0]->address->country, $result[0]['cmsAddress']->country);
976
        $this->assertEquals($this->fixtures[1]->address->country, $result[1]['cmsAddress']->country);
977
        $this->assertEquals($this->fixtures[2]->address->country, $result[2]['cmsAddress']->country);
978
979
        $this->assertEquals($this->fixtures[0]->status,$result[0]['cmsUserStatus']);
980
        $this->assertEquals($this->fixtures[1]->status,$result[1]['cmsUserStatus']);
981
        $this->assertEquals($this->fixtures[2]->status,$result[2]['cmsUserStatus']);
982
983
        $this->assertEquals($this->fixtures[0]->username,$result[0]['cmsUserUsername']);
984
        $this->assertEquals($this->fixtures[1]->username,$result[1]['cmsUserUsername']);
985
        $this->assertEquals($this->fixtures[2]->username,$result[2]['cmsUserUsername']);
986
    }
987
988 View Code Duplication
    public function testShouldSupportMultipleNewOperatorsAndMultipleScalarsWithAndWithoutAliases()
989
    {
990
        $dql = "
991
            SELECT
992
                new CmsUserDTO(
993
                    u.name,
994
                    e.email
995
                ) as cmsUser,
996
                new CmsAddressDTO(
997
                    a.country,
998
                    a.city
999
                ),
1000
                u.status,
1001
                u.username as cmsUserUsername
1002
            FROM
1003
                Doctrine\Tests\Models\CMS\CmsUser u
1004
            JOIN
1005
                u.email e
1006
            JOIN
1007
                u.address a
1008
            ORDER BY
1009
                u.name";
1010
1011
        $query  = $this->_em->createQuery($dql);
1012
        $result = $query->getResult();
1013
1014
        $this->assertCount(3, $result);
1015
1016
        $this->assertInstanceOf(CmsUserDTO::class, $result[0]['cmsUser']);
1017
        $this->assertInstanceOf(CmsUserDTO::class, $result[1]['cmsUser']);
1018
        $this->assertInstanceOf(CmsUserDTO::class, $result[2]['cmsUser']);
1019
1020
        $this->assertInstanceOf(CmsAddressDTO::class, $result[0][0]);
1021
        $this->assertInstanceOf(CmsAddressDTO::class, $result[1][0]);
1022
        $this->assertInstanceOf(CmsAddressDTO::class, $result[2][0]);
1023
1024
        $this->assertEquals($this->fixtures[0]->name, $result[0]['cmsUser']->name);
1025
        $this->assertEquals($this->fixtures[1]->name, $result[1]['cmsUser']->name);
1026
        $this->assertEquals($this->fixtures[2]->name, $result[2]['cmsUser']->name);
1027
1028
        $this->assertEquals($this->fixtures[0]->email->email, $result[0]['cmsUser']->email);
1029
        $this->assertEquals($this->fixtures[1]->email->email, $result[1]['cmsUser']->email);
1030
        $this->assertEquals($this->fixtures[2]->email->email, $result[2]['cmsUser']->email);
1031
1032
1033
        $this->assertEquals($this->fixtures[0]->address->city, $result[0][0]->city);
1034
        $this->assertEquals($this->fixtures[1]->address->city, $result[1][0]->city);
1035
        $this->assertEquals($this->fixtures[2]->address->city, $result[2][0]->city);
1036
1037
        $this->assertEquals($this->fixtures[0]->address->country, $result[0][0]->country);
1038
        $this->assertEquals($this->fixtures[1]->address->country, $result[1][0]->country);
1039
        $this->assertEquals($this->fixtures[2]->address->country, $result[2][0]->country);
1040
1041
        $this->assertEquals($this->fixtures[0]->status,$result[0]['status']);
1042
        $this->assertEquals($this->fixtures[1]->status,$result[1]['status']);
1043
        $this->assertEquals($this->fixtures[2]->status,$result[2]['status']);
1044
1045
        $this->assertEquals($this->fixtures[0]->username,$result[0]['cmsUserUsername']);
1046
        $this->assertEquals($this->fixtures[1]->username,$result[1]['cmsUserUsername']);
1047
        $this->assertEquals($this->fixtures[2]->username,$result[2]['cmsUserUsername']);
1048
    }
1049
1050
    /**
1051
     * @expectedException Doctrine\ORM\Query\QueryException
1052
     * @expectedExceptionMessage [Semantical Error] line 0, col 11 near '\InvalidClass(u.name)': Error: Class "\InvalidClass" is not defined.
1053
     */
1054
    public function testInvalidClassException()
1055
    {
1056
        $dql = "SELECT new \InvalidClass(u.name) FROM Doctrine\Tests\Models\CMS\CmsUser u";
1057
        $this->_em->createQuery($dql)->getResult();
1058
    }
1059
1060
    /**
1061
     * @expectedException Doctrine\ORM\Query\QueryException
1062
     * @expectedExceptionMessage [Semantical Error] line 0, col 11 near '\stdClass(u.name)': Error: Class "\stdClass" has not a valid constructor.
1063
     */
1064
    public function testInvalidClassConstructorException()
1065
    {
1066
        $dql = "SELECT new \stdClass(u.name) FROM Doctrine\Tests\Models\CMS\CmsUser u";
1067
        $this->_em->createQuery($dql)->getResult();
1068
    }
1069
1070
    /**
1071
     * @expectedException Doctrine\ORM\Query\QueryException
1072
     * @expectedExceptionMessage [Semantical Error] line 0, col 11 near 'Doctrine\Tests\ORM\Functional\ClassWithTooMuchArgs(u.name)': Error: Number of arguments does not match with "Doctrine\Tests\ORM\Functional\ClassWithTooMuchArgs" constructor declaration.
1073
     */
1074
    public function testInvalidClassWithoutConstructorException()
1075
    {
1076
        $dql = "SELECT new Doctrine\Tests\ORM\Functional\ClassWithTooMuchArgs(u.name) FROM Doctrine\Tests\Models\CMS\CmsUser u";
1077
        $this->_em->createQuery($dql)->getResult();
1078
    }
1079
1080
    /**
1081
     * @expectedException Doctrine\ORM\Query\QueryException
1082
     * @expectedExceptionMessage [Semantical Error] line 0, col 11 near 'Doctrine\Tests\ORM\Functional\ClassWithPrivateConstructor(u.name)': Error: Class "Doctrine\Tests\ORM\Functional\ClassWithPrivateConstructor" can not be instantiated.
1083
     */
1084
    public function testClassCantBeInstantiatedException()
1085
    {
1086
        $dql = "SELECT new Doctrine\Tests\ORM\Functional\ClassWithPrivateConstructor(u.name) FROM Doctrine\Tests\Models\CMS\CmsUser u";
1087
        $this->_em->createQuery($dql)->getResult();
1088
    }
1089
1090
    public function testShouldSupportNestedNewOperators()
1091
    {
1092
        $dql = "
1093
            SELECT
1094
                new CmsUserDTO(
1095
                    u.name,
1096
                    e.email,
1097
                    new CmsAddressDTO(
1098
                        a.country,
1099
                        a.city,
1100
                        new CmsAddressDTO(
1101
                            a.country,
1102
                            a.city
1103
                        )
1104
                    )
1105
                ) as user,
1106
                u.status,
1107
                u.username as cmsUserUsername
1108
            FROM
1109
                Doctrine\Tests\Models\CMS\CmsUser u
1110
            JOIN
1111
                u.email e
1112
            JOIN
1113
                u.address a
1114
            ORDER BY
1115
                u.name";
1116
1117
        $query  = $this->_em->createQuery($dql);
1118
        $result = $query->getResult();
1119
1120
        $this->assertCount(3, $result);
1121
1122
        $this->assertInstanceOf(CmsUserDTO::class, $result[0]['user']);
1123
        $this->assertInstanceOf(CmsUserDTO::class, $result[1]['user']);
1124
        $this->assertInstanceOf(CmsUserDTO::class, $result[2]['user']);
1125
1126
        $this->assertInstanceOf(CmsAddressDTO::class, $result[0]['user']->address);
1127
        $this->assertInstanceOf(CmsAddressDTO::class, $result[1]['user']->address);
1128
        $this->assertInstanceOf(CmsAddressDTO::class, $result[2]['user']->address);
1129
1130
        $this->assertEquals($this->fixtures[0]->name, $result[0]['user']->name);
1131
        $this->assertEquals($this->fixtures[1]->name, $result[1]['user']->name);
1132
        $this->assertEquals($this->fixtures[2]->name, $result[2]['user']->name);
1133
1134
        $this->assertEquals($this->fixtures[0]->email->email, $result[0]['user']->email);
1135
        $this->assertEquals($this->fixtures[1]->email->email, $result[1]['user']->email);
1136
        $this->assertEquals($this->fixtures[2]->email->email, $result[2]['user']->email);
1137
1138
        $this->assertEquals($this->fixtures[0]->address->city, $result[0]['user']->address->city);
1139
        $this->assertEquals($this->fixtures[1]->address->city, $result[1]['user']->address->city);
1140
        $this->assertEquals($this->fixtures[2]->address->city, $result[2]['user']->address->city);
1141
1142
        $this->assertEquals($this->fixtures[0]->address->country, $result[0]['user']->address->country);
1143
        $this->assertEquals($this->fixtures[1]->address->country, $result[1]['user']->address->country);
1144
        $this->assertEquals($this->fixtures[2]->address->country, $result[2]['user']->address->country);
1145
1146
        $this->assertEquals($this->fixtures[0]->status,$result[0]['status']);
1147
        $this->assertEquals($this->fixtures[1]->status,$result[1]['status']);
1148
        $this->assertEquals($this->fixtures[2]->status,$result[2]['status']);
1149
1150
        $this->assertEquals($this->fixtures[0]->username,$result[0]['cmsUserUsername']);
1151
        $this->assertEquals($this->fixtures[1]->username,$result[1]['cmsUserUsername']);
1152
        $this->assertEquals($this->fixtures[2]->username,$result[2]['cmsUserUsername']);
1153
    }
1154
1155
    private function dumpResultSetMapping(Query $query)
1156
    {
1157
        $rsm = (\Closure::bind(function ($q) {
1158
            return $q->getResultSetMapping();
1159
        }, null, Query::class))($query);
1160
        echo json_encode(get_object_vars($rsm), JSON_PRETTY_PRINT);
1161
    }
1162
}
1163
1164
class ClassWithTooMuchArgs
1165
{
1166
    public function __construct($foo, $bar)
1167
    {
1168
        $this->foo = $foo;
0 ignored issues
show
Bug introduced by
The property foo does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
1169
        $this->bor = $bar;
0 ignored issues
show
Bug introduced by
The property bor does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
1170
    }
1171
}
1172
1173
class ClassWithPrivateConstructor
1174
{
1175
    private function __construct($foo)
1176
    {
1177
        $this->foo = $foo;
0 ignored issues
show
Bug introduced by
The property foo does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
1178
    }
1179
}
1180