This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
symfony/src/Symfony/Component/DependencyInjection/Tests/EnvVarProcessorTest.php
Fabien Potencier c0323bd24b Merge branch '4.1' into 4.2
* 4.1:
  fixed tests
  fixed CS
  fixed CS
  fixed CS
  fixed short array CS in comments
  fixed CS in ExpressionLanguage fixtures
  fixed CS in generated files
  fixed CS on generated container files
  fixed CS on Form PHP templates
  fixed CS on YAML fixtures
  fixed fixtures
  switched array() to []
2019-01-16 21:31:39 +01:00

424 lines
11 KiB
PHP

<?php
namespace Symfony\Component\DependencyInjection\Tests;
use PHPUnit\Framework\TestCase;
use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\EnvVarProcessor;
class EnvVarProcessorTest extends TestCase
{
const TEST_CONST = 'test';
/**
* @dataProvider validStrings
*/
public function testGetEnvString($value, $processed)
{
$container = new ContainerBuilder();
$container->setParameter('env(foo)', $value);
$container->compile();
$processor = new EnvVarProcessor($container);
$result = $processor->getEnv('string', 'foo', function () {
$this->fail('Should not be called');
});
$this->assertSame($processed, $result);
}
public function validStrings()
{
return [
['hello', 'hello'],
['true', 'true'],
['false', 'false'],
['null', 'null'],
['1', '1'],
['0', '0'],
['1.1', '1.1'],
['1e1', '1e1'],
];
}
/**
* @dataProvider validBools
*/
public function testGetEnvBool($value, $processed)
{
$processor = new EnvVarProcessor(new Container());
$result = $processor->getEnv('bool', 'foo', function ($name) use ($value) {
$this->assertSame('foo', $name);
return $value;
});
$this->assertSame($processed, $result);
}
public function validBools()
{
return [
['true', true],
['false', false],
['null', false],
['1', true],
['0', false],
['1.1', true],
['1e1', true],
];
}
/**
* @dataProvider validInts
*/
public function testGetEnvInt($value, $processed)
{
$processor = new EnvVarProcessor(new Container());
$result = $processor->getEnv('int', 'foo', function ($name) use ($value) {
$this->assertSame('foo', $name);
return $value;
});
$this->assertSame($processed, $result);
}
public function validInts()
{
return [
['1', 1],
['1.1', 1],
['1e1', 10],
];
}
/**
* @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
* @expectedExceptionMessage Non-numeric env var
* @dataProvider invalidInts
*/
public function testGetEnvIntInvalid($value)
{
$processor = new EnvVarProcessor(new Container());
$processor->getEnv('int', 'foo', function ($name) use ($value) {
$this->assertSame('foo', $name);
return $value;
});
}
public function invalidInts()
{
return [
['foo'],
['true'],
['null'],
];
}
/**
* @dataProvider validFloats
*/
public function testGetEnvFloat($value, $processed)
{
$processor = new EnvVarProcessor(new Container());
$result = $processor->getEnv('float', 'foo', function ($name) use ($value) {
$this->assertSame('foo', $name);
return $value;
});
$this->assertSame($processed, $result);
}
public function validFloats()
{
return [
['1', 1.0],
['1.1', 1.1],
['1e1', 10.0],
];
}
/**
* @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
* @expectedExceptionMessage Non-numeric env var
* @dataProvider invalidFloats
*/
public function testGetEnvFloatInvalid($value)
{
$processor = new EnvVarProcessor(new Container());
$processor->getEnv('float', 'foo', function ($name) use ($value) {
$this->assertSame('foo', $name);
return $value;
});
}
public function invalidFloats()
{
return [
['foo'],
['true'],
['null'],
];
}
/**
* @dataProvider validConsts
*/
public function testGetEnvConst($value, $processed)
{
$processor = new EnvVarProcessor(new Container());
$result = $processor->getEnv('const', 'foo', function ($name) use ($value) {
$this->assertSame('foo', $name);
return $value;
});
$this->assertSame($processed, $result);
}
public function validConsts()
{
return [
['Symfony\Component\DependencyInjection\Tests\EnvVarProcessorTest::TEST_CONST', self::TEST_CONST],
['E_ERROR', E_ERROR],
];
}
/**
* @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
* @expectedExceptionMessage undefined constant
* @dataProvider invalidConsts
*/
public function testGetEnvConstInvalid($value)
{
$processor = new EnvVarProcessor(new Container());
$processor->getEnv('const', 'foo', function ($name) use ($value) {
$this->assertSame('foo', $name);
return $value;
});
}
public function invalidConsts()
{
return [
['Symfony\Component\DependencyInjection\Tests\EnvVarProcessorTest::UNDEFINED_CONST'],
['UNDEFINED_CONST'],
];
}
public function testGetEnvBase64()
{
$processor = new EnvVarProcessor(new Container());
$result = $processor->getEnv('base64', 'foo', function ($name) {
$this->assertSame('foo', $name);
return base64_encode('hello');
});
$this->assertSame('hello', $result);
}
/**
* @dataProvider validJson
*/
public function testGetEnvJson($value, $processed)
{
$processor = new EnvVarProcessor(new Container());
$result = $processor->getEnv('json', 'foo', function ($name) use ($value) {
$this->assertSame('foo', $name);
return $value;
});
$this->assertSame($processed, $result);
}
public function validJson()
{
return [
['[1]', [1]],
['{"key": "value"}', ['key' => 'value']],
[null, null],
];
}
/**
* @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
* @expectedExceptionMessage Syntax error
*/
public function testGetEnvInvalidJson()
{
$processor = new EnvVarProcessor(new Container());
$processor->getEnv('json', 'foo', function ($name) {
$this->assertSame('foo', $name);
return 'invalid_json';
});
}
/**
* @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
* @expectedExceptionMessage Invalid JSON env var
* @dataProvider otherJsonValues
*/
public function testGetEnvJsonOther($value)
{
$processor = new EnvVarProcessor(new Container());
$processor->getEnv('json', 'foo', function ($name) use ($value) {
$this->assertSame('foo', $name);
return json_encode($value);
});
}
public function otherJsonValues()
{
return [
[1],
[1.1],
[true],
[false],
['foo'],
];
}
/**
* @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
* @expectedExceptionMessage Unsupported env var prefix
*/
public function testGetEnvUnknown()
{
$processor = new EnvVarProcessor(new Container());
$processor->getEnv('unknown', 'foo', function ($name) {
$this->assertSame('foo', $name);
return 'foo';
});
}
/**
* @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
* @expectedExceptionMessage Invalid configuration: env var "key:foo" does not contain a key specifier.
*/
public function testGetEnvKeyInvalidKey()
{
$processor = new EnvVarProcessor(new Container());
$processor->getEnv('key', 'foo', function ($name) {
$this->fail('Should not get here');
});
}
/**
* @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
* @expectedExceptionMessage Resolved value of "foo" did not result in an array value.
* @dataProvider noArrayValues
*/
public function testGetEnvKeyNoArrayResult($value)
{
$processor = new EnvVarProcessor(new Container());
$processor->getEnv('key', 'index:foo', function ($name) use ($value) {
$this->assertSame('foo', $name);
return $value;
});
}
public function noArrayValues()
{
return array(
array(null),
array('string'),
array(1),
array(true),
);
}
/**
* @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
* @expectedExceptionMessage Key "index" not found in
* @dataProvider invalidArrayValues
*/
public function testGetEnvKeyArrayKeyNotFound($value)
{
$processor = new EnvVarProcessor(new Container());
$processor->getEnv('key', 'index:foo', function ($name) use ($value) {
$this->assertSame('foo', $name);
return $value;
});
}
public function invalidArrayValues()
{
return array(
array(array()),
array(array('index2' => 'value')),
array(array('index', 'index2')),
);
}
/**
* @dataProvider arrayValues
*/
public function testGetEnvKey($value)
{
$processor = new EnvVarProcessor(new Container());
$this->assertSame($value['index'], $processor->getEnv('key', 'index:foo', function ($name) use ($value) {
$this->assertSame('foo', $name);
return $value;
}));
}
public function arrayValues()
{
return array(
array(array('index' => 'password')),
array(array('index' => 'true')),
array(array('index' => false)),
array(array('index' => '1')),
array(array('index' => 1)),
array(array('index' => '1.1')),
array(array('index' => 1.1)),
array(array('index' => array())),
array(array('index' => array('val1', 'val2'))),
);
}
public function testGetEnvKeyChained()
{
$processor = new EnvVarProcessor(new Container());
$this->assertSame('password', $processor->getEnv('key', 'index:file:foo', function ($name) {
$this->assertSame('file:foo', $name);
return array(
'index' => 'password',
);
}));
}
}