| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- <?php
- /*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Symfony\Component\DependencyInjection\Tests\Compiler;
- use PHPUnit\Framework\TestCase;
- use Symfony\Component\DependencyInjection\Compiler\ResolveClassPass;
- use Symfony\Component\DependencyInjection\Compiler\AutowireRequiredMethodsPass;
- use Symfony\Component\DependencyInjection\ContainerBuilder;
- require_once __DIR__.'/../Fixtures/includes/autowiring_classes.php';
- class AutowireRequiredMethodsPassTest extends TestCase
- {
- public function testSetterInjection()
- {
- $container = new ContainerBuilder();
- $container->register(Foo::class);
- $container->register(A::class);
- $container->register(CollisionA::class);
- $container->register(CollisionB::class);
- // manually configure *one* call, to override autowiring
- $container
- ->register('setter_injection', SetterInjection::class)
- ->setAutowired(true)
- ->addMethodCall('setWithCallsConfigured', array('manual_arg1', 'manual_arg2'));
- (new ResolveClassPass())->process($container);
- (new AutowireRequiredMethodsPass())->process($container);
- $methodCalls = $container->getDefinition('setter_injection')->getMethodCalls();
- $this->assertEquals(
- array('setWithCallsConfigured', 'setFoo', 'setDependencies', 'setChildMethodWithoutDocBlock'),
- array_column($methodCalls, 0)
- );
- // test setWithCallsConfigured args
- $this->assertEquals(
- array('manual_arg1', 'manual_arg2'),
- $methodCalls[0][1]
- );
- // test setFoo args
- $this->assertEquals(array(), $methodCalls[1][1]);
- }
- public function testExplicitMethodInjection()
- {
- $container = new ContainerBuilder();
- $container->register(Foo::class);
- $container->register(A::class);
- $container->register(CollisionA::class);
- $container->register(CollisionB::class);
- $container
- ->register('setter_injection', SetterInjection::class)
- ->setAutowired(true)
- ->addMethodCall('notASetter', array());
- (new ResolveClassPass())->process($container);
- (new AutowireRequiredMethodsPass())->process($container);
- $methodCalls = $container->getDefinition('setter_injection')->getMethodCalls();
- $this->assertEquals(
- array('notASetter', 'setFoo', 'setDependencies', 'setWithCallsConfigured', 'setChildMethodWithoutDocBlock'),
- array_column($methodCalls, 0)
- );
- $this->assertEquals(array(), $methodCalls[0][1]);
- }
- }
|