From 7a47f06f71239be29ea4b0772689ac75fa18a8cf Mon Sep 17 00:00:00 2001 From: Fred Cox Date: Thu, 15 Mar 2018 13:20:27 +0200 Subject: [PATCH 1/2] Add tests for EnvVarProcessor --- .../Tests/EnvVarProcessorTest.php | 182 ++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 src/Symfony/Component/DependencyInjection/Tests/EnvVarProcessorTest.php diff --git a/src/Symfony/Component/DependencyInjection/Tests/EnvVarProcessorTest.php b/src/Symfony/Component/DependencyInjection/Tests/EnvVarProcessorTest.php new file mode 100644 index 0000000000000..3ae43b40e8f2e --- /dev/null +++ b/src/Symfony/Component/DependencyInjection/Tests/EnvVarProcessorTest.php @@ -0,0 +1,182 @@ +setParameter('env(foo)', 'hello'); + $container->compile(); + + $processor = new EnvVarProcessor($container); + + $result = $processor->getEnv('string', 'foo', function () { + throw new LogicException('Shouldnt be called'); + }); + + $this->assertSame('hello', $result); + } + + public function testGetEnvBool() + { + $processor = new EnvVarProcessor(new Container()); + + $result = $processor->getEnv('bool', 'foo', function ($name) { + $this->assertSame('foo', $name); + + return '1'; + }); + + $this->assertTrue($result); + } + + public function testGetEnvInt() + { + $processor = new EnvVarProcessor(new Container()); + + $result = $processor->getEnv('int', 'foo', function ($name) { + $this->assertSame('foo', $name); + + return '1'; + }); + + $this->assertSame(1, $result); + } + + /** + * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException + * @expectedExceptionMessage Non-numeric env var + */ + public function testGetEnvIntInvalid() + { + $processor = new EnvVarProcessor(new Container()); + + $processor->getEnv('int', 'foo', function ($name) { + $this->assertSame('foo', $name); + + return 'bar'; + }); + } + + public function testGetEnvFloat() + { + $processor = new EnvVarProcessor(new Container()); + + $result = $processor->getEnv('float', 'foo', function ($name) { + $this->assertSame('foo', $name); + + return '1.1'; + }); + + $this->assertSame(1.1, $result); + } + + /** + * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException + * @expectedExceptionMessage Non-numeric env var + */ + public function testGetEnvFloatInvalid() + { + $processor = new EnvVarProcessor(new Container()); + + $processor->getEnv('float', 'foo', function ($name) { + $this->assertSame('foo', $name); + + return 'bar'; + }); + } + + public function testGetEnvConst() + { + $processor = new EnvVarProcessor(new Container()); + + $result = $processor->getEnv('const', 'foo', function ($name) { + $this->assertSame('foo', $name); + + return 'Symfony\Component\DependencyInjection\Tests\EnvVarProcessorTest::TEST_CONST'; + }); + + $this->assertSame(self::TEST_CONST, $result); + } + + /** + * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException + * @expectedExceptionMessage undefined constant + */ + public function testGetEnvConstInvalid() + { + $processor = new EnvVarProcessor(new Container()); + + $processor->getEnv('const', 'foo', function ($name) { + $this->assertSame('foo', $name); + + return 'Symfony\Component\DependencyInjection\Tests\EnvVarProcessorTest::TEST_CONST_OTHER'; + }); + } + + 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); + } + + public function testGetEnvJson() + { + $processor = new EnvVarProcessor(new Container()); + + $result = $processor->getEnv('json', 'foo', function ($name) { + $this->assertSame('foo', $name); + + return json_encode(array(1)); + }); + + $this->assertSame(array(1), $result); + } + + /** + * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException + * @expectedExceptionMessage Invalid JSON env var + */ + public function testGetEnvJsonOther() + { + $processor = new EnvVarProcessor(new Container()); + + $processor->getEnv('json', 'foo', function ($name) { + $this->assertSame('foo', $name); + + return json_encode(1); + }); + } + + /** + * @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'; + }); + } +} From 8e735b7bed499caa530a7f9e20feeb5d7c1f6c43 Mon Sep 17 00:00:00 2001 From: Fred Cox Date: Fri, 16 Mar 2018 15:05:59 +0200 Subject: [PATCH 2/2] Add more examples for each test --- .../Tests/EnvVarProcessorTest.php | 188 +++++++++++++++--- 1 file changed, 155 insertions(+), 33 deletions(-) diff --git a/src/Symfony/Component/DependencyInjection/Tests/EnvVarProcessorTest.php b/src/Symfony/Component/DependencyInjection/Tests/EnvVarProcessorTest.php index 3ae43b40e8f2e..b1ee044e9e5c0 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/EnvVarProcessorTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/EnvVarProcessorTest.php @@ -6,124 +6,220 @@ use Symfony\Component\DependencyInjection\Container; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\EnvVarProcessor; -use Symfony\Component\DependencyInjection\Exception\LogicException; class EnvVarProcessorTest extends TestCase { const TEST_CONST = 'test'; - public function testGetEnvString() + /** + * @dataProvider validStrings + */ + public function testGetEnvString($value, $processed) { $container = new ContainerBuilder(); - $container->setParameter('env(foo)', 'hello'); + $container->setParameter('env(foo)', $value); $container->compile(); $processor = new EnvVarProcessor($container); $result = $processor->getEnv('string', 'foo', function () { - throw new LogicException('Shouldnt be called'); + $this->fail('Should not be called'); }); - $this->assertSame('hello', $result); + $this->assertSame($processed, $result); } - public function testGetEnvBool() + public function validStrings() + { + return array( + array('hello', 'hello'), + array('true', 'true'), + array('false', 'false'), + array('null', 'null'), + array('1', '1'), + array('0', '0'), + array('1.1', '1.1'), + array('1e1', '1e1'), + ); + } + + /** + * @dataProvider validBools + */ + public function testGetEnvBool($value, $processed) { $processor = new EnvVarProcessor(new Container()); - $result = $processor->getEnv('bool', 'foo', function ($name) { + $result = $processor->getEnv('bool', 'foo', function ($name) use ($value) { $this->assertSame('foo', $name); - return '1'; + return $value; }); - $this->assertTrue($result); + $this->assertSame($processed, $result); + } + + public function validBools() + { + return array( + array('true', true), + array('false', false), + array('null', false), + array('1', true), + array('0', false), + array('1.1', true), + array('1e1', true), + ); } - public function testGetEnvInt() + /** + * @dataProvider validInts + */ + public function testGetEnvInt($value, $processed) { $processor = new EnvVarProcessor(new Container()); - $result = $processor->getEnv('int', 'foo', function ($name) { + $result = $processor->getEnv('int', 'foo', function ($name) use ($value) { $this->assertSame('foo', $name); - return '1'; + return $value; }); - $this->assertSame(1, $result); + $this->assertSame($processed, $result); + } + + public function validInts() + { + return array( + array('1', 1), + array('1.1', 1), + array('1e1', 10), + ); } /** * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException * @expectedExceptionMessage Non-numeric env var + * @dataProvider invalidInts */ - public function testGetEnvIntInvalid() + public function testGetEnvIntInvalid($value) { $processor = new EnvVarProcessor(new Container()); - $processor->getEnv('int', 'foo', function ($name) { + $processor->getEnv('int', 'foo', function ($name) use ($value) { $this->assertSame('foo', $name); - return 'bar'; + return $value; }); } - public function testGetEnvFloat() + public function invalidInts() + { + return array( + array('foo'), + array('true'), + array('null'), + ); + } + + /** + * @dataProvider validFloats + */ + public function testGetEnvFloat($value, $processed) { $processor = new EnvVarProcessor(new Container()); - $result = $processor->getEnv('float', 'foo', function ($name) { + $result = $processor->getEnv('float', 'foo', function ($name) use ($value) { $this->assertSame('foo', $name); - return '1.1'; + return $value; }); - $this->assertSame(1.1, $result); + $this->assertSame($processed, $result); + } + + public function validFloats() + { + return array( + array('1', 1.0), + array('1.1', 1.1), + array('1e1', 10.0), + ); } /** * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException * @expectedExceptionMessage Non-numeric env var + * @dataProvider invalidFloats */ - public function testGetEnvFloatInvalid() + public function testGetEnvFloatInvalid($value) { $processor = new EnvVarProcessor(new Container()); - $processor->getEnv('float', 'foo', function ($name) { + $processor->getEnv('float', 'foo', function ($name) use ($value) { $this->assertSame('foo', $name); - return 'bar'; + return $value; }); } - public function testGetEnvConst() + public function invalidFloats() + { + return array( + array('foo'), + array('true'), + array('null'), + ); + } + + /** + * @dataProvider validConsts + */ + public function testGetEnvConst($value, $processed) { $processor = new EnvVarProcessor(new Container()); - $result = $processor->getEnv('const', 'foo', function ($name) { + $result = $processor->getEnv('const', 'foo', function ($name) use ($value) { $this->assertSame('foo', $name); - return 'Symfony\Component\DependencyInjection\Tests\EnvVarProcessorTest::TEST_CONST'; + return $value; }); - $this->assertSame(self::TEST_CONST, $result); + $this->assertSame($processed, $result); + } + + public function validConsts() + { + return array( + array('Symfony\Component\DependencyInjection\Tests\EnvVarProcessorTest::TEST_CONST', self::TEST_CONST), + array('E_ERROR', E_ERROR), + ); } /** * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException * @expectedExceptionMessage undefined constant + * @dataProvider invalidConsts */ - public function testGetEnvConstInvalid() + public function testGetEnvConstInvalid($value) { $processor = new EnvVarProcessor(new Container()); - $processor->getEnv('const', 'foo', function ($name) { + $processor->getEnv('const', 'foo', function ($name) use ($value) { $this->assertSame('foo', $name); - return 'Symfony\Component\DependencyInjection\Tests\EnvVarProcessorTest::TEST_CONST_OTHER'; + return $value; }); } + public function invalidConsts() + { + return array( + array('Symfony\Component\DependencyInjection\Tests\EnvVarProcessorTest::UNDEFINED_CONST'), + array('UNDEFINED_CONST'), + ); + } + public function testGetEnvBase64() { $processor = new EnvVarProcessor(new Container()); @@ -152,19 +248,45 @@ public function testGetEnvJson() /** * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException - * @expectedExceptionMessage Invalid JSON env var + * @expectedExceptionMessage Syntax error */ - public function testGetEnvJsonOther() + public function testGetEnvInvalidJson() { $processor = new EnvVarProcessor(new Container()); $processor->getEnv('json', 'foo', function ($name) { $this->assertSame('foo', $name); - return json_encode(1); + 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 array( + array(1), + array(1.1), + array(true), + array(false), + ); + } + /** * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException * @expectedExceptionMessage Unsupported env var prefix