|
21 | 21 | use Symfony\Component\DependencyInjection\Reference; |
22 | 22 | use Symfony\Component\DependencyInjection\ServiceLocator; |
23 | 23 | use Symfony\Component\DependencyInjection\Tests\Fixtures\CustomDefinition; |
| 24 | +use Symfony\Component\DependencyInjection\Tests\Fixtures\TestDefinition1; |
| 25 | +use Symfony\Component\DependencyInjection\Tests\Fixtures\TestDefinition2; |
| 26 | +use Symfony\Component\DependencyInjection\Tests\Fixtures\TestDefinition3; |
24 | 27 | use Symfony\Component\DependencyInjection\Tests\Fixtures\TestServiceSubscriber; |
| 28 | +use Symfony\Component\DependencyInjection\Tests\Fixtures\TestServiceSubscriberChild; |
| 29 | +use Symfony\Component\DependencyInjection\Tests\Fixtures\TestServiceSubscriberParent; |
25 | 30 | use Symfony\Component\DependencyInjection\TypedReference; |
26 | 31 |
|
27 | 32 | require_once __DIR__.'/../Fixtures/includes/classes.php'; |
@@ -136,4 +141,29 @@ public function testExtraServiceSubscriber() |
136 | 141 | $container->register(TestServiceSubscriber::class, TestServiceSubscriber::class); |
137 | 142 | $container->compile(); |
138 | 143 | } |
| 144 | + |
| 145 | + public function testServiceSubscriberTrait() |
| 146 | + { |
| 147 | + $container = new ContainerBuilder(); |
| 148 | + |
| 149 | + $container->register('foo', TestServiceSubscriberChild::class) |
| 150 | + ->addMethodCall('setContainer', array(new Reference(PsrContainerInterface::class))) |
| 151 | + ->addTag('container.service_subscriber') |
| 152 | + ; |
| 153 | + |
| 154 | + (new RegisterServiceSubscribersPass())->process($container); |
| 155 | + (new ResolveServiceSubscribersPass())->process($container); |
| 156 | + |
| 157 | + $foo = $container->getDefinition('foo'); |
| 158 | + $locator = $container->getDefinition((string) $foo->getMethodCalls()[0][1][0]); |
| 159 | + |
| 160 | + $expected = array( |
| 161 | + TestServiceSubscriberChild::class.'::invalidDefinition' => new ServiceClosureArgument(new TypedReference('Symfony\Component\DependencyInjection\Tests\Fixtures\InvalidDefinition', 'Symfony\Component\DependencyInjection\Tests\Fixtures\InvalidDefinition', ContainerInterface::IGNORE_ON_INVALID_REFERENCE)), |
| 162 | + TestServiceSubscriberChild::class.'::testDefinition2' => new ServiceClosureArgument(new TypedReference(TestDefinition2::class, TestDefinition2::class, ContainerInterface::IGNORE_ON_INVALID_REFERENCE)), |
| 163 | + TestServiceSubscriberChild::class.'::testDefinition3' => new ServiceClosureArgument(new TypedReference(TestDefinition3::class, TestDefinition3::class, ContainerInterface::IGNORE_ON_INVALID_REFERENCE)), |
| 164 | + TestServiceSubscriberParent::class.'::testDefinition1' => new ServiceClosureArgument(new TypedReference(TestDefinition1::class, TestDefinition1::class, ContainerInterface::IGNORE_ON_INVALID_REFERENCE)), |
| 165 | + ); |
| 166 | + |
| 167 | + $this->assertEquals($expected, $container->getDefinition((string) $locator->getFactory()[0])->getArgument(0)); |
| 168 | + } |
139 | 169 | } |
0 commit comments