--- /dev/null
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\DependencyInjection\Tests\Compiler;
+
+use PHPUnit\Framework\TestCase;
+use Symfony\Component\Config\Definition\Builder\TreeBuilder;
+use Symfony\Component\Config\Definition\ConfigurationInterface;
+use Symfony\Component\Config\Resource\FileResource;
+use Symfony\Component\DependencyInjection\Compiler\MergeExtensionConfigurationPass;
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
+
+class MergeExtensionConfigurationPassTest extends TestCase
+{
+ public function testExpressionLanguageProviderForwarding()
+ {
+ $tmpProviders = array();
+
+ $extension = $this->getMockBuilder('Symfony\\Component\\DependencyInjection\\Extension\\ExtensionInterface')->getMock();
+ $extension->expects($this->any())
+ ->method('getXsdValidationBasePath')
+ ->will($this->returnValue(false));
+ $extension->expects($this->any())
+ ->method('getNamespace')
+ ->will($this->returnValue('http://example.org/schema/dic/foo'));
+ $extension->expects($this->any())
+ ->method('getAlias')
+ ->will($this->returnValue('foo'));
+ $extension->expects($this->once())
+ ->method('load')
+ ->will($this->returnCallback(function (array $config, ContainerBuilder $container) use (&$tmpProviders) {
+ $tmpProviders = $container->getExpressionLanguageProviders();
+ }));
+
+ $provider = $this->getMockBuilder('Symfony\\Component\\ExpressionLanguage\\ExpressionFunctionProviderInterface')->getMock();
+ $container = new ContainerBuilder(new ParameterBag());
+ $container->registerExtension($extension);
+ $container->prependExtensionConfig('foo', array('bar' => true));
+ $container->addExpressionLanguageProvider($provider);
+
+ $pass = new MergeExtensionConfigurationPass();
+ $pass->process($container);
+
+ $this->assertEquals(array($provider), $tmpProviders);
+ }
+
+ public function testExtensionConfigurationIsTrackedByDefault()
+ {
+ $extension = $this->getMockBuilder('Symfony\\Component\\DependencyInjection\\Extension\\Extension')->getMock();
+ $extension->expects($this->once())
+ ->method('getConfiguration')
+ ->will($this->returnValue(new FooConfiguration()));
+ $extension->expects($this->any())
+ ->method('getAlias')
+ ->will($this->returnValue('foo'));
+
+ $container = new ContainerBuilder(new ParameterBag());
+ $container->registerExtension($extension);
+ $container->prependExtensionConfig('foo', array('bar' => true));
+
+ $pass = new MergeExtensionConfigurationPass();
+ $pass->process($container);
+
+ $this->assertContains(new FileResource(__FILE__), $container->getResources(), '', false, false);
+ }
+}
+
+class FooConfiguration implements ConfigurationInterface
+{
+ public function getConfigTreeBuilder()
+ {
+ return new TreeBuilder();
+ }
+}