ソースを参照

added Definition::getArgument() (very useful when unit testing a Container)

Fabien Potencier 14 年 前
コミット
2e9278993c

+ 6 - 12
src/Symfony/Bundle/DoctrineBundle/Tests/DependencyInjection/AbstractDoctrineExtensionTest.php

@@ -43,8 +43,7 @@ abstract class AbstractDoctrineExtensionTest extends TestCase
 
         $loader->load(array(array('dbal' => array('connections' => array('default' => array('password' => 'foo')))), array(), array('dbal' => array('default_connection' => 'foo')), array()), $container);
 
-        $arguments = $container->getDefinition('doctrine.dbal.default_connection')->getArguments();
-        $config = $arguments[0];
+        $config = $container->getDefinition('doctrine.dbal.default_connection')->getArgument(0);
 
         $this->assertEquals('foo', $config['password']);
         $this->assertEquals('root', $config['user']);
@@ -63,8 +62,7 @@ abstract class AbstractDoctrineExtensionTest extends TestCase
         $this->compileContainer($container);
 
         // doctrine.dbal.mysql_connection
-        $arguments = $container->getDefinition('doctrine.dbal.mysql_connection')->getArguments();
-        $config = $arguments[0];
+        $config = $container->getDefinition('doctrine.dbal.mysql_connection')->getArgument(0);
 
         $this->assertEquals('mysql_s3cr3t', $config['password']);
         $this->assertEquals('mysql_user', $config['user']);
@@ -72,13 +70,11 @@ abstract class AbstractDoctrineExtensionTest extends TestCase
         $this->assertEquals('/path/to/mysqld.sock', $config['unix_socket']);
 
         // doctrine.dbal.sqlite_connection
-        $arguments = $container->getDefinition('doctrine.dbal.sqlite_connection')->getArguments();
-        $config = $arguments[0];
+        $config = $container->getDefinition('doctrine.dbal.sqlite_connection')->getArgument(0);
         $this->assertArrayHasKey('memory', $config);
 
         // doctrine.dbal.oci8_connection
-        $arguments = $container->getDefinition('doctrine.dbal.oci_connection')->getArguments();
-        $config = $arguments[0];
+        $config = $container->getDefinition('doctrine.dbal.oci_connection')->getArgument(0);
         $this->assertArrayHasKey('charset', $config);
     }
 
@@ -95,8 +91,7 @@ abstract class AbstractDoctrineExtensionTest extends TestCase
         $this->compileContainer($container);
 
         // doctrine.dbal.mysql_connection
-        $arguments = $container->getDefinition('doctrine.dbal.default_connection')->getArguments();
-        $config = $arguments[0];
+        $config = $container->getDefinition('doctrine.dbal.default_connection')->getArgument(0);
 
         $this->assertEquals('mysql_s3cr3t', $config['password']);
         $this->assertEquals('mysql_user', $config['user']);
@@ -630,10 +625,9 @@ abstract class AbstractDoctrineExtensionTest extends TestCase
         $this->loadFromFile($container, 'dbal_types');
         $this->compileContainer($container);
 
-        $arguments = $container->getDefinition('doctrine.dbal.connection_factory')->getArguments();
         $this->assertEquals(
             array('test' => 'Symfony\Bundle\DoctrineBundle\Tests\DependencyInjection\TestType'),
-            $arguments[0]
+            $container->getDefinition('doctrine.dbal.connection_factory')->getArgument(0)
         );
     }
 

+ 3 - 3
src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

