[Validator] Deprecated ConstraintValidator methods setMessage(), getMessageTemplate() and getMessageParameters()

Had to refactor the validation tests at the same time and fixed various small bugs while doing so.
This commit is contained in:
Bernhard Schussek 2012-02-01 13:53:45 +01:00
parent 0417282740
commit 9153f0e569
72 changed files with 1554 additions and 880 deletions

View File

@ -300,6 +300,8 @@ To get the diff between two versions, go to https://github.com/symfony/symfony/c
* changed default value for `extraFieldsMessage` and `missingFieldsMessage`
in Collection constraint
* made ExecutionContext immutable
* deprecated Constraint methods `setMessage`, `getMessageTemplate` and
`getMessageParameters`
### Yaml

View File

@ -141,3 +141,37 @@ UPGRADE FROM 2.0 to 2.1
$builder->add('tags', 'collection', array('prototype' => '__proto__'));
// results in the name "__proto__" in the template
* The methods `setMessage`, `getMessageTemplate` and `getMessageParameters`
in Constraint were deprecated
If you have implemented custom validators, you should use either of the
`addViolation*` methods of the context object instead.
Before:
public function isValid($value, Constraint $constraint)
{
// ...
if (!$valid) {
$this->setMessage($constraint->message, array(
'{{ value }}' => $value,
));
return false;
}
}
After:
public function isValid($value, Constraint $constraint)
{
// ...
if (!$valid) {
$this->context->addViolation($constraint->message, array(
'{{ value }}' => $value,
));
return false;
}
}

View File

@ -102,7 +102,7 @@ class UniqueEntityValidator extends ConstraintValidator
return true;
}
$this->context->addNestedViolationAt($fields[0], $constraint->message, array(), $criteria[$fields[0]]);
$this->context->addViolationAtRelativePath($fields[0], $constraint->message, array(), $criteria[$fields[0]]);
return true; // all true, we added the violation already!
}

View File

@ -40,7 +40,7 @@ class UserPasswordValidator extends ConstraintValidator
$encoder = $this->encoderFactory->getEncoder($user);
if (!$encoder->isPasswordValid($user->getPassword(), $password, $user->getSalt())) {
$this->setMessage($constraint->message);
$this->context->addViolation($constraint->message);
return false;
}

View File

@ -24,12 +24,18 @@ abstract class ConstraintValidator implements ConstraintValidatorInterface
* @var ExecutionContext
*/
protected $context;
/**
* @var string
*
* @deprecated
*/
private $messageTemplate;
/**
* @var array
*
* @deprecated
*/
private $messageParameters;
@ -46,7 +52,7 @@ abstract class ConstraintValidator implements ConstraintValidatorInterface
/**
* {@inheritDoc}
*
* @api
* @deprecated
*/
public function getMessageTemplate()
{
@ -56,7 +62,7 @@ abstract class ConstraintValidator implements ConstraintValidatorInterface
/**
* {@inheritDoc}
*
* @api
* @deprecated
*/
public function getMessageParameters()
{
@ -64,11 +70,15 @@ abstract class ConstraintValidator implements ConstraintValidatorInterface
}
/**
* @api
* Wrapper for $this->context->addViolation()
*
* @deprecated
*/
protected function setMessage($template, array $parameters = array())
{
$this->messageTemplate = $template;
$this->messageParameters = $parameters;
$this->context->addViolation($template, $parameters);
}
}

View File

@ -12,6 +12,8 @@
namespace Symfony\Component\Validator;
/**
* @author Bernhard Schussek <bschussek@gmail.com>
*
* @api
*/
interface ConstraintValidatorInterface
@ -34,18 +36,4 @@ interface ConstraintValidatorInterface
* @api
*/
function isValid($value, Constraint $constraint);
/**
* @return string
*
* @api
*/
function getMessageTemplate();
/**
* @return array
*
* @api
*/
function getMessageParameters();
}

View File

@ -33,6 +33,21 @@ class ConstraintViolation
$this->invalidValue = $invalidValue;
}
/**
* @return string
*/
public function __toString()
{
$class = (string) (is_object($this->root) ? get_class($this->root) : $this->root);
$propertyPath = (string) $this->propertyPath;
if ('' !== $propertyPath && '[' !== $propertyPath[0] && '' !== $class) {
$class .= '.';
}
return $class . $propertyPath . ":\n " . $this->getMessage();
}
/**
* @return string
*
@ -62,7 +77,15 @@ class ConstraintViolation
*/
public function getMessage()
{
return strtr($this->messageTemplate, $this->messageParameters);
$parameters = $this->messageParameters;
foreach ($parameters as $i => $parameter) {
if (is_array($parameter)) {
$parameters[$i] = 'Array';
}
}
return strtr($this->messageTemplate, $parameters);
}
public function getRoot()

View File

@ -47,17 +47,7 @@ class ConstraintViolationList implements \IteratorAggregate, \Countable, \ArrayA
$string = '';
foreach ($this->violations as $violation) {
$root = $violation->getRoot();
$class = (string) (is_object($root) ? get_class($root) : $root);
$propertyPath = (string) $violation->getPropertyPath();
if ('' !== $propertyPath && '[' !== $propertyPath[0] && '' !== $class) {
$class .= '.';
}
$string .= <<<EOF
{$class}{$propertyPath}:
{$violation->getMessage()}
EOF;
$string .= $violation . "\n";
}
return $string;

View File

@ -32,7 +32,7 @@ class BlankValidator extends ConstraintValidator
public function isValid($value, Constraint $constraint)
{
if ('' !== $value && null !== $value) {
$this->setMessage($constraint->message, array('{{ value }}' => $value));
$this->context->addViolation($constraint->message, array('{{ value }}' => $value));
return false;
}

View File

@ -48,6 +48,7 @@ class CallbackValidator extends ConstraintValidator
}
$methods = $constraint->methods;
$success = true;
foreach ($methods as $method) {
if (is_array($method) || $method instanceof \Closure) {
@ -55,16 +56,16 @@ class CallbackValidator extends ConstraintValidator
throw new ConstraintDefinitionException(sprintf('"%s::%s" targeted by Callback constraint is not a valid callable', $method[0], $method[1]));
}
call_user_func($method, $object, $this->context);
$success = call_user_func($method, $object, $this->context) && $success;
} else {
if (!method_exists($object, $method)) {
throw new ConstraintDefinitionException(sprintf('Method "%s" targeted by Callback constraint does not exist', $method));
}
$object->$method($this->context);
$success = $object->$method($this->context) && $success;
}
}
return true;
return $success;
}
}

View File

