| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- <?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\ParameterBag;
- use PHPUnit\Framework\TestCase;
- use Symfony\Component\DependencyInjection\ParameterBag\EnvPlaceholderParameterBag;
- class EnvPlaceholderParameterBagTest extends TestCase
- {
- /**
- * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
- */
- public function testGetThrowsInvalidArgumentExceptionIfEnvNameContainsNonWordCharacters()
- {
- $bag = new EnvPlaceholderParameterBag();
- $bag->get('env(%foo%)');
- }
- public function testMergeWillNotDuplicateIdenticalParameters()
- {
- $envVariableName = 'DB_HOST';
- $parameter = sprintf('env(%s)', $envVariableName);
- $firstBag = new EnvPlaceholderParameterBag();
- // initialize placeholders
- $firstBag->get($parameter);
- $secondBag = clone $firstBag;
- $firstBag->mergeEnvPlaceholders($secondBag);
- $mergedPlaceholders = $firstBag->getEnvPlaceholders();
- $placeholderForVariable = $mergedPlaceholders[$envVariableName];
- $placeholder = array_values($placeholderForVariable)[0];
- $this->assertCount(1, $placeholderForVariable);
- $this->assertInternalType('string', $placeholder);
- $this->assertContains($envVariableName, $placeholder);
- }
- public function testMergeWhereFirstBagIsEmptyWillWork()
- {
- $envVariableName = 'DB_HOST';
- $parameter = sprintf('env(%s)', $envVariableName);
- $firstBag = new EnvPlaceholderParameterBag();
- $secondBag = new EnvPlaceholderParameterBag();
- // initialize placeholder only in second bag
- $secondBag->get($parameter);
- $this->assertEmpty($firstBag->getEnvPlaceholders());
- $firstBag->mergeEnvPlaceholders($secondBag);
- $mergedPlaceholders = $firstBag->getEnvPlaceholders();
- $placeholderForVariable = $mergedPlaceholders[$envVariableName];
- $placeholder = array_values($placeholderForVariable)[0];
- $this->assertCount(1, $placeholderForVariable);
- $this->assertInternalType('string', $placeholder);
- $this->assertContains($envVariableName, $placeholder);
- }
- public function testMergeWherePlaceholderOnlyExistsInSecond()
- {
- $uniqueEnvName = 'DB_HOST';
- $commonEnvName = 'DB_USER';
- $uniqueParamName = sprintf('env(%s)', $uniqueEnvName);
- $commonParamName = sprintf('env(%s)', $commonEnvName);
- $firstBag = new EnvPlaceholderParameterBag();
- // initialize common placeholder
- $firstBag->get($commonParamName);
- $secondBag = clone $firstBag;
- // initialize unique placeholder
- $secondBag->get($uniqueParamName);
- $firstBag->mergeEnvPlaceholders($secondBag);
- $merged = $firstBag->getEnvPlaceholders();
- $this->assertCount(1, $merged[$uniqueEnvName]);
- // second bag has same placeholder for commonEnvName
- $this->assertCount(1, $merged[$commonEnvName]);
- }
- public function testMergeWithDifferentIdentifiersForPlaceholders()
- {
- $envName = 'DB_USER';
- $paramName = sprintf('env(%s)', $envName);
- $firstBag = new EnvPlaceholderParameterBag();
- $secondBag = new EnvPlaceholderParameterBag();
- // initialize placeholders
- $firstPlaceholder = $firstBag->get($paramName);
- $secondPlaceholder = $secondBag->get($paramName);
- $firstBag->mergeEnvPlaceholders($secondBag);
- $merged = $firstBag->getEnvPlaceholders();
- $this->assertNotEquals($firstPlaceholder, $secondPlaceholder);
- $this->assertCount(2, $merged[$envName]);
- }
- public function testResolveEnvCastsIntToString()
- {
- $bag = new EnvPlaceholderParameterBag();
- $bag->get('env(INT_VAR)');
- $bag->set('env(Int_Var)', 2);
- $bag->resolve();
- $this->assertSame('2', $bag->all()['env(int_var)']);
- }
- public function testResolveEnvAllowsNull()
- {
- $bag = new EnvPlaceholderParameterBag();
- $bag->get('env(NULL_VAR)');
- $bag->set('env(Null_Var)', null);
- $bag->resolve();
- $this->assertNull($bag->all()['env(null_var)']);
- }
- /**
- * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
- * @expectedExceptionMessage The default value of env parameter "ARRAY_VAR" must be scalar or null, array given.
- */
- public function testResolveThrowsOnBadDefaultValue()
- {
- $bag = new EnvPlaceholderParameterBag();
- $bag->get('env(ARRAY_VAR)');
- $bag->set('env(Array_Var)', array());
- $bag->resolve();
- }
- public function testGetEnvAllowsNull()
- {
- $bag = new EnvPlaceholderParameterBag();
- $bag->set('env(NULL_VAR)', null);
- $bag->get('env(NULL_VAR)');
- $bag->resolve();
- $this->assertNull($bag->all()['env(null_var)']);
- }
- /**
- * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
- * @expectedExceptionMessage The default value of an env() parameter must be scalar or null, but "array" given to "env(ARRAY_VAR)".
- */
- public function testGetThrowsOnBadDefaultValue()
- {
- $bag = new EnvPlaceholderParameterBag();
- $bag->set('env(ARRAY_VAR)', array());
- $bag->get('env(ARRAY_VAR)');
- $bag->resolve();
- }
- }
|