@@ -245,9 +245,9 @@ class FrameworkExtension extends Extension
         $router->replaceArgument(1, $config['resource']);
 
         if (isset($config['type'])) {
-            $arguments = $router->getArguments();
-            $arguments[2]['resource_type'] = $config['type'];
-            $router->replaceArgument(2, $arguments[2]);
+            $argument = $router->getArgument(2);
+            $argument['resource_type'] = $config['type'];
+            $router->replaceArgument(2, $argument);
         }
 
         if ($config['cache_warmer']) {

+ 15 - 20
src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php

@@ -26,8 +26,7 @@ abstract class FrameworkExtensionTest extends TestCase
 
         $this->assertTrue($container->getParameter('form.csrf_protection.enabled'));
         $this->assertEquals('_csrf', $container->getParameter('form.csrf_protection.field_name'));
-        $arguments = $container->findDefinition('form.csrf_provider')->getArguments();
-        $this->assertEquals('s3cr3t', $container->getParameterBag()->resolveValue($arguments[1]));
+        $this->assertEquals('s3cr3t', $container->getParameterBag()->resolveValue($container->findDefinition('form.csrf_provider')->getArgument(1)));
     }
 
     public function testEsi()
@@ -43,8 +42,7 @@ abstract class FrameworkExtensionTest extends TestCase
 
         $this->assertTrue($container->hasDefinition('profiler'), '->registerProfilerConfiguration() loads profiling.xml');
         $this->assertTrue($container->hasDefinition('data_collector.config'), '->registerProfilerConfiguration() loads collectors.xml');
-        $arguments = $container->getDefinition('profiler_listener')->getArguments();
-        $this->assertTrue($arguments[2]);
+        $this->assertTrue($container->getDefinition('profiler_listener')->getArgument(2));
     }
 
     public function testRouter()
@@ -74,8 +72,7 @@ abstract class FrameworkExtensionTest extends TestCase
         $container = $this->createContainerFromFile('full');
 
         $this->assertTrue($container->hasDefinition('session'), '->registerSessionConfiguration() loads session.xml');
-        $arguments = $container->getDefinition('session')->getArguments();
-        $this->assertEquals('fr', $arguments[1]);
+        $this->assertEquals('fr', $container->getDefinition('session')->getArgument(1));
         $this->assertTrue($container->getDefinition('session')->hasMethodCall('start'));
         $this->assertEquals('session.storage.native', (string) $container->getAlias('session.storage'));
 
@@ -106,8 +103,7 @@ abstract class FrameworkExtensionTest extends TestCase
 
         $this->assertEquals($container->getDefinition('templating.loader'), $container->getDefinition('templating.loader.cache'), '->registerTemplatingConfiguration() configures the loader to use cache');
 
-        $arguments = $container->getDefinition('templating.loader.cache')->getArguments();
-        $this->assertEquals('/path/to/cache', $arguments[1]);
+        $this->assertEquals('/path/to/cache', $container->getDefinition('templating.loader.cache')->getArgument(1));
 
         $this->assertEquals(array('php', 'twig'), $container->getParameter('templating.engines'), '->registerTemplatingConfiguration() sets a templating.engines parameter');
     }
@@ -154,8 +150,7 @@ abstract class FrameworkExtensionTest extends TestCase
         $this->assertTrue($container->hasDefinition('validator.mapping.loader.xml_files_loader'), '->registerValidationConfiguration() defines the XML loader');
         $this->assertTrue($container->hasDefinition('validator.mapping.loader.yaml_files_loader'), '->registerValidationConfiguration() defines the YAML loader');
 
-        $xmlLoaderArgs = $container->getDefinition('validator.mapping.loader.xml_files_loader')->getArguments();
-        $xmlFiles = $xmlLoaderArgs[0];
+        $xmlFiles = $container->getDefinition('validator.mapping.loader.xml_files_loader')->getArgument(0);
 
         $this->assertContains(
             realpath(__DIR__.'/../../../../Component/Form/Resources/config/validation.xml'),
@@ -170,9 +165,9 @@ abstract class FrameworkExtensionTest extends TestCase
 
         $this->assertTrue($container->hasDefinition('validator.mapping.loader.annotation_loader'), '->registerValidationConfiguration() defines the annotation loader');
 
-        $arguments = $container->getDefinition('validator.mapping.loader.annotation_loader')->getArguments();
-        $this->assertEquals('Symfony\\Component\\Validator\\Constraints\\', $arguments[0]['assert'], '->registerValidationConfiguration() loads the default "assert" prefix');
-        $this->assertEquals('Application\\Validator\\Constraints\\', $arguments[0]['app'], '->registerValidationConfiguration() loads custom validation namespaces');
+        $argument = $container->getDefinition('validator.mapping.loader.annotation_loader')->getArgument(0);
+        $this->assertEquals('Symfony\\Component\\Validator\\Constraints\\', $argument['assert'], '->registerValidationConfiguration() loads the default "assert" prefix');
+        $this->assertEquals('Application\\Validator\\Constraints\\', $argument['app'], '->registerValidationConfiguration() loads custom validation namespaces');
     }
 
     public function testValidationPaths()
