1717use Symfony \Component \DependencyInjection \Argument \ServiceClosureArgument ;
1818use Symfony \Component \DependencyInjection \Attribute \Autowire ;
1919use Symfony \Component \DependencyInjection \Attribute \AutowireCallable ;
20+ use Symfony \Component \DependencyInjection \Attribute \AutowireIterator ;
2021use Symfony \Component \DependencyInjection \Attribute \AutowireLocator ;
2122use Symfony \Component \DependencyInjection \Attribute \TaggedIterator ;
2223use Symfony \Component \DependencyInjection \Attribute \TaggedLocator ;
3132use Symfony \Component \HttpFoundation \Response ;
3233use Symfony \Component \HttpKernel \DependencyInjection \RegisterControllerArgumentLocatorsPass ;
3334use Symfony \Component \HttpKernel \Tests \Fixtures \Suit ;
35+ use Symfony \Contracts \Service \Attribute \SubscribedService ;
3436
3537class RegisterControllerArgumentLocatorsPassTest extends TestCase
3638{
@@ -499,6 +501,7 @@ public function testAutowireAttribute()
499501 public function testTaggedIteratorAndTaggedLocatorAttributes ()
500502 {
501503 $ container = new ContainerBuilder ();
504+ $ container ->setParameter ('some.parameter ' , 'bar ' );
502505 $ resolver = $ container ->register ('argument_resolver.service ' , \stdClass::class)->addArgument ([]);
503506
504507 $ container ->register ('bar ' , \stdClass::class)->addTag ('foobar ' );
@@ -517,25 +520,48 @@ public function testTaggedIteratorAndTaggedLocatorAttributes()
517520 /** @var ServiceLocator $locator */
518521 $ locator = $ container ->get ($ locatorId )->get ('foo::fooAction ' );
519522
520- $ this ->assertCount (3 , $ locator ->getProvidedServices ());
523+ $ this ->assertCount (7 , $ locator ->getProvidedServices ());
521524
522- $ this ->assertTrue ($ locator ->has ('iterator ' ));
523- $ this ->assertInstanceOf (RewindableGenerator::class, $ argIterator = $ locator ->get ('iterator ' ));
525+ $ this ->assertTrue ($ locator ->has ('iterator1 ' ));
526+ $ this ->assertInstanceOf (RewindableGenerator::class, $ argIterator = $ locator ->get ('iterator1 ' ));
524527 $ this ->assertCount (2 , $ argIterator );
525528
526- $ this ->assertTrue ($ locator ->has ('locator ' ));
527- $ this ->assertInstanceOf (ServiceLocator::class, $ argLocator = $ locator ->get ('locator ' ));
529+ $ this ->assertTrue ($ locator ->has ('iterator2 ' ));
530+ $ this ->assertInstanceOf (RewindableGenerator::class, $ argIterator = $ locator ->get ('iterator2 ' ));
531+ $ this ->assertCount (2 , $ argIterator );
532+
533+ $ this ->assertTrue ($ locator ->has ('locator1 ' ));
534+ $ this ->assertInstanceOf (ServiceLocator::class, $ argLocator = $ locator ->get ('locator1 ' ));
535+ $ this ->assertCount (2 , $ argLocator );
536+ $ this ->assertTrue ($ argLocator ->has ('bar ' ));
537+ $ this ->assertTrue ($ argLocator ->has ('baz ' ));
538+
539+ $ this ->assertSame (iterator_to_array ($ argIterator ), [$ argLocator ->get ('bar ' ), $ argLocator ->get ('baz ' )]);
540+
541+ $ this ->assertTrue ($ locator ->has ('locator2 ' ));
542+ $ this ->assertInstanceOf (ServiceLocator::class, $ argLocator = $ locator ->get ('locator2 ' ));
528543 $ this ->assertCount (2 , $ argLocator );
529544 $ this ->assertTrue ($ argLocator ->has ('bar ' ));
530545 $ this ->assertTrue ($ argLocator ->has ('baz ' ));
531546
532547 $ this ->assertSame (iterator_to_array ($ argIterator ), [$ argLocator ->get ('bar ' ), $ argLocator ->get ('baz ' )]);
533548
534- $ this ->assertTrue ($ locator ->has ('container ' ));
535- $ this ->assertInstanceOf (ServiceLocator::class, $ argLocator = $ locator ->get ('container ' ));
549+ $ this ->assertTrue ($ locator ->has ('container1 ' ));
550+ $ this ->assertInstanceOf (ServiceLocator::class, $ argLocator = $ locator ->get ('container1 ' ));
536551 $ this ->assertCount (2 , $ argLocator );
537552 $ this ->assertTrue ($ argLocator ->has ('bar ' ));
538553 $ this ->assertTrue ($ argLocator ->has ('baz ' ));
554+
555+ $ this ->assertTrue ($ locator ->has ('container2 ' ));
556+ $ this ->assertInstanceOf (ServiceLocator::class, $ argLocator = $ locator ->get ('container2 ' ));
557+ $ this ->assertCount (1 , $ argLocator );
558+ $ this ->assertTrue ($ argLocator ->has ('foo ' ));
559+ $ this ->assertSame ('bar ' , $ argLocator ->get ('foo ' ));
560+
561+ $ this ->assertTrue ($ locator ->has ('iterator3 ' ));
562+ $ this ->assertInstanceOf (RewindableGenerator::class, $ argIterator = $ locator ->get ('iterator3 ' ));
563+ $ this ->assertCount (1 , $ argIterator );
564+ $ this ->assertSame ('bar ' , iterator_to_array ($ argIterator )['foo ' ]);
539565 }
540566}
541567
@@ -674,9 +700,13 @@ public function fooAction(
674700class WithTaggedIteratorAndTaggedLocator
675701{
676702 public function fooAction (
677- #[TaggedIterator('foobar ' )] iterable $ iterator ,
678- #[TaggedLocator('foobar ' )] ServiceLocator $ locator ,
679- #[AutowireLocator(['bar ' , 'baz ' ])] ContainerInterface $ container ,
703+ #[TaggedIterator('foobar ' )] iterable $ iterator1 ,
704+ #[AutowireIterator('foobar ' )] iterable $ iterator2 ,
705+ #[TaggedLocator('foobar ' )] ServiceLocator $ locator1 ,
706+ #[AutowireLocator('foobar ' )] ServiceLocator $ locator2 ,
707+ #[AutowireLocator(['bar ' , 'baz ' ])] ContainerInterface $ container1 ,
708+ #[AutowireLocator(['foo ' => new SubscribedService (type: 'string ' , attributes: new Autowire ('%some.parameter% ' ))])] ContainerInterface $ container2 ,
709+ #[AutowireIterator(['foo ' => new SubscribedService (type: 'string ' , attributes: new Autowire ('%some.parameter% ' ))])] iterable $ iterator3 ,
680710 ) {
681711 }
682712}
0 commit comments