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

462 lines
11 KiB
PHP
Raw Normal View History

2018-03-15 11:20:27 +00:00
<?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()
{
2019-01-16 18:24:45 +00:00
return [
['hello', 'hello'],
['true', 'true'],
['false', 'false'],
['null', 'null'],
['1', '1'],
['0', '0'],
['1.1', '1.1'],
['1e1', '1e1'],
];
2018-03-15 11:20:27 +00:00
}
/**
* @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()
{
2019-01-16 18:24:45 +00:00
return [
['true', true],
['false', false],
['null', false],
['1', true],
['0', false],
['1.1', true],
['1e1', true],
];
2018-03-15 11:20:27 +00:00
}
/**
* @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()
{
2019-01-16 18:24:45 +00:00
return [
['1', 1],
['1.1', 1],
['1e1', 10],
];
2018-03-15 11:20:27 +00:00
}
/**
* @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()
{
2019-01-16 18:24:45 +00:00
return [
['foo'],
['true'],
['null'],
];
2018-03-15 11:20:27 +00:00
}
/**
* @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()
{
2019-01-16 18:24:45 +00:00
return [
['1', 1.0],
['1.1', 1.1],
['1e1', 10.0],
];
2018-03-15 11:20:27 +00:00
}
/**
* @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()
{
2019-01-16 18:24:45 +00:00
return [
['foo'],
['true'],
['null'],
];
2018-03-15 11:20:27 +00:00
}
/**
* @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()
{
2019-01-16 18:24:45 +00:00
return [
['Symfony\Component\DependencyInjection\Tests\EnvVarProcessorTest::TEST_CONST', self::TEST_CONST],
['E_ERROR', E_ERROR],
];
2018-03-15 11:20:27 +00:00
}
/**
* @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()
{
2019-01-16 18:24:45 +00:00
return [
['Symfony\Component\DependencyInjection\Tests\EnvVarProcessorTest::UNDEFINED_CONST'],
['UNDEFINED_CONST'],
];
2018-03-15 11:20:27 +00:00
}
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);
}
2019-01-04 17:50:27 +00:00
public function testGetEnvTrim()
{
$processor = new EnvVarProcessor(new Container());
$result = $processor->getEnv('trim', 'foo', function ($name) {
$this->assertSame('foo', $name);
return " hello\n";
});
$this->assertSame('hello', $result);
}
/**
* @dataProvider validJson
*/
public function testGetEnvJson($value, $processed)
2018-03-15 11:20:27 +00:00
{
$processor = new EnvVarProcessor(new Container());
$result = $processor->getEnv('json', 'foo', function ($name) use ($value) {
2018-03-15 11:20:27 +00:00
$this->assertSame('foo', $name);
return $value;
2018-03-15 11:20:27 +00:00
});
$this->assertSame($processed, $result);
}
public function validJson()
{
2019-01-16 18:24:45 +00:00
return [
['[1]', [1]],
['{"key": "value"}', ['key' => 'value']],
[null, null],
];
2018-03-15 11:20:27 +00:00
}
/**
* @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()
{
2019-01-16 18:24:45 +00:00
return [
[1],
[1.1],
[true],
[false],
['foo'],
];
2018-03-15 11:20:27 +00:00
}
/**
* @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
2018-10-25 08:05:21 +01:00
* @expectedExceptionMessage Invalid env "key:foo": a key specifier should be provided.
*/
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()
{
2019-01-16 20:35:37 +00:00
return [
[null],
['string'],
[1],
[true],
];
}
/**
2018-10-25 08:05:21 +01:00
* @expectedException \Symfony\Component\DependencyInjection\Exception\EnvNotFoundException
* @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()
{
2019-01-16 20:35:37 +00:00
return [
[[]],
[['index2' => 'value']],
[['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()
{
2019-01-16 20:35:37 +00:00
return [
[['index' => 'password']],
[['index' => 'true']],
[['index' => false]],
[['index' => '1']],
[['index' => 1]],
[['index' => '1.1']],
[['index' => 1.1]],
[['index' => []]],
[['index' => ['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);
2019-01-16 20:35:37 +00:00
return [
'index' => 'password',
2019-01-16 20:35:37 +00:00
];
}));
}
/**
* @dataProvider validNullables
*/
public function testGetEnvNullable($value, $processed)
{
$processor = new EnvVarProcessor(new Container());
$result = $processor->getEnv('nullable', 'foo', function ($name) use ($value) {
$this->assertSame('foo', $name);
return $value;
});
$this->assertSame($processed, $result);
}
public function validNullables()
{
return [
['hello', 'hello'],
['', null],
['null', 'null'],
['Null', 'Null'],
['NULL', 'NULL'],
];
}
2018-03-15 11:20:27 +00:00
}