@ -66,7 +66,7 @@ class ChoiceValidator extends ConstraintValidator
if ($constraint->multiple) {
foreach ($value as $_value) {
if (!in_array($_value, $choices, $constraint->strict)) {
$this->setMessage($constraint->multipleMessage, array('{{ value }}' => $_value));
$this->context->addViolation($constraint->multipleMessage, array('{{ value }}' => $_value));
return false;
}
@ -75,18 +75,18 @@ class ChoiceValidator extends ConstraintValidator
$count = count($value);
if ($constraint->min !== null && $count < $constraint->min) {
$this->setMessage($constraint->minMessage, array('{{ limit }}' => $constraint->min));
$this->context->addViolation($constraint->minMessage, array('{{ limit }}' => $constraint->min));
return false;
}
if ($constraint->max !== null && $count > $constraint->max) {
$this->setMessage($constraint->maxMessage, array('{{ limit }}' => $constraint->max));
$this->context->addViolation($constraint->maxMessage, array('{{ limit }}' => $constraint->max));
return false;
}
} elseif (!in_array($value, $choices, $constraint->strict)) {
$this->setMessage($constraint->message, array('{{ value }}' => $value));
$this->context->addViolation($constraint->message, array('{{ value }}' => $value));
return false;
}

View File

@ -68,8 +68,8 @@ class CollectionValidator extends ConstraintValidator
$walker->walkConstraint($constr, $value[$field], $group, $propertyPath.'['.$field.']');
}
} elseif (!$fieldConstraint instanceof Optional && !$constraint->allowMissingFields) {
$this->context->addNestedViolationAt('['.$field.']', $constraint->missingFieldsMessage, array(
'{{ field }}' => '"'.$field.'"'
$this->context->addViolationAtRelativePath('['.$field.']', $constraint->missingFieldsMessage, array(
'{{ field }}' => $field
), null);
$valid = false;
}
@ -78,8 +78,8 @@ class CollectionValidator extends ConstraintValidator
if (!$constraint->allowExtraFields) {
foreach ($value as $field => $fieldValue) {
if (!isset($constraint->fields[$field])) {
$this->context->addNestedViolationAt('['.$field.']', $constraint->extraFieldsMessage, array(
'{{ field }}' => '"'.$field.'"'
$this->context->addViolationAtRelativePath('['.$field.']', $constraint->extraFieldsMessage, array(
'{{ field }}' => $field
), $fieldValue);
$valid = false;
}

View File

@ -47,7 +47,7 @@ class CountryValidator extends ConstraintValidator
$value = (string) $value;
if (!in_array($value, \Symfony\Component\Locale\Locale::getCountries())) {
$this->setMessage($constraint->message, array('{{ value }}' => $value));
$this->context->addViolation($constraint->message, array('{{ value }}' => $value));
return false;
}

View File

@ -48,12 +48,12 @@ class DateValidator extends ConstraintValidator
$value = (string) $value;
if (!preg_match(static::PATTERN, $value, $matches)) {
$this->setMessage($constraint->message, array('{{ value }}' => $value));
if (!preg_match(static::PATTERN, $value, $matches) || !checkdate($matches[2], $matches[3], $matches[1])) {
$this->context->addViolation($constraint->message, array('{{ value }}' => $value));
return false;
}
return checkdate($matches[2], $matches[3], $matches[1]);
return true;
}
}

View File

@ -58,7 +58,7 @@ class EmailValidator extends ConstraintValidator
}
if (!$valid) {
$this->setMessage($constraint->message, array('{{ value }}' => $value));
$this->context->addViolation($constraint->message, array('{{ value }}' => $value));
return false;
}

View File

@ -39,7 +39,7 @@ class FalseValidator extends ConstraintValidator
return true;
}
$this->setMessage($constraint->message);
$this->context->addViolation($constraint->message);
return false;
}

View File

@ -44,15 +44,15 @@ class FileValidator extends ConstraintValidator
case UPLOAD_ERR_INI_SIZE:
$maxSize = UploadedFile::getMaxFilesize();
$maxSize = $constraint->maxSize ? min($maxSize, $constraint->maxSize) : $maxSize;
$this->setMessage($constraint->uploadIniSizeErrorMessage, array('{{ limit }}' => $maxSize.' bytes'));
$this->context->addViolation($constraint->uploadIniSizeErrorMessage, array('{{ limit }}' => $maxSize.' bytes'));
return false;
case UPLOAD_ERR_FORM_SIZE:
$this->setMessage($constraint->uploadFormSizeErrorMessage);
$this->context->addViolation($constraint->uploadFormSizeErrorMessage);
return false;
default:
$this->setMessage($constraint->uploadErrorMessage);
$this->context->addViolation($constraint->uploadErrorMessage);
return false;
}
@ -65,13 +65,13 @@ class FileValidator extends ConstraintValidator
$path = $value instanceof FileObject ? $value->getPathname() : (string) $value;
if (!is_file($path)) {
$this->setMessage($constraint->notFoundMessage, array('{{ file }}' => $path));
$this->context->addViolation($constraint->notFoundMessage, array('{{ file }}' => $path));
return false;
}
if (!is_readable($path)) {
$this->setMessage($constraint->notReadableMessage, array('{{ file }}' => $path));
$this->context->addViolation($constraint->notReadableMessage, array('{{ file }}' => $path));
return false;
}
@ -94,7 +94,7 @@ class FileValidator extends ConstraintValidator
}
if ($size > $limit) {
$this->setMessage($constraint->maxSizeMessage, array(
$this->context->addViolation($constraint->maxSizeMessage, array(
'{{ size }}' => $size.$suffix,
'{{ limit }}' => $limit.$suffix,
'{{ file }}' => $path,
@ -128,7 +128,7 @@ class FileValidator extends ConstraintValidator
}
if (false === $valid) {
$this->setMessage($constraint->mimeTypesMessage, array(
$this->context->addViolation($constraint->mimeTypesMessage, array(
'{{ type }}' => '"'.$mime.'"',
'{{ types }}' => '"'.implode('", "', $mimeTypes) .'"',
'{{ file }}' => $path,

View File

@ -40,7 +40,7 @@ class ImageValidator extends FileValidator
$size = @getimagesize($value);
if (empty($size) || ($size[0] === 0) || ($size[1] === 0)) {
$this->setMessage($constraint->sizeNotDetectedMessage);
$this->context->addViolation($constraint->sizeNotDetectedMessage);
return false;
}
@ -54,7 +54,7 @@ class ImageValidator extends FileValidator
}
if ($width < $constraint->minWidth) {
$this->setMessage($constraint->minWidthMessage, array(
$this->context->addViolation($constraint->minWidthMessage, array(
'{{ width }}' => $width,
'{{ min_width }}' => $constraint->minWidth
));
@ -69,7 +69,7 @@ class ImageValidator extends FileValidator
}
if ($width > $constraint->maxWidth) {
$this->setMessage($constraint->maxWidthMessage, array(
$this->context->addViolation($constraint->maxWidthMessage, array(
'{{ width }}' => $width,
'{{ max_width }}' => $constraint->maxWidth
));
@ -84,7 +84,7 @@ class ImageValidator extends FileValidator
}
if ($height < $constraint->minHeight) {
$this->setMessage($constraint->minHeightMessage, array(
$this->context->addViolation($constraint->minHeightMessage, array(
'{{ height }}' => $height,
'{{ min_height }}' => $constraint->minHeight
));
@ -99,7 +99,7 @@ class ImageValidator extends FileValidator
}
if ($height > $constraint->maxHeight) {
$this->setMessage($constraint->maxHeightMessage, array(
$this->context->addViolation($constraint->maxHeightMessage, array(
'{{ height }}' => $height,
'{{ max_height }}' => $constraint->maxHeight
));

View File

@ -98,7 +98,7 @@ class IpValidator extends ConstraintValidator
}
if (!filter_var($value, FILTER_VALIDATE_IP, $flag)) {
$this->setMessage($constraint->message, array('{{ value }}' => $value));
$this->context->addViolation($constraint->message, array('{{ value }}' => $value));
return false;
}

View File

@ -47,7 +47,7 @@ class LanguageValidator extends ConstraintValidator
$value = (string) $value;
if (!in_array($value, \Symfony\Component\Locale\Locale::getLanguages())) {
$this->setMessage($constraint->message, array('{{ value }}' => $value));
$this->context->addViolation($constraint->message, array('{{ value }}' => $value));
return false;
}

View File

@ -47,7 +47,7 @@ class LocaleValidator extends ConstraintValidator
$value = (string) $value;
if (!in_array($value, \Symfony\Component\Locale\Locale::getLocales())) {
$this->setMessage($constraint->message, array('{{ value }}' => $value));
$this->context->addViolation($constraint->message, array('{{ value }}' => $value));
return false;
}

View File

@ -51,7 +51,7 @@ class MaxLengthValidator extends ConstraintValidator
}
if ($length > $constraint->limit) {
$this->setMessage($constraint->message, array(
$this->context->addViolation($constraint->message, array(
'{{ value }}' => $value,
'{{ limit }}' => $constraint->limit,
));

View File

@ -36,7 +36,7 @@ class MaxValidator extends ConstraintValidator
}
if (!is_numeric($value)) {
$this->setMessage($constraint->invalidMessage, array(
$this->context->addViolation($constraint->invalidMessage, array(
'{{ value }}' => $value,
'{{ limit }}' => $constraint->limit,
));
@ -45,7 +45,7 @@ class MaxValidator extends ConstraintValidator
}
if ($value > $constraint->limit) {
$this->setMessage($constraint->message, array(
$this->context->addViolation($constraint->message, array(
'{{ value }}' => $value,
'{{ limit }}' => $constraint->limit,
));

View File

@ -51,7 +51,7 @@ class MinLengthValidator extends ConstraintValidator
}
if ($length < $constraint->limit) {
$this->setMessage($constraint->message, array(
$this->context->addViolation($constraint->message, array(
'{{ value }}' => $value,
'{{ limit }}' => $constraint->limit,
));

View File

@ -36,7 +36,7 @@ class MinValidator extends ConstraintValidator
}
if (!is_numeric($value)) {
$this->setMessage($constraint->invalidMessage, array(
$this->context->addViolation($constraint->invalidMessage, array(
'{{ value }}' => $value,
'{{ limit }}' => $constraint->limit,
));
@ -45,7 +45,7 @@ class MinValidator extends ConstraintValidator
}
if ($value < $constraint->limit) {
$this->setMessage($constraint->message, array(
$this->context->addViolation($constraint->message, array(
'{{ value }}' => $value,
'{{ limit }}' => $constraint->limit,
));

View File

@ -32,7 +32,7 @@ class NotBlankValidator extends ConstraintValidator
public function isValid($value, Constraint $constraint)
{
if (false === $value || (empty($value) && '0' != $value)) {
$this->setMessage($constraint->message);
$this->context->addViolation($constraint->message);
return false;
}

View File

@ -32,7 +32,7 @@ class NotNullValidator extends ConstraintValidator
public function isValid($value, Constraint $constraint)
{
if (null === $value) {
$this->setMessage($constraint->message);
$this->context->addViolation($constraint->message);
return false;
}

View File

@ -32,7 +32,7 @@ class NullValidator extends ConstraintValidator
public function isValid($value, Constraint $constraint)
{
if (null !== $value) {
$this->setMessage($constraint->message, array('{{ value }}' => $value));
$this->context->addViolation($constraint->message, array('{{ value }}' => $value));
return false;
}

View File

@ -48,7 +48,7 @@ class RegexValidator extends ConstraintValidator
$value = (string) $value;
if ($constraint->match xor preg_match($constraint->pattern, $value)) {
$this->setMessage($constraint->message, array('{{ value }}' => $value));
$this->context->addViolation($constraint->message, array('{{ value }}' => $value));
return false;
}

View File

@ -51,7 +51,7 @@ class SizeLengthValidator extends ConstraintValidator
}
if ($constraint->min == $constraint->max && $length != $constraint->max) {
$this->setMessage($constraint->exactMessage, array(
$this->context->addViolation($constraint->exactMessage, array(
'{{ value }}' => $value,
'{{ limit }}' => $constraint->max,
));
@ -60,7 +60,7 @@ class SizeLengthValidator extends ConstraintValidator
}
if ($length > $constraint->max) {
$this->setMessage($constraint->maxMessage, array(
$this->context->addViolation($constraint->maxMessage, array(
'{{ value }}' => $value,
'{{ limit }}' => $constraint->max,
));
@ -69,7 +69,7 @@ class SizeLengthValidator extends ConstraintValidator
}
if ($length < $constraint->min) {
$this->setMessage($constraint->minMessage, array(
$this->context->addViolation($constraint->minMessage, array(
'{{ value }}' => $value,
'{{ limit }}' => $constraint->min,
));

View File

@ -36,7 +36,7 @@ class SizeValidator extends ConstraintValidator
}
if (!is_numeric($value)) {
$this->setMessage($constraint->invalidMessage, array(
$this->context->addViolation($constraint->invalidMessage, array(
'{{ value }}' => $value,
));
@ -44,7 +44,7 @@ class SizeValidator extends ConstraintValidator
}
if ($value > $constraint->max) {
$this->setMessage($constraint->maxMessage, array(
$this->context->addViolation($constraint->maxMessage, array(
'{{ value }}' => $value,
'{{ limit }}' => $constraint->max,
));
@ -53,7 +53,7 @@ class SizeValidator extends ConstraintValidator
}
if ($value < $constraint->min) {
$this->setMessage($constraint->minMessage, array(
$this->context->addViolation($constraint->minMessage, array(
'{{ value }}' => $value,
'{{ limit }}' => $constraint->min,
));

View File

@ -49,7 +49,7 @@ class TimeValidator extends ConstraintValidator
$value = (string) $value;
if (!preg_match(static::PATTERN, $value)) {
$this->setMessage($constraint->message, array('{{ value }}' => $value));
$this->context->addViolation($constraint->message, array('{{ value }}' => $value));
return false;
}

View File

@ -39,7 +39,7 @@ class TrueValidator extends ConstraintValidator
return true;
}
$this->setMessage($constraint->message);
$this->context->addViolation($constraint->message);
return false;
}

View File

@ -48,8 +48,8 @@ class TypeValidator extends ConstraintValidator
return true;
}
$this->setMessage($constraint->message, array(
'{{ value }}' => is_object($value) ? get_class($value) : is_array($value) ? 'Array' : (string) $value,
$this->context->addViolation($constraint->message, array(
'{{ value }}' => is_object($value) ? get_class($value) : (is_array($value) ? 'Array' : (string) $value),
'{{ type }}' => $constraint->type,
));

View File

@ -60,7 +60,7 @@ class UrlValidator extends ConstraintValidator
$pattern = sprintf(static::PATTERN, implode('|', $constraint->protocols));
if (!preg_match($pattern, $value)) {
$this->setMessage($constraint->message, array('{{ value }}' => $value));
$this->context->addViolation($constraint->message, array('{{ value }}' => $value));
return false;
}

View File

@ -80,7 +80,7 @@ class ExecutionContext
* @param array $params The parameters parsed into the error message.
* @param mixed $invalidValue The invalid, validated value.
*/
public function addViolationAt($propertyPath, $message, array $params = array(), $invalidValue = null)
public function addViolationAtPath($propertyPath, $message, array $params = array(), $invalidValue = null)
{
$this->globalContext->addViolation(new ConstraintViolation(
$message,
@ -93,27 +93,21 @@ class ExecutionContext
}
/**
* Adds a violation at the child of the current validation graph node with
* the given property path.
* Adds a violation at the validation graph node with the given property
* path relative to the current property path.
*
* @param string $childPropertyPath The property path of the child node.
* @param string $relativePath The relative property path for the violation.
* @param string $message The error message.
* @param array $params The parameters parsed into the error message.
* @param mixed $invalidValue The invalid, validated value.
*/
public function addNestedViolationAt($childPropertyPath, $message, array $params = array(), $invalidValue = null)
public function addViolationAtRelativePath($relativePath, $message, array $params = array(), $invalidValue = null)
{
$propertyPath = $this->propertyPath;
if ('' !== $propertyPath && '' !== $childPropertyPath && '[' !== $childPropertyPath[0]) {
$propertyPath .= '.';
}
$this->globalContext->addViolation(new ConstraintViolation(
$message,
$params,
$this->globalContext->getRoot(),
$propertyPath . $childPropertyPath,
$this->getAbsolutePropertyPath($relativePath),
// check using func_num_args() to allow passing null values
func_num_args() === 4 ? $invalidValue : $this->value
));
@ -139,6 +133,15 @@ class ExecutionContext
return $this->propertyPath;
}
public function getAbsolutePropertyPath($relativePath)
{
if ('' !== $this->propertyPath && '' !== $relativePath && '[' !== $relativePath[0]) {
return $this->propertyPath . '.' . $relativePath;
}
return $this->propertyPath . $relativePath;
}
public function getCurrentClass()
{
return $this->class;

View File

@ -178,17 +178,6 @@ class GraphWalker
);
$validator->initialize($localContext);
if (!$validator->isValid($value, $constraint)) {
$messageTemplate = $validator->getMessageTemplate();
$messageParams = $validator->getMessageParameters();
// Somewhat ugly hack: Don't add a violation if no message is set.
// This is required if the validator added its violations directly
// to the globalContext already
if (!empty($messageTemplate)) {
$localContext->addViolation($messageTemplate, $messageParams);
}
}
$validator->isValid($value, $constraint);
}
}

View File

@ -0,0 +1,35 @@
<?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 Symfony\Tests\Component\Validator;
use Symfony\Component\Validator\ConstraintViolation;
class ConstraintViolationTest extends \PHPUnit_Framework_TestCase
{
public function testToStringHandlesArrays()
{
$violation = new ConstraintViolation(
'{{ value }}',
array('{{ value }}' => array(1, 2, 3)),
'Root',
'property.path',
null
);
$expected = <<<EOF
Root.property.path:
Array
EOF;
$this->assertSame($expected, (string) $violation);
}
}

View File

@ -15,25 +15,32 @@ use Symfony\Component\Validator\GlobalExecutionContext;
use Symfony\Component\Validator\ExecutionContext;
use Symfony\Component\Validator\Constraints\Min;
use Symfony\Component\Validator\Constraints\Max;
use Symfony\Component\Validator\Constraints\All;
use Symfony\Component\Validator\Constraints\AllValidator;
class AllValidatorTest extends \PHPUnit_Framework_TestCase
{
protected $validator;
protected $walker;
protected $context;
protected $validator;
protected function setUp()
{
$this->walker = $this->getMock('Symfony\Component\Validator\GraphWalker', array(), array(), '', false);
$metadataFactory = $this->getMock('Symfony\Component\Validator\Mapping\ClassMetadataFactoryInterface');
$globalContext = new GlobalExecutionContext('Root', $this->walker, $metadataFactory);
$this->context = new ExecutionContext($globalContext, null, 'foo', 'MyGroup', null, null);
$this->context = $this->getMock('Symfony\Component\Validator\ExecutionContext', array(), array(), '', false);
$this->validator = new AllValidator();
$this->validator->initialize($this->context);
$this->context->expects($this->any())
->method('getGraphWalker')
->will($this->returnValue($this->walker));
$this->context->expects($this->any())
->method('getGroup')
->will($this->returnValue('MyGroup'));
$this->context->expects($this->any())
->method('getPropertyPath')
->will($this->returnValue('foo.bar'));
}
protected function tearDown()
@ -48,11 +55,13 @@ class AllValidatorTest extends \PHPUnit_Framework_TestCase
$this->assertTrue($this->validator->isValid(null, new All(new Min(4))));
}
/**
* @expectedException Symfony\Component\Validator\Exception\UnexpectedTypeException
*/
public function testThrowsExceptionIfNotTraversable()
{
$this->setExpectedException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
$this->validator->isValid('foobar', new All(new Min(4)));
$this->validator->isValid('foo.barbar', new All(new Min(4)));
}
/**
@ -62,12 +71,17 @@ class AllValidatorTest extends \PHPUnit_Framework_TestCase
{
$constraint = new Min(4);
$i = 0;
foreach ($array as $key => $value) {
$this->walker->expects($this->once())
->method('walkConstraint')
->with($this->equalTo($constraint), $this->equalTo($value), $this->equalTo('MyGroup'), $this->equalTo('foo['.$key.']'));
$this->walker->expects($this->at($i++))
->method('walkConstraint')
->with($constraint, $value, 'MyGroup', 'foo.bar['.$key.']');
}
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid($array, new All($constraint)));
}
@ -76,27 +90,32 @@ class AllValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testWalkMultipleConstraints($array)
{
$constraint = new Min(4);
// can only test for twice the same constraint because PHPUnits mocking
// can't test method calls with different arguments
$constraints = array($constraint, $constraint);
$constraint1 = new Min(4);
$constraint2 = new Max(6);
$constraints = array($constraint1, $constraint2);
$i = 0;
foreach ($array as $key => $value) {
$this->walker->expects($this->exactly(2))
->method('walkConstraint')
->with($this->equalTo($constraint), $this->equalTo($value), $this->equalTo('MyGroup'), $this->equalTo('foo['.$key.']'));
$this->walker->expects($this->at($i++))
->method('walkConstraint')
->with($constraint1, $value, 'MyGroup', 'foo.bar['.$key.']');
$this->walker->expects($this->at($i++))
->method('walkConstraint')
->with($constraint2, $value, 'MyGroup', 'foo.bar['.$key.']');
}
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid($array, new All($constraints)));
}
public function getValidArguments()
{
return array(
// can only test for one entry, because PHPUnits mocking does not allow
// to expect multiple method calls with different arguments
array(array(1)),
array(new \ArrayObject(array(1))),
array(array(5, 6, 7)),
array(new \ArrayObject(array(5, 6, 7))),
);
}
}

View File

@ -16,34 +16,54 @@ use Symfony\Component\Validator\Constraints\BlankValidator;
class BlankValidatorTest extends \PHPUnit_Framework_TestCase
{
protected $context;
protected $validator;
protected function setUp()
{
$this->context = $this->getMock('Symfony\Component\Validator\ExecutionContext', array(), array(), '', false);
$this->validator = new BlankValidator();
$this->validator->initialize($this->context);
}
protected function tearDown()
{
$this->context = null;
$this->validator = null;
}
public function testNullIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(null, new Blank()));
}
public function testBlankIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid('', new Blank()));
}
/**
* @dataProvider getInvalidValues
*/
public function testInvalidValues($date)
public function testInvalidValues($value)
{
$this->assertFalse($this->validator->isValid($date, new Blank()));
$constraint = new Blank(array(
'message' => 'myMessage'
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => $value,
));
$this->assertFalse($this->validator->isValid($value, $constraint));
}
public function getInvalidValues()
@ -55,17 +75,4 @@ class BlankValidatorTest extends \PHPUnit_Framework_TestCase
array(1234),
);
}
public function testMessageIsSet()
{
$constraint = new Blank(array(
'message' => 'myMessage'
));
$this->assertFalse($this->validator->isValid('foobar', $constraint));
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
$this->assertEquals($this->validator->getMessageParameters(), array(
'{{ value }}' => 'foobar',
));
}
}

View File

@ -22,7 +22,9 @@ class CallbackValidatorTest_Class
{
public static function validateStatic($object, ExecutionContext $context)
{
$context->addViolation('Static message', array('parameter'), 'invalidValue');
$context->addViolation('Static message', array('{{ value }}' => 'foobar'), 'invalidValue');
return false;
}
}
@ -30,107 +32,93 @@ class CallbackValidatorTest_Object
{
public function validateOne(ExecutionContext $context)
{
$context->addViolation('My message', array('parameter'), 'invalidValue');
$context->addViolation('My message', array('{{ value }}' => 'foobar'), 'invalidValue');
return false;
}
public function validateTwo(ExecutionContext $context)
{
$context->addViolation('Other message', array('other parameter'), 'otherInvalidValue');
$context->addViolation('Other message', array('{{ value }}' => 'baz'), 'otherInvalidValue');
return false;
}
}
class CallbackValidatorTest extends \PHPUnit_Framework_TestCase
{
protected $validator;
protected $walker;
protected $context;
protected $validator;
protected function setUp()
{
$this->walker = $this->getMock('Symfony\Component\Validator\GraphWalker', array(), array(), '', false);
$metadataFactory = $this->getMock('Symfony\Component\Validator\Mapping\ClassMetadataFactoryInterface');
$globalContext = new GlobalExecutionContext('Root', $this->walker, $metadataFactory);
$this->context = new ExecutionContext($globalContext, 'value', 'foo.bar', 'Group', 'ClassName', 'propertyName');
$this->context = $this->getMock('Symfony\Component\Validator\ExecutionContext', array(), array(), '', false);
$this->validator = new CallbackValidator();
$this->validator->initialize($this->context);
}
protected function tearDown()
{
$this->validator = null;
$this->walker = null;
$this->context = null;
$this->validator = null;
}
public function testNullIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(null, new Callback(array('foo'))));
}
public function testCallbackSingleMethod()
{
$object = new CallbackValidatorTest_Object();
$constraint = new Callback(array('validateOne'));
$this->assertTrue($this->validator->isValid($object, new Callback(array('validateOne'))));
$this->context->expects($this->once())
->method('addViolation')
->with('My message', array(
'{{ value }}' => 'foobar',
));
$violations = new ConstraintViolationList();
$violations->add(new ConstraintViolation(
'My message',
array('parameter'),
'Root',
'foo.bar',
'invalidValue'
));
$this->assertEquals($violations, $this->context->getViolations());
$this->assertFalse($this->validator->isValid($object, $constraint));
}
public function testCallbackSingleStaticMethod()
{
$object = new CallbackValidatorTest_Object();
$this->assertTrue($this->validator->isValid($object, new Callback(array(
array(__NAMESPACE__.'\CallbackValidatorTest_Class', 'validateStatic')
$this->context->expects($this->once())
->method('addViolation')
->with('Static message', array(
'{{ value }}' => 'foobar',
));
$this->assertFalse($this->validator->isValid($object, new Callback(array(
array(__CLASS__.'_Class', 'validateStatic')
))));
$violations = new ConstraintViolationList();
$violations->add(new ConstraintViolation(
'Static message',
array('parameter'),
'Root',
'foo.bar',
'invalidValue'
));
$this->assertEquals($violations, $this->context->getViolations());
}
public function testCallbackMultipleMethods()
{
$object = new CallbackValidatorTest_Object();
$this->assertTrue($this->validator->isValid($object, new Callback(array(
$this->context->expects($this->at(0))
->method('addViolation')
->with('My message', array(
'{{ value }}' => 'foobar',
));
$this->context->expects($this->at(1))
->method('addViolation')
->with('Other message', array(
'{{ value }}' => 'baz',
));
$this->assertFalse($this->validator->isValid($object, new Callback(array(
'validateOne', 'validateTwo'
))));
$violations = new ConstraintViolationList();
$violations->add(new ConstraintViolation(
'My message',
array('parameter'),
'Root',
'foo.bar',
'invalidValue'
));
$violations->add(new ConstraintViolation(
'Other message',
array('other parameter'),
'Root',
'foo.bar',
'otherInvalidValue'
));
$this->assertEquals($violations, $this->context->getViolations());
}
/**

View File

@ -24,6 +24,7 @@ function choice_callback()
class ChoiceValidatorTest extends \PHPUnit_Framework_TestCase
{
protected $context;
protected $validator;
public static function staticCallback()
@ -33,19 +34,24 @@ class ChoiceValidatorTest extends \PHPUnit_Framework_TestCase
protected function setUp()
{
$walker = $this->getMock('Symfony\Component\Validator\GraphWalker', array(), array(), '', false);
$factory = $this->getMock('Symfony\Component\Validator\Mapping\ClassMetadataFactoryInterface');
$globalContext = new GlobalExecutionContext('root', $walker, $factory);
$context = new ExecutionContext($globalContext, null, null, null, __CLASS__, null);
$this->context = $this->getMock('Symfony\Component\Validator\ExecutionContext', array(), array(), '', false);
$this->validator = new ChoiceValidator();
$this->validator->initialize($context);
$this->validator->initialize($this->context);
$this->context->expects($this->any())
->method('getCurrentClass')
->will($this->returnValue(__CLASS__));
}
protected function tearDown()
{
$this->context = null;
$this->validator = null;
}
/**
* @expectedException Symfony\Component\Validator\Exception\UnexpectedTypeException
*/
public function testExpectArrayIfMultipleIsTrue()
{
$constraint = new Choice(array(
@ -53,27 +59,30 @@ class ChoiceValidatorTest extends \PHPUnit_Framework_TestCase
'multiple' => true,
));
$this->setExpectedException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
$this->validator->isValid('asdf', $constraint);
}
public function testNullIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(null, new Choice(array('choices' => array('foo', 'bar')))));
}
/**
* @expectedException Symfony\Component\Validator\Exception\ConstraintDefinitionException
*/
public function testChoicesOrCallbackExpected()
{
$this->setExpectedException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
$this->validator->isValid('foobar', new Choice());
}
/**
* @expectedException Symfony\Component\Validator\Exception\ConstraintDefinitionException
*/
public function testValidCallbackExpected()
{
$this->setExpectedException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
$this->validator->isValid('foobar', new Choice(array('callback' => 'abcd')));
}
@ -81,6 +90,9 @@ class ChoiceValidatorTest extends \PHPUnit_Framework_TestCase
{
$constraint = new Choice(array('choices' => array('foo', 'bar')));
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid('bar', $constraint));
}
@ -88,6 +100,9 @@ class ChoiceValidatorTest extends \PHPUnit_Framework_TestCase
{
$constraint = new Choice(array('callback' => __NAMESPACE__.'\choice_callback'));
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid('bar', $constraint));
}
@ -97,6 +112,9 @@ class ChoiceValidatorTest extends \PHPUnit_Framework_TestCase
return array('foo', 'bar');
}));
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid('bar', $constraint));
}
@ -104,6 +122,9 @@ class ChoiceValidatorTest extends \PHPUnit_Framework_TestCase
{
$constraint = new Choice(array('callback' => array(__CLASS__, 'staticCallback')));
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid('bar', $constraint));
}
@ -111,6 +132,9 @@ class ChoiceValidatorTest extends \PHPUnit_Framework_TestCase
{
$constraint = new Choice(array('callback' => 'staticCallback'));
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid('bar', $constraint));
}
@ -121,6 +145,9 @@ class ChoiceValidatorTest extends \PHPUnit_Framework_TestCase
'multiple' => true,
));
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(array('baz', 'bar'), $constraint));
}
@ -131,11 +158,13 @@ class ChoiceValidatorTest extends \PHPUnit_Framework_TestCase
'message' => 'myMessage',
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => 'baz',
));
$this->assertFalse($this->validator->isValid('baz', $constraint));
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
$this->assertEquals($this->validator->getMessageParameters(), array(
'{{ value }}' => 'baz',
));
}
public function testInvalidChoiceMultiple()
@ -146,11 +175,13 @@ class ChoiceValidatorTest extends \PHPUnit_Framework_TestCase
'multiple' => true,
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => 'baz',
));
$this->assertFalse($this->validator->isValid(array('foo', 'baz'), $constraint));
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
$this->assertEquals($this->validator->getMessageParameters(), array(
'{{ value }}' => 'baz',
));
}
public function testTooFewChoices()
@ -162,11 +193,13 @@ class ChoiceValidatorTest extends \PHPUnit_Framework_TestCase
'minMessage' => 'myMessage',
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ limit }}' => 2,
));
$this->assertFalse($this->validator->isValid(array('foo'), $constraint));
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
$this->assertEquals($this->validator->getMessageParameters(), array(
'{{ limit }}' => 2,
));
}
public function testTooManyChoices()
@ -178,36 +211,60 @@ class ChoiceValidatorTest extends \PHPUnit_Framework_TestCase
'maxMessage' => 'myMessage',
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ limit }}' => 2,
));
$this->assertFalse($this->validator->isValid(array('foo', 'bar', 'moo'), $constraint));
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
$this->assertEquals($this->validator->getMessageParameters(), array(
'{{ limit }}' => 2,
));
}
public function testStrictIsFalse()
public function testNonStrict()
{
$constraint = new Choice(array(
'choices' => array(1, 2),
'strict' => false,
));
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid('2', $constraint));
$this->assertTrue($this->validator->isValid(2, $constraint));
}
public function testStrictIsTrue()
public function testStrictAllowsExactValue()
{
$constraint = new Choice(array(
'choices' => array(1, 2),
'strict' => true,
));
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(2, $constraint));
}
public function testStrictDisallowsDifferentType()
{
$constraint = new Choice(array(
'choices' => array(1, 2),
'strict' => true,
'message' => 'myMessage'
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => '2',
));
$this->assertFalse($this->validator->isValid('2', $constraint));
}
public function testStrictIsFalseWhenMultipleChoices()
public function testNonStrictWithMultipleChoices()
{
$constraint = new Choice(array(
'choices' => array(1, 2, 3),
@ -215,17 +272,27 @@ class ChoiceValidatorTest extends \PHPUnit_Framework_TestCase
'strict' => false
));
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(array('2', 3), $constraint));
}
public function testStrictIsTrueWhenMultipleChoices()
public function testStrictWithMultipleChoices()
{
$constraint = new Choice(array(
'choices' => array(1, 2, 3),
'multiple' => true,
'strict' => true
'strict' => true,
'multipleMessage' => 'myMessage',
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => '3',
));
$this->assertFalse($this->validator->isValid(array(2, '3'), $constraint));
}
}

View File

@ -25,35 +25,42 @@ use Symfony\Component\Validator\Constraints\CollectionValidator;
abstract class CollectionValidatorTest extends \PHPUnit_Framework_TestCase
{
protected $validator;
protected $walker;
protected $globalContext;
protected $context;
protected $validator;
protected function setUp()
{
$this->walker = $this->getMock('Symfony\Component\Validator\GraphWalker', array(), array(), '', false);
$metadataFactory = $this->getMock('Symfony\Component\Validator\Mapping\ClassMetadataFactoryInterface');
$this->globalContext = new GlobalExecutionContext('Root', $this->walker, $metadataFactory);
$this->context = new ExecutionContext($this->globalContext, 'value', 'bar', 'MyGroup', 'ClassName', 'propertyName');
$this->context = $this->getMock('Symfony\Component\Validator\ExecutionContext', array(), array(), '', false);
$this->validator = new CollectionValidator();
$this->validator->initialize($this->context);
$this->context->expects($this->any())
->method('getGraphWalker')
->will($this->returnValue($this->walker));
$this->context->expects($this->any())
->method('getGroup')
->will($this->returnValue('MyGroup'));
$this->context->expects($this->any())
->method('getPropertyPath')
->will($this->returnValue('foo.bar'));
}
protected function tearDown()
{
$this->validator = null;
$this->walker = null;
$this->globalContext = null;
$this->context = null;
$this->validator = null;
}
abstract protected function prepareTestData(array $contents);
public function testNullIsValid()
{
$this->context->expects($this->never())
->method('addViolationAtRelativePath');
$this->assertTrue($this->validator->isValid(null, new Collection(array('fields' => array(
'foo' => new Min(4),
)))));
@ -63,6 +70,9 @@ abstract class CollectionValidatorTest extends \PHPUnit_Framework_TestCase
{
$data = $this->prepareTestData(array('foo' => 'foobar'));
$this->context->expects($this->never())
->method('addViolationAtRelativePath');
$this->assertTrue($this->validator->isValid($data, new Collection(array(
'foo' => new Min(4),
))));
@ -82,19 +92,27 @@ abstract class CollectionValidatorTest extends \PHPUnit_Framework_TestCase
{
$constraint = new Min(4);
$array = array('foo' => 3);
$array = array(
'foo' => 3,
'bar' => 5,
);
$i = 0;
foreach ($array as $key => $value) {
$this->walker->expects($this->once())
$this->walker->expects($this->at($i++))
->method('walkConstraint')
->with($this->equalTo($constraint), $this->equalTo($value), $this->equalTo('MyGroup'), $this->equalTo('bar['.$key.']'));
->with($constraint, $value, 'MyGroup', 'foo.bar['.$key.']');
}
$data = $this->prepareTestData($array);
$this->context->expects($this->never())
->method('addViolationAtRelativePath');
$this->assertTrue($this->validator->isValid($data, new Collection(array(
'fields' => array(
'foo' => $constraint,
'bar' => $constraint,
),
))));
}
@ -105,21 +123,30 @@ abstract class CollectionValidatorTest extends \PHPUnit_Framework_TestCase
new Min(4),
new NotNull(),
);
$array = array('foo' => 3);
$array = array(
'foo' => 3,
'bar' => 5,
);
$i = 0;
foreach ($array as $key => $value) {
foreach ($constraints as $i => $constraint) {
$this->walker->expects($this->at($i))
foreach ($constraints as $constraint) {
$this->walker->expects($this->at($i++))
->method('walkConstraint')
->with($this->equalTo($constraint), $this->equalTo($value), $this->equalTo('MyGroup'), $this->equalTo('bar['.$key.']'));
->with($constraint, $value, 'MyGroup', 'foo.bar['.$key.']');
}
}
$data = $this->prepareTestData($array);
$this->context->expects($this->never())
->method('addViolationAtRelativePath');
$this->assertTrue($this->validator->isValid($data, new Collection(array(
'fields' => array(
'foo' => $constraints,
'bar' => $constraints,
)
))));
}
@ -131,21 +158,18 @@ abstract class CollectionValidatorTest extends \PHPUnit_Framework_TestCase
'baz' => 6,
));
$this->context->expects($this->once())
->method('addViolationAtRelativePath')
->with('[baz]', 'myMessage', array(
'{{ field }}' => 'baz'
));
$this->assertFalse($this->validator->isValid($data, new Collection(array(
'fields' => array(
'foo' => new Min(4),
),
'extraFieldsMessage' => 'myMessage',
))));
$this->assertEquals(new ConstraintViolationList(array(
new ConstraintViolation(
'This field was not expected',
array('{{ field }}' => '"baz"'),
'Root',
'bar[baz]',
6
),
)), $this->context->getViolations());
}
// bug fix
@ -154,13 +178,17 @@ abstract class CollectionValidatorTest extends \PHPUnit_Framework_TestCase
$data = $this->prepareTestData(array(
'foo' => null,
));
$collection = new Collection(array(
$constraint = new Collection(array(
'fields' => array(
'foo' => new Min(4),
),
));
$this->assertTrue($this->validator->isValid($data, $collection));
$this->context->expects($this->never())
->method('addViolationAtRelativePath');
$this->assertTrue($this->validator->isValid($data, $constraint));
}
public function testExtraFieldsAllowed()
@ -169,47 +197,55 @@ abstract class CollectionValidatorTest extends \PHPUnit_Framework_TestCase
'foo' => 5,
'bar' => 6,
));
$collection = new Collection(array(
$constraint = new Collection(array(
'fields' => array(
'foo' => new Min(4),
),
'allowExtraFields' => true,
));
$this->assertTrue($this->validator->isValid($data, $collection));
$this->context->expects($this->never())
->method('addViolationAtRelativePath');
$this->assertTrue($this->validator->isValid($data, $constraint));
}
public function testMissingFieldsDisallowed()
{
$data = $this->prepareTestData(array());
$this->assertFalse($this->validator->isValid($data, new Collection(array(
$constraint = new Collection(array(
'fields' => array(
'foo' => new Min(4),
),
))));
'missingFieldsMessage' => 'myMessage',
));
$this->assertEquals(new ConstraintViolationList(array(
new ConstraintViolation(
'This field is missing',
array('{{ field }}' => '"foo"'),
'Root',
'bar[foo]',
null
),
)), $this->context->getViolations());
$this->context->expects($this->once())
->method('addViolationAtRelativePath')
->with('[foo]', 'myMessage', array(
'{{ field }}' => 'foo',
));
$this->assertFalse($this->validator->isValid($data, $constraint));
}
public function testMissingFieldsAllowed()
{
$data = $this->prepareTestData(array());
$this->assertTrue($this->validator->isValid($data, new Collection(array(
$constraint = new Collection(array(
'fields' => array(
'foo' => new Min(4),
),
'allowMissingFields' => true,
))));
));
$this->context->expects($this->never())
->method('addViolationAtRelativePath');
$this->assertTrue($this->validator->isValid($data, $constraint));
}
public function testOptionalFieldPresent()
@ -218,6 +254,9 @@ abstract class CollectionValidatorTest extends \PHPUnit_Framework_TestCase
'foo' => null,
));
$this->context->expects($this->never())
->method('addViolationAtRelativePath');
$this->assertTrue($this->validator->isValid($data, new Collection(array(
'foo' => new Optional(),
))));
@ -227,6 +266,9 @@ abstract class CollectionValidatorTest extends \PHPUnit_Framework_TestCase
{
$data = $this->prepareTestData(array());
$this->context->expects($this->never())
->method('addViolationAtRelativePath');
$this->assertTrue($this->validator->isValid($data, new Collection(array(
'foo' => new Optional(),
))));
@ -242,7 +284,10 @@ abstract class CollectionValidatorTest extends \PHPUnit_Framework_TestCase
$this->walker->expects($this->once())
->method('walkConstraint')
->with($this->equalTo($constraint), $this->equalTo($array['foo']), $this->equalTo('MyGroup'), $this->equalTo('bar[foo]'));
->with($constraint, $array['foo'], 'MyGroup', 'foo.bar[foo]');
$this->context->expects($this->never())
->method('addViolationAtRelativePath');
$data = $this->prepareTestData($array);
@ -265,9 +310,12 @@ abstract class CollectionValidatorTest extends \PHPUnit_Framework_TestCase
foreach ($constraints as $i => $constraint) {
$this->walker->expects($this->at($i))
->method('walkConstraint')
->with($this->equalTo($constraint), $this->equalTo($array['foo']), $this->equalTo('MyGroup'), $this->equalTo('bar[foo]'));
->with($constraint, $array['foo'], 'MyGroup', 'foo.bar[foo]');
}
$this->context->expects($this->never())
->method('addViolationAtRelativePath');
$data = $this->prepareTestData($array);
$this->assertTrue($this->validator->isValid($data, new Collection(array(
@ -281,6 +329,9 @@ abstract class CollectionValidatorTest extends \PHPUnit_Framework_TestCase
'foo' => null,
));
$this->context->expects($this->never())
->method('addViolationAtRelativePath');
$this->assertTrue($this->validator->isValid($data, new Collection(array(
'foo' => new Required(),
))));
@ -290,8 +341,17 @@ abstract class CollectionValidatorTest extends \PHPUnit_Framework_TestCase
{
$data = $this->prepareTestData(array());
$this->context->expects($this->once())
->method('addViolationAtRelativePath')
->with('[foo]', 'myMessage', array(
'{{ field }}' => 'foo',
));
$this->assertFalse($this->validator->isValid($data, new Collection(array(
'foo' => new Required(),
'fields' => array(
'foo' => new Required(),
),
'missingFieldsMessage' => 'myMessage',
))));
}
@ -305,7 +365,10 @@ abstract class CollectionValidatorTest extends \PHPUnit_Framework_TestCase
$this->walker->expects($this->once())
->method('walkConstraint')
->with($this->equalTo($constraint), $this->equalTo($array['foo']), $this->equalTo('MyGroup'), $this->equalTo('bar[foo]'));
->with($constraint, $array['foo'], 'MyGroup', 'foo.bar[foo]');
$this->context->expects($this->never())
->method('addViolationAtRelativePath');
$data = $this->prepareTestData($array);
@ -328,9 +391,12 @@ abstract class CollectionValidatorTest extends \PHPUnit_Framework_TestCase
foreach ($constraints as $i => $constraint) {
$this->walker->expects($this->at($i))
->method('walkConstraint')
->with($this->equalTo($constraint), $this->equalTo($array['foo']), $this->equalTo('MyGroup'), $this->equalTo('bar[foo]'));
->with($constraint, $array['foo'], 'MyGroup', 'foo.bar[foo]');
}
$this->context->expects($this->never())
->method('addViolationAtRelativePath');
$data = $this->prepareTestData($array);
$this->assertTrue($this->validator->isValid($array, new Collection(array(
@ -343,6 +409,7 @@ abstract class CollectionValidatorTest extends \PHPUnit_Framework_TestCase
$value = new \ArrayObject(array(
'foo' => 3
));
$this->validator->isValid($value, new Collection(array(
'fields' => array(
'foo' => new Min(2),

View File

@ -16,43 +16,57 @@ use Symfony\Component\Validator\Constraints\CountryValidator;
class CountryValidatorTest extends LocalizedTestCase
{
protected $context;
protected $validator;
protected function setUp()
{
parent::setUp();
$this->context = $this->getMock('Symfony\Component\Validator\ExecutionContext', array(), array(), '', false);
$this->validator = new CountryValidator();
$this->validator->initialize($this->context);
}
protected function tearDown()
{
$this->context = null;
$this->validator = null;
}
public function testNullIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(null, new Country()));
}
public function testEmptyStringIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid('', new Country()));
}
/**
* @expectedException Symfony\Component\Validator\Exception\UnexpectedTypeException
*/
public function testExpectsStringCompatibleType()
{
$this->setExpectedException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
$this->validator->isValid(new \stdClass(), new Country());
}
/**
* @dataProvider getValidCountries
*/
public function testValidCountries($date)
public function testValidCountries($country)
{
$this->assertTrue($this->validator->isValid($date, new Country()));
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid($country, new Country()));
}
public function getValidCountries()
@ -67,9 +81,19 @@ class CountryValidatorTest extends LocalizedTestCase
/**
* @dataProvider getInvalidCountries
*/
public function testInvalidCountries($date)
public function testInvalidCountries($country)
{
$this->assertFalse($this->validator->isValid($date, new Country()));
$constraint = new Country(array(
'message' => 'myMessage'
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => $country,
));
$this->assertFalse($this->validator->isValid($country, $constraint));
}
public function getInvalidCountries()
@ -79,17 +103,4 @@ class CountryValidatorTest extends LocalizedTestCase
array('EN'),
);
}
public function testMessageIsSet()
{
$constraint = new Country(array(
'message' => 'myMessage'
));
$this->assertFalse($this->validator->isValid('foobar', $constraint));
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
$this->assertEquals($this->validator->getMessageParameters(), array(
'{{ value }}' => 'foobar',
));
}
}

View File

@ -16,46 +16,63 @@ use Symfony\Component\Validator\Constraints\DateTimeValidator;
class DateTimeValidatorTest extends \PHPUnit_Framework_TestCase
{
protected $context;
protected $validator;
protected function setUp()
{
$this->context = $this->getMock('Symfony\Component\Validator\ExecutionContext', array(), array(), '', false);
$this->validator = new DateTimeValidator();
$this->validator->initialize($this->context);
}
protected function tearDown()
{
$this->context = null;
$this->validator = null;
}
public function testNullIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(null, new DateTime()));
}
public function testEmptyStringIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid('', new DateTime()));
}
public function testDateTimeClassIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(new \DateTime(), new DateTime()));
}
/**
* @expectedException Symfony\Component\Validator\Exception\UnexpectedTypeException
*/
public function testExpectsStringCompatibleType()
{
$this->setExpectedException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
$this->validator->isValid(new \stdClass(), new DateTime());
}
/**
* @dataProvider getValidDateTimes
*/
public function testValidDateTimes($date)
public function testValidDateTimes($dateTime)
{
$this->assertTrue($this->validator->isValid($date, new DateTime()));
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid($dateTime, new DateTime()));
}
public function getValidDateTimes()
@ -70,9 +87,19 @@ class DateTimeValidatorTest extends \PHPUnit_Framework_TestCase
/**
* @dataProvider getInvalidDateTimes
*/
public function testInvalidDateTimes($date)
public function testInvalidDateTimes($dateTime)
{
$this->assertFalse($this->validator->isValid($date, new DateTime()));
$constraint = new DateTime(array(
'message' => 'myMessage'
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => $dateTime,
));
$this->assertFalse($this->validator->isValid($dateTime, $constraint));
}
public function getInvalidDateTimes()
@ -90,17 +117,4 @@ class DateTimeValidatorTest extends \PHPUnit_Framework_TestCase
array('2010-01-01 00:00:60'),
);
}
public function testMessageIsSet()
{
$constraint = new DateTime(array(
'message' => 'myMessage'
));
$this->assertFalse($this->validator->isValid('foobar', $constraint));
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
$this->assertEquals($this->validator->getMessageParameters(), array(
'{{ value }}' => 'foobar',
));
}
}

View File

@ -16,37 +16,51 @@ use Symfony\Component\Validator\Constraints\DateValidator;
class DateValidatorTest extends \PHPUnit_Framework_TestCase
{
protected $context;
protected $validator;
protected function setUp()
{
$this->context = $this->getMock('Symfony\Component\Validator\ExecutionContext', array(), array(), '', false);
$this->validator = new DateValidator();
$this->validator->initialize($this->context);
}
protected function tearDown()
{
$this->context = null;
$this->validator = null;
}
public function testNullIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(null, new Date()));
}
public function testEmptyStringIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid('', new Date()));
}
public function testDateTimeClassIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(new \DateTime(), new Date()));
}
/**
* @expectedException Symfony\Component\Validator\Exception\UnexpectedTypeException
*/
public function testExpectsStringCompatibleType()
{
$this->setExpectedException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
$this->validator->isValid(new \stdClass(), new Date());
}
@ -55,6 +69,9 @@ class DateValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testValidDates($date)
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid($date, new Date()));
}
@ -72,7 +89,17 @@ class DateValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testInvalidDates($date)
{
$this->assertFalse($this->validator->isValid($date, new Date()));
$constraint = new Date(array(
'message' => 'myMessage'
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => $date,
));
$this->assertFalse($this->validator->isValid($date, $constraint));
}
public function getInvalidDates()
@ -86,17 +113,4 @@ class DateValidatorTest extends \PHPUnit_Framework_TestCase
array('2010-02-29'),
);
}
public function testMessageIsSet()
{
$constraint = new Date(array(
'message' => 'myMessage'
));
$this->assertFalse($this->validator->isValid('foobar', $constraint));
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
$this->assertEquals($this->validator->getMessageParameters(), array(
'{{ value }}' => 'foobar',
));
}
}

