From d51265447ddc9e786f5cfb055448e4cf05912cf4 Mon Sep 17 00:00:00 2001 From: Samuel ROZE Date: Fri, 17 Nov 2017 10:40:56 +0200 Subject: [PATCH] Test that named arguments are prioritized over typehinted --- .../Tests/ContainerBuilderTest.php | 25 +++++++++++++++++++ .../Tests/Fixtures/CaseSensitiveClass.php | 6 +++++ .../Tests/Fixtures/SimilarArgumentsDummy.php | 5 ++++ 3 files changed, 36 insertions(+) diff --git a/src/Symfony/Component/DependencyInjection/Tests/ContainerBuilderTest.php b/src/Symfony/Component/DependencyInjection/Tests/ContainerBuilderTest.php index ac73138a9d..d3adfe7e69 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/ContainerBuilderTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/ContainerBuilderTest.php @@ -32,6 +32,7 @@ use Symfony\Component\DependencyInjection\Exception\RuntimeException; use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException; use Symfony\Component\DependencyInjection\Loader\ClosureLoader; use Symfony\Component\DependencyInjection\Reference; +use Symfony\Component\DependencyInjection\Tests\Fixtures\SimilarArgumentsDummy; use Symfony\Component\DependencyInjection\TypedReference; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag; use Symfony\Component\DependencyInjection\ParameterBag\EnvPlaceholderParameterBag; @@ -1270,6 +1271,30 @@ class ContainerBuilderTest extends TestCase $this->assertSame('bar', $container->get('foo')->foo); } + + public function testArgumentsHaveHigherPriorityThanBindings() + { + $container = new ContainerBuilder(); + $container->register('class.via.bindings', CaseSensitiveClass::class)->setArguments(array( + 'via-bindings', + )); + $container->register('class.via.argument', CaseSensitiveClass::class)->setArguments(array( + 'via-argument', + )); + $container->register('foo', SimilarArgumentsDummy::class)->setPublic(true)->setBindings(array( + CaseSensitiveClass::class => new Reference('class.via.bindings'), + '$token' => '1234', + ))->setArguments(array( + '$class1' => new Reference('class.via.argument'), + )); + + $this->assertSame(array('service_container', 'class.via.bindings', 'class.via.argument', 'foo', 'Psr\Container\ContainerInterface', 'Symfony\Component\DependencyInjection\ContainerInterface'), $container->getServiceIds()); + + $container->compile(); + + $this->assertSame('via-argument', $container->get('foo')->class1->identifier); + $this->assertSame('via-bindings', $container->get('foo')->class2->identifier); + } } class FooClass diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/CaseSensitiveClass.php b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/CaseSensitiveClass.php index 87b258429e..7c6f0ff4cb 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/CaseSensitiveClass.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/CaseSensitiveClass.php @@ -13,4 +13,10 @@ namespace Symfony\Component\DependencyInjection\Tests\Fixtures; class CaseSensitiveClass { + public $identifier; + + public function __construct($identifier = null) + { + $this->identifier = $identifier; + } } diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/SimilarArgumentsDummy.php b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/SimilarArgumentsDummy.php index 08c406cf23..9be58cbb79 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/SimilarArgumentsDummy.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/SimilarArgumentsDummy.php @@ -13,7 +13,12 @@ namespace Symfony\Component\DependencyInjection\Tests\Fixtures; class SimilarArgumentsDummy { + public $class1; + public $class2; + public function __construct(CaseSensitiveClass $class1, string $token, CaseSensitiveClass $class2) { + $this->class1 = $class1; + $this->class2 = $class2; } }