Skip to content

Commit 0134b86

Browse files
committed
Merge branch '2.3' into 2.7
* 2.3: [DependencyInjection] Resolve aliases before removing abstract services + add tests Fix Dom Crawler select option with empty value Remove unnecessary option assignment remove unused variable [PropertyAccess] Fix regression
2 parents 1414606 + fe9e556 commit 0134b86

File tree

4 files changed

+43
-6
lines changed

4 files changed

+43
-6
lines changed

Compiler/PassConfig.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ public function __construct()
5757

5858
$this->removingPasses = array(
5959
new RemovePrivateAliasesPass(),
60-
new RemoveAbstractDefinitionsPass(),
6160
new ReplaceAliasByActualDefinitionPass(),
61+
new RemoveAbstractDefinitionsPass(),
6262
new RepeatedPass(array(
6363
new AnalyzeServiceReferencesPass(),
6464
new InlineServiceDefinitionsPass(),
@@ -101,8 +101,7 @@ public function addPass(CompilerPassInterface $pass, $type = self::TYPE_BEFORE_O
101101
throw new InvalidArgumentException(sprintf('Invalid type "%s".', $type));
102102
}
103103

104-
$passes = &$this->$property;
105-
$passes[] = $pass;
104+
$this->{$property}[] = $pass;
106105
}
107106

108107
/**

Tests/ContainerBuilderTest.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -739,6 +739,21 @@ public function testExtensionConfig()
739739
$this->assertEquals(array($second, $first), $configs);
740740
}
741741

742+
public function testAbstractAlias()
743+
{
744+
$container = new ContainerBuilder();
745+
746+
$abstract = new Definition('AbstractClass');
747+
$abstract->setAbstract(true);
748+
749+
$container->setDefinition('abstract_service', $abstract);
750+
$container->setAlias('abstract_alias', 'abstract_service');
751+
752+
$container->compile();
753+
754+
$this->assertSame('abstract_service', (string) $container->getAlias('abstract_alias'));
755+
}
756+
742757
public function testLazyLoadedService()
743758
{
744759
$loader = new ClosureLoader($container = new ContainerBuilder());

Tests/Fixtures/xml/services5.xml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,12 @@
1414
</service>
1515
</argument>
1616
<property name="p" type="service">
17-
<service class="BazClass" />
17+
<service class="BuzClass" />
1818
</property>
1919
</service>
20+
<service id="bar" parent="foo" />
21+
<service class="BizClass">
22+
<tag name="biz_tag" />
23+
</service>
2024
</services>
2125
</container>

Tests/Loader/XmlFileLoaderTest.php

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ public function testLoadAnonymousServices()
163163
$loader = new XmlFileLoader($container, new FileLocator(self::$fixturesPath.'/xml'));
164164
$loader->load('services5.xml');
165165
$services = $container->getDefinitions();
166-
$this->assertCount(4, $services, '->load() attributes unique ids to anonymous services');
166+
$this->assertCount(6, $services, '->load() attributes unique ids to anonymous services');
167167

168168
// anonymous service as an argument
169169
$args = $services['foo']->getArguments();
@@ -172,6 +172,7 @@ public function testLoadAnonymousServices()
172172
$this->assertTrue(isset($services[(string) $args[0]]), '->load() makes a reference to the created ones');
173173
$inner = $services[(string) $args[0]];
174174
$this->assertEquals('BarClass', $inner->getClass(), '->load() uses the same configuration as for the anonymous ones');
175+
$this->assertFalse($inner->isPublic());
175176

176177
// inner anonymous services
177178
$args = $inner->getArguments();
@@ -188,7 +189,25 @@ public function testLoadAnonymousServices()
188189
$this->assertInstanceOf('Symfony\\Component\\DependencyInjection\\Reference', $property, '->load() converts anonymous services to references to "normal" services');
189190
$this->assertTrue(isset($services[(string) $property]), '->load() makes a reference to the created ones');
190191
$inner = $services[(string) $property];
191-
$this->assertEquals('BazClass', $inner->getClass(), '->load() uses the same configuration as for the anonymous ones');
192+
$this->assertEquals('BuzClass', $inner->getClass(), '->load() uses the same configuration as for the anonymous ones');
193+
$this->assertFalse($inner->isPublic());
194+
195+
// "wild" service
196+
$service = $container->findTaggedServiceIds('biz_tag');
197+
$this->assertCount(1, $service);
198+
199+
foreach ($service as $id => $tag) {
200+
$service = $container->getDefinition($id);
201+
}
202+
$this->assertEquals('BizClass', $service->getClass(), '->load() uses the same configuration as for the anonymous ones');
203+
$this->assertFalse($service->isPublic());
204+
205+
// anonymous services are shared when using decoration definitions
206+
$container->compile();
207+
$services = $container->getDefinitions();
208+
$fooArgs = $services['foo']->getArguments();
209+
$barArgs = $services['bar']->getArguments();
210+
$this->assertSame($fooArgs[0], $barArgs[0]);
192211
}
193212

194213
/**

0 commit comments

Comments
 (0)