View File

@ -16,32 +16,43 @@ use Symfony\Component\Validator\Constraints\EmailValidator;
class EmailValidatorTest extends \PHPUnit_Framework_TestCase
{
protected $context;
protected $validator;
protected function setUp()
{
$this->context = $this->getMock('Symfony\Component\Validator\ExecutionContext', array(), array(), '', false);
$this->validator = new EmailValidator();
$this->validator->initialize($this->context);
}
protected function tearDown()
{
$this->context = null;
$this->validator = null;
}
public function testNullIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(null, new Email()));
}
public function testEmptyStringIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid('', new Email()));
}
/**
* @expectedException Symfony\Component\Validator\Exception\UnexpectedTypeException
*/
public function testExpectsStringCompatibleType()
{
$this->setExpectedException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
$this->validator->isValid(new \stdClass(), new Email());
}
@ -50,6 +61,9 @@ class EmailValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testValidEmails($email)
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid($email, new Email()));
}
@ -67,7 +81,17 @@ class EmailValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testInvalidEmails($email)
{
$this->assertFalse($this->validator->isValid($email, new Email()));
$constraint = new Email(array(
'message' => 'myMessage'
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => $email,
));
$this->assertFalse($this->validator->isValid($email, $constraint));
}
public function getInvalidEmails()
@ -79,17 +103,4 @@ class EmailValidatorTest extends \PHPUnit_Framework_TestCase
array('example@example.com@example.com'),
);
}
public function testMessageIsSet()
{
$constraint = new Email(array(
'message' => 'myMessage'
));
$this->assertFalse($this->validator->isValid('foobar', $constraint));
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
$this->assertEquals($this->validator->getMessageParameters(), array(
'{{ value }}' => 'foobar',
));
}
}

