|
33 | 33 | use Symfony\Component\DependencyInjection\Tests\Fixtures\FooBarTaggedForDefaultPriorityClass;
|
34 | 34 | use Symfony\Component\DependencyInjection\Tests\Fixtures\FooTagClass;
|
35 | 35 | use Symfony\Component\DependencyInjection\Tests\Fixtures\IteratorConsumer;
|
| 36 | +use Symfony\Component\DependencyInjection\Tests\Fixtures\IteratorConsumerWithDefaultIndexMethod; |
| 37 | +use Symfony\Component\DependencyInjection\Tests\Fixtures\IteratorConsumerWithDefaultIndexMethodAndWithDefaultPriorityMethod; |
| 38 | +use Symfony\Component\DependencyInjection\Tests\Fixtures\IteratorConsumerWithDefaultPriorityMethod; |
36 | 39 | use Symfony\Component\DependencyInjection\Tests\Fixtures\LocatorConsumer;
|
37 | 40 | use Symfony\Component\DependencyInjection\Tests\Fixtures\LocatorConsumerConsumer;
|
38 | 41 | use Symfony\Component\DependencyInjection\Tests\Fixtures\LocatorConsumerFactory;
|
| 42 | +use Symfony\Component\DependencyInjection\Tests\Fixtures\LocatorConsumerWithDefaultIndexMethod; |
| 43 | +use Symfony\Component\DependencyInjection\Tests\Fixtures\LocatorConsumerWithDefaultIndexMethodAndWithDefaultPriorityMethod; |
| 44 | +use Symfony\Component\DependencyInjection\Tests\Fixtures\LocatorConsumerWithDefaultPriorityMethod; |
39 | 45 | use Symfony\Component\DependencyInjection\Tests\Fixtures\LocatorConsumerWithoutIndex;
|
40 | 46 | use Symfony\Component\DependencyInjection\Tests\Fixtures\TaggedService1;
|
41 | 47 | use Symfony\Component\DependencyInjection\Tests\Fixtures\TaggedService2;
|
@@ -351,30 +357,85 @@ public function testTaggedServiceWithIndexAttributeAndDefaultMethodConfiguredVia
|
351 | 357 | $this->assertSame(['bar_tab_class_with_defaultmethod' => $container->get(BarTagClass::class), 'foo' => $container->get(FooTagClass::class)], $param);
|
352 | 358 | }
|
353 | 359 |
|
354 |
| - public function testTaggedIteratorWithMultipleIndexAttribute() |
| 360 | + /** |
| 361 | + * @requires PHP 8 |
| 362 | + */ |
| 363 | + public function testTaggedIteratorWithDefaultIndexMethodConfiguredViaAttribute() |
355 | 364 | {
|
356 | 365 | $container = new ContainerBuilder();
|
357 | 366 | $container->register(BarTagClass::class)
|
358 | 367 | ->setPublic(true)
|
359 |
| - ->addTag('foo_bar', ['foo' => 'bar']) |
360 |
| - ->addTag('foo_bar', ['foo' => 'bar_duplicate']) |
| 368 | + ->addTag('foo_bar') |
361 | 369 | ;
|
362 | 370 | $container->register(FooTagClass::class)
|
363 | 371 | ->setPublic(true)
|
364 | 372 | ->addTag('foo_bar')
|
| 373 | + ; |
| 374 | + $container->register(IteratorConsumerWithDefaultIndexMethod::class) |
| 375 | + ->setAutowired(true) |
| 376 | + ->setPublic(true) |
| 377 | + ; |
| 378 | + |
| 379 | + $container->compile(); |
| 380 | + |
| 381 | + $s = $container->get(IteratorConsumerWithDefaultIndexMethod::class); |
| 382 | + |
| 383 | + $param = iterator_to_array($s->getParam()->getIterator()); |
| 384 | + $this->assertSame(['bar_tag_class' => $container->get(BarTagClass::class), 'foo_tag_class' => $container->get(FooTagClass::class)], $param); |
| 385 | + } |
| 386 | + |
| 387 | + /** |
| 388 | + * @requires PHP 8 |
| 389 | + */ |
| 390 | + public function testTaggedIteratorWithDefaultPriorityMethodConfiguredViaAttribute() |
| 391 | + { |
| 392 | + $container = new ContainerBuilder(); |
| 393 | + $container->register(BarTagClass::class) |
| 394 | + ->setPublic(true) |
365 | 395 | ->addTag('foo_bar')
|
366 | 396 | ;
|
367 |
| - $container->register(FooBarTaggedClass::class) |
368 |
| - ->addArgument(new TaggedIteratorArgument('foo_bar', 'foo')) |
| 397 | + $container->register(FooTagClass::class) |
| 398 | + ->setPublic(true) |
| 399 | + ->addTag('foo_bar') |
| 400 | + ; |
| 401 | + $container->register(IteratorConsumerWithDefaultPriorityMethod::class) |
| 402 | + ->setAutowired(true) |
369 | 403 | ->setPublic(true)
|
370 | 404 | ;
|
371 | 405 |
|
372 | 406 | $container->compile();
|
373 | 407 |
|
374 |
| - $s = $container->get(FooBarTaggedClass::class); |
| 408 | + $s = $container->get(IteratorConsumerWithDefaultPriorityMethod::class); |
| 409 | + |
| 410 | + $param = iterator_to_array($s->getParam()->getIterator()); |
| 411 | + $this->assertSame([0 => $container->get(FooTagClass::class), 1 => $container->get(BarTagClass::class)], $param); |
| 412 | + } |
| 413 | + |
| 414 | + /** |
| 415 | + * @requires PHP 8 |
| 416 | + */ |
| 417 | + public function testTaggedIteratorWithDefaultIndexMethodAndWithDefaultPriorityMethodConfiguredViaAttribute() |
| 418 | + { |
| 419 | + $container = new ContainerBuilder(); |
| 420 | + $container->register(BarTagClass::class) |
| 421 | + ->setPublic(true) |
| 422 | + ->addTag('foo_bar') |
| 423 | + ; |
| 424 | + $container->register(FooTagClass::class) |
| 425 | + ->setPublic(true) |
| 426 | + ->addTag('foo_bar') |
| 427 | + ; |
| 428 | + $container->register(IteratorConsumerWithDefaultIndexMethodAndWithDefaultPriorityMethod::class) |
| 429 | + ->setAutowired(true) |
| 430 | + ->setPublic(true) |
| 431 | + ; |
| 432 | + |
| 433 | + $container->compile(); |
| 434 | + |
| 435 | + $s = $container->get(IteratorConsumerWithDefaultIndexMethodAndWithDefaultPriorityMethod::class); |
375 | 436 |
|
376 | 437 | $param = iterator_to_array($s->getParam()->getIterator());
|
377 |
| - $this->assertSame(['bar' => $container->get(BarTagClass::class), 'bar_duplicate' => $container->get(BarTagClass::class), 'foo_tag_class' => $container->get(FooTagClass::class)], $param); |
| 438 | + $this->assertSame(['foo_tag_class' => $container->get(FooTagClass::class), 'bar_tag_class' => $container->get(BarTagClass::class)], $param); |
378 | 439 | }
|
379 | 440 |
|
380 | 441 | public function testTaggedLocatorConfiguredViaAttribute()
|
@@ -432,6 +493,103 @@ public function testTaggedLocatorConfiguredViaAttributeWithoutIndex()
|
432 | 493 | self::assertSame($container->get(FooTagClass::class), $locator->get(FooTagClass::class));
|
433 | 494 | }
|
434 | 495 |
|
| 496 | + /** |
| 497 | + * @requires PHP 8 |
| 498 | + */ |
| 499 | + public function testTaggedLocatorWithDefaultIndexMethodConfiguredViaAttribute() |
| 500 | + { |
| 501 | + $container = new ContainerBuilder(); |
| 502 | + $container->register(BarTagClass::class) |
| 503 | + ->setPublic(true) |
| 504 | + ->addTag('foo_bar') |
| 505 | + ; |
| 506 | + $container->register(FooTagClass::class) |
| 507 | + ->setPublic(true) |
| 508 | + ->addTag('foo_bar') |
| 509 | + ; |
| 510 | + $container->register(LocatorConsumerWithDefaultIndexMethod::class) |
| 511 | + ->setAutowired(true) |
| 512 | + ->setPublic(true) |
| 513 | + ; |
| 514 | + |
| 515 | + $container->compile(); |
| 516 | + |
| 517 | + /** @var LocatorConsumerWithoutIndex $s */ |
| 518 | + $s = $container->get(LocatorConsumerWithDefaultIndexMethod::class); |
| 519 | + |
| 520 | + $locator = $s->getLocator(); |
| 521 | + self::assertSame($container->get(BarTagClass::class), $locator->get('bar_tag_class')); |
| 522 | + self::assertSame($container->get(FooTagClass::class), $locator->get('foo_tag_class')); |
| 523 | + } |
| 524 | + |
| 525 | + /** |
| 526 | + * @requires PHP 8 |
| 527 | + */ |
| 528 | + public function testTaggedLocatorWithDefaultPriorityMethodConfiguredViaAttribute() |
| 529 | + { |
| 530 | + $container = new ContainerBuilder(); |
| 531 | + $container->register(BarTagClass::class) |
| 532 | + ->setPublic(true) |
| 533 | + ->addTag('foo_bar') |
| 534 | + ; |
| 535 | + $container->register(FooTagClass::class) |
| 536 | + ->setPublic(true) |
| 537 | + ->addTag('foo_bar') |
| 538 | + ; |
| 539 | + $container->register(LocatorConsumerWithDefaultPriorityMethod::class) |
| 540 | + ->setAutowired(true) |
| 541 | + ->setPublic(true) |
| 542 | + ; |
| 543 | + |
| 544 | + $container->compile(); |
| 545 | + |
| 546 | + /** @var LocatorConsumerWithoutIndex $s */ |
| 547 | + $s = $container->get(LocatorConsumerWithDefaultPriorityMethod::class); |
| 548 | + |
| 549 | + $locator = $s->getLocator(); |
| 550 | + |
| 551 | + // We need to check priority of instances in the factories |
| 552 | + $factories = (new \ReflectionClass($locator))->getProperty('factories'); |
| 553 | + $factories->setAccessible(true); |
| 554 | + |
| 555 | + self::assertSame([FooTagClass::class, BarTagClass::class], array_keys($factories->getValue($locator))); |
| 556 | + } |
| 557 | + |
| 558 | + /** |
| 559 | + * @requires PHP 8 |
| 560 | + */ |
| 561 | + public function testTaggedLocatorWithDefaultIndexMethodAndWithDefaultPriorityMethodConfiguredViaAttribute() |
| 562 | + { |
| 563 | + $container = new ContainerBuilder(); |
| 564 | + $container->register(BarTagClass::class) |
| 565 | + ->setPublic(true) |
| 566 | + ->addTag('foo_bar') |
| 567 | + ; |
| 568 | + $container->register(FooTagClass::class) |
| 569 | + ->setPublic(true) |
| 570 | + ->addTag('foo_bar') |
| 571 | + ; |
| 572 | + $container->register(LocatorConsumerWithDefaultIndexMethodAndWithDefaultPriorityMethod::class) |
| 573 | + ->setAutowired(true) |
| 574 | + ->setPublic(true) |
| 575 | + ; |
| 576 | + |
| 577 | + $container->compile(); |
| 578 | + |
| 579 | + /** @var LocatorConsumerWithoutIndex $s */ |
| 580 | + $s = $container->get(LocatorConsumerWithDefaultIndexMethodAndWithDefaultPriorityMethod::class); |
| 581 | + |
| 582 | + $locator = $s->getLocator(); |
| 583 | + |
| 584 | + // We need to check priority of instances in the factories |
| 585 | + $factories = (new \ReflectionClass($locator))->getProperty('factories'); |
| 586 | + $factories->setAccessible(true); |
| 587 | + |
| 588 | + self::assertSame(['foo_tag_class', 'bar_tag_class'], array_keys($factories->getValue($locator))); |
| 589 | + self::assertSame($container->get(BarTagClass::class), $locator->get('bar_tag_class')); |
| 590 | + self::assertSame($container->get(FooTagClass::class), $locator->get('foo_tag_class')); |
| 591 | + } |
| 592 | + |
435 | 593 | /**
|
436 | 594 | * @requires PHP 8
|
437 | 595 | */
|
|
0 commit comments