View source
<?php
namespace Symfony\Component\Validator\Tests\Constraints;
use Symfony\Component\Validator\Constraints\Choice;
use Symfony\Component\Validator\Constraints\ChoiceValidator;
use Symfony\Component\Validator\Validation;
function choice_callback() {
return array(
'foo',
'bar',
);
}
class ChoiceValidatorTest extends AbstractConstraintValidatorTest {
protected function getApiVersion() {
return Validation::API_VERSION_2_5;
}
protected function createValidator() {
return new ChoiceValidator();
}
public static function staticCallback() {
return array(
'foo',
'bar',
);
}
public function testExpectArrayIfMultipleIsTrue() {
$constraint = new Choice(array(
'choices' => array(
'foo',
'bar',
),
'multiple' => true,
));
$this->validator
->validate('asdf', $constraint);
}
public function testNullIsValid() {
$this->validator
->validate(null, new Choice(array(
'choices' => array(
'foo',
'bar',
),
)));
$this
->assertNoViolation();
}
public function testChoicesOrCallbackExpected() {
$this->validator
->validate('foobar', new Choice());
}
public function testValidCallbackExpected() {
$this->validator
->validate('foobar', new Choice(array(
'callback' => 'abcd',
)));
}
public function testValidChoiceArray() {
$constraint = new Choice(array(
'choices' => array(
'foo',
'bar',
),
));
$this->validator
->validate('bar', $constraint);
$this
->assertNoViolation();
}
public function testValidChoiceCallbackFunction() {
$constraint = new Choice(array(
'callback' => __NAMESPACE__ . '\\choice_callback',
));
$this->validator
->validate('bar', $constraint);
$this
->assertNoViolation();
}
public function testValidChoiceCallbackClosure() {
$constraint = new Choice(array(
'callback' => function () {
return array(
'foo',
'bar',
);
},
));
$this->validator
->validate('bar', $constraint);
$this
->assertNoViolation();
}
public function testValidChoiceCallbackStaticMethod() {
$constraint = new Choice(array(
'callback' => array(
__CLASS__,
'staticCallback',
),
));
$this->validator
->validate('bar', $constraint);
$this
->assertNoViolation();
}
public function testValidChoiceCallbackContextMethod() {
$this
->setObject($this);
$constraint = new Choice(array(
'callback' => 'staticCallback',
));
$this->validator
->validate('bar', $constraint);
$this
->assertNoViolation();
}
public function testMultipleChoices() {
$constraint = new Choice(array(
'choices' => array(
'foo',
'bar',
'baz',
),
'multiple' => true,
));
$this->validator
->validate(array(
'baz',
'bar',
), $constraint);
$this
->assertNoViolation();
}
public function testInvalidChoice() {
$constraint = new Choice(array(
'choices' => array(
'foo',
'bar',
),
'message' => 'myMessage',
));
$this->validator
->validate('baz', $constraint);
$this
->buildViolation('myMessage')
->setParameter('{{ value }}', '"baz"')
->setCode(Choice::NO_SUCH_CHOICE_ERROR)
->assertRaised();
}
public function testInvalidChoiceEmptyChoices() {
$constraint = new Choice(array(
'choices' => array(),
'message' => 'myMessage',
));
$this->validator
->validate('baz', $constraint);
$this
->buildViolation('myMessage')
->setParameter('{{ value }}', '"baz"')
->setCode(Choice::NO_SUCH_CHOICE_ERROR)
->assertRaised();
}
public function testInvalidChoiceMultiple() {
$constraint = new Choice(array(
'choices' => array(
'foo',
'bar',
),
'multipleMessage' => 'myMessage',
'multiple' => true,
));
$this->validator
->validate(array(
'foo',
'baz',
), $constraint);
$this
->buildViolation('myMessage')
->setParameter('{{ value }}', '"baz"')
->setInvalidValue('baz')
->setCode(Choice::NO_SUCH_CHOICE_ERROR)
->assertRaised();
}
public function testTooFewChoices() {
$constraint = new Choice(array(
'choices' => array(
'foo',
'bar',
'moo',
'maa',
),
'multiple' => true,
'min' => 2,
'minMessage' => 'myMessage',
));
$value = array(
'foo',
);
$this
->setValue($value);
$this->validator
->validate($value, $constraint);
$this
->buildViolation('myMessage')
->setParameter('{{ limit }}', 2)
->setInvalidValue($value)
->setPlural(2)
->setCode(Choice::TOO_FEW_ERROR)
->assertRaised();
}
public function testTooManyChoices() {
$constraint = new Choice(array(
'choices' => array(
'foo',
'bar',
'moo',
'maa',
),
'multiple' => true,
'max' => 2,
'maxMessage' => 'myMessage',
));
$value = array(
'foo',
'bar',
'moo',
);
$this
->setValue($value);
$this->validator
->validate($value, $constraint);
$this
->buildViolation('myMessage')
->setParameter('{{ limit }}', 2)
->setInvalidValue($value)
->setPlural(2)
->setCode(Choice::TOO_MANY_ERROR)
->assertRaised();
}
public function testNonStrict() {
$constraint = new Choice(array(
'choices' => array(
1,
2,
),
'strict' => false,
));
$this->validator
->validate('2', $constraint);
$this->validator
->validate(2, $constraint);
$this
->assertNoViolation();
}
public function testStrictAllowsExactValue() {
$constraint = new Choice(array(
'choices' => array(
1,
2,
),
'strict' => true,
));
$this->validator
->validate(2, $constraint);
$this
->assertNoViolation();
}
public function testStrictDisallowsDifferentType() {
$constraint = new Choice(array(
'choices' => array(
1,
2,
),
'strict' => true,
'message' => 'myMessage',
));
$this->validator
->validate('2', $constraint);
$this
->buildViolation('myMessage')
->setParameter('{{ value }}', '"2"')
->setCode(Choice::NO_SUCH_CHOICE_ERROR)
->assertRaised();
}
public function testNonStrictWithMultipleChoices() {
$constraint = new Choice(array(
'choices' => array(
1,
2,
3,
),
'multiple' => true,
'strict' => false,
));
$this->validator
->validate(array(
'2',
3,
), $constraint);
$this
->assertNoViolation();
}
public function testStrictWithMultipleChoices() {
$constraint = new Choice(array(
'choices' => array(
1,
2,
3,
),
'multiple' => true,
'strict' => true,
'multipleMessage' => 'myMessage',
));
$this->validator
->validate(array(
2,
'3',
), $constraint);
$this
->buildViolation('myMessage')
->setParameter('{{ value }}', '"3"')
->setInvalidValue('3')
->setCode(Choice::NO_SUCH_CHOICE_ERROR)
->assertRaised();
}
}