|
17 | 17 | use Symfony\Component\DependencyInjection\Compiler\InlineServiceDefinitionsPass;
|
18 | 18 | use Symfony\Component\DependencyInjection\Reference;
|
19 | 19 | use Symfony\Component\DependencyInjection\ContainerBuilder;
|
| 20 | +use Symfony\Component\DependencyInjection\Argument\ClosureProxyArgument; |
| 21 | +use Symfony\Component\DependencyInjection\Argument\IteratorArgument; |
20 | 22 |
|
21 | 23 | class InlineServiceDefinitionsPassTest extends \PHPUnit_Framework_TestCase
|
22 | 24 | {
|
@@ -222,6 +224,33 @@ public function testProcessDoesNotInlineWhenServiceReferencesItself()
|
222 | 224 | $this->assertSame($ref, $calls[0][1][0]);
|
223 | 225 | }
|
224 | 226 |
|
| 227 | + public function testProcessDoesNotSetLazyArgumentValuesAfterInlining() |
| 228 | + { |
| 229 | + $container = new ContainerBuilder(); |
| 230 | + $container |
| 231 | + ->register('inline') |
| 232 | + ->setShared(false) |
| 233 | + ; |
| 234 | + $container |
| 235 | + ->register('closure-proxy') |
| 236 | + ->setArguments(array(new ClosureProxyArgument('inline', 'method'))) |
| 237 | + ; |
| 238 | + $container |
| 239 | + ->register('iterator') |
| 240 | + ->setArguments(array(new IteratorArgument(array(new Reference('inline'))))) |
| 241 | + ; |
| 242 | + |
| 243 | + $this->process($container); |
| 244 | + |
| 245 | + $values = $container->getDefinition('closure-proxy')->getArgument(0)->getValues(); |
| 246 | + $this->assertInstanceOf(Reference::class, $values[0]); |
| 247 | + $this->assertSame('inline', (string) $values[0]); |
| 248 | + |
| 249 | + $values = $container->getDefinition('iterator')->getArgument(0)->getValues(); |
| 250 | + $this->assertInstanceOf(Reference::class, $values[0]); |
| 251 | + $this->assertSame('inline', (string) $values[0]); |
| 252 | + } |
| 253 | + |
225 | 254 | protected function process(ContainerBuilder $container)
|
226 | 255 | {
|
227 | 256 | $repeatedPass = new RepeatedPass(array(new AnalyzeServiceReferencesPass(), new InlineServiceDefinitionsPass()));
|
|
0 commit comments