|
3 | 3 | namespace Symfony\Component\DependencyInjection\Tests;
|
4 | 4 |
|
5 | 5 | use PHPUnit\Framework\TestCase;
|
| 6 | +use Symfony\Component\DependencyInjection\Argument\RewindableGenerator; |
6 | 7 | use Symfony\Component\DependencyInjection\Container;
|
7 | 8 | use Symfony\Component\DependencyInjection\ContainerBuilder;
|
8 | 9 | use Symfony\Component\DependencyInjection\EnvVarLoaderInterface;
|
9 | 10 | use Symfony\Component\DependencyInjection\EnvVarProcessor;
|
| 11 | +use Symfony\Component\DependencyInjection\Exception\ParameterCircularReferenceException; |
10 | 12 |
|
11 | 13 | class EnvVarProcessorTest extends TestCase
|
12 | 14 | {
|
@@ -553,4 +555,44 @@ public function loadEnvVars(): array
|
553 | 555 | $result = $processor->getEnv('string', 'FOO_ENV_LOADER', function () {});
|
554 | 556 | $this->assertSame('123', $result); // check twice
|
555 | 557 | }
|
| 558 | + |
| 559 | + public function testCircularEnvLoader() |
| 560 | + { |
| 561 | + $container = new ContainerBuilder(); |
| 562 | + $container->setParameter('env(FOO_CONTAINER)', 'foo'); |
| 563 | + $container->compile(); |
| 564 | + |
| 565 | + $index = 0; |
| 566 | + $loaders = function () use (&$index) { |
| 567 | + if (0 === $index++) { |
| 568 | + throw new ParameterCircularReferenceException(['FOO_CONTAINER']); |
| 569 | + } |
| 570 | + |
| 571 | + yield new class() implements EnvVarLoaderInterface { |
| 572 | + public function loadEnvVars(): array |
| 573 | + { |
| 574 | + return [ |
| 575 | + 'FOO_ENV_LOADER' => '123', |
| 576 | + ]; |
| 577 | + } |
| 578 | + }; |
| 579 | + }; |
| 580 | + |
| 581 | + $processor = new EnvVarProcessor($container, new RewindableGenerator($loaders, 1)); |
| 582 | + |
| 583 | + $result = $processor->getEnv('string', 'FOO_CONTAINER', function () {}); |
| 584 | + $this->assertSame('foo', $result); |
| 585 | + |
| 586 | + $result = $processor->getEnv('string', 'FOO_ENV_LOADER', function () {}); |
| 587 | + $this->assertSame('123', $result); |
| 588 | + |
| 589 | + $result = $processor->getEnv('default', ':BAR_CONTAINER', function ($name) use ($processor) { |
| 590 | + $this->assertSame('BAR_CONTAINER', $name); |
| 591 | + |
| 592 | + return $processor->getEnv('string', $name, function () {}); |
| 593 | + }); |
| 594 | + $this->assertNull($result); |
| 595 | + |
| 596 | + $this->assertSame(2, $index); |
| 597 | + } |
556 | 598 | }
|
0 commit comments