From d8cbec00ad56d15866dadf4adc9b18a6ea147a33 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Thu, 24 May 2018 16:57:45 +0200 Subject: [PATCH] [FrameworkBundle] cleanup generated test container --- .../Compiler/TestServiceContainerRealRefPass.php | 12 ++++++++++-- .../Compiler/TestServiceContainerWeakRefPass.php | 4 ++-- .../Tests/Functional/TestServiceContainerTest.php | 2 +- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/TestServiceContainerRealRefPass.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/TestServiceContainerRealRefPass.php index 9e36a80d00..19b36e3d2c 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/TestServiceContainerRealRefPass.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/TestServiceContainerRealRefPass.php @@ -27,13 +27,21 @@ class TestServiceContainerRealRefPass implements CompilerPassInterface } $testContainer = $container->getDefinition('test.service_container'); - $privateContainer = $container->getDefinition((string) $testContainer->getArgument(2)); + $privateContainer = $testContainer->getArgument(2); + if ($privateContainer instanceof Reference) { + $privateContainer = $container->getDefinition((string) $privateContainer); + } $definitions = $container->getDefinitions(); + $privateServices = $privateContainer->getArgument(0); - foreach ($privateContainer->getArgument(0) as $id => $argument) { + foreach ($privateServices as $id => $argument) { if (isset($definitions[$target = (string) $argument->getValues()[0]])) { $argument->setValues(array(new Reference($target))); + } else { + unset($privateServices[$id]); } } + + $privateContainer->replaceArgument(0, $privateServices); } } diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/TestServiceContainerWeakRefPass.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/TestServiceContainerWeakRefPass.php index 62f17d64f1..51fe553e19 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/TestServiceContainerWeakRefPass.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/TestServiceContainerWeakRefPass.php @@ -31,7 +31,7 @@ class TestServiceContainerWeakRefPass implements CompilerPassInterface $definitions = $container->getDefinitions(); foreach ($definitions as $id => $definition) { - if ((!$definition->isPublic() || $definition->isPrivate()) && !$definition->getErrors() && !$definition->isAbstract()) { + if ($id && '.' !== $id[0] && (!$definition->isPublic() || $definition->isPrivate()) && !$definition->getErrors() && !$definition->isAbstract()) { $privateServices[$id] = new ServiceClosureArgument(new Reference($id, ContainerBuilder::IGNORE_ON_UNINITIALIZED_REFERENCE)); } } @@ -39,7 +39,7 @@ class TestServiceContainerWeakRefPass implements CompilerPassInterface $aliases = $container->getAliases(); foreach ($aliases as $id => $alias) { - if (!$alias->isPublic() || $alias->isPrivate()) { + if ($id && '.' !== $id[0] && (!$alias->isPublic() || $alias->isPrivate())) { while (isset($aliases[$target = (string) $alias])) { $alias = $aliases[$target]; } diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/TestServiceContainerTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/TestServiceContainerTest.php index 88d3b4cf29..b50c3e1f0b 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/TestServiceContainerTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/TestServiceContainerTest.php @@ -42,6 +42,6 @@ class TestServiceContainerTest extends WebTestCase $this->assertTrue(static::$container->has(NonPublicService::class)); $this->assertTrue(static::$container->has(PrivateService::class)); $this->assertTrue(static::$container->has('private_service')); - $this->assertTrue(static::$container->has(UnusedPrivateService::class)); + $this->assertFalse(static::$container->has(UnusedPrivateService::class)); } }