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