AutowireRequiredMethodsPassTest.php 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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\ResolveClassPass;
  13. use Symfony\Component\DependencyInjection\Compiler\AutowireRequiredMethodsPass;
  14. use Symfony\Component\DependencyInjection\ContainerBuilder;
  15. require_once __DIR__.'/../Fixtures/includes/autowiring_classes.php';
  16. class AutowireRequiredMethodsPassTest extends TestCase
  17. {
  18. public function testSetterInjection()
  19. {
  20. $container = new ContainerBuilder();
  21. $container->register(Foo::class);
  22. $container->register(A::class);
  23. $container->register(CollisionA::class);
  24. $container->register(CollisionB::class);
  25. // manually configure *one* call, to override autowiring
  26. $container
  27. ->register('setter_injection', SetterInjection::class)
  28. ->setAutowired(true)
  29. ->addMethodCall('setWithCallsConfigured', array('manual_arg1', 'manual_arg2'));
  30. (new ResolveClassPass())->process($container);
  31. (new AutowireRequiredMethodsPass())->process($container);
  32. $methodCalls = $container->getDefinition('setter_injection')->getMethodCalls();
  33. $this->assertEquals(
  34. array('setWithCallsConfigured', 'setFoo', 'setDependencies', 'setChildMethodWithoutDocBlock'),
  35. array_column($methodCalls, 0)
  36. );
  37. // test setWithCallsConfigured args
  38. $this->assertEquals(
  39. array('manual_arg1', 'manual_arg2'),
  40. $methodCalls[0][1]
  41. );
  42. // test setFoo args
  43. $this->assertEquals(array(), $methodCalls[1][1]);
  44. }
  45. public function testExplicitMethodInjection()
  46. {
  47. $container = new ContainerBuilder();
  48. $container->register(Foo::class);
  49. $container->register(A::class);
  50. $container->register(CollisionA::class);
  51. $container->register(CollisionB::class);
  52. $container
  53. ->register('setter_injection', SetterInjection::class)
  54. ->setAutowired(true)
  55. ->addMethodCall('notASetter', array());
  56. (new ResolveClassPass())->process($container);
  57. (new AutowireRequiredMethodsPass())->process($container);
  58. $methodCalls = $container->getDefinition('setter_injection')->getMethodCalls();
  59. $this->assertEquals(
  60. array('notASetter', 'setFoo', 'setDependencies', 'setWithCallsConfigured', 'setChildMethodWithoutDocBlock'),
  61. array_column($methodCalls, 0)
  62. );
  63. $this->assertEquals(array(), $methodCalls[0][1]);
  64. }
  65. }