@@ -792,17 +792,77 @@ public function testContainerTags()
792792
793793 $ this ->assertCount (1 , $ container ->tagged ('bar ' ));
794794 $ this ->assertCount (2 , $ container ->tagged ('foo ' ));
795- $ this ->assertInstanceOf (ContainerImplementationStub::class, $ container ->tagged ('foo ' )[0 ]);
796- $ this ->assertInstanceOf (ContainerImplementationStub::class, $ container ->tagged ('bar ' )[0 ]);
797- $ this ->assertInstanceOf (ContainerImplementationStubTwo::class, $ container ->tagged ('foo ' )[1 ]);
795+
796+ $ fooResults = [];
797+ foreach ($ container ->tagged ('foo ' ) as $ foo ) {
798+ $ fooResults [] = $ foo ;
799+ }
800+
801+ $ barResults = [];
802+ foreach ($ container ->tagged ('bar ' ) as $ bar ) {
803+ $ barResults [] = $ bar ;
804+ }
805+
806+ $ this ->assertInstanceOf (ContainerImplementationStub::class, $ fooResults [0 ]);
807+ $ this ->assertInstanceOf (ContainerImplementationStub::class, $ barResults [0 ]);
808+ $ this ->assertInstanceOf (ContainerImplementationStubTwo::class, $ fooResults [1 ]);
798809
799810 $ container = new Container ;
800811 $ container ->tag ([ContainerImplementationStub::class, ContainerImplementationStubTwo::class], ['foo ' ]);
801812 $ this ->assertCount (2 , $ container ->tagged ('foo ' ));
802- $ this ->assertInstanceOf (ContainerImplementationStub::class, $ container ->tagged ('foo ' )[0 ]);
803- $ this ->assertInstanceOf (ContainerImplementationStubTwo::class, $ container ->tagged ('foo ' )[1 ]);
804813
805- $ this ->assertEmpty ($ container ->tagged ('this_tag_does_not_exist ' ));
814+ $ fooResults = [];
815+ foreach ($ container ->tagged ('foo ' ) as $ foo ) {
816+ $ fooResults [] = $ foo ;
817+ }
818+
819+ $ this ->assertInstanceOf (ContainerImplementationStub::class, $ fooResults [0 ]);
820+ $ this ->assertInstanceOf (ContainerImplementationStubTwo::class, $ fooResults [1 ]);
821+
822+ $ this ->assertCount (0 , $ container ->tagged ('this_tag_does_not_exist ' ));
823+ }
824+
825+ public function testTaggedServicesAreLazyLoaded ()
826+ {
827+ $ container = $ this ->createPartialMock (Container::class, ['make ' ]);
828+ $ container ->expects ($ this ->once ())->method ('make ' )->willReturn (new ContainerImplementationStub ());
829+
830+ $ container ->tag (ContainerImplementationStub::class, ['foo ' ]);
831+ $ container ->tag (ContainerImplementationStubTwo::class, ['foo ' ]);
832+
833+ $ fooResults = [];
834+ foreach ($ container ->tagged ('foo ' ) as $ foo ) {
835+ $ fooResults [] = $ foo ;
836+ break ;
837+ }
838+
839+ $ this ->assertCount (2 , $ container ->tagged ('foo ' ));
840+ $ this ->assertInstanceOf (ContainerImplementationStub::class, $ fooResults [0 ]);
841+ }
842+
843+ public function testLazyLoadedTaggedServicesCanBeLoopedOverMultipleTimes ()
844+ {
845+ $ container = new Container ;
846+ $ container ->tag (ContainerImplementationStub::class, 'foo ' );
847+ $ container ->tag (ContainerImplementationStubTwo::class, ['foo ' ]);
848+
849+ $ services = $ container ->tagged ('foo ' );
850+
851+ $ fooResults = [];
852+ foreach ($ services as $ foo ) {
853+ $ fooResults [] = $ foo ;
854+ }
855+
856+ $ this ->assertInstanceOf (ContainerImplementationStub::class, $ fooResults [0 ]);
857+ $ this ->assertInstanceOf (ContainerImplementationStubTwo::class, $ fooResults [1 ]);
858+
859+ $ fooResults = [];
860+ foreach ($ services as $ foo ) {
861+ $ fooResults [] = $ foo ;
862+ }
863+
864+ $ this ->assertInstanceOf (ContainerImplementationStub::class, $ fooResults [0 ]);
865+ $ this ->assertInstanceOf (ContainerImplementationStubTwo::class, $ fooResults [1 ]);
806866 }
807867
808868 public function testForgetInstanceForgetsInstance ()
0 commit comments