diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/AddConstraintValidatorsPass.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/AddConstraintValidatorsPass.php index 497ea08a4bf4e..6f0257f12300b 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/AddConstraintValidatorsPass.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/AddConstraintValidatorsPass.php @@ -19,7 +19,7 @@ class AddConstraintValidatorsPass implements CompilerPassInterface { public function process(ContainerBuilder $container) { - if (!$container->hasDefinition('validator.validator_factory')) { + if (!$container->has('validator.validator_factory')) { return; } @@ -42,6 +42,6 @@ public function process(ContainerBuilder $container) $validators[$definition->getClass()] = $id; } - $container->getDefinition('validator.validator_factory')->replaceArgument(1, $validators); + $container->findDefinition('validator.validator_factory')->replaceArgument(1, $validators); } } diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Compiler/AddConstraintValidatorsPassTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Compiler/AddConstraintValidatorsPassTest.php index e58068900fc8f..3b2c0bf148c54 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Compiler/AddConstraintValidatorsPassTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Compiler/AddConstraintValidatorsPassTest.php @@ -13,67 +13,70 @@ use PHPUnit\Framework\TestCase; use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddConstraintValidatorsPass; +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Reference; class AddConstraintValidatorsPassTest extends TestCase { public function testThatConstraintValidatorServicesAreProcessed() { - $services = array( - 'my_constraint_validator_service1' => array(0 => array('alias' => 'my_constraint_validator_alias1')), - 'my_constraint_validator_service2' => array(), - ); - - $validatorFactoryDefinition = $this->getMockBuilder('Symfony\Component\DependencyInjection\Definition')->getMock(); - $container = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')->setMethods(array('findTaggedServiceIds', 'getDefinition', 'hasDefinition'))->getMock(); - - $validatorDefinition1 = $this->getMockBuilder('Symfony\Component\DependencyInjection\Definition')->setMethods(array('getClass'))->getMock(); - $validatorDefinition2 = $this->getMockBuilder('Symfony\Component\DependencyInjection\Definition')->setMethods(array('getClass'))->getMock(); + $container = new ContainerBuilder(); + $validatorFactoryDefinition = $container->register('validator.validator_factory') + ->setArguments(array(new Reference('service_container'), array())); - $validatorDefinition1->expects($this->atLeastOnce()) - ->method('getClass') - ->willReturn('My\Fully\Qualified\Class\Named\Validator1'); - $validatorDefinition2->expects($this->atLeastOnce()) - ->method('getClass') - ->willReturn('My\Fully\Qualified\Class\Named\Validator2'); + $container->register('my_constraint_validator_service1', 'My\Fully\Qualified\Class\Named\Validator1') + ->addTag('validator.constraint_validator', array('alias' => 'my_constraint_validator_alias1')); + $container->register('my_constraint_validator_service2', 'My\Fully\Qualified\Class\Named\Validator2') + ->addTag('validator.constraint_validator'); - $container->expects($this->any()) - ->method('getDefinition') - ->with($this->anything()) - ->will($this->returnValueMap(array( - array('my_constraint_validator_service1', $validatorDefinition1), - array('my_constraint_validator_service2', $validatorDefinition2), - array('validator.validator_factory', $validatorFactoryDefinition), - ))); - - $container->expects($this->atLeastOnce()) - ->method('findTaggedServiceIds') - ->will($this->returnValue($services)); - $container->expects($this->atLeastOnce()) - ->method('hasDefinition') - ->with('validator.validator_factory') - ->will($this->returnValue(true)); + $addConstraintValidatorsPass = new AddConstraintValidatorsPass(); + $addConstraintValidatorsPass->process($container); - $validatorFactoryDefinition->expects($this->once()) - ->method('replaceArgument') - ->with(1, array( + $this->assertEquals( + array( 'My\Fully\Qualified\Class\Named\Validator1' => 'my_constraint_validator_service1', 'my_constraint_validator_alias1' => 'my_constraint_validator_service1', 'My\Fully\Qualified\Class\Named\Validator2' => 'my_constraint_validator_service2', - )); + ), + $validatorFactoryDefinition->getArgument(1) + ); + } + + public function testThatConstraintValidatorServicesAreProcessedIfTheValidatorFactoryIsDecorated() + { + $container = new ContainerBuilder(); + $validatorFactoryDefinition = $container->register('validator_factory_decorator.inner') + ->setArguments(array(new Reference('service_container'), array())); + $container->register('validator_factory_decorator')->setArguments(array(new Reference('validator_factory_decorator.inner'))); + $container->setAlias('validator.validator_factory', 'validator_factory_decorator.inner'); + + $container->register('my_constraint_validator_service1', 'My\Fully\Qualified\Class\Named\Validator1') + ->addTag('validator.constraint_validator', array('alias' => 'my_constraint_validator_alias1')); + $container->register('my_constraint_validator_service2', 'My\Fully\Qualified\Class\Named\Validator2') + ->addTag('validator.constraint_validator'); $addConstraintValidatorsPass = new AddConstraintValidatorsPass(); $addConstraintValidatorsPass->process($container); + + $this->assertEquals( + array( + 'My\Fully\Qualified\Class\Named\Validator1' => 'my_constraint_validator_service1', + 'my_constraint_validator_alias1' => 'my_constraint_validator_service1', + 'My\Fully\Qualified\Class\Named\Validator2' => 'my_constraint_validator_service2', + ), + $validatorFactoryDefinition->getArgument(1) + ); } public function testThatCompilerPassIsIgnoredIfThereIsNoConstraintValidatorFactoryDefinition() { $definition = $this->getMockBuilder('Symfony\Component\DependencyInjection\Definition')->getMock(); - $container = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')->setMethods(array('hasDefinition', 'findTaggedServiceIds', 'getDefinition'))->getMock(); + $container = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')->setMethods(array('has', 'findTaggedServiceIds', 'getDefinition'))->getMock(); $container->expects($this->never())->method('findTaggedServiceIds'); $container->expects($this->never())->method('getDefinition'); $container->expects($this->atLeastOnce()) - ->method('hasDefinition') + ->method('has') ->with('validator.validator_factory') ->will($this->returnValue(false)); $definition->expects($this->never())->method('replaceArgument');