View File

@ -16,25 +16,35 @@ use Symfony\Component\Validator\Constraints\FalseValidator;
class FalseValidatorTest extends \PHPUnit_Framework_TestCase
{
protected $context;
protected $validator;
protected function setUp()
{
$this->context = $this->getMock('Symfony\Component\Validator\ExecutionContext', array(), array(), '', false);
$this->validator = new FalseValidator();
$this->validator->initialize($this->context);
}
protected function tearDown()
{
$this->context = null;
$this->validator = null;
}
public function testNullIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(null, new False()));
}
public function testFalseIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(false, new False()));
}
@ -44,8 +54,10 @@ class FalseValidatorTest extends \PHPUnit_Framework_TestCase
'message' => 'myMessage'
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array());
$this->assertFalse($this->validator->isValid(true, $constraint));
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
$this->assertEquals($this->validator->getMessageParameters(), array());
}
}

View File

@ -0,0 +1,22 @@
<?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 Symfony\Tests\Component\Validator\Constraints;
use Symfony\Component\HttpFoundation\File\File;
class FileValidatorObjectTest extends FileValidatorTest
{
protected function getFile($filename)
{
return new File($filename);
}
}

View File

@ -0,0 +1,37 @@
<?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 Symfony\Tests\Component\Validator\Constraints;
use Symfony\Component\Validator\Constraints\File;
class FileValidatorPathTest extends FileValidatorTest
{
protected function getFile($filename)
{
return $filename;
}
public function testFileNotFound()
{
$constraint = new File(array(
'notFoundMessage' => 'myMessage',
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ file }}' => 'foobar',
));
$this->assertFalse($this->validator->isValid('foobar', $constraint));
}
}

