17
17
use Symfony \Component \DependencyInjection \Argument \ServiceClosureArgument ;
18
18
use Symfony \Component \DependencyInjection \Attribute \Autowire ;
19
19
use Symfony \Component \DependencyInjection \Attribute \AutowireCallable ;
20
+ use Symfony \Component \DependencyInjection \Attribute \AutowireIterator ;
20
21
use Symfony \Component \DependencyInjection \Attribute \AutowireLocator ;
21
22
use Symfony \Component \DependencyInjection \Attribute \TaggedIterator ;
22
23
use Symfony \Component \DependencyInjection \Attribute \TaggedLocator ;
31
32
use Symfony \Component \HttpFoundation \Response ;
32
33
use Symfony \Component \HttpKernel \DependencyInjection \RegisterControllerArgumentLocatorsPass ;
33
34
use Symfony \Component \HttpKernel \Tests \Fixtures \Suit ;
35
+ use Symfony \Contracts \Service \Attribute \SubscribedService ;
34
36
35
37
class RegisterControllerArgumentLocatorsPassTest extends TestCase
36
38
{
@@ -499,6 +501,7 @@ public function testAutowireAttribute()
499
501
public function testTaggedIteratorAndTaggedLocatorAttributes ()
500
502
{
501
503
$ container = new ContainerBuilder ();
504
+ $ container ->setParameter ('some.parameter ' , 'bar ' );
502
505
$ resolver = $ container ->register ('argument_resolver.service ' , \stdClass::class)->addArgument ([]);
503
506
504
507
$ container ->register ('bar ' , \stdClass::class)->addTag ('foobar ' );
@@ -517,25 +520,48 @@ public function testTaggedIteratorAndTaggedLocatorAttributes()
517
520
/** @var ServiceLocator $locator */
518
521
$ locator = $ container ->get ($ locatorId )->get ('foo::fooAction ' );
519
522
520
- $ this ->assertCount (3 , $ locator ->getProvidedServices ());
523
+ $ this ->assertCount (7 , $ locator ->getProvidedServices ());
521
524
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 ' ));
524
527
$ this ->assertCount (2 , $ argIterator );
525
528
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 ' ));
528
543
$ this ->assertCount (2 , $ argLocator );
529
544
$ this ->assertTrue ($ argLocator ->has ('bar ' ));
530
545
$ this ->assertTrue ($ argLocator ->has ('baz ' ));
531
546
532
547
$ this ->assertSame (iterator_to_array ($ argIterator ), [$ argLocator ->get ('bar ' ), $ argLocator ->get ('baz ' )]);
533
548
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 ' ));
536
551
$ this ->assertCount (2 , $ argLocator );
537
552
$ this ->assertTrue ($ argLocator ->has ('bar ' ));
538
553
$ 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 ' ]);
539
565
}
540
566
}
541
567
@@ -674,9 +700,13 @@ public function fooAction(
674
700
class WithTaggedIteratorAndTaggedLocator
675
701
{
676
702
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 ,
680
710
) {
681
711
}
682
712
}
0 commit comments