8000 Add tests · symfony/symfony@b892742 · GitHub
[go: up one dir, main page]

Skip to content

Commit b892742

Browse files
committed
Add tests
1 parent fff33e5 commit b892742

File tree

15 files changed

+174
-25
lines changed

15 files changed

+174
-25
lines changed

src/Symfony/Component/Config/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
CHANGELOG
22
=========
33

4+
5.4.0
5+
-----
6+
7+
* Add loader `PhpFileLoader` for Config definitions
8+
49
5.3.0
510
-----
611

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Definition\Loader;
13+
14+
use PHPUnit\Framework\TestCase;
15+
use Symfony\Component\Config\Definition\BaseNode;
16+
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
17+
use Symfony\Component\Config\Definition\Loader\PhpFileLoader;
18+
use Symfony\Component\Config\FileLocator;
19+
use Symfony\Component\DependencyInjection\ContainerBuilder;
20+
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
21+
22+
class PhpFileLoaderTest extends TestCase
23+
{
24+
public function testSupports()
25+
{
26+
$loader = new PhpFileLoader(new TreeBuilder('test'), new ContainerBuilder(), new FileLocator());
27+
28+
$this->assertTrue($loader->supports('foo.php'), '->supports() returns true if the resource is loadable');
29+
$this->assertFalse($loader->supports('foo.foo'), '->supports() returns false if the resource is not loadable');
30+
$this->assertTrue($loader->supports('with_wrong_ext.yml', 'php'), '->supports() returns true if the resource with forced type is loadable');
31+
}
32+
33+
public function testLoad()
34+
{
35+
$loader = new PhpFileLoader($treeBuilder = new TreeBuilder('test'), new ContainerBuilder(), new FileLocator());
36+
$loader->load(__DIR__.'/../../Fixtures/Loader/node_simple.php');
37+
38+
$children = $treeBuilder->buildTree()->getChildren();
39+
40+
$this->assertArrayHasKey('foo', $children);
41+
$this->assertInstanceOf(BaseNode::class, $children['foo']);
42+
$this->assertSame('test.foo', $children['foo']->getPath(), '->load() loads a PHP file resource');
43+
}
44+
45+
public function testLoadWithParameter()
46+
{
47+
$parameters = new ParameterBag(['foo' => 'bar']);
48+
$loader = new PhpFileLoader($treeBuilder = new TreeBuilder('test'), new ContainerBuilder($parameters), new FileLocator());
49+
$loader->load(__DIR__.'/../../Fixtures/Loader/node_with_parameter.php');
50+
51+
$this->assertSame(['foo' => 'bar'], $treeBuilder->buildTree()->finalize([]));
52+
}
53+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
3+
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
4+
5+
return static function (TreeBuilder $treeBuilder) {
6+
$treeBuilder->getRootNode()
7+
->children()
8+
->scalarNode('foo')->end()
9+
->end();
10+
};
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
4+
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
5+
6+
return static function (TreeBuilder $treeBuilder, ParameterBagInterface $parameters) {
7+
$treeBuilder->getRootNode()
8+
->children()
9+
->scalarNode('foo')->defaultValue($parameters->get('foo'))->end()
10+
->end();
11+
};

src/Symfony/Component/DependencyInjection/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ CHANGELOG
88
* Add support for autoconfigurable attributes on methods, properties and parameters
99
* Make auto-aliases private by default
1010
* Add support for autowiring union and intersection types
11+
* Add support for `BundleExtension` during prepend/load extensions
1112

1213
5.3
1314
---

src/Symfony/Component/DependencyInjection/Compiler/MergeExtensionConfigurationPass.php

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
3434
use Symfony\Component\DependencyInjection\ParameterBag\EnvPlaceholderParameterBag;
3535
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
36+
use Symfony\Component\HttpKernel\Bundle\BundleExtension;
3637

3738
/**
3839
* Merges extension configs into the container builder.
@@ -55,7 +56,9 @@ public function process(ContainerBuilder $container)
5556

5657
foreach ($container->getExtensions() as $extension) {
5758
if ($extension instanceof PrependExtensionInterface) {
58-
$extension->prepend($container, $loader);
59+
$extension->prepend($container);
60+
} elseif ($extension instanceof BundleExtension) {
61+
$extension->prependExtension($container, $loader);
5962
}
6063
}
6164

@@ -86,7 +89,11 @@ public function process(ContainerBuilder $container)
8689
$tmpContainer->addExpressionLanguageProvider($provider);
8790
}
8891

89-
$extension->load($config, $tmpContainer, $this->getContainerLoader($tmpContainer));
92+
if ($extension instanceof BundleExtension) {
93+
$extension->loadExtension($config, $tmpContainer, $this->getContainerLoader($tmpContainer));
94+
} else {
95+
$extension->load($config, $tmpContainer);
96+
}
9097
} catch (\Exception $e) {
9198
if ($resolvingBag instanceof MergeExtensionConfigurationParameterBag) {
9299
$container->getParameterBag()->mergeEnvPlaceholders($resolvingBag);

src/Symfony/Component/DependencyInjection/Extension/ExtensionInterface.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
namespace Symfony\Component\DependencyInjection\Extension;
1313

14-
use Symfony\Component\Config\Loader\LoaderInterface;
1514
use Symfony\Component\DependencyInjection\ContainerBuilder;
1615

1716
/**
@@ -26,7 +25,7 @@ interface ExtensionInterface
2625
*
2726
* @throws \InvalidArgumentException When provided tag is not defined in this extension
2827
*/
29-
public function load(array $configs, ContainerBuilder $container/*, LoaderInterface $loader*/);
28+
public function load(array $configs, ContainerBuilder $container);
3029

3130
/**
3231
* Returns the namespace to be used for this extension (XML namespace).

src/Symfony/Component/DependencyInjection/Extension/PrependExtensionInterface.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,5 @@ interface PrependExtensionInterface
1818
/**
1919
* Allow an extension to prepend the extension configurations.
2020
*/
21-
public function prepend(ContainerBuilder $container/*, LoaderInterface $loader*/);
21+
public function prepend(ContainerBuilder $container);
2222
}