View File

@ -16,15 +16,18 @@ use Symfony\Component\Validator\Constraints\FileValidator;
use Symfony\Component\HttpFoundation\File\File as FileObject;
use Symfony\Component\HttpFoundation\File\UploadedFile;
class FileValidatorTest extends \PHPUnit_Framework_TestCase
abstract class FileValidatorTest extends \PHPUnit_Framework_TestCase
{
protected $context;
protected $validator;
protected $path;
protected $file;
protected function setUp()
{
$this->context = $this->getMock('Symfony\Component\Validator\ExecutionContext', array(), array(), '', false);
$this->validator = new FileValidator();
$this->validator->initialize($this->context);
$this->path = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'FileValidatorTest';
$this->file = fopen($this->path, 'w');
}
@ -33,6 +36,7 @@ class FileValidatorTest extends \PHPUnit_Framework_TestCase
{
fclose($this->file);
$this->context = null;
$this->validator = null;
$this->path = null;
$this->file = null;
@ -40,11 +44,17 @@ class FileValidatorTest extends \PHPUnit_Framework_TestCase
public function testNullIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(null, new File()));
}
public function testEmptyStringIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid('', new File()));
}
@ -58,11 +68,17 @@ class FileValidatorTest extends \PHPUnit_Framework_TestCase
public function testValidFile()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid($this->path, new File()));
}
public function testValidUploadedfile()
{
$this->context->expects($this->never())
->method('addViolation');
$file = new UploadedFile($this->path, 'originalName');
$this->assertTrue($this->validator->isValid($file, new File()));
}
@ -76,13 +92,15 @@ class FileValidatorTest extends \PHPUnit_Framework_TestCase
'maxSizeMessage' => 'myMessage',
));
$this->assertFileValid($this->path, $constraint, false);
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
$this->assertEquals($this->validator->getMessageParameters(), array(
'{{ limit }}' => '10 bytes',
'{{ size }}' => '11 bytes',
'{{ file }}' => $this->path,
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ limit }}' => '10 bytes',
'{{ size }}' => '11 bytes',
'{{ file }}' => $this->path,
));
$this->assertFalse($this->validator->isValid($this->getFile($this->path), $constraint));
}
public function testTooLargeKiloBytes()
@ -94,13 +112,15 @@ class FileValidatorTest extends \PHPUnit_Framework_TestCase
'maxSizeMessage' => 'myMessage',
));
$this->assertFileValid($this->path, $constraint, false);
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
$this->assertEquals($this->validator->getMessageParameters(), array(
'{{ limit }}' => '1 kB',
'{{ size }}' => '1.4 kB',
'{{ file }}' => $this->path,
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ limit }}' => '1 kB',
'{{ size }}' => '1.4 kB',
'{{ file }}' => $this->path,
));
$this->assertFalse($this->validator->isValid($this->getFile($this->path), $constraint));
}
public function testTooLargeMegaBytes()
@ -112,13 +132,15 @@ class FileValidatorTest extends \PHPUnit_Framework_TestCase
'maxSizeMessage' => 'myMessage',
));
$this->assertFileValid($this->path, $constraint, false);
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
$this->assertEquals($this->validator->getMessageParameters(), array(
'{{ limit }}' => '1 MB',
'{{ size }}' => '1.4 MB',
'{{ file }}' => $this->path,
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ limit }}' => '1 MB',
'{{ size }}' => '1.4 MB',
'{{ file }}' => $this->path,
));
$this->assertFalse($this->validator->isValid($this->getFile($this->path), $constraint));
}
/**
@ -133,19 +155,6 @@ class FileValidatorTest extends \PHPUnit_Framework_TestCase
$this->validator->isValid($this->path, $constraint);
}
public function testFileNotFound()
{
$constraint = new File(array(
'notFoundMessage' => 'myMessage',
));
$this->assertFileValid('foobar', $constraint, false);
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
$this->assertEquals($this->validator->getMessageParameters(), array(
'{{ file }}' => 'foobar',
));
}
public function testValidMimeType()
{
$file = $this
@ -164,6 +173,9 @@ class FileValidatorTest extends \PHPUnit_Framework_TestCase
->will($this->returnValue('image/jpg'))
;
$this->context->expects($this->never())
->method('addViolation');
$constraint = new File(array(
'mimeTypes' => array('image/png', 'image/jpg'),
));
@ -189,6 +201,9 @@ class FileValidatorTest extends \PHPUnit_Framework_TestCase
->will($this->returnValue('image/jpg'))
;
$this->context->expects($this->never())
->method('addViolation');
$constraint = new File(array(
'mimeTypes' => array('image/*'),
));
@ -219,13 +234,15 @@ class FileValidatorTest extends \PHPUnit_Framework_TestCase
'mimeTypesMessage' => 'myMessage',
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ type }}' => '"application/pdf"',
'{{ types }}' => '"image/png", "image/jpg"',
'{{ file }}' => $this->path,
));
$this->assertFalse($this->validator->isValid($file, $constraint));
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
$this->assertEquals($this->validator->getMessageParameters(), array(
'{{ type }}' => '"application/pdf"',
'{{ types }}' => '"image/png", "image/jpg"',
'{{ file }}' => $this->path,
));
}
public function testInvalidWildcardMimeType()
@ -251,35 +268,40 @@ class FileValidatorTest extends \PHPUnit_Framework_TestCase
'mimeTypesMessage' => 'myMessage',
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ type }}' => '"application/pdf"',
'{{ types }}' => '"image/*", "image/jpg"',
'{{ file }}' => $this->path,
));
$this->assertFalse($this->validator->isValid($file, $constraint));
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
$this->assertEquals($this->validator->getMessageParameters(), array(
'{{ type }}' => '"application/pdf"',
'{{ types }}' => '"image/*", "image/jpg"',
'{{ file }}' => $this->path,
));
}
/**
* @dataProvider uploadedFileErrorProvider
*/
public function testUploadedFileError($error, $message)
public function testUploadedFileError($error, $message, array $params = array())
{
$file = new UploadedFile('/path/to/file', 'originalName', 'mime', 0, $error);
$options[$message] = 'myMessage';
$constraint = new File(array(
$message => 'myMessage',
));
$constraint = new File($options);
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', $params);
$this->assertFalse($this->validator->isValid($file, $constraint));
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
}
public function uploadedFileErrorProvider()
{
return array(
array(UPLOAD_ERR_INI_SIZE, 'uploadIniSizeErrorMessage'),
array(UPLOAD_ERR_INI_SIZE, 'uploadIniSizeErrorMessage', array('{{ limit }}' => UploadedFile::getMaxFilesize() . ' bytes')),
array(UPLOAD_ERR_FORM_SIZE, 'uploadFormSizeErrorMessage'),
array(UPLOAD_ERR_PARTIAL, 'uploadErrorMessage'),
array(UPLOAD_ERR_NO_TMP_DIR, 'uploadErrorMessage'),
@ -287,11 +309,5 @@ class FileValidatorTest extends \PHPUnit_Framework_TestCase
);
}
protected function assertFileValid($filename, File $constraint, $valid = true)
{
$this->assertEquals($this->validator->isValid($filename, $constraint), $valid);
if (file_exists($filename)) {
$this->assertEquals($this->validator->isValid(new FileObject($filename), $constraint), $valid);
}
}
abstract protected function getFile($filename);
}

View File

@ -16,33 +16,48 @@ use Symfony\Component\Validator\Constraints\ImageValidator;
class ImageValidatorTest extends \PHPUnit_Framework_TestCase
{
protected $context;
protected $validator;
protected $path;
protected $image;
protected function setUp()
{
$this->context = $this->getMock('Symfony\Component\Validator\ExecutionContext', array(), array(), '', false);
$this->validator = new ImageValidator();
$this->validator->initialize($this->context);
$this->image = __DIR__.'/Fixtures/test.gif';
}
public function testNullIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(null, new Image()));
}
public function testEmptyStringIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid('', new Image()));
}
public function testValidImage()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid($this->image, new Image()));
}
public function testValidSize()
{
$this->context->expects($this->never())
->method('addViolation');
$constraint = new Image(array(
'minWidth' => 1,
'maxWidth' => 2,
@ -60,12 +75,14 @@ class ImageValidatorTest extends \PHPUnit_Framework_TestCase
'minWidthMessage' => 'myMessage',
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ width }}' => '2',
'{{ min_width }}' => '3',
));
$this->assertFalse($this->validator->isValid($this->image, $constraint));
$this->assertEquals('myMessage', $this->validator->getMessageTemplate());
$this->assertEquals(array(
'{{ width }}' => '2',
'{{ min_width }}' => '3',
), $this->validator->getMessageParameters());
}
public function testWidthTooBig()
@ -75,12 +92,14 @@ class ImageValidatorTest extends \PHPUnit_Framework_TestCase
'maxWidthMessage' => 'myMessage',
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ width }}' => '2',
'{{ max_width }}' => '1',
));
$this->assertFalse($this->validator->isValid($this->image, $constraint));
$this->assertEquals('myMessage', $this->validator->getMessageTemplate());
$this->assertEquals(array(
'{{ width }}' => '2',
'{{ max_width }}' => '1',
), $this->validator->getMessageParameters());
}
public function testHeightTooSmall()
@ -90,12 +109,14 @@ class ImageValidatorTest extends \PHPUnit_Framework_TestCase
'minHeightMessage' => 'myMessage',
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ height }}' => '2',
'{{ min_height }}' => '3',
));
$this->assertFalse($this->validator->isValid($this->image, $constraint));
$this->assertEquals('myMessage', $this->validator->getMessageTemplate());
$this->assertEquals(array(
'{{ height }}' => '2',
'{{ min_height }}' => '3',
), $this->validator->getMessageParameters());
}
public function testHeightTooBig()
@ -105,12 +126,14 @@ class ImageValidatorTest extends \PHPUnit_Framework_TestCase
'maxHeightMessage' => 'myMessage',
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ height }}' => '2',
'{{ max_height }}' => '1',
));
$this->assertFalse($this->validator->isValid($this->image, $constraint));
$this->assertEquals('myMessage', $this->validator->getMessageTemplate());
$this->assertEquals(array(
'{{ height }}' => '2',
'{{ max_height }}' => '1',
), $this->validator->getMessageParameters());
}
/**

View File

@ -16,39 +16,51 @@ use Symfony\Component\Validator\Constraints\IpValidator;
class IpValidatorTest extends \PHPUnit_Framework_TestCase
{
protected $context;
protected $validator;
protected function setUp()
{
$this->context = $this->getMock('Symfony\Component\Validator\ExecutionContext', array(), array(), '', false);
$this->validator = new IpValidator();
$this->validator->initialize($this->context);
}
protected function tearDown()
{
$this->context = null;
$this->validator = null;
}
public function testNullIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(null, new Ip()));
}
public function testEmptyStringIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid('', new Ip()));
}
/**
* @expectedException Symfony\Component\Validator\Exception\UnexpectedTypeException
*/
public function testExpectsStringCompatibleType()
{
$this->setExpectedException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
$this->validator->isValid(new \stdClass(), new Ip());
}
/**
* @expectedException Symfony\Component\Validator\Exception\ConstraintDefinitionException
*/
public function testInvalidValidatorVersion()
{
$this->setExpectedException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
$ip = new Ip(array(
'version' => 666,
));
@ -59,6 +71,9 @@ class IpValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testValidIpsV4($ip)
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid($ip, new Ip(array(
'version' => Ip::V4,
))));
@ -83,6 +98,9 @@ class IpValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testValidIpsV6($ip)
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid($ip, new Ip(array(
'version' => Ip::V6,
))));
@ -118,6 +136,9 @@ class IpValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testValidIpsAll($ip)
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid($ip, new Ip(array(
'version' => Ip::ALL,
))));
@ -133,9 +154,18 @@ class IpValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testInvalidIpsV4($ip)
{
$this->assertFalse($this->validator->isValid($ip, new Ip(array(
$constraint = new Ip(array(
'version' => Ip::V4,
))));
'message' => 'myMessage',
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => $ip,
));
$this->assertFalse($this->validator->isValid($ip, $constraint));
}
public function getInvalidIpsV4()
@ -158,9 +188,18 @@ class IpValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testInvalidPrivateIpsV4($ip)
{
$this->assertFalse($this->validator->isValid($ip, new Ip(array(
$constraint = new Ip(array(
'version' => Ip::V4_NO_PRIV,
))));
'message' => 'myMessage',
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => $ip,
));
$this->assertFalse($this->validator->isValid($ip, $constraint));
}
public function getInvalidPrivateIpsV4()
@ -177,9 +216,18 @@ class IpValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testInvalidReservedIpsV4($ip)
{
$this->assertFalse($this->validator->isValid($ip, new Ip(array(
$constraint = new Ip(array(
'version' => Ip::V4_NO_RES,
))));
'message' => 'myMessage',
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => $ip,
));
$this->assertFalse($this->validator->isValid($ip, $constraint));
}
public function getInvalidReservedIpsV4()
@ -196,9 +244,18 @@ class IpValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testInvalidPublicIpsV4($ip)
{
$this->assertFalse($this->validator->isValid($ip, new Ip(array(
$constraint = new Ip(array(
'version' => Ip::V4_ONLY_PUBLIC,
))));
'message' => 'myMessage',
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => $ip,
));
$this->assertFalse($this->validator->isValid($ip, $constraint));
}
public function getInvalidPublicIpsV4()
@ -211,9 +268,18 @@ class IpValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testInvalidIpsV6($ip)
{
$this->assertFalse($this->validator->isValid($ip, new Ip(array(
$constraint = new Ip(array(
'version' => Ip::V6,
))));
'message' => 'myMessage',
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => $ip,
));
$this->assertFalse($this->validator->isValid($ip, $constraint));
}
public function getInvalidIpsV6()
@ -240,9 +306,18 @@ class IpValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testInvalidPrivateIpsV6($ip)
{
$this->assertFalse($this->validator->isValid($ip, new Ip(array(
$constraint = new Ip(array(
'version' => Ip::V6_NO_PRIV,
))));
'message' => 'myMessage',
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => $ip,
));
$this->assertFalse($this->validator->isValid($ip, $constraint));
}
public function getInvalidPrivateIpsV6()
@ -259,9 +334,18 @@ class IpValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testInvalidReservedIpsV6($ip)
{
$this->assertFalse($this->validator->isValid($ip, new Ip(array(
$constraint = new Ip(array(
'version' => Ip::V6_NO_RES,
))));
'message' => 'myMessage',
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => $ip,
));
$this->assertFalse($this->validator->isValid($ip, $constraint));
}
public function getInvalidReservedIpsV6()
@ -277,9 +361,18 @@ class IpValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testInvalidPublicIpsV6($ip)
{
$this->assertFalse($this->validator->isValid($ip, new Ip(array(
$constraint = new Ip(array(
'version' => Ip::V6_ONLY_PUBLIC,
))));
'message' => 'myMessage',
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => $ip,
));
$this->assertFalse($this->validator->isValid($ip, $constraint));
}
public function getInvalidPublicIpsV6()
@ -292,9 +385,18 @@ class IpValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testInvalidIpsAll($ip)
{
$this->assertFalse($this->validator->isValid($ip, new Ip(array(
$constraint = new Ip(array(
'version' => Ip::ALL,
))));
'message' => 'myMessage',
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => $ip,
));
$this->assertFalse($this->validator->isValid($ip, $constraint));
}
public function getInvalidIpsAll()
@ -307,9 +409,18 @@ class IpValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testInvalidPrivateIpsAll($ip)
{
$this->assertFalse($this->validator->isValid($ip, new Ip(array(
$constraint = new Ip(array(
'version' => Ip::ALL_NO_PRIV,
))));
'message' => 'myMessage',
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => $ip,
));
$this->assertFalse($this->validator->isValid($ip, $constraint));
}
public function getInvalidPrivateIpsAll()
@ -322,9 +433,18 @@ class IpValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testInvalidReservedIpsAll($ip)
{
$this->assertFalse($this->validator->isValid($ip, new Ip(array(
$constraint = new Ip(array(
'version' => Ip::ALL_NO_RES,
))));
'message' => 'myMessage',
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => $ip,
));
$this->assertFalse($this->validator->isValid($ip, $constraint));
}
public function getInvalidReservedIpsAll()
@ -337,26 +457,22 @@ class IpValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testInvalidPublicIpsAll($ip)
{
$this->assertFalse($this->validator->isValid($ip, new Ip(array(
$constraint = new Ip(array(
'version' => Ip::ALL_ONLY_PUBLIC,
))));
'message' => 'myMessage',
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => $ip,
));
$this->assertFalse($this->validator->isValid($ip, $constraint));
}
public function getInvalidPublicIpsAll()
{
return array_merge($this->getInvalidPublicIpsV4(), $this->getInvalidPublicIpsV6());
}
public function testMessageIsSet()
{
$constraint = new Ip(array(
'message' => 'myMessage'
));
$this->assertFalse($this->validator->isValid('foobar', $constraint));
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
$this->assertEquals($this->validator->getMessageParameters(), array(
'{{ value }}' => 'foobar',
));
}
}

