4 * This file is part of the Symfony package.
6 * (c) Fabien Potencier <fabien@symfony.com>
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
12 namespace Symfony\Component\DependencyInjection\Tests\Compiler;
14 use PHPUnit\Framework\TestCase;
15 use Symfony\Component\DependencyInjection\Compiler\AutowireRequiredMethodsPass;
16 use Symfony\Component\DependencyInjection\Compiler\ResolveClassPass;
17 use Symfony\Component\DependencyInjection\ContainerBuilder;
19 require_once __DIR__.'/../Fixtures/includes/autowiring_classes.php';
21 class AutowireRequiredMethodsPassTest extends TestCase
23 public function testSetterInjection()
25 $container = new ContainerBuilder();
26 $container->register(Foo::class);
27 $container->register(A::class);
28 $container->register(CollisionA::class);
29 $container->register(CollisionB::class);
31 // manually configure *one* call, to override autowiring
33 ->register('setter_injection', SetterInjection::class)
35 ->addMethodCall('setWithCallsConfigured', array('manual_arg1', 'manual_arg2'));
37 (new ResolveClassPass())->process($container);
38 (new AutowireRequiredMethodsPass())->process($container);
40 $methodCalls = $container->getDefinition('setter_injection')->getMethodCalls();
43 array('setWithCallsConfigured', 'setFoo', 'setDependencies', 'setChildMethodWithoutDocBlock'),
44 array_column($methodCalls, 0)
47 // test setWithCallsConfigured args
49 array('manual_arg1', 'manual_arg2'),
53 $this->assertEquals(array(), $methodCalls[1][1]);
56 public function testExplicitMethodInjection()
58 $container = new ContainerBuilder();
59 $container->register(Foo::class);
60 $container->register(A::class);
61 $container->register(CollisionA::class);
62 $container->register(CollisionB::class);
65 ->register('setter_injection', SetterInjection::class)
67 ->addMethodCall('notASetter', array());
69 (new ResolveClassPass())->process($container);
70 (new AutowireRequiredMethodsPass())->process($container);
72 $methodCalls = $container->getDefinition('setter_injection')->getMethodCalls();
75 array('notASetter', 'setFoo', 'setDependencies', 'setWithCallsConfigured', 'setChildMethodWithoutDocBlock'),
76 array_column($methodCalls, 0)
78 $this->assertEquals(array(), $methodCalls[0][1]);