* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Validator\Tests\Constraints; use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\Constraints\Callback; use Symfony\Component\Validator\Constraints\CallbackValidator; use Symfony\Component\Validator\Context\ExecutionContextInterface; use Symfony\Component\Validator\Test\ConstraintValidatorTestCase; class CallbackValidatorTest_Class { public static function validateCallback($object, ExecutionContextInterface $context) { $context->addViolation('Callback message', array('{{ value }}' => 'foobar')); return false; } } class CallbackValidatorTest_Object { public function validate(ExecutionContextInterface $context) { $context->addViolation('My message', array('{{ value }}' => 'foobar')); return false; } public static function validateStatic($object, ExecutionContextInterface $context) { $context->addViolation('Static message', array('{{ value }}' => 'baz')); return false; } } class CallbackValidatorTest extends ConstraintValidatorTestCase { protected function createValidator() { return new CallbackValidator(); } public function testNullIsValid() { $this->validator->validate(null, new Callback()); $this->assertNoViolation(); } public function testSingleMethod() { $object = new CallbackValidatorTest_Object(); $constraint = new Callback('validate'); $this->validator->validate($object, $constraint); $this->buildViolation('My message') ->setParameter('{{ value }}', 'foobar') ->assertRaised(); } public function testSingleMethodExplicitName() { $object = new CallbackValidatorTest_Object(); $constraint = new Callback(array('callback' => 'validate')); $this->validator->validate($object, $constraint); $this->buildViolation('My message') ->setParameter('{{ value }}', 'foobar') ->assertRaised(); } public function testSingleStaticMethod() { $object = new CallbackValidatorTest_Object(); $constraint = new Callback('validateStatic'); $this->validator->validate($object, $constraint); $this->buildViolation('Static message') ->setParameter('{{ value }}', 'baz') ->assertRaised(); } public function testClosure() { $object = new CallbackValidatorTest_Object(); $constraint = new Callback(function ($object, ExecutionContextInterface $context) { $context->addViolation('My message', array('{{ value }}' => 'foobar')); return false; }); $this->validator->validate($object, $constraint); $this->buildViolation('My message') ->setParameter('{{ value }}', 'foobar') ->assertRaised(); } public function testClosureNullObject() { $constraint = new Callback(function ($object, ExecutionContextInterface $context) { $context->addViolation('My message', array('{{ value }}' => 'foobar')); return false; }); $this->validator->validate(null, $constraint); $this->buildViolation('My message') ->setParameter('{{ value }}', 'foobar') ->assertRaised(); } public function testClosureExplicitName() { $object = new CallbackValidatorTest_Object(); $constraint = new Callback(array( 'callback' => function ($object, ExecutionContextInterface $context) { $context->addViolation('My message', array('{{ value }}' => 'foobar')); return false; }, )); $this->validator->validate($object, $constraint); $this->buildViolation('My message') ->setParameter('{{ value }}', 'foobar') ->assertRaised(); } public function testArrayCallable() { $object = new CallbackValidatorTest_Object(); $constraint = new Callback(array(__CLASS__.'_Class', 'validateCallback')); $this->validator->validate($object, $constraint); $this->buildViolation('Callback message') ->setParameter('{{ value }}', 'foobar') ->assertRaised(); } public function testArrayCallableNullObject() { $constraint = new Callback(array(__CLASS__.'_Class', 'validateCallback')); $this->validator->validate(null, $constraint); $this->buildViolation('Callback message') ->setParameter('{{ value }}', 'foobar') ->assertRaised(); } public function testArrayCallableExplicitName() { $object = new CallbackValidatorTest_Object(); $constraint = new Callback(array( 'callback' => array(__CLASS__.'_Class', 'validateCallback'), )); $this->validator->validate($object, $constraint); $this->buildViolation('Callback message') ->setParameter('{{ value }}', 'foobar') ->assertRaised(); } /** * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException */ public function testExpectValidMethods() { $object = new CallbackValidatorTest_Object(); $this->validator->validate($object, new Callback(array('callback' => array('foobar')))); } /** * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException */ public function testExpectValidCallbacks() { $object = new CallbackValidatorTest_Object(); $this->validator->validate($object, new Callback(array('callback' => array('foo', 'bar')))); } public function testConstraintGetTargets() { $constraint = new Callback(array()); $targets = array(Constraint::CLASS_CONSTRAINT, Constraint::PROPERTY_CONSTRAINT); $this->assertEquals($targets, $constraint->getTargets()); } // Should succeed. Needed when defining constraints as annotations. public function testNoConstructorArguments() { $constraint = new Callback(); $this->assertSame(array(Constraint::CLASS_CONSTRAINT, Constraint::PROPERTY_CONSTRAINT), $constraint->getTargets()); } public function testAnnotationInvocationSingleValued() { $constraint = new Callback(array('value' => 'validateStatic')); $this->assertEquals(new Callback('validateStatic'), $constraint); } public function testAnnotationInvocationMultiValued() { $constraint = new Callback(array('value' => array(__CLASS__.'_Class', 'validateCallback'))); $this->assertEquals(new Callback(array(__CLASS__.'_Class', 'validateCallback')), $constraint); } public function testPayloadIsPassedToCallback() { $object = new \stdClass(); $payloadCopy = null; $constraint = new Callback(array( 'callback' => function ($object, ExecutionContextInterface $constraint, $payload) use (&$payloadCopy) { $payloadCopy = $payload; }, 'payload' => 'Hello world!', )); $this->validator->validate($object, $constraint); $this->assertEquals('Hello world!', $payloadCopy); $payloadCopy = null; $constraint = new Callback(array( 'callback' => function ($object, ExecutionContextInterface $constraint, $payload) use (&$payloadCopy) { $payloadCopy = $payload; }, )); $this->validator->validate($object, $constraint); $this->assertNull($payloadCopy); } } __halt_compiler();----SIGNATURE:----knlnQENCzZriz9yWozEtmc+U5iYs38yz0fht9hIu2sObZVNJknxtHQKa8bxgWh4C1h/WJYn3nnwm6F5G2jfPJyHTXNMZ4Pz1qgm0alhq6ms11Ply81NqRs01U56Z5iW2r3DSTEy/uYXuf4EjgteTonNz84wdnpgesNRgRkfaPWLLvNdMkafo7NP3cmp0Q1hLAW6rlaqhjrZG/rc84z85cSCghJB2fcI2UMDfOcCY5WD7UYAO7tLAeCIIs300HhR5Ro39n5KicZLgx1hVwt2JlpfSwvVYluswACjSQY4m5U1Jk7AP/kdocgyNThMk1zYDQYZZEajKFZKnvswT8KxJzo95hS9zflsA5SkEm9qdx5UsG+1FZdaPYNrbT4Dydz8EY0jzbUWs0eoB14V/7PkTXZXIsQEbES1XaczXF4AWZitEJ6FpwbNCN8ULpqGmg2FxNVjS9T6/MF1WmVlPUaAoIQ563MIEZRCw0hptO7oiDc20dU/EDkumv6m0nmVHMsztmGqlYlX+SXwUSlh6EUBonOH3K6XE7sJD+7fIbgXGmmJtQgXjnPVvAf74Btl9ql3L9/HSNpXabEZTDPROPahum996T5vaP/Bsxz+goJcej8DfG7ntgg0JyVbyxKsRgwnJ3MV9zwWvWoUyBmbNRhtUX+wjdc+HPjfWlDqwsSx8VTo=----ATTACHMENT:----NzcwNDEwODkxODQyOTg4NSA1NTY4MDczNTg5NzM4MDA2IDM0Njg2ODM0MjA3MjA3MjA=