View File

@ -16,43 +16,57 @@ use Symfony\Component\Validator\Constraints\LanguageValidator;
class LanguageValidatorTest extends LocalizedTestCase
{
protected $context;
protected $validator;
protected function setUp()
{
parent::setUp();
$this->context = $this->getMock('Symfony\Component\Validator\ExecutionContext', array(), array(), '', false);
$this->validator = new LanguageValidator();
$this->validator->initialize($this->context);
}
protected function tearDown()
{
$this->context = null;
$this->validator = null;
}
public function testNullIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(null, new Language()));
}
public function testEmptyStringIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid('', new Language()));
}
/**
* @expectedException Symfony\Component\Validator\Exception\UnexpectedTypeException
*/
public function testExpectsStringCompatibleType()
{
$this->setExpectedException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
$this->validator->isValid(new \stdClass(), new Language());
}
/**
* @dataProvider getValidLanguages
*/
public function testValidLanguages($date)
public function testValidLanguages($language)
{
$this->assertTrue($this->validator->isValid($date, new Language()));
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid($language, new Language()));
}
public function getValidLanguages()
@ -67,9 +81,19 @@ class LanguageValidatorTest extends LocalizedTestCase
/**
* @dataProvider getInvalidLanguages
*/
public function testInvalidLanguages($date)
public function testInvalidLanguages($language)
{
$this->assertFalse($this->validator->isValid($date, new Language()));
$constraint = new Language(array(
'message' => 'myMessage'
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => $language,
));
$this->assertFalse($this->validator->isValid($language, $constraint));
}
public function getInvalidLanguages()
@ -79,17 +103,4 @@ class LanguageValidatorTest extends LocalizedTestCase
array('foobar'),
);
}
public function testMessageIsSet()
{
$constraint = new Language(array(
'message' => 'myMessage'
));
$this->assertFalse($this->validator->isValid('foobar', $constraint));
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
$this->assertEquals($this->validator->getMessageParameters(), array(
'{{ value }}' => 'foobar',
));
}
}

View File

@ -16,43 +16,57 @@ use Symfony\Component\Validator\Constraints\LocaleValidator;
class LocaleValidatorTest extends LocalizedTestCase
{
protected $context;
protected $validator;
protected function setUp()
{
parent::setUp();
$this->context = $this->getMock('Symfony\Component\Validator\ExecutionContext', array(), array(), '', false);
$this->validator = new LocaleValidator();
$this->validator->initialize($this->context);
}
protected function tearDown()
{
$this->context = null;
$this->validator = null;
}
public function testNullIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(null, new Locale()));
}
public function testEmptyStringIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid('', new Locale()));
}
/**
* @expectedException Symfony\Component\Validator\Exception\UnexpectedTypeException
*/
public function testExpectsStringCompatibleType()
{
$this->setExpectedException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
$this->validator->isValid(new \stdClass(), new Locale());
}
/**
* @dataProvider getValidLocales
*/
public function testValidLocales($date)
public function testValidLocales($locale)
{
$this->assertTrue($this->validator->isValid($date, new Locale()));
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid($locale, new Locale()));
}
public function getValidLocales()
@ -68,9 +82,19 @@ class LocaleValidatorTest extends LocalizedTestCase
/**
* @dataProvider getInvalidLocales
*/
public function testInvalidLocales($date)
public function testInvalidLocales($locale)
{
$this->assertFalse($this->validator->isValid($date, new Locale()));
$constraint = new Locale(array(
'message' => 'myMessage'
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => $locale,
));
$this->assertFalse($this->validator->isValid($locale, $constraint));
}
public function getInvalidLocales()
@ -80,17 +104,4 @@ class LocaleValidatorTest extends LocalizedTestCase
array('foobar'),
);
}
public function testMessageIsSet()
{
$constraint = new Locale(array(
'message' => 'myMessage'
));
$this->assertFalse($this->validator->isValid('foobar', $constraint));
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
$this->assertEquals($this->validator->getMessageParameters(), array(
'{{ value }}' => 'foobar',
));
}
}

View File

