feature #16161 [Validator] Add expressionLanguage to ExpressionValidator constructor (enumag)

This PR was merged into the 2.8 branch.

Discussion
----------

[Validator] Add expressionLanguage to ExpressionValidator constructor

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets |
| License       | MIT
| Doc PR        |

Commits
-------

4ad1e20 [Validator] Add expressionLanguage to ExpressionValidator constructor
This commit is contained in:
Fabien Potencier 2015-10-19 13:49:28 +02:00
commit cb273537ee
2 changed files with 26 additions and 10 deletions

View File

@ -37,18 +37,10 @@ class ExpressionValidator extends ConstraintValidator
*/
private $expressionLanguage;
/**
* @param PropertyAccessorInterface|null $propertyAccessor Optional as of Symfony 2.5
*
* @throws UnexpectedTypeException If the property accessor is invalid
*/
public function __construct($propertyAccessor = null)
public function __construct(PropertyAccessorInterface $propertyAccessor = null, ExpressionLanguage $expressionLanguage = null)
{
if (null !== $propertyAccessor && !$propertyAccessor instanceof PropertyAccessorInterface) {
throw new UnexpectedTypeException($propertyAccessor, 'null or \Symfony\Component\PropertyAccess\PropertyAccessorInterface');
}
$this->propertyAccessor = $propertyAccessor;
$this->expressionLanguage = $expressionLanguage;
}
/**

View File

@ -217,4 +217,28 @@ class ExpressionValidatorTest extends AbstractConstraintValidatorTest
->setCode(Expression::EXPRESSION_FAILED_ERROR)
->assertRaised();
}
public function testExpressionLanguageUsage()
{
$constraint = new Expression(array(
'expression' => 'false',
));
$expressionLanguage = $this->getMock('Symfony\Component\ExpressionLanguage\ExpressionLanguage');
$used = false;
$expressionLanguage->method('evaluate')
->will($this->returnCallback(function () use (&$used) {
$used = true;
return true;
}));
$validator = new ExpressionValidator(null, $expressionLanguage);
$validator->initialize($this->createContext());
$validator->validate(null, $constraint);
$this->assertTrue($used, 'Failed asserting that custom ExpressionLanguage instance is used.');
}
}