RegisterEnvVarProcessorsPassTest.php 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <?php
  2. /*
  3. * This file is part of the Symfony package.
  4. *
  5. * (c) Fabien Potencier <fabien@symfony.com>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Symfony\Component\DependencyInjection\Tests\Compiler;
  11. use PHPUnit\Framework\TestCase;
  12. use Symfony\Component\DependencyInjection\Compiler\RegisterEnvVarProcessorsPass;
  13. use Symfony\Component\DependencyInjection\ContainerBuilder;
  14. use Symfony\Component\DependencyInjection\EnvVarProcessorInterface;
  15. class RegisterEnvVarProcessorsPassTest extends TestCase
  16. {
  17. public function testSimpleProcessor()
  18. {
  19. $container = new ContainerBuilder();
  20. $container->register('foo', SimpleProcessor::class)->addTag('container.env_var_processor');
  21. (new RegisterEnvVarProcessorsPass())->process($container);
  22. $this->assertTrue($container->has('container.env_var_processors_locator'));
  23. $this->assertInstanceOf(SimpleProcessor::class, $container->get('container.env_var_processors_locator')->get('foo'));
  24. $expected = array(
  25. 'foo' => array('string'),
  26. 'base64' => array('string'),
  27. 'bool' => array('bool'),
  28. 'const' => array('bool', 'int', 'float', 'string', 'array'),
  29. 'file' => array('string'),
  30. 'float' => array('float'),
  31. 'int' => array('int'),
  32. 'json' => array('array'),
  33. 'resolve' => array('string'),
  34. 'string' => array('string'),
  35. );
  36. $this->assertSame($expected, $container->getParameterBag()->getProvidedTypes());
  37. }
  38. public function testNoProcessor()
  39. {
  40. $container = new ContainerBuilder();
  41. (new RegisterEnvVarProcessorsPass())->process($container);
  42. $this->assertFalse($container->has('container.env_var_processors_locator'));
  43. }
  44. /**
  45. * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
  46. * @expectedExceptionMessage Invalid type "foo" returned by "Symfony\Component\DependencyInjection\Tests\Compiler\BadProcessor::getProvidedTypes()", expected one of "array", "bool", "float", "int", "string".
  47. */
  48. public function testBadProcessor()
  49. {
  50. $container = new ContainerBuilder();
  51. $container->register('foo', BadProcessor::class)->addTag('container.env_var_processor');
  52. (new RegisterEnvVarProcessorsPass())->process($container);
  53. }
  54. }
  55. class SimpleProcessor implements EnvVarProcessorInterface
  56. {
  57. public function getEnv($prefix, $name, \Closure $getEnv)
  58. {
  59. return $getEnv($name);
  60. }
  61. public static function getProvidedTypes()
  62. {
  63. return array('foo' => 'string');
  64. }
  65. }
  66. class BadProcessor extends SimpleProcessor
  67. {
  68. public static function getProvidedTypes()
  69. {
  70. return array('foo' => 'string|foo');
  71. }
  72. }