@ -16,44 +16,60 @@ use Symfony\Component\Validator\Constraints\MaxLengthValidator;
class MaxLengthValidatorTest extends \PHPUnit_Framework_TestCase
{
protected $context;
protected $validator;
protected function setUp()
{
$this->context = $this->getMock('Symfony\Component\Validator\ExecutionContext', array(), array(), '', false);
$this->validator = new MaxLengthValidator();
$this->validator->initialize($this->context);
}
protected function tearDown()
{
$this->context = null;
$this->validator = null;
}
public function testNullIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(null, new MaxLength(array('limit' => 5))));
}
public function testEmptyStringIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid('', new MaxLength(array('limit' => 5))));
}
/**
* @expectedException Symfony\Component\Validator\Exception\UnexpectedTypeException
*/
public function testExpectsStringCompatibleType()
{
$this->setExpectedException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
$this->validator->isValid(new \stdClass(), new MaxLength(array('limit' => 5)));
}
/**
* @dataProvider getValidValues
*/
public function testValidValues($value, $skip = false)
public function testValidValues($value, $mbOnly = false)
{
if (!$skip) {
$constraint = new MaxLength(array('limit' => 5));
$this->assertTrue($this->validator->isValid($value, $constraint));
if ($mbOnly && !function_exists('mb_strlen')) {
return $this->markTestSkipped('mb_strlen does not exist');
}
$this->context->expects($this->never())
->method('addViolation');
$constraint = new MaxLength(array('limit' => 5));
$this->assertTrue($this->validator->isValid($value, $constraint));
}
public function getValidValues()
@ -61,20 +77,33 @@ class MaxLengthValidatorTest extends \PHPUnit_Framework_TestCase
return array(
array(12345),
array('12345'),
array('üüüüü', !function_exists('mb_strlen')),
array('ééééé', !function_exists('mb_strlen')),
array('üüüüü', true),
array('ééééé', true),
);
}
/**
* @dataProvider getInvalidValues
*/
public function testInvalidValues($value, $skip = false)
public function testInvalidValues($value, $mbOnly = false)
{
if (!$skip) {
$constraint = new MaxLength(array('limit' => 5));
$this->assertFalse($this->validator->isValid($value, $constraint));
if ($mbOnly && !function_exists('mb_strlen')) {
return $this->markTestSkipped('mb_strlen does not exist');
}
$constraint = new MaxLength(array(
'limit' => 5,
'message' => 'myMessage'
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => $value,
'{{ limit }}' => 5,
));
$this->assertFalse($this->validator->isValid($value, $constraint));
}
public function getInvalidValues()
@ -82,26 +111,11 @@ class MaxLengthValidatorTest extends \PHPUnit_Framework_TestCase
return array(
array(123456),
array('123456'),
array('üüüüüü', !function_exists('mb_strlen')),
array('éééééé', !function_exists('mb_strlen')),
array('üüüüüü', true),
array('éééééé', true),
);
}
public function testMessageIsSet()
{
$constraint = new MaxLength(array(
'limit' => 5,
'message' => 'myMessage'
));
$this->assertFalse($this->validator->isValid('123456', $constraint));
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
$this->assertEquals($this->validator->getMessageParameters(), array(
'{{ value }}' => '123456',
'{{ limit }}' => 5,
));
}
public function testConstraintGetDefaultOption()
{
$constraint = new MaxLength(array(

View File

@ -16,20 +16,27 @@ use Symfony\Component\Validator\Constraints\MaxValidator;
class MaxValidatorTest extends \PHPUnit_Framework_TestCase
{
protected $context;
protected $validator;
protected function setUp()
{
$this->context = $this->getMock('Symfony\Component\Validator\ExecutionContext', array(), array(), '', false);
$this->validator = new MaxValidator();
$this->validator->initialize($this->context);
}
protected function tearDown()
{
$this->context = null;
$this->validator = null;
}
public function testNullIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(null, new Max(array('limit' => 10))));
}
@ -38,6 +45,9 @@ class MaxValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testValidValues($value)
{
$this->context->expects($this->never())
->method('addViolation');
$constraint = new Max(array('limit' => 10));
$this->assertTrue($this->validator->isValid($value, $constraint));
}
@ -57,7 +67,19 @@ class MaxValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testInvalidValues($value)
{
$constraint = new Max(array('limit' => 10));
$constraint = new Max(array(
'limit' => 10,
'message' => 'myMessage',
'invalidMessage' => 'myMessage'
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => $value,
'{{ limit }}' => 10,
));
$this->assertFalse($this->validator->isValid($value, $constraint));
}
@ -70,21 +92,6 @@ class MaxValidatorTest extends \PHPUnit_Framework_TestCase
);
}
public function testMessageIsSet()
{
$constraint = new Max(array(
'limit' => 10,
'message' => 'myMessage'
));
$this->assertFalse($this->validator->isValid(11, $constraint));
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
$this->assertEquals($this->validator->getMessageParameters(), array(
'{{ value }}' => 11,
'{{ limit }}' => 10,
));
}
public function testConstraintGetDefaultOption()
{
$constraint = new Max(array(

View File

@ -16,44 +16,60 @@ use Symfony\Component\Validator\Constraints\MinLengthValidator;
class MinLengthValidatorTest extends \PHPUnit_Framework_TestCase
{
protected $context;
protected $validator;
protected function setUp()
{
$this->context = $this->getMock('Symfony\Component\Validator\ExecutionContext', array(), array(), '', false);
$this->validator = new MinLengthValidator();
$this->validator->initialize($this->context);
}
protected function tearDown()
{
$this->context = null;
$this->validator = null;
}
public function testNullIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(null, new MinLength(array('limit' => 6))));
}
public function testEmptyStringIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid('', new MinLength(array('limit' => 6))));
}
/**
* @expectedException Symfony\Component\Validator\Exception\UnexpectedTypeException
*/
public function testExpectsStringCompatibleType()
{
$this->setExpectedException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
$this->validator->isValid(new \stdClass(), new MinLength(array('limit' => 5)));
}
/**
* @dataProvider getValidValues
*/
public function testValidValues($value, $skip = false)
public function testValidValues($value, $mbOnly = false)
{
if (!$skip) {
$constraint = new MinLength(array('limit' => 6));
$this->assertTrue($this->validator->isValid($value, $constraint));
if ($mbOnly && !function_exists('mb_strlen')) {
return $this->markTestSkipped('mb_strlen does not exist');
}
$this->context->expects($this->never())
->method('addViolation');
$constraint = new MinLength(array('limit' => 6));
$this->assertTrue($this->validator->isValid($value, $constraint));
}
public function getValidValues()
@ -61,47 +77,45 @@ class MinLengthValidatorTest extends \PHPUnit_Framework_TestCase
return array(
array(123456),
array('123456'),
array('üüüüüü', !function_exists('mb_strlen')),
array('éééééé', !function_exists('mb_strlen')),
array('üüüüüü', true),
array('éééééé', true),
);
}
/**
* @dataProvider getInvalidValues
*/
public function testInvalidValues($value, $skip = false)
public function testInvalidValues($value, $mbOnly = false)
{
if (!$skip) {
$constraint = new MinLength(array('limit' => 6));
$this->assertFalse($this->validator->isValid($value, $constraint));
if ($mbOnly && !function_exists('mb_strlen')) {
return $this->markTestSkipped('mb_strlen does not exist');
}
$constraint = new MinLength(array(
'limit' => 5,
'message' => 'myMessage'
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => $value,
'{{ limit }}' => 5,
));
$this->assertFalse($this->validator->isValid($value, $constraint));
}
public function getInvalidValues()
{
return array(
array(12345),
array('12345'),
array('üüüüü', !function_exists('mb_strlen')),
array('ééééé', !function_exists('mb_strlen')),
array(1234),
array('1234'),
array('üüüü', true),
array('éééé', true),
);
}
public function testMessageIsSet()
{
$constraint = new MinLength(array(
'limit' => 5,
'message' => 'myMessage'
));
$this->assertFalse($this->validator->isValid('1234', $constraint));
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
$this->assertEquals($this->validator->getMessageParameters(), array(
'{{ value }}' => '1234',
'{{ limit }}' => 5,
));
}
public function testConstraintGetDefaultOption()
{
$constraint = new MinLength(array(

View File

@ -16,15 +16,21 @@ use Symfony\Component\Validator\Constraints\MinValidator;
class MinValidatorTest extends \PHPUnit_Framework_TestCase
{
protected $context;
protected $validator;
protected function setUp()
{
$this->context = $this->getMock('Symfony\Component\Validator\ExecutionContext', array(), array(), '', false);
$this->validator = new MinValidator();
$this->validator->initialize($this->context);
}
public function testNullIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(null, new Min(array('limit' => 10))));
}
@ -33,6 +39,9 @@ class MinValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testValidValues($value)
{
$this->context->expects($this->never())
->method('addViolation');
$constraint = new Min(array('limit' => 10));
$this->assertTrue($this->validator->isValid($value, $constraint));
}
@ -52,7 +61,19 @@ class MinValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testInvalidValues($value)
{
$constraint = new Min(array('limit' => 10));
$constraint = new Min(array(
'limit' => 10,
'message' => 'myMessage',
'invalidMessage' => 'myMessage'
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => $value,
'{{ limit }}' => 10,
));
$this->assertFalse($this->validator->isValid($value, $constraint));
}
@ -65,21 +86,6 @@ class MinValidatorTest extends \PHPUnit_Framework_TestCase
);
}
public function testMessageIsSet()
{
$constraint = new Min(array(
'limit' => 10,
'message' => 'myMessage'
));
$this->assertFalse($this->validator->isValid(9, $constraint));
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
$this->assertEquals($this->validator->getMessageParameters(), array(
'{{ value }}' => 9,
'{{ limit }}' => 10,
));
}
public function testConstraintGetDefaultOption()
{
$constraint = new Min(array(

View File

@ -16,15 +16,19 @@ use Symfony\Component\Validator\Constraints\NotBlankValidator;
class NotBlankValidatorTest extends \PHPUnit_Framework_TestCase
{
protected $context;
protected $validator;
protected function setUp()
{
$this->context = $this->getMock('Symfony\Component\Validator\ExecutionContext', array(), array(), '', false);
$this->validator = new NotBlankValidator();
$this->validator->initialize($this->context);
}
protected function tearDown()
{
$this->context = null;
$this->validator = null;
}
@ -33,6 +37,9 @@ class NotBlankValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testValidValues($date)
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid($date, new NotBlank()));
}
@ -49,33 +56,54 @@ class NotBlankValidatorTest extends \PHPUnit_Framework_TestCase
public function testNullIsInvalid()
{
$this->assertFalse($this->validator->isValid(null, new NotBlank()));
$constraint = new NotBlank(array(
'message' => 'myMessage'
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage');
$this->assertFalse($this->validator->isValid(null, $constraint));
}
public function testBlankIsInvalid()
{
$this->assertFalse($this->validator->isValid('', new NotBlank()));
}
public function testFalseIsInvalid()
{
$this->assertFalse($this->validator->isValid(false, new NotBlank()));
}
public function testEmptyArrayIsInvalid()
{
$this->assertFalse($this->validator->isValid(array(), new NotBlank()));
}
public function testSetMessage()
{
$constraint = new NotBlank(array(
'message' => 'myMessage'
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage');
$this->assertFalse($this->validator->isValid('', $constraint));
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
$this->assertEquals($this->validator->getMessageParameters(), array());
}
public function testFalseIsInvalid()
{
$constraint = new NotBlank(array(
'message' => 'myMessage'
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage');
$this->assertFalse($this->validator->isValid(false, $constraint));
}
public function testEmptyArrayIsInvalid()
{
$constraint = new NotBlank(array(
'message' => 'myMessage'
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage');
$this->assertFalse($this->validator->isValid(array(), $constraint));
}
}

View File

@ -16,15 +16,19 @@ use Symfony\Component\Validator\Constraints\NotNullValidator;
class NotNullValidatorTest extends \PHPUnit_Framework_TestCase
{
protected $context;
protected $validator;
protected function setUp()
{
$this->context = $this->getMock('Symfony\Component\Validator\ExecutionContext', array(), array(), '', false);
$this->validator = new NotNullValidator();
$this->validator->initialize($this->context);
}
protected function tearDown()
{
$this->context = null;
$this->validator = null;
}
@ -33,6 +37,9 @@ class NotNullValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testValidValues($value)
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid($value, new NotNull()));
}
@ -52,8 +59,11 @@ class NotNullValidatorTest extends \PHPUnit_Framework_TestCase
'message' => 'myMessage'
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
));
$this->assertFalse($this->validator->isValid(null, $constraint));
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
$this->assertEquals($this->validator->getMessageParameters(), array());
}
}

View File

@ -16,20 +16,27 @@ use Symfony\Component\Validator\Constraints\NullValidator;
class NullValidatorTest extends \PHPUnit_Framework_TestCase
{
protected $context;
protected $validator;
protected function setUp()
{
$this->context = $this->getMock('Symfony\Component\Validator\ExecutionContext', array(), array(), '', false);
$this->validator = new NullValidator();
$this->validator->initialize($this->context);
}
protected function tearDown()
{
$this->context = null;
$this->validator = null;
}
public function testNullIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(null, new Null()));
}
@ -38,7 +45,17 @@ class NullValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testInvalidValues($value)
{
$this->assertFalse($this->validator->isValid($value, new Null()));
$constraint = new Null(array(
'message' => 'myMessage'
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => $value,
));
$this->assertFalse($this->validator->isValid($value, $constraint));
}
public function getInvalidValues()
@ -50,17 +67,4 @@ class NullValidatorTest extends \PHPUnit_Framework_TestCase
array(''),
);
}
public function testSetMessage()
{
$constraint = new Null(array(
'message' => 'myMessage'
));
$this->assertFalse($this->validator->isValid(1, $constraint));
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
$this->assertEquals($this->validator->getMessageParameters(), array(
'{{ value }}' => 1,
));
}
}

View File

@ -16,32 +16,43 @@ use Symfony\Component\Validator\Constraints\RegexValidator;
class RegexValidatorTest extends \PHPUnit_Framework_TestCase
{
protected $context;
protected $validator;
protected function setUp()
{
$this->context = $this->getMock('Symfony\Component\Validator\ExecutionContext', array(), array(), '', false);
$this->validator = new RegexValidator();
$this->validator->initialize($this->context);
}
protected function tearDown()
{
$this->context = null;
$this->validator = null;
}
public function testNullIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(null, new Regex(array('pattern' => '/^[0-9]+$/'))));
}
public function testEmptyStringIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid('', new Regex(array('pattern' => '/^[0-9]+$/'))));
}
/**
* @expectedException Symfony\Component\Validator\Exception\UnexpectedTypeException
*/
public function testExpectsStringCompatibleType()
{
$this->setExpectedException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
$this->validator->isValid(new \stdClass(), new Regex(array('pattern' => '/^[0-9]+$/')));
}
@ -50,6 +61,9 @@ class RegexValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testValidValues($value)
{
$this->context->expects($this->never())
->method('addViolation');
$constraint = new Regex(array('pattern' => '/^[0-9]+$/'));
$this->assertTrue($this->validator->isValid($value, $constraint));
}
@ -69,7 +83,17 @@ class RegexValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testInvalidValues($value)
{
$constraint = new Regex(array('pattern' => '/^[0-9]+$/'));
$constraint = new Regex(array(
'pattern' => '/^[0-9]+$/',
'message' => 'myMessage'
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => $value,
));
$this->assertFalse($this->validator->isValid($value, $constraint));
}
@ -81,20 +105,6 @@ class RegexValidatorTest extends \PHPUnit_Framework_TestCase
);
}
public function testMessageIsSet()
{
$constraint = new Regex(array(
'pattern' => '/^[0-9]+$/',
'message' => 'myMessage'
));
$this->assertFalse($this->validator->isValid('foobar', $constraint));
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
$this->assertEquals($this->validator->getMessageParameters(), array(
'{{ value }}' => 'foobar',
));
}
public function testConstraintGetDefaultOption()
{
$constraint = new Regex(array(

View File

@ -2,12 +2,12 @@
/*
* 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.
*/
*
* (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 Symfony\Tests\Component\Validator\Constraints;
@ -16,44 +16,60 @@ use Symfony\Component\Validator\Constraints\SizeLengthValidator;
class SizeLengthValidatorTest extends \PHPUnit_Framework_TestCase
{
protected $context;
protected $validator;
protected function setUp()
{
$this->context = $this->getMock('Symfony\Component\Validator\ExecutionContext', array(), array(), '', false);
$this->validator = new SizeLengthValidator();
$this->validator->initialize($this->context);
}
protected function tearDown()
{
$this->context = null;
$this->validator = null;
}
public function testNullIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(null, new SizeLength(array('min' => 6, 'max' => 10))));
}
public function testEmptyStringIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid('', new SizeLength(array('min' => 6, 'max' => 10))));
}
/**
* @expectedException Symfony\Component\Validator\Exception\UnexpectedTypeException
*/
public function testExpectsStringCompatibleType()
{
$this->setExpectedException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
$this->validator->isValid(new \stdClass(), new SizeLength(array('min' => 6, 'max' => 10)));
}
/**
* @dataProvider getValidValues
*/
public function testValidValues($value, $skip = false)
public function testValidValues($value, $mbOnly = false)
{
if (!$skip) {
$constraint = new SizeLength(array('min' => 6, 'max' => 10));
$this->assertTrue($this->validator->isValid($value, $constraint));
if ($mbOnly && !function_exists('mb_strlen')) {
return $this->markTestSkipped('mb_strlen does not exist');
}
$this->context->expects($this->never())
->method('addViolation');
$constraint = new SizeLength(array('min' => 6, 'max' => 10));
$this->assertTrue($this->validator->isValid($value, $constraint));
}
public function getValidValues()
@ -63,22 +79,27 @@ class SizeLengthValidatorTest extends \PHPUnit_Framework_TestCase
array(1234567890),
array('123456'),
array('1234567890'),
array('üüüüüü', !function_exists('mb_strlen')),
array('üüüüüüüüüü', !function_exists('mb_strlen')),
array('éééééé', !function_exists('mb_strlen')),
array('éééééééééé', !function_exists('mb_strlen')),
array('üüüüüü', true),
array('üüüüüüüüüü', true),
array('éééééé', true),
array('éééééééééé', true),
);
}
/**
* @dataProvider getInvalidValues
*/
public function testInvalidValues($value, $skip = false)
public function testInvalidValues($value, $mbOnly = false)
{
if (!$skip) {
$constraint = new SizeLength(array('min' => 6, 'max' => 10));
$this->assertFalse($this->validator->isValid($value, $constraint));
if ($mbOnly && !function_exists('mb_strlen')) {
return $this->markTestSkipped('mb_strlen does not exist');
}
$this->context->expects($this->once())
->method('addViolation');
$constraint = new SizeLength(array('min' => 6, 'max' => 10));
$this->assertFalse($this->validator->isValid($value, $constraint));
}
public function getInvalidValues()
@ -88,49 +109,64 @@ class SizeLengthValidatorTest extends \PHPUnit_Framework_TestCase
array(12345678901),
array('12345'),
array('12345678901'),
array('üüüüü', !function_exists('mb_strlen')),
array('üüüüüüüüüüü', !function_exists('mb_strlen')),
array('ééééé', !function_exists('mb_strlen')),
array('ééééééééééé', !function_exists('mb_strlen')),
array('üüüüü', true),
array('üüüüüüüüüüü', true),
array('ééééé', true),
array('ééééééééééé', true),
);
}
public function testMessageIsSet()
public function testMinMessageIsSet()
{
$constraint = new SizeLength(array(
'min' => 5,
'max' => 10,
'minMessage' => 'myMinMessage',
'maxMessage' => 'myMaxMessage',
'minMessage' => 'myMessage',
));
$this->assertFalse($this->validator->isValid('1234', $constraint));
$this->assertEquals('myMinMessage', $this->validator->getMessageTemplate());
$this->assertEquals(array(
'{{ value }}' => '1234',
'{{ limit }}' => 5,
), $this->validator->getMessageParameters());
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => '1234',
'{{ limit }}' => 5,
));
$this->assertFalse($this->validator->isValid('12345678901', $constraint));
$this->assertEquals('myMaxMessage', $this->validator->getMessageTemplate());
$this->assertEquals(array(
'{{ value }}' => '12345678901',
'{{ limit }}' => 10,
), $this->validator->getMessageParameters());
$this->assertFalse($this->validator->isValid('1234', $constraint));
}
public function testExactErrorMessage()
public function testMaxMessageIsSet()
{
$constraint = new SizeLength(array(
'min' => 5,
'max' => 10,
'maxMessage' => 'myMessage',
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => '12345678901',
'{{ limit }}' => 10,
));
$this->assertFalse($this->validator->isValid('12345678901', $constraint));
}
public function testExactMessageIsSet()
{
$constraint = new SizeLength(array(
'min' => 5,
'max' => 5,
'exactMessage' => 'myMessage',
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => '1234',
'{{ limit }}' => 5,
));
$this->assertFalse($this->validator->isValid('1234', $constraint));
$this->assertEquals('This value should have exactly {{ limit }} characters', $this->validator->getMessageTemplate());
$this->assertEquals(array(
'{{ value }}' => '1234',
'{{ limit }}' => 5,
), $this->validator->getMessageParameters());
}
}

View File

@ -16,15 +16,21 @@ use Symfony\Component\Validator\Constraints\SizeValidator;
class SizeValidatorTest extends \PHPUnit_Framework_TestCase
{
protected $context;
protected $validator;
protected function setUp()
{
$this->context = $this->getMock('Symfony\Component\Validator\ExecutionContext', array(), array(), '', false);
$this->validator = new SizeValidator();
$this->validator->initialize($this->context);
}
public function testNullIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(null, new Size(array('min' => 10, 'max' => 20))));
}
@ -33,6 +39,9 @@ class SizeValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testValidValues($value)
{
$this->context->expects($this->never())
->method('addViolation');
$constraint = new Size(array('min' => 10, 'max' => 20));
$this->assertTrue($this->validator->isValid($value, $constraint));
}
@ -56,6 +65,9 @@ class SizeValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testInvalidValues($value)
{
$this->context->expects($this->once())
->method('addViolation');
$constraint = new Size(array('min' => 10, 'max' => 20));
$this->assertFalse($this->validator->isValid($value, $constraint));
}
@ -71,27 +83,39 @@ class SizeValidatorTest extends \PHPUnit_Framework_TestCase
);
}
public function testMessageIsSet()
public function testMinMessageIsSet()
{
$constraint = new Size(array(
'min' => 10,
'max' => 20,
'minMessage' => 'myMinMessage',
'maxMessage' => 'myMaxMessage',
'minMessage' => 'myMessage',
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => 9,
'{{ limit }}' => 10,
));
$this->assertFalse($this->validator->isValid(9, $constraint));
$this->assertEquals('myMinMessage', $this->validator->getMessageTemplate());
$this->assertEquals(array(
'{{ value }}' => 9,
'{{ limit }}' => 10,
), $this->validator->getMessageParameters());
}
public function testMaxMessageIsSet()
{
$constraint = new Size(array(
'min' => 10,
'max' => 20,
'maxMessage' => 'myMessage',
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => 21,
'{{ limit }}' => 20,
));
$this->assertFalse($this->validator->isValid(21, $constraint));
$this->assertEquals('myMaxMessage', $this->validator->getMessageTemplate());
$this->assertEquals(array(
'{{ value }}' => 21,
'{{ limit }}' => 20,
), $this->validator->getMessageParameters());
}
}

View File

