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

Skip to content

Commit aa65319

Browse files
committed
Add tests
1 parent fff33e5 commit aa65319

File tree

13 files changed

+105
-23
lines changed

13 files changed

+105
-23
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 F438 '), 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);

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,15 @@ protected function createContainerExtension(): ?ExtensionInterface
2929
return new BundleExtension($this);
3030
}
3131

32-
public function configureConfig(TreeBuilder $builder, LoaderInterface $loader): void
32+
public function loadConfiguration(TreeBuilder $builder, LoaderInterface $loader): void
3333
{
3434
}
3535

3636
public function prependExtension(ContainerConfigurator $container, LoaderInterface $loader, ContainerBuilder $builder): void
3737
{
3838
}
3939

40-
public function configureContainer(array $mergedConfig, ContainerConfigurator $container, LoaderInterface $loader, ContainerBuilder $builder): void
40+
public function loadExtension(array $mergedConfig, ContainerConfigurator $container, LoaderInterface $loader, ContainerBuilder $builder): void
4141
{
4242
}
4343
}

src/Symfony/Component/HttpKernel/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ CHANGELOG
77
* Deprecate `AbstractTestSessionListener::getSession` inject a session in the request instead
88
* Deprecate the `fileLinkFormat` parameter of `DebugHandlersListener`
99
* Add support for configuring log level, and status code by exception class
10+
* Add `MicroBundleTrait`, `BundleExtension` and `BundleConfiguration` for DI extension/config definitions within the bundle class
1011

1112
5.3
1213
---

src/Symfony/Component/HttpKernel/composer.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
},
3030
"require-dev": {
3131
"symfony/browser-kit": "^5.4|^6.0",
32-
"symfony/config": "^5.0|^6.0",
32+
"symfony/config": "^5.4|^6.0",
3333
"symfony/console": "^4.4|^5.0|^6.0",
3434
"symfony/css-selector": "^4.4|^5.0|^6.0",
3535
"symfony/dependency-injection": "^5.3|^6.0",
@@ -50,7 +50,7 @@
5050
"conflict": {
5151
"symfony/browser-kit": "<5.4",
5252
"symfony/cache": "<5.0",
53-
"symfony/config": "<5.0",
53+
"symfony/config": "<5.4",
5454
"symfony/console": "<4.4",
5555
"symfony/form": "<5.0",
5656
"symfony/dependency-injection": "<5.3",

0 commit comments

Comments
 (0)
0