Вход Регистрация
Файл: symfony-2.7/src/Symfony/Component/Validator/Tests/Constraints/CallbackValidatorTest.php
Строк: 357
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace SymfonyComponentValidatorTestsConstraints;

use 
SymfonyComponentValidatorConstraint;
use 
SymfonyComponentValidatorConstraintsCallback;
use 
SymfonyComponentValidatorConstraintsCallbackValidator;
use 
SymfonyComponentValidatorExecutionContextInterface;
use 
SymfonyComponentValidatorValidation;

class 
CallbackValidatorTest_Class
{
    public static function 
validateCallback($objectExecutionContextInterface $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($objectExecutionContextInterface $context)
    {
        
$context->addViolation('Static message', array('{{ value }}' => 'baz'));

        return 
false;
    }
}

class 
CallbackValidatorTest extends AbstractConstraintValidatorTest
{
    protected function 
getApiVersion()
    {
        return 
Validation::API_VERSION_2_5;
    }

    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 ($objectExecutionContextInterface $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 ($objectExecutionContextInterface $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 ($objectExecutionContextInterface $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();
    }

    
// BC with Symfony < 2.4
    
public function testLegacySingleMethodBc()
    {
        
$object = new CallbackValidatorTest_Object();
        
$constraint = new Callback(array('validate'));

        
$this->validator->validate($object$constraint);

        
$this->buildViolation('My message')
            ->
setParameter('{{ value }}''foobar')
            ->
assertRaised();
    }

    
// BC with Symfony < 2.4
    
public function testLegacySingleMethodBcExplicitName()
    {
        
$object = new CallbackValidatorTest_Object();
        
$constraint = new Callback(array('methods' => array('validate')));

        
$this->validator->validate($object$constraint);

        
$this->buildViolation('My message')
            ->
setParameter('{{ value }}''foobar')
            ->
assertRaised();
    }

    
// BC with Symfony < 2.4
    
public function testLegacyMultipleMethodsBc()
    {
        
$object = new CallbackValidatorTest_Object();
        
$constraint = new Callback(array('validate''validateStatic'));

        
$this->validator->validate($object$constraint);

        
$this->buildViolation('My message')
            ->
setParameter('{{ value }}''foobar')
            ->
buildNextViolation('Static message')
            ->
setParameter('{{ value }}''baz')
            ->
assertRaised();
    }

    
// BC with Symfony < 2.4
    
public function testLegacyMultipleMethodsBcExplicitName()
    {
        
$object = new CallbackValidatorTest_Object();
        
$constraint = new Callback(array(
            
'methods' => array('validate''validateStatic'),
        ));

        
$this->validator->validate($object$constraint);

        
$this->buildViolation('My message')
            ->
setParameter('{{ value }}''foobar')
            ->
buildNextViolation('Static message')
            ->
setParameter('{{ value }}''baz')
            ->
assertRaised();
    }

    
// BC with Symfony < 2.4
    
public function testLegacySingleStaticMethodBc()
    {
        
$object = new CallbackValidatorTest_Object();
        
$constraint = new Callback(array(
            array(
__CLASS__.'_Class''validateCallback'),
        ));

        
$this->validator->validate($object$constraint);

        
$this->buildViolation('Callback message')
            ->
setParameter('{{ value }}''foobar')
            ->
assertRaised();
    }

    
// BC with Symfony < 2.4
    
public function testLegacySingleStaticMethodBcExplicitName()
    {
        
$object = new CallbackValidatorTest_Object();
        
$constraint = new Callback(array(
            
'methods' => array(array(__CLASS__.'_Class''validateCallback')),
        ));

        
$this->validator->validate($object$constraint);

        
$this->buildViolation('Callback message')
            ->
setParameter('{{ value }}''foobar')
            ->
assertRaised();
    }

    
/**
     * @expectedException SymfonyComponentValidatorExceptionConstraintDefinitionException
     */
    
public function testExpectValidMethods()
    {
        
$object = new CallbackValidatorTest_Object();

        
$this->validator->validate($object, new Callback(array('foobar')));
    }

    
/**
     * @expectedException SymfonyComponentValidatorExceptionConstraintDefinitionException
     */
    
public function testExpectValidCallbacks()
    {
        
$object = new CallbackValidatorTest_Object();

        
$this->validator->validate($object, new Callback(array(array('foo''bar'))));
    }

    
/**
     * @expectedException SymfonyComponentValidatorExceptionConstraintDefinitionException
     */
    
public function testLegacyExpectEitherCallbackOrMethods()
    {
        
$object = new CallbackValidatorTest_Object();

        
$this->validator->validate($object, new Callback(array(
            
'callback' => 'validate',
            
'methods' => array('validateStatic'),
        )));
    }

    public function 
testConstraintGetTargets()
    {
        
$constraint = new Callback(array());
        
$targets = array(Constraint::CLASS_CONSTRAINTConstraint::PROPERTY_CONSTRAINT);

        
$this->assertEquals($targets$constraint->getTargets());
    }

    
// Should succeed. Needed when defining constraints as annotations.
    
public function testNoConstructorArguments()
    {
        new 
Callback();
    }

    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);
    }
}
Онлайн: 0
Реклама