src/Symfony/Component/HttpKernel/Bundle/BundleConfiguration.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public function getConfigTreeBuilder(): TreeBuilder
4141
$file = (new \ReflectionObject($this->bundle))->getFileName();
4242
$loader = new PhpFileLoader($treeBuilder, $this->container, new FileLocator(\dirname($file)));
4343

44-
$this->bundle->configureConfig($treeBuilder, $loader);
44+
$this->bundle->loadConfiguration($treeBuilder, $loader);
4545

4646
return $treeBuilder;
4747
}

src/Symfony/Component/HttpKernel/Bundle/BundleExtension.php

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
use Symfony\Component\DependencyInjection\Container;
1717
use Symfony\Component\DependencyInjection\ContainerBuilder;
1818
use Symfony\Component\DependencyInjection\Extension\Extension;
19-
use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
2019
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
2120
use Symfony\Component\DependencyInjection\Loader\PhpFileLoader;
2221

@@ -25,7 +24,7 @@
2524
*
2625
* @internal
2726
*/
28-
class BundleExtension extends Extension implements PrependExtensionInterface
27+
class BundleExtension extends Extension
2928
{
3029
private $bundle;
3130

@@ -44,34 +43,30 @@ public function getAlias(): string
4443
return Container::underscore(preg_replace('/Bundle$/', '', $this->bundle->getName()));
4544
}
4645

46+
public function load(array $configs, ContainerBuilder $container): void
47+
{
48+
}
49+
4750
public function getConfiguration(array $config, ContainerBuilder $container): ?ConfigurationInterface
4851
{
4952
return new BundleConfiguration($this->bundle, $container, $this->getAlias());
5053
}
5154

52-
public function prepend(ContainerBuilder $container, LoaderInterface $loader = null): void
55+
public function prependExtension(ContainerBuilder $container, LoaderInterface $loader): void
5356
{
54-
if (null === $loader) {
55-
return;
56-
}
57-
5857
$callback = function (ContainerConfigurator $configurator) use ($loader, $container) {
5958
$this->bundle->prependExtension($configurator, $loader, $container);
6059
};
6160

6261
$this->executeConfiguratorCallback($loader, $container, $callback);
6362
}
6463

65-
public function load(array $configs, ContainerBuilder $container, LoaderInterface $loader = null): void
64+
public function loadExtension(array $configs, ContainerBuilder $container, LoaderInterface $loader): void
6665
{
67-
if (null === $loader) {
68-
return;
69-
}
70-
7166
$mergedConfig = $this->processConfiguration($this->getConfiguration($configs, $container), $configs);
7267

7368
$callback = function (ContainerConfigurator $configurator) use ($mergedConfig, $loader, $container) {
74-
$this->bundle->configureContainer($mergedConfig, $configurator, $loader, $container);
69+
$this->bundle->loadExtension($mergedConfig, $configurator, $loader, $container);
7570
};
7671

7772
$this->executeConfiguratorCallback($loader, $container, $callback);

0 commit comments

Comments
 (0)
0