Skip to content

Commit 54346b6

Browse files
committed
Merge branch '2.8' into 3.0
* 2.8: #17676 - making the proxy instantiation compatible with ProxyManager 2.x by detecting proxy features Fix bug when using an private aliased factory service ChoiceFormField of type "select" could be "disabled" Update contributing docs [Console] Fix escaping of trailing backslashes Fix constraint validator alias being required [ci] clone with depth=1 to kill push-forced PRs Add check on If-Range header
2 parents 03fd38f + 212fda2 commit 54346b6

File tree

2 files changed

+89
-0
lines changed

2 files changed

+89
-0
lines changed

DependencyInjection/Compiler/AddConstraintValidatorsPass.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ public function process(ContainerBuilder $container)
2727
if (isset($attributes[0]['alias'])) {
2828
$validators[$attributes[0]['alias']] = $id;
2929
}
30+
31+
$validators[$container->getDefinition($id)->getClass()] = $id;
3032
}
3133

3234
$container->getDefinition('validator.validator_factory')->replaceArgument(1, $validators);
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddConstraintValidatorsPass;
13+
14+
class AddConstraintValidatorsPassTest extends \PHPUnit_Framework_TestCase
15+
{
16+
public function testThatConstraintValidatorServicesAreProcessed()
17+
{
18+
$services = array(
19+
'my_constraint_validator_service1' => array(0 => array('alias' => 'my_constraint_validator_alias1')),
20+
'my_constraint_validator_service2' => array(),
21+
);
22+
23+
$validatorFactoryDefinition = $this->getMock('Symfony\Component\DependencyInjection\Definition');
24+
$container = $this->getMock(
25+
'Symfony\Component\DependencyInjection\ContainerBuilder',
26+
array('findTaggedServiceIds', 'getDefinition', 'hasDefinition')
27+
);
28+
29+
$validatorDefinition1 = $this->getMock('Symfony\Component\DependencyInjection\Definition', array('getClass'));
30+
$validatorDefinition2 = $this->getMock('Symfony\Component\DependencyInjection\Definition', array('getClass'));
31+
32+
$validatorDefinition1->expects($this->atLeastOnce())
33+
->method('getClass')
34+
->willReturn('My\Fully\Qualified\Class\Named\Validator1');
35+
$validatorDefinition2->expects($this->atLeastOnce())
36+
->method('getClass')
37+
->willReturn('My\Fully\Qualified\Class\Named\Validator2');
38+
39+
$container->expects($this->any())
40+
->method('getDefinition')
41+
->with($this->anything())
42+
->will($this->returnValueMap(array(
43+
array('my_constraint_validator_service1', $validatorDefinition1),
44+
array('my_constraint_validator_service2', $validatorDefinition2),
45+
array('validator.validator_factory', $validatorFactoryDefinition),
46+
)));
47+
48+
$container->expects($this->atLeastOnce())
49+
->method('findTaggedServiceIds')
50+
->will($this->returnValue($services));
51+
$container->expects($this->atLeastOnce())
52+
->method('hasDefinition')
53+
->with('validator.validator_factory')
54+
->will($this->returnValue(true));
55+
56+
$validatorFactoryDefinition->expects($this->once())
57+
->method('replaceArgument')
58+
->with(1, array(
59+
'My\Fully\Qualified\Class\Named\Validator1' => 'my_constraint_validator_service1',
60+
'my_constraint_validator_alias1' => 'my_constraint_validator_service1',
61+
'My\Fully\Qualified\Class\Named\Validator2' => 'my_constraint_validator_service2',
62+
));
63+
64+
$addConstraintValidatorsPass = new AddConstraintValidatorsPass();
65+
$addConstraintValidatorsPass->process($container);
66+
}
67+
68+
public function testThatCompilerPassIsIgnoredIfThereIsNoConstraintValidatorFactoryDefinition()
69+
{
70+
$definition = $this->getMock('Symfony\Component\DependencyInjection\Definition');
71+
$container = $this->getMock(
72+
'Symfony\Component\DependencyInjection\ContainerBuilder',
73+
array('hasDefinition', 'findTaggedServiceIds', 'getDefinition')
74+
);
75+
76+
$container->expects($this->never())->method('findTaggedServiceIds');
77+
$container->expects($this->never())->method('getDefinition');
78+
$container->expects($this->atLeastOnce())
79+
->method('hasDefinition')
80+
->with('validator.validator_factory')
81+
->will($this->returnValue(false));
82+
$definition->expects($this->never())->method('replaceArgument');
83+
84+
$addConstraintValidatorsPass = new AddConstraintValidatorsPass();
85+
$addConstraintValidatorsPass->process($container);
86+
}
87+
}

0 commit comments

Comments
 (0)