@ -16,37 +16,51 @@ use Symfony\Component\Validator\Constraints\TimeValidator;
class TimeValidatorTest extends \PHPUnit_Framework_TestCase
{
protected $context;
protected $validator;
protected function setUp()
{
$this->context = $this->getMock('Symfony\Component\Validator\ExecutionContext', array(), array(), '', false);
$this->validator = new TimeValidator();
$this->validator->initialize($this->context);
}
protected function tearDown()
{
$this->context = null;
$this->validator = null;
}
public function testNullIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(null, new Time()));
}
public function testEmptyStringIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid('', new Time()));
}
public function testDateTimeClassIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(new \DateTime(), new Time()));
}
/**
* @expectedException Symfony\Component\Validator\Exception\UnexpectedTypeException
*/
public function testExpectsStringCompatibleType()
{
$this->setExpectedException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
$this->validator->isValid(new \stdClass(), new Time());
}
@ -55,6 +69,9 @@ class TimeValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testValidTimes($time)
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid($time, new Time()));
}
@ -72,7 +89,17 @@ class TimeValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testInvalidTimes($time)
{
$this->assertFalse($this->validator->isValid($time, new Time()));
$constraint = new Time(array(
'message' => 'myMessage'
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => $time,
));
$this->assertFalse($this->validator->isValid($time, $constraint));
}
public function getInvalidTimes()
@ -87,17 +114,4 @@ class TimeValidatorTest extends \PHPUnit_Framework_TestCase
array('00:00:60'),
);
}
public function testMessageIsSet()
{
$constraint = new Time(array(
'message' => 'myMessage'
));
$this->assertFalse($this->validator->isValid('foobar', $constraint));
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
$this->assertEquals($this->validator->getMessageParameters(), array(
'{{ value }}' => 'foobar',
));
}
}

View File

@ -16,25 +16,35 @@ use Symfony\Component\Validator\Constraints\TrueValidator;
class TrueValidatorTest extends \PHPUnit_Framework_TestCase
{
protected $context;
protected $validator;
protected function setUp()
{
$this->context = $this->getMock('Symfony\Component\Validator\ExecutionContext', array(), array(), '', false);
$this->validator = new TrueValidator();
$this->validator->initialize($this->context);
}
protected function tearDown()
{
$this->context = null;
$this->validator = null;
}
public function testNullIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(null, new True()));
}
public function testTrueIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(true, new True()));
}
@ -44,8 +54,11 @@ class TrueValidatorTest extends \PHPUnit_Framework_TestCase
'message' => 'myMessage'
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
));
$this->assertFalse($this->validator->isValid(false, $constraint));
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
$this->assertEquals($this->validator->getMessageParameters(), array());
}
}

View File

@ -19,25 +19,35 @@ class TypeValidatorTest extends \PHPUnit_Framework_TestCase
{
protected static $file;
protected $context;
protected $validator;
protected function setUp()
{
$this->context = $this->getMock('Symfony\Component\Validator\ExecutionContext', array(), array(), '', false);
$this->validator = new TypeValidator();
$this->validator->initialize($this->context);
}
protected function tearDown()
{
$this->context = null;
$this->validator = null;
}
public function testNullIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(null, new Type(array('type' => 'integer'))));
}
public function testEmptyIsValidIfString()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid('', new Type(array('type' => 'string'))));
}
@ -51,6 +61,9 @@ class TypeValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testValidValues($value, $type)
{
$this->context->expects($this->never())
->method('addViolation');
$constraint = new Type(array('type' => $type));
$this->assertTrue($this->validator->isValid($value, $constraint));
@ -96,81 +109,60 @@ class TypeValidatorTest extends \PHPUnit_Framework_TestCase
/**
* @dataProvider getInvalidValues
*/
public function testInvalidValues($value, $type)
public function testInvalidValues($value, $type, $valueAsString)
{
$constraint = new Type(array('type' => $type));
$constraint = new Type(array(
'type' => $type,
'message' => 'myMessage'
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => $valueAsString,
'{{ type }}' => $type,
));
$this->assertFalse($this->validator->isValid($value, $constraint));
}
public function testConstraintViolationCanHandleArrayValue()
{
$constraint = new Type(array('type' => 'string'));
$this->validator->isValid(array(0 => "Test"), $constraint);
$violation = new ConstraintViolation(
'{{ value }}',
$this->validator->getMessageParameters(),
'',
'',
''
);
$this->assertEquals('Array', $violation->getMessage());
}
public function getInvalidValues()
{
$object = new \stdClass();
$file = $this->createFile();
return array(
array('foobar', 'numeric'),
array('foobar', 'boolean'),
array('0', 'integer'),
array('1.5', 'float'),
array(12345, 'string'),
array($object, 'boolean'),
array($object, 'numeric'),
array($object, 'integer'),
array($object, 'float'),
array($object, 'string'),
array($object, 'resource'),
array($file, 'boolean'),
array($file, 'numeric'),
array($file, 'integer'),
array($file, 'float'),
array($file, 'string'),
array($file, 'object'),
array('12a34', 'digit'),
array('1a#23', 'alnum'),
array('abcd1', 'alpha'),
array("\nabc", 'cntrl'),
array("abc\n", 'graph'),
array('abCDE', 'lower'),
array('ABcde', 'upper'),
array("\nabc", 'print'),
array('abc&$!', 'punct'),
array("\nabc", 'space'),
array('AR1012', 'xdigit'),
array('foobar', 'numeric', 'foobar'),
array('foobar', 'boolean', 'foobar'),
array('0', 'integer', '0'),
array('1.5', 'float', '1.5'),
array(12345, 'string', '12345'),
array($object, 'boolean', 'stdClass'),
array($object, 'numeric', 'stdClass'),
array($object, 'integer', 'stdClass'),
array($object, 'float', 'stdClass'),
array($object, 'string', 'stdClass'),
array($object, 'resource', 'stdClass'),
array($file, 'boolean', (string) $file),
array($file, 'numeric', (string) $file),
array($file, 'integer', (string) $file),
array($file, 'float', (string) $file),
array($file, 'string', (string) $file),
array($file, 'object', (string) $file),
array('12a34', 'digit', '12a34'),
array('1a#23', 'alnum', '1a#23'),
array('abcd1', 'alpha', 'abcd1'),
array("\nabc", 'cntrl', "\nabc"),
array("abc\n", 'graph', "abc\n"),
array('abCDE', 'lower', 'abCDE'),
array('ABcde', 'upper', 'ABcde'),
array("\nabc", 'print', "\nabc"),
array('abc&$!', 'punct', 'abc&$!'),
array("\nabc", 'space', "\nabc"),
array('AR1012', 'xdigit', 'AR1012'),
);
}
public function testMessageIsSet()
{
$constraint = new Type(array(
'type' => 'numeric',
'message' => 'myMessage'
));
$this->assertFalse($this->validator->isValid('foobar', $constraint));
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
$this->assertEquals($this->validator->getMessageParameters(), array(
'{{ value }}' => 'foobar',
'{{ type }}' => 'numeric',
));
}
protected function createFile()
{
if (!self::$file) {

View File

@ -16,32 +16,43 @@ use Symfony\Component\Validator\Constraints\UrlValidator;
class UrlValidatorTest extends \PHPUnit_Framework_TestCase
{
protected $context;
protected $validator;
protected function setUp()
{
$this->context = $this->getMock('Symfony\Component\Validator\ExecutionContext', array(), array(), '', false);
$this->validator = new UrlValidator();
$this->validator->initialize($this->context);
}
protected function tearDown()
{
$this->context = null;
$this->validator = null;
}
public function testNullIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid(null, new Url()));
}
public function testEmptyStringIsValid()
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid('', new Url()));
}
/**
* @expectedException Symfony\Component\Validator\Exception\UnexpectedTypeException
*/
public function testExpectsStringCompatibleType()
{
$this->setExpectedException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
$this->validator->isValid(new \stdClass(), new Url());
}
@ -50,6 +61,9 @@ class UrlValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testValidUrls($url)
{
$this->context->expects($this->never())
->method('addViolation');
$this->assertTrue($this->validator->isValid($url, new Url()));
}
@ -92,7 +106,17 @@ class UrlValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testInvalidUrls($url)
{
$this->assertFalse($this->validator->isValid($url, new Url()));
$constraint = new Url(array(
'message' => 'myMessage'
));
$this->context->expects($this->once())
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => $url,
));
$this->assertFalse($this->validator->isValid($url, $constraint));
}
public function getInvalidUrls()
@ -118,6 +142,9 @@ class UrlValidatorTest extends \PHPUnit_Framework_TestCase
*/
public function testCustomProtocolIsValid($url)
{
$this->context->expects($this->never())
->method('addViolation');
$constraint = new Url(array(
'protocols' => array('ftp', 'file', 'git')
));
@ -133,17 +160,4 @@ class UrlValidatorTest extends \PHPUnit_Framework_TestCase
array('git://[::1]/'),
);
}
public function testMessageIsSet()
{
$constraint = new Url(array(
'message' => 'myMessage'
));
$this->assertFalse($this->validator->isValid('foobar', $constraint));
$this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
$this->assertEquals($this->validator->getMessageParameters(), array(
'{{ value }}' => 'foobar',
));
}
}

View File

@ -105,10 +105,10 @@ class ExecutionContextTest extends \PHPUnit_Framework_TestCase
)), $this->context->getViolations());
}
public function testAddViolationAt()
public function testAddViolationAtPath()
{
// override preconfigured property path
$this->context->addViolationAt('bar.baz', 'Error', array('foo' => 'bar'), 'invalid');
$this->context->addViolationAtPath('bar.baz', 'Error', array('foo' => 'bar'), 'invalid');
$this->assertEquals(new ConstraintViolationList(array(
new ConstraintViolation(
@ -121,9 +121,9 @@ class ExecutionContextTest extends \PHPUnit_Framework_TestCase
)), $this->context->getViolations());
}
public function testAddViolationAtUsesPreconfiguredValueIfNotPassed()
public function testAddViolationAtPathUsesPreconfiguredValueIfNotPassed()
{
$this->context->addViolationAt('bar.baz', 'Error');
$this->context->addViolationAtPath('bar.baz', 'Error');
$this->assertEquals(new ConstraintViolationList(array(
new ConstraintViolation(
@ -136,10 +136,10 @@ class ExecutionContextTest extends \PHPUnit_Framework_TestCase
)), $this->context->getViolations());
}
public function testAddViolationAtUsesPassedNullValue()
public function testAddViolationAtPathUsesPassedNullValue()
{
// passed null value should override preconfigured value "invalid"
$this->context->addViolationAt('bar.baz', 'Error', array('foo' => 'bar'), null);
$this->context->addViolationAtPath('bar.baz', 'Error', array('foo' => 'bar'), null);
$this->assertEquals(new ConstraintViolationList(array(
new ConstraintViolation(
@ -152,10 +152,10 @@ class ExecutionContextTest extends \PHPUnit_Framework_TestCase
)), $this->context->getViolations());
}
public function testAddNestedViolationAt()
public function testAddViolationAtRelativePath()
{
// override preconfigured property path
$this->context->addNestedViolationAt('bam.baz', 'Error', array('foo' => 'bar'), 'invalid');
$this->context->addViolationAtRelativePath('bam.baz', 'Error', array('foo' => 'bar'), 'invalid');
$this->assertEquals(new ConstraintViolationList(array(
new ConstraintViolation(
@ -168,84 +168,51 @@ class ExecutionContextTest extends \PHPUnit_Framework_TestCase
)), $this->context->getViolations());
}
public function testAddNestedViolationAtWithIndexPath()
public function testAddViolationAtRelativePathUsesPreconfiguredValueIfNotPassed()
{
// override preconfigured property path
$this->context->addNestedViolationAt('[bam]', 'Error', array('foo' => 'bar'), 'invalid');
$this->context->addViolationAtRelativePath('bam.baz', 'Error');
$this->assertEquals(new ConstraintViolationList(array(
new ConstraintViolation(
'Error',
array(),
'Root',
'foo.bar.bam.baz',
'currentValue'
),
)), $this->context->getViolations());
}
public function testAddViolationAtRelativePathUsesPassedNullValue()
{
// passed null value should override preconfigured value "invalid"
$this->context->addViolationAtRelativePath('bam.baz', 'Error', array('foo' => 'bar'), null);
$this->assertEquals(new ConstraintViolationList(array(
new ConstraintViolation(
'Error',
array('foo' => 'bar'),
'Root',
'foo.bar[bam]',
'invalid'
'foo.bar.bam.baz',
null
),
)), $this->context->getViolations());
}
public function testAddNestedViolationAtWithEmptyPath()
public function testGetAbsolutePropertyPathWithIndexPath()
{
// override preconfigured property path
$this->context->addNestedViolationAt('', 'Error', array('foo' => 'bar'), 'invalid');
$this->assertEquals(new ConstraintViolationList(array(
new ConstraintViolation(
'Error',
array('foo' => 'bar'),
'Root',
'foo.bar',
'invalid'
),
)), $this->context->getViolations());
$this->assertEquals('foo.bar[bam]', $this->context->getAbsolutePropertyPath('[bam]'));
}
public function testAddNestedViolationAtWithEmptyCurrentPropertyPath()
public function testGetAbsolutePropertyPathWithEmptyPath()
{
$this->assertEquals('foo.bar', $this->context->getAbsolutePropertyPath(''));
}
public function testGetAbsolutePropertyPathWithEmptyCurrentPropertyPath()
{
$this->context = new ExecutionContext($this->globalContext, 'currentValue', '', 'Group', 'ClassName', 'propertyName');
// override preconfigured property path
$this->context->addNestedViolationAt('bam.baz', 'Error', array('foo' => 'bar'), 'invalid');
$this->assertEquals(new ConstraintViolationList(array(
new ConstraintViolation(
'Error',
array('foo' => 'bar'),
'Root',
'bam.baz',
'invalid'
),
)), $this->context->getViolations());
}
public function testAddNestedViolationAtUsesPreconfiguredValueIfNotPassed()
{
$this->context->addNestedViolationAt('bam.baz', 'Error');
$this->assertEquals(new ConstraintViolationList(array(
new ConstraintViolation(
'Error',
array(),
'Root',
'foo.bar.bam.baz',
'currentValue'
),
)), $this->context->getViolations());
}
public function testAddNestedViolationAtUsesPassedNullValue()
{
// passed null value should override preconfigured value "invalid"
$this->context->addNestedViolationAt('bam.baz', 'Error', array('foo' => 'bar'), null);
$this->assertEquals(new ConstraintViolationList(array(
new ConstraintViolation(
'Error',
array('foo' => 'bar'),
'Root',
'foo.bar.bam.baz',
null
),
)), $this->context->getViolations());
$this->assertEquals('bam.baz', $this->context->getAbsolutePropertyPath('bam.baz'));
}
}

View File

@ -20,7 +20,7 @@ class ConstraintAValidator extends ConstraintValidator
public function isValid($value, Constraint $constraint)
{
if ('VALID' != $value) {
$this->setMessage('message', array('param' => 'value'));
$this->context->addViolation('message', array('param' => 'value'));
return false;
}

View File

@ -9,7 +9,7 @@ class FailingConstraintValidator extends ConstraintValidator
{
public function isValid($value, Constraint $constraint)
{
$this->setMessage($constraint->message, array());
$this->context->addViolation($constraint->message, array());
return false;
}