@@ -183,14 +178,14 @@ abstract class FrameworkExtensionTest extends TestCase
             'kernel.bundles' => array('TestBundle' => 'Symfony\Bundle\FrameworkBundle\Tests\TestBundle'),
         ));
 
-        $yamlArgs = $container->getDefinition('validator.mapping.loader.yaml_files_loader')->getArguments();
-        $this->assertEquals(1, count($yamlArgs[0]));
-        $this->assertStringEndsWith('TestBundle'.DIRECTORY_SEPARATOR.'Resources'.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'validation.yml', $yamlArgs[0][0]);
+        $yamlArgs = $container->getDefinition('validator.mapping.loader.yaml_files_loader')->getArgument(0);
+        $this->assertEquals(1, count($yamlArgs));
+        $this->assertStringEndsWith('TestBundle'.DIRECTORY_SEPARATOR.'Resources'.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'validation.yml', $yamlArgs[0]);
 
-        $xmlArgs = $container->getDefinition('validator.mapping.loader.xml_files_loader')->getArguments();
-        $this->assertEquals(2, count($xmlArgs[0]));
-        $this->assertStringEndsWith('Component/Form/Resources/config/validation.xml', $xmlArgs[0][0]);
-        $this->assertStringEndsWith('TestBundle'.DIRECTORY_SEPARATOR.'Resources'.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'validation.xml', $xmlArgs[0][1]);
+        $xmlArgs = $container->getDefinition('validator.mapping.loader.xml_files_loader')->getArgument(0);
+        $this->assertEquals(2, count($xmlArgs));
+        $this->assertStringEndsWith('Component/Form/Resources/config/validation.xml', $xmlArgs[0]);
+        $this->assertStringEndsWith('TestBundle'.DIRECTORY_SEPARATOR.'Resources'.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'validation.xml', $xmlArgs[1]);
     }
 
     protected function createContainer(array $data = array())

+ 1 - 2
src/Symfony/Bundle/MonologBundle/Tests/DependencyInjection/Compiler/LoggerChannelPassTest.php

@@ -27,8 +27,7 @@ class LoggerChannelPassTest extends TestCase
         $this->assertTrue($container->hasDefinition('monolog.logger.test'), '->process adds a logger service for tagged service');
 
         $service = $container->getDefinition('test');
-        $arguments = $service->getArguments();
-        $this->assertEquals('monolog.logger.test', (string) $arguments[1], '->process replaces the logger by the new one');
+        $this->assertEquals('monolog.logger.test', (string) $service->getArgument(1), '->process replaces the logger by the new one');
     }
 
     protected function getContainer()

+ 16 - 0
src/Symfony/Component/DependencyInjection/Definition.php

@@ -226,6 +226,22 @@ class Definition
         return $this->arguments;
     }
 
+    /**
+     * Gets an argument to pass to the service constructor/factory method.
+     *
+     * @param integer $index
+     *
+     * @return mixed The argument value
+     */
+    public function getArgument($index)
+    {
+        if ($index < 0 || $index > count($this->arguments) - 1) {
+            throw new \OutOfBoundsException(sprintf('The index "%d" is not in the range [0, %d].', $index, count($this->arguments) - 1));
+        }
+
+        return $this->arguments[$index];
+    }
+
     /**
      * Sets the methods to call after service initialization.
      *