merged branch bschussek/issue2615 (PR #3228)
Commits -------2e4ebe4
[Validator] Renamed methods addViolationAtRelativePath() and getAbsolutePropertyPath() in ExecutionContext9153f0e
[Validator] Deprecated ConstraintValidator methods setMessage(), getMessageTemplate() and getMessageParameters()0417282
[Validator] Fixed typosa30a679
[Validator] Made ExecutionContext immutable and introduced new class GlobalExecutionContextfe85bbd
[Validator] Simplified ExecutionContext::addViolation(), added ExecutionContext::addViolationAt()f77fd41
[Form] Fixed typos1fc615c
Fixed string access by curly brace to bracketa103c28
[Validator] The Collection constraint adds "missing" and "extra" errors to the individual fields nowf904a9e
[Validator] Fixed: GraphWalker does not add constraint violation if error message is empty1dd302c
[Validator] Fixed ConstraintViolationList::__toString() to not include dots in the output if the root is empty1678a3d
[Validator] Fixed: Validator::validateValue() propagates empty validation root instead of the provided value Discussion ---------- [Validator] Improved "missing" and "extra" errors of Collection constraint Bug fix: yes Feature addition: no Backwards compatibility break: no Symfony2 tests pass: yes Fixes the following tickets: #2615 Todo: - ![Travis Build Status](https://secure.travis-ci.org/bschussek/symfony.png?branch=issue2615) Instead of a single violation Array: The fields "foo", "bar" are missing various violations are now generated. Array[foo]: This field is missing Array[bar]: This field is missing Apart from that, the PR contains various minor fixes to the Validator. --------------------------------------------------------------------------- by bschussek at 2012-02-02T09:14:52Z @fabpot Ready for merge.
This commit is contained in:
commit
8245bf13d5
|
@ -286,6 +286,13 @@ To get the diff between two versions, go to https://github.com/symfony/symfony/c
|
|||
* added a SizeLength validator
|
||||
* improved the ImageValidator with min width, max width, min height, and max height constraints
|
||||
* added support for MIME with wildcard in FileValidator
|
||||
* changed Collection validator to add "missing" and "extra" errors to
|
||||
individual fields
|
||||
* changed default value for `extraFieldsMessage` and `missingFieldsMessage`
|
||||
in Collection constraint
|
||||
* made ExecutionContext immutable
|
||||
* deprecated Constraint methods `setMessage`, `getMessageTemplate` and
|
||||
`getMessageParameters`
|
||||
|
||||
### Yaml
|
||||
|
||||
|
|
|
@ -195,3 +195,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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -102,10 +102,7 @@ class UniqueEntityValidator extends ConstraintValidator
|
|||
return true;
|
||||
}
|
||||
|
||||
$oldPath = $this->context->getPropertyPath();
|
||||
$this->context->setPropertyPath( empty($oldPath) ? $fields[0] : $oldPath.'.'.$fields[0]);
|
||||
$this->context->addViolation($constraint->message, array(), $criteria[$fields[0]]);
|
||||
$this->context->setPropertyPath($oldPath);
|
||||
$this->context->addViolationAtSubPath($fields[0], $constraint->message, array(), $criteria[$fields[0]]);
|
||||
|
||||
return true; // all true, we added the violation already!
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -111,10 +111,6 @@ class DelegatingValidator implements FormValidatorInterface
|
|||
$propertyPath = $context->getPropertyPath();
|
||||
$graphWalker = $context->getGraphWalker();
|
||||
|
||||
// The Execute constraint is called on class level, so we need to
|
||||
// set the property manually
|
||||
$context->setCurrentProperty('data');
|
||||
|
||||
// Adjust the property path accordingly
|
||||
if (!empty($propertyPath)) {
|
||||
$propertyPath .= '.';
|
||||
|
@ -134,10 +130,6 @@ class DelegatingValidator implements FormValidatorInterface
|
|||
$propertyPath = $context->getPropertyPath();
|
||||
$graphWalker = $context->getGraphWalker();
|
||||
|
||||
// The Execute constraint is called on class level, so we need to
|
||||
// set the property manually
|
||||
$context->setCurrentProperty('children');
|
||||
|
||||
// Adjust the property path accordingly
|
||||
if (!empty($propertyPath)) {
|
||||
$propertyPath .= '.';
|
||||
|
|
|
@ -11,7 +11,11 @@
|
|||
|
||||
namespace Symfony\Component\Validator;
|
||||
|
||||
/*
|
||||
/**
|
||||
* Base class for constraint validators
|
||||
*
|
||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
abstract class ConstraintValidator implements ConstraintValidatorInterface
|
||||
|
@ -20,12 +24,18 @@ abstract class ConstraintValidator implements ConstraintValidatorInterface
|
|||
* @var ExecutionContext
|
||||
*/
|
||||
protected $context;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @deprecated
|
||||
*/
|
||||
private $messageTemplate;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*
|
||||
* @deprecated
|
||||
*/
|
||||
private $messageParameters;
|
||||
|
||||
|
@ -42,7 +52,7 @@ abstract class ConstraintValidator implements ConstraintValidatorInterface
|
|||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* @api
|
||||
* @deprecated
|
||||
*/
|
||||
public function getMessageTemplate()
|
||||
{
|
||||
|
@ -52,7 +62,7 @@ abstract class ConstraintValidator implements ConstraintValidatorInterface
|
|||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* @api
|
||||
* @deprecated
|
||||
*/
|
||||
public function getMessageParameters()
|
||||
{
|
||||
|
@ -60,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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -12,14 +12,33 @@
|
|||
namespace Symfony\Component\Validator;
|
||||
|
||||
/**
|
||||
* An array-acting object that holds many ConstrainViolation instances.
|
||||
* A list of ConstrainViolation objects.
|
||||
*
|
||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
class ConstraintViolationList implements \IteratorAggregate, \Countable, \ArrayAccess
|
||||
{
|
||||
/**
|
||||
* The constraint violations
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $violations = array();
|
||||
|
||||
/**
|
||||
* Creates a new constraint violation list.
|
||||
*
|
||||
* @param array $violations The constraint violations to add to the list
|
||||
*/
|
||||
public function __construct(array $violations = array())
|
||||
{
|
||||
foreach ($violations as $violation) {
|
||||
$this->add($violation);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
|
@ -28,13 +47,7 @@ class ConstraintViolationList implements \IteratorAggregate, \Countable, \ArrayA
|
|||
$string = '';
|
||||
|
||||
foreach ($this->violations as $violation) {
|
||||
$root = $violation->getRoot();
|
||||
$class = is_object($root) ? get_class($root) : $root;
|
||||
$string .= <<<EOF
|
||||
{$class}.{$violation->getPropertyPath()}:
|
||||
{$violation->getMessage()}
|
||||
|
||||
EOF;
|
||||
$string .= $violation . "\n";
|
||||
}
|
||||
|
||||
return $string;
|
||||
|
@ -55,13 +68,13 @@ EOF;
|
|||
/**
|
||||
* Merge an existing ConstraintViolationList into this list.
|
||||
*
|
||||
* @param ConstraintViolationList $violations
|
||||
* @param ConstraintViolationList $otherList
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
public function addAll(ConstraintViolationList $violations)
|
||||
public function addAll(ConstraintViolationList $otherList)
|
||||
{
|
||||
foreach ($violations->violations as $violation) {
|
||||
foreach ($otherList->violations as $violation) {
|
||||
$this->violations[] = $violation;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -48,13 +48,7 @@ class CallbackValidator extends ConstraintValidator
|
|||
}
|
||||
|
||||
$methods = $constraint->methods;
|
||||
$context = $this->context;
|
||||
|
||||
// save context state
|
||||
$currentClass = $context->getCurrentClass();
|
||||
$currentProperty = $context->getCurrentProperty();
|
||||
$group = $context->getGroup();
|
||||
$propertyPath = $context->getPropertyPath();
|
||||
$success = true;
|
||||
|
||||
foreach ($methods as $method) {
|
||||
if (is_array($method) || $method instanceof \Closure) {
|
||||
|
@ -62,22 +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, $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($context);
|
||||
$success = $object->$method($this->context) && $success;
|
||||
}
|
||||
|
||||
// restore context state
|
||||
$context->setCurrentClass($currentClass);
|
||||
$context->setCurrentProperty($currentProperty);
|
||||
$context->setGroup($group);
|
||||
$context->setPropertyPath($propertyPath);
|
||||
}
|
||||
|
||||
return true;
|
||||
return $success;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -23,8 +23,8 @@ class Collection extends Constraint
|
|||
public $fields;
|
||||
public $allowExtraFields = false;
|
||||
public $allowMissingFields = false;
|
||||
public $extraFieldsMessage = 'The fields {{ fields }} were not expected';
|
||||
public $missingFieldsMessage = 'The fields {{ fields }} are missing';
|
||||
public $extraFieldsMessage = 'This field was not expected';
|
||||
public $missingFieldsMessage = 'This field is missing';
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
|
|
|
@ -46,12 +46,7 @@ class CollectionValidator extends ConstraintValidator
|
|||
$group = $this->context->getGroup();
|
||||
$propertyPath = $this->context->getPropertyPath();
|
||||
|
||||
$missingFields = array();
|
||||
$extraFields = array();
|
||||
|
||||
foreach ($value as $field => $fieldValue) {
|
||||
$extraFields[$field] = $fieldValue;
|
||||
}
|
||||
$valid = true;
|
||||
|
||||
foreach ($constraint->fields as $field => $fieldConstraint) {
|
||||
if (
|
||||
|
@ -72,29 +67,25 @@ class CollectionValidator extends ConstraintValidator
|
|||
foreach ($constraints as $constr) {
|
||||
$walker->walkConstraint($constr, $value[$field], $group, $propertyPath.'['.$field.']');
|
||||
}
|
||||
|
||||
unset($extraFields[$field]);
|
||||
} elseif (!$fieldConstraint instanceof Optional) {
|
||||
$missingFields[] = $field;
|
||||
} elseif (!$fieldConstraint instanceof Optional && !$constraint->allowMissingFields) {
|
||||
$this->context->addViolationAtSubPath('['.$field.']', $constraint->missingFieldsMessage, array(
|
||||
'{{ field }}' => $field
|
||||
), null);
|
||||
$valid = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (count($extraFields) > 0 && !$constraint->allowExtraFields) {
|
||||
$this->setMessage($constraint->extraFieldsMessage, array(
|
||||
'{{ fields }}' => '"'.implode('", "', array_keys($extraFields)).'"'
|
||||
));
|
||||
|
||||
return false;
|
||||
if (!$constraint->allowExtraFields) {
|
||||
foreach ($value as $field => $fieldValue) {
|
||||
if (!isset($constraint->fields[$field])) {
|
||||
$this->context->addViolationAtSubPath('['.$field.']', $constraint->extraFieldsMessage, array(
|
||||
'{{ field }}' => $field
|
||||
), $fieldValue);
|
||||
$valid = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (count($missingFields) > 0 && !$constraint->allowMissingFields) {
|
||||
$this->setMessage($constraint->missingFieldsMessage, array(
|
||||
'{{ fields }}' => '"'.implode('", "', $missingFields).'"'
|
||||
));
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
return $valid;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@ class FalseValidator extends ConstraintValidator
|
|||
return true;
|
||||
}
|
||||
|
||||
$this->setMessage($constraint->message);
|
||||
$this->context->addViolation($constraint->message);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
));
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
));
|
||||
|
|
|
@ -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,
|
||||
));
|
||||
|
|
|
@ -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,
|
||||
));
|
||||
|
|
|
@ -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,
|
||||
));
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
));
|
||||
|
|
|
@ -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,
|
||||
));
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@ class TrueValidator extends ConstraintValidator
|
|||
return true;
|
||||
}
|
||||
|
||||
$this->setMessage($constraint->message);
|
||||
$this->context->addViolation($constraint->message);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
));
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -14,55 +14,102 @@ namespace Symfony\Component\Validator;
|
|||
use Symfony\Component\Validator\Mapping\ClassMetadataFactoryInterface;
|
||||
|
||||
/**
|
||||
* The central object representing a single validation process.
|
||||
* Stores the state of the current node in the validation graph.
|
||||
*
|
||||
* This object is used by the GraphWalker to initialize validation of different
|
||||
* items and keep track of the violations.
|
||||
* This class is immutable by design.
|
||||
*
|
||||
* It is used by the GraphWalker to initialize validation of different items
|
||||
* and keep track of the violations.
|
||||
*
|
||||
* @author Fabien Potencier <fabien@symfony.com>
|
||||
* @author Bernhard Schussek <bernhard.schussek@symfony.com>
|
||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
class ExecutionContext
|
||||
{
|
||||
protected $root;
|
||||
protected $propertyPath;
|
||||
protected $class;
|
||||
protected $property;
|
||||
protected $group;
|
||||
protected $violations;
|
||||
protected $graphWalker;
|
||||
protected $metadataFactory;
|
||||
private $globalContext;
|
||||
private $propertyPath;
|
||||
private $value;
|
||||
private $group;
|
||||
private $class;
|
||||
private $property;
|
||||
|
||||
public function __construct(
|
||||
$root,
|
||||
GraphWalker $graphWalker,
|
||||
ClassMetadataFactoryInterface $metadataFactory
|
||||
)
|
||||
public function __construct(GlobalExecutionContext $globalContext, $value, $propertyPath, $group, $class = null, $property = null)
|
||||
{
|
||||
$this->root = $root;
|
||||
$this->graphWalker = $graphWalker;
|
||||
$this->metadataFactory = $metadataFactory;
|
||||
$this->violations = new ConstraintViolationList();
|
||||
$this->globalContext = $globalContext;
|
||||
$this->value = $value;
|
||||
$this->propertyPath = $propertyPath;
|
||||
$this->group = $group;
|
||||
$this->class = $class;
|
||||
$this->property = $property;
|
||||
}
|
||||
|
||||
public function __clone()
|
||||
{
|
||||
$this->violations = clone $this->violations;
|
||||
$this->globalContext = clone $this->globalContext;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a violation at the current node of the validation graph.
|
||||
*
|
||||
* @param string $message The error message.
|
||||
* @param array $params The parameters parsed into the error message.
|
||||
* @param mixed $invalidValue The invalid, validated value.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
public function addViolation($message, array $params, $invalidValue)
|
||||
public function addViolation($message, array $params = array(), $invalidValue = null)
|
||||
{
|
||||
$this->violations->add(new ConstraintViolation(
|
||||
$this->globalContext->addViolation(new ConstraintViolation(
|
||||
$message,
|
||||
$params,
|
||||
$this->root,
|
||||
$this->globalContext->getRoot(),
|
||||
$this->propertyPath,
|
||||
$invalidValue
|
||||
// check using func_num_args() to allow passing null values
|
||||
func_num_args() === 3 ? $invalidValue : $this->value
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a violation at the validation graph node with the given property
|
||||
* path.
|
||||
*
|
||||
* @param string $propertyPath The 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 addViolationAtPath($propertyPath, $message, array $params = array(), $invalidValue = null)
|
||||
{
|
||||
$this->globalContext->addViolation(new ConstraintViolation(
|
||||
$message,
|
||||
$params,
|
||||
$this->globalContext->getRoot(),
|
||||
$propertyPath,
|
||||
// check using func_num_args() to allow passing null values
|
||||
func_num_args() === 4 ? $invalidValue : $this->value
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a violation at the validation graph node with the given property
|
||||
* path relative to the current property path.
|
||||
*
|
||||
* @param string $subPath 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 addViolationAtSubPath($subPath, $message, array $params = array(), $invalidValue = null)
|
||||
{
|
||||
$this->globalContext->addViolation(new ConstraintViolation(
|
||||
$message,
|
||||
$params,
|
||||
$this->globalContext->getRoot(),
|
||||
$this->getPropertyPath($subPath),
|
||||
// check using func_num_args() to allow passing null values
|
||||
func_num_args() === 4 ? $invalidValue : $this->value
|
||||
));
|
||||
}
|
||||
|
||||
|
@ -73,27 +120,21 @@ class ExecutionContext
|
|||
*/
|
||||
public function getViolations()
|
||||
{
|
||||
return $this->violations;
|
||||
return $this->globalContext->getViolations();
|
||||
}
|
||||
|
||||
public function getRoot()
|
||||
{
|
||||
return $this->root;
|
||||
return $this->globalContext->getRoot();
|
||||
}
|
||||
|
||||
public function setPropertyPath($propertyPath)
|
||||
public function getPropertyPath($subPath = null)
|
||||
{
|
||||
$this->propertyPath = $propertyPath;
|
||||
}
|
||||
if (null !== $subPath && '' !== $this->propertyPath && '' !== $subPath && '[' !== $subPath[0]) {
|
||||
return $this->propertyPath . '.' . $subPath;
|
||||
}
|
||||
|
||||
public function getPropertyPath()
|
||||
{
|
||||
return $this->propertyPath;
|
||||
}
|
||||
|
||||
public function setCurrentClass($class)
|
||||
{
|
||||
$this->class = $class;
|
||||
return $this->propertyPath . $subPath;
|
||||
}
|
||||
|
||||
public function getCurrentClass()
|
||||
|
@ -101,19 +142,14 @@ class ExecutionContext
|
|||
return $this->class;
|
||||
}
|
||||
|
||||
public function setCurrentProperty($property)
|
||||
{
|
||||
$this->property = $property;
|
||||
}
|
||||
|
||||
public function getCurrentProperty()
|
||||
{
|
||||
return $this->property;
|
||||
}
|
||||
|
||||
public function setGroup($group)
|
||||
public function getCurrentValue()
|
||||
{
|
||||
$this->group = $group;
|
||||
return $this->value;
|
||||
}
|
||||
|
||||
public function getGroup()
|
||||
|
@ -126,7 +162,7 @@ class ExecutionContext
|
|||
*/
|
||||
public function getGraphWalker()
|
||||
{
|
||||
return $this->graphWalker;
|
||||
return $this->globalContext->getGraphWalker();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -134,6 +170,6 @@ class ExecutionContext
|
|||
*/
|
||||
public function getMetadataFactory()
|
||||
{
|
||||
return $this->metadataFactory;
|
||||
return $this->globalContext->getMetadataFactory();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,76 @@
|
|||
<?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\Component\Validator;
|
||||
|
||||
use Symfony\Component\Validator\Mapping\ClassMetadataFactoryInterface;
|
||||
|
||||
/**
|
||||
* Stores the node-independent information of a validation run.
|
||||
*
|
||||
* This class is immutable by design, except for violation tracking.
|
||||
*
|
||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||
*/
|
||||
class GlobalExecutionContext
|
||||
{
|
||||
private $root;
|
||||
private $graphWalker;
|
||||
private $metadataFactory;
|
||||
private $violations;
|
||||
|
||||
public function __construct($root, GraphWalker $graphWalker, ClassMetadataFactoryInterface $metadataFactory)
|
||||
{
|
||||
$this->root = $root;
|
||||
$this->graphWalker = $graphWalker;
|
||||
$this->metadataFactory = $metadataFactory;
|
||||
$this->violations = new ConstraintViolationList();
|
||||
}
|
||||
|
||||
public function __clone()
|
||||
{
|
||||
$this->violations = clone $this->violations;
|
||||
}
|
||||
|
||||
public function addViolation(ConstraintViolation $violation)
|
||||
{
|
||||
$this->violations->add($violation);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return ConstraintViolationList
|
||||
*/
|
||||
public function getViolations()
|
||||
{
|
||||
return $this->violations;
|
||||
}
|
||||
|
||||
public function getRoot()
|
||||
{
|
||||
return $this->root;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return GraphWalker
|
||||
*/
|
||||
public function getGraphWalker()
|
||||
{
|
||||
return $this->graphWalker;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return ClassMetadataFactoryInterface
|
||||
*/
|
||||
public function getMetadataFactory()
|
||||
{
|
||||
return $this->metadataFactory;
|
||||
}
|
||||
}
|
|
@ -27,15 +27,15 @@ use Symfony\Component\Validator\Mapping\MemberMetadata;
|
|||
*/
|
||||
class GraphWalker
|
||||
{
|
||||
protected $context;
|
||||
protected $validatorFactory;
|
||||
protected $metadataFactory;
|
||||
protected $validatorInitializers = array();
|
||||
protected $validatedObjects = array();
|
||||
private $globalContext;
|
||||
private $validatorFactory;
|
||||
private $metadataFactory;
|
||||
private $validatorInitializers = array();
|
||||
private $validatedObjects = array();
|
||||
|
||||
public function __construct($root, ClassMetadataFactoryInterface $metadataFactory, ConstraintValidatorFactoryInterface $factory, array $validatorInitializers = array())
|
||||
{
|
||||
$this->context = new ExecutionContext($root, $this, $metadataFactory);
|
||||
$this->globalContext = new GlobalExecutionContext($root, $this, $metadataFactory);
|
||||
$this->validatorFactory = $factory;
|
||||
$this->metadataFactory = $metadataFactory;
|
||||
$this->validatorInitializers = $validatorInitializers;
|
||||
|
@ -46,7 +46,7 @@ class GraphWalker
|
|||
*/
|
||||
public function getViolations()
|
||||
{
|
||||
return $this->context->getViolations();
|
||||
return $this->globalContext->getViolations();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -67,8 +67,6 @@ class GraphWalker
|
|||
$initializer->initialize($object);
|
||||
}
|
||||
|
||||
$this->context->setCurrentClass($metadata->getClassName());
|
||||
|
||||
if ($group === Constraint::DEFAULT_GROUP && $metadata->hasGroupSequence()) {
|
||||
$groups = $metadata->getGroupSequence();
|
||||
foreach ($groups as $group) {
|
||||
|
@ -100,8 +98,10 @@ class GraphWalker
|
|||
// traversing the object graph
|
||||
$this->validatedObjects[$hash][$group] = true;
|
||||
|
||||
$currentClass = $metadata->getClassName();
|
||||
|
||||
foreach ($metadata->findConstraints($group) as $constraint) {
|
||||
$this->walkConstraint($constraint, $object, $group, $propertyPath);
|
||||
$this->walkConstraint($constraint, $object, $group, $propertyPath, $currentClass);
|
||||
}
|
||||
|
||||
if (null !== $object) {
|
||||
|
@ -129,11 +129,11 @@ class GraphWalker
|
|||
|
||||
protected function walkMember(MemberMetadata $metadata, $value, $group, $propertyPath, $propagatedGroup = null)
|
||||
{
|
||||
$this->context->setCurrentClass($metadata->getClassName());
|
||||
$this->context->setCurrentProperty($metadata->getPropertyName());
|
||||
$currentClass = $metadata->getClassName();
|
||||
$currentProperty = $metadata->getPropertyName();
|
||||
|
||||
foreach ($metadata->findConstraints($group) as $constraint) {
|
||||
$this->walkConstraint($constraint, $value, $group, $propertyPath);
|
||||
$this->walkConstraint($constraint, $value, $group, $propertyPath, $currentClass, $currentProperty);
|
||||
}
|
||||
|
||||
if ($metadata->isCascaded()) {
|
||||
|
@ -164,26 +164,20 @@ class GraphWalker
|
|||
}
|
||||
}
|
||||
|
||||
public function walkConstraint(Constraint $constraint, $value, $group, $propertyPath)
|
||||
public function walkConstraint(Constraint $constraint, $value, $group, $propertyPath, $currentClass = null, $currentProperty = null)
|
||||
{
|
||||
$validator = $this->validatorFactory->getInstance($constraint);
|
||||
|
||||
$this->context->setPropertyPath($propertyPath);
|
||||
$this->context->setGroup($group);
|
||||
$localContext = new ExecutionContext(
|
||||
$this->globalContext,
|
||||
$value,
|
||||
$propertyPath,
|
||||
$group,
|
||||
$currentClass,
|
||||
$currentProperty
|
||||
);
|
||||
|
||||
$validator->initialize($this->context);
|
||||
|
||||
if (!$validator->isValid($value, $constraint)) {
|
||||
// Resetting the property path. This is needed because some
|
||||
// validators, like CollectionValidator, use the walker internally
|
||||
// and so change the context.
|
||||
$this->context->setPropertyPath($propertyPath);
|
||||
|
||||
$this->context->addViolation(
|
||||
$validator->getMessageTemplate(),
|
||||
$validator->getMessageParameters(),
|
||||
$value
|
||||
);
|
||||
}
|
||||
$validator->initialize($localContext);
|
||||
$validator->isValid($value, $constraint);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -108,7 +108,7 @@ class Validator implements ValidatorInterface
|
|||
return $walker->walkConstraint($constraint, $value, $group, '');
|
||||
};
|
||||
|
||||
return $this->validateGraph($value, $walk, $groups);
|
||||
return $this->validateGraph('', $walk, $groups);
|
||||
}
|
||||
|
||||
protected function validateGraph($root, \Closure $walk, $groups = null)
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
|
||||
namespace Symfony\Tests\Component\Form\Extension\Validator\Validator;
|
||||
|
||||
use Symfony\Component\Validator\GlobalExecutionContext;
|
||||
|
||||
use Symfony\Component\Form\FormInterface;
|
||||
use Symfony\Component\Form\FormBuilder;
|
||||
use Symfony\Component\Form\FormError;
|
||||
|
@ -63,6 +65,15 @@ class DelegatingValidatorTest extends \PHPUnit_Framework_TestCase
|
|||
return $this->getMock('Symfony\Component\Form\DataTransformerInterface', array(), array(), '', false, false);
|
||||
}
|
||||
|
||||
protected function getExecutionContext($propertyPath = null)
|
||||
{
|
||||
$graphWalker = $this->getMockGraphWalker();
|
||||
$metadataFactory = $this->getMockMetadataFactory();
|
||||
$globalContext = new GlobalExecutionContext('Root', $graphWalker, $metadataFactory);
|
||||
|
||||
return new ExecutionContext($globalContext, null, $propertyPath, null, null, null);
|
||||
}
|
||||
|
||||
protected function getConstraintViolation($propertyPath)
|
||||
{
|
||||
return new ConstraintViolation($this->message, $this->params, null, $propertyPath, null);
|
||||
|
@ -589,9 +600,8 @@ class DelegatingValidatorTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
public function testValidateFormData()
|
||||
{
|
||||
$graphWalker = $this->getMockGraphWalker();
|
||||
$metadataFactory = $this->getMockMetadataFactory();
|
||||
$context = new ExecutionContext('Root', $graphWalker, $metadataFactory);
|
||||
$context = $this->getExecutionContext();
|
||||
$graphWalker = $context->getGraphWalker();
|
||||
$object = $this->getMock('\stdClass');
|
||||
$form = $this->getBuilder()
|
||||
->setAttribute('validation_groups', array('group1', 'group2'))
|
||||
|
@ -611,9 +621,8 @@ class DelegatingValidatorTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
public function testValidateFormDataCanHandleCallbackValidationGroups()
|
||||
{
|
||||
$graphWalker = $this->getMockGraphWalker();
|
||||
$metadataFactory = $this->getMockMetadataFactory();
|
||||
$context = new ExecutionContext('Root', $graphWalker, $metadataFactory);
|
||||
$context = $this->getExecutionContext();
|
||||
$graphWalker = $context->getGraphWalker();
|
||||
$object = $this->getMock('\stdClass');
|
||||
$form = $this->getBuilder()
|
||||
->setAttribute('validation_groups', array($this, 'getValidationGroups'))
|
||||
|
@ -633,9 +642,8 @@ class DelegatingValidatorTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
public function testValidateFormDataCanHandleClosureValidationGroups()
|
||||
{
|
||||
$graphWalker = $this->getMockGraphWalker();
|
||||
$metadataFactory = $this->getMockMetadataFactory();
|
||||
$context = new ExecutionContext('Root', $graphWalker, $metadataFactory);
|
||||
$context = $this->getExecutionContext();
|
||||
$graphWalker = $context->getGraphWalker();
|
||||
$object = $this->getMock('\stdClass');
|
||||
$form = $this->getBuilder()
|
||||
->setAttribute('validation_groups', function(FormInterface $form){
|
||||
|
@ -657,10 +665,8 @@ class DelegatingValidatorTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
public function testValidateFormDataUsesInheritedValidationGroup()
|
||||
{
|
||||
$graphWalker = $this->getMockGraphWalker();
|
||||
$metadataFactory = $this->getMockMetadataFactory();
|
||||
$context = new ExecutionContext('Root', $graphWalker, $metadataFactory);
|
||||
$context->setPropertyPath('path');
|
||||
$context = $this->getExecutionContext('foo.bar');
|
||||
$graphWalker = $context->getGraphWalker();
|
||||
$object = $this->getMock('\stdClass');
|
||||
|
||||
$parent = $this->getBuilder()
|
||||
|
@ -675,17 +681,15 @@ class DelegatingValidatorTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
$graphWalker->expects($this->once())
|
||||
->method('walkReference')
|
||||
->with($object, 'group', 'path.data', true);
|
||||
->with($object, 'group', 'foo.bar.data', true);
|
||||
|
||||
DelegatingValidator::validateFormData($child, $context);
|
||||
}
|
||||
|
||||
public function testValidateFormDataUsesInheritedCallbackValidationGroup()
|
||||
{
|
||||
$graphWalker = $this->getMockGraphWalker();
|
||||
$metadataFactory = $this->getMockMetadataFactory();
|
||||
$context = new ExecutionContext('Root', $graphWalker, $metadataFactory);
|
||||
$context->setPropertyPath('path');
|
||||
$context = $this->getExecutionContext('foo.bar');
|
||||
$graphWalker = $context->getGraphWalker();
|
||||
$object = $this->getMock('\stdClass');
|
||||
|
||||
$parent = $this->getBuilder()
|
||||
|
@ -700,20 +704,18 @@ class DelegatingValidatorTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
$graphWalker->expects($this->at(0))
|
||||
->method('walkReference')
|
||||
->with($object, 'group1', 'path.data', true);
|
||||
->with($object, 'group1', 'foo.bar.data', true);
|
||||
$graphWalker->expects($this->at(1))
|
||||
->method('walkReference')
|
||||
->with($object, 'group2', 'path.data', true);
|
||||
->with($object, 'group2', 'foo.bar.data', true);
|
||||
|
||||
DelegatingValidator::validateFormData($child, $context);
|
||||
}
|
||||
|
||||
public function testValidateFormDataUsesInheritedClosureValidationGroup()
|
||||
{
|
||||
$graphWalker = $this->getMockGraphWalker();
|
||||
$metadataFactory = $this->getMockMetadataFactory();
|
||||
$context = new ExecutionContext('Root', $graphWalker, $metadataFactory);
|
||||
$context->setPropertyPath('path');
|
||||
$context = $this->getExecutionContext('foo.bar');
|
||||
$graphWalker = $context->getGraphWalker();
|
||||
$object = $this->getMock('\stdClass');
|
||||
|
||||
$parent = $this->getBuilder()
|
||||
|
@ -730,46 +732,24 @@ class DelegatingValidatorTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
$graphWalker->expects($this->at(0))
|
||||
->method('walkReference')
|
||||
->with($object, 'group1', 'path.data', true);
|
||||
->with($object, 'group1', 'foo.bar.data', true);
|
||||
$graphWalker->expects($this->at(1))
|
||||
->method('walkReference')
|
||||
->with($object, 'group2', 'path.data', true);
|
||||
->with($object, 'group2', 'foo.bar.data', true);
|
||||
|
||||
DelegatingValidator::validateFormData($child, $context);
|
||||
}
|
||||
|
||||
public function testValidateFormDataAppendsPropertyPath()
|
||||
{
|
||||
$graphWalker = $this->getMockGraphWalker();
|
||||
$metadataFactory = $this->getMockMetadataFactory();
|
||||
$context = new ExecutionContext('Root', $graphWalker, $metadataFactory);
|
||||
$context->setPropertyPath('path');
|
||||
$context = $this->getExecutionContext('foo.bar');
|
||||
$graphWalker = $context->getGraphWalker();
|
||||
$object = $this->getMock('\stdClass');
|
||||
$form = $this->getForm();
|
||||
|
||||
$graphWalker->expects($this->once())
|
||||
->method('walkReference')
|
||||
->with($object, 'Default', 'path.data', true);
|
||||
|
||||
$form->setData($object);
|
||||
|
||||
DelegatingValidator::validateFormData($form, $context);
|
||||
}
|
||||
|
||||
public function testValidateFormDataSetsCurrentPropertyToData()
|
||||
{
|
||||
$graphWalker = $this->getMockGraphWalker();
|
||||
$metadataFactory = $this->getMockMetadataFactory();
|
||||
$context = new ExecutionContext('Root', $graphWalker, $metadataFactory);
|
||||
$object = $this->getMock('\stdClass');
|
||||
$form = $this->getForm();
|
||||
$test = $this;
|
||||
|
||||
$graphWalker->expects($this->once())
|
||||
->method('walkReference')
|
||||
->will($this->returnCallback(function () use ($context, $test) {
|
||||
$test->assertEquals('data', $context->getCurrentProperty());
|
||||
}));
|
||||
->with($object, 'Default', 'foo.bar.data', true);
|
||||
|
||||
$form->setData($object);
|
||||
|
||||
|
@ -778,9 +758,8 @@ class DelegatingValidatorTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
public function testValidateFormDataDoesNotWalkScalars()
|
||||
{
|
||||
$graphWalker = $this->getMockGraphWalker();
|
||||
$metadataFactory = $this->getMockMetadataFactory();
|
||||
$context = new ExecutionContext('Root', $graphWalker, $metadataFactory);
|
||||
$context = $this->getExecutionContext();
|
||||
$graphWalker = $context->getGraphWalker();
|
||||
$clientTransformer = $this->getMockTransformer();
|
||||
|
||||
$form = $this->getBuilder()
|
||||
|
@ -801,9 +780,8 @@ class DelegatingValidatorTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
public function testValidateFormChildren()
|
||||
{
|
||||
$graphWalker = $this->getMockGraphWalker();
|
||||
$metadataFactory = $this->getMockMetadataFactory();
|
||||
$context = new ExecutionContext('Root', $graphWalker, $metadataFactory);
|
||||
$context = $this->getExecutionContext();
|
||||
$graphWalker = $context->getGraphWalker();
|
||||
$form = $this->getBuilder()
|
||||
->setAttribute('cascade_validation', true)
|
||||
->setAttribute('validation_groups', array('group1', 'group2'))
|
||||
|
@ -821,10 +799,8 @@ class DelegatingValidatorTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
public function testValidateFormChildrenAppendsPropertyPath()
|
||||
{
|
||||
$graphWalker = $this->getMockGraphWalker();
|
||||
$metadataFactory = $this->getMockMetadataFactory();
|
||||
$context = new ExecutionContext('Root', $graphWalker, $metadataFactory);
|
||||
$context->setPropertyPath('path');
|
||||
$context = $this->getExecutionContext('foo.bar');
|
||||
$graphWalker = $context->getGraphWalker();
|
||||
$form = $this->getBuilder()
|
||||
->setAttribute('cascade_validation', true)
|
||||
->getForm();
|
||||
|
@ -832,36 +808,15 @@ class DelegatingValidatorTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
$graphWalker->expects($this->once())
|
||||
->method('walkReference')
|
||||
->with($form->getChildren(), 'Default', 'path.children', true);
|
||||
|
||||
DelegatingValidator::validateFormChildren($form, $context);
|
||||
}
|
||||
|
||||
public function testValidateFormChildrenSetsCurrentPropertyToData()
|
||||
{
|
||||
$graphWalker = $this->getMockGraphWalker();
|
||||
$metadataFactory = $this->getMockMetadataFactory();
|
||||
$context = new ExecutionContext('Root', $graphWalker, $metadataFactory);
|
||||
$form = $this->getBuilder()
|
||||
->setAttribute('cascade_validation', true)
|
||||
->getForm();
|
||||
$form->add($this->getForm('firstName'));
|
||||
$test = $this;
|
||||
|
||||
$graphWalker->expects($this->once())
|
||||
->method('walkReference')
|
||||
->will($this->returnCallback(function () use ($context, $test) {
|
||||
$test->assertEquals('children', $context->getCurrentProperty());
|
||||
}));
|
||||
->with($form->getChildren(), 'Default', 'foo.bar.children', true);
|
||||
|
||||
DelegatingValidator::validateFormChildren($form, $context);
|
||||
}
|
||||
|
||||
public function testValidateFormChildrenDoesNothingIfDisabled()
|
||||
{
|
||||
$graphWalker = $this->getMockGraphWalker();
|
||||
$metadataFactory = $this->getMockMetadataFactory();
|
||||
$context = new ExecutionContext('Root', $graphWalker, $metadataFactory);
|
||||
$context = $this->getExecutionContext();
|
||||
$graphWalker = $context->getGraphWalker();
|
||||
$form = $this->getBuilder()
|
||||
->setAttribute('cascade_validation', false)
|
||||
->getForm();
|
||||
|
|
|
@ -0,0 +1,134 @@
|
|||
<?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;
|
||||
use Symfony\Component\Validator\ConstraintViolationList;
|
||||
|
||||
class ConstraintViolationListTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
protected $list;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
$this->list = new ConstraintViolationList();
|
||||
}
|
||||
|
||||
protected function tearDown()
|
||||
{
|
||||
$this->list = null;
|
||||
}
|
||||
|
||||
public function testInit()
|
||||
{
|
||||
$this->assertCount(0, $this->list);
|
||||
}
|
||||
|
||||
public function testInitWithViolations()
|
||||
{
|
||||
$violation = $this->getViolation('Error');
|
||||
$this->list = new ConstraintViolationList(array($violation));
|
||||
|
||||
$this->assertCount(1, $this->list);
|
||||
$this->assertSame($violation, $this->list[0]);
|
||||
}
|
||||
|
||||
public function testAdd()
|
||||
{
|
||||
$violation = $this->getViolation('Error');
|
||||
$this->list->add($violation);
|
||||
|
||||
$this->assertCount(1, $this->list);
|
||||
$this->assertSame($violation, $this->list[0]);
|
||||
}
|
||||
|
||||
public function testAddAll()
|
||||
{
|
||||
$violations = array(
|
||||
10 => $this->getViolation('Error 1'),
|
||||
20 => $this->getViolation('Error 2'),
|
||||
30 => $this->getViolation('Error 3'),
|
||||
);
|
||||
$otherList = new ConstraintViolationList($violations);
|
||||
$this->list->addAll($otherList);
|
||||
|
||||
$this->assertCount(3, $this->list);
|
||||
|
||||
$this->assertSame($violations[10], $this->list[0]);
|
||||
$this->assertSame($violations[20], $this->list[1]);
|
||||
$this->assertSame($violations[30], $this->list[2]);
|
||||
}
|
||||
|
||||
public function testIterator()
|
||||
{
|
||||
$violations = array(
|
||||
10 => $this->getViolation('Error 1'),
|
||||
20 => $this->getViolation('Error 2'),
|
||||
30 => $this->getViolation('Error 3'),
|
||||
);
|
||||
|
||||
$this->list = new ConstraintViolationList($violations);
|
||||
|
||||
// indices are reset upon adding -> array_values()
|
||||
$this->assertSame(array_values($violations), iterator_to_array($this->list));
|
||||
}
|
||||
|
||||
public function testArrayAccess()
|
||||
{
|
||||
$violation = $this->getViolation('Error');
|
||||
$this->list[] = $violation;
|
||||
|
||||
$this->assertSame($violation, $this->list[0]);
|
||||
$this->assertTrue(isset($this->list[0]));
|
||||
|
||||
unset($this->list[0]);
|
||||
|
||||
$this->assertFalse(isset($this->list[0]));
|
||||
|
||||
$this->list[10] = $violation;
|
||||
|
||||
$this->assertSame($violation, $this->list[10]);
|
||||
$this->assertTrue(isset($this->list[10]));
|
||||
}
|
||||
|
||||
public function testToString()
|
||||
{
|
||||
$this->list = new ConstraintViolationList(array(
|
||||
$this->getViolation('Error 1', 'Root'),
|
||||
$this->getViolation('Error 2', 'Root', 'foo.bar'),
|
||||
$this->getViolation('Error 3', 'Root', '[baz]'),
|
||||
$this->getViolation('Error 4', '', 'foo.bar'),
|
||||
$this->getViolation('Error 5', '', '[baz]'),
|
||||
));
|
||||
|
||||
$expected = <<<EOF
|
||||
Root:
|
||||
Error 1
|
||||
Root.foo.bar:
|
||||
Error 2
|
||||
Root[baz]:
|
||||
Error 3
|
||||
foo.bar:
|
||||
Error 4
|
||||
[baz]:
|
||||
Error 5
|
||||
|
||||
EOF;
|
||||
|
||||
$this->assertEquals($expected, (string) $this->list);
|
||||
}
|
||||
|
||||
protected function getViolation($message, $root = null, $propertyPath = null)
|
||||
{
|
||||
return new ConstraintViolation($message, array(), $root, $propertyPath, null);
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -11,26 +11,36 @@
|
|||
|
||||
namespace Symfony\Tests\Component\Validator\Constraints;
|
||||
|
||||
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');
|
||||
|
||||
$this->context = new ExecutionContext('Root', $this->walker, $metadataFactory);
|
||||
|
||||
$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()
|
||||
|
@ -45,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)));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -57,17 +69,19 @@ class AllValidatorTest extends \PHPUnit_Framework_TestCase
|
|||
*/
|
||||
public function testWalkSingleConstraint($array)
|
||||
{
|
||||
$this->context->setGroup('MyGroup');
|
||||
$this->context->setPropertyPath('foo');
|
||||
|
||||
$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,30 +90,32 @@ class AllValidatorTest extends \PHPUnit_Framework_TestCase
|
|||
*/
|
||||
public function testWalkMultipleConstraints($array)
|
||||
{
|
||||
$this->context->setGroup('MyGroup');
|
||||
$this->context->setPropertyPath('foo');
|
||||
$constraint1 = new Min(4);
|
||||
$constraint2 = new Max(6);
|
||||
|
||||
$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);
|
||||
$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))),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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',
|
||||
));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
|
||||
namespace Symfony\Tests\Component\Validator\Constraints;
|
||||
|
||||
use Symfony\Component\Validator\GlobalExecutionContext;
|
||||
use Symfony\Component\Validator\ExecutionContext;
|
||||
use Symfony\Component\Validator\ConstraintViolation;
|
||||
use Symfony\Component\Validator\ConstraintViolationList;
|
||||
|
@ -21,12 +22,9 @@ class CallbackValidatorTest_Class
|
|||
{
|
||||
public static function validateStatic($object, ExecutionContext $context)
|
||||
{
|
||||
$context->setCurrentClass('Foo');
|
||||
$context->setCurrentProperty('bar');
|
||||
$context->setGroup('mygroup');
|
||||
$context->setPropertyPath('foo.bar');
|
||||
$context->addViolation('Static message', array('{{ value }}' => 'foobar'), 'invalidValue');
|
||||
|
||||
$context->addViolation('Static message', array('parameter'), 'invalidValue');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -34,126 +32,93 @@ class CallbackValidatorTest_Object
|
|||
{
|
||||
public function validateOne(ExecutionContext $context)
|
||||
{
|
||||
$context->setCurrentClass('Foo');
|
||||
$context->setCurrentProperty('bar');
|
||||
$context->setGroup('mygroup');
|
||||
$context->setPropertyPath('foo.bar');
|
||||
$context->addViolation('My message', array('{{ value }}' => 'foobar'), 'invalidValue');
|
||||
|
||||
$context->addViolation('My message', array('parameter'), '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');
|
||||
|
||||
$this->context = new ExecutionContext('Root', $this->walker, $metadataFactory);
|
||||
$this->context->setCurrentClass('InitialClass');
|
||||
$this->context->setCurrentProperty('initialProperty');
|
||||
$this->context->setGroup('InitialGroup');
|
||||
$this->context->setPropertyPath('initial.property.path');
|
||||
|
||||
$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->assertEquals('InitialClass', $this->context->getCurrentClass());
|
||||
$this->assertEquals('initialProperty', $this->context->getCurrentProperty());
|
||||
$this->assertEquals('InitialGroup', $this->context->getGroup());
|
||||
$this->assertEquals('initial.property.path', $this->context->getPropertyPath());
|
||||
$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());
|
||||
$this->assertEquals('InitialClass', $this->context->getCurrentClass());
|
||||
$this->assertEquals('initialProperty', $this->context->getCurrentProperty());
|
||||
$this->assertEquals('InitialGroup', $this->context->getGroup());
|
||||
$this->assertEquals('initial.property.path', $this->context->getPropertyPath());
|
||||
}
|
||||
|
||||
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'
|
||||
));
|
||||
|
||||
// context was reset
|
||||
$violations->add(new ConstraintViolation(
|
||||
'Other message',
|
||||
array('other parameter'),
|
||||
'Root',
|
||||
'initial.property.path',
|
||||
'otherInvalidValue'
|
||||
));
|
||||
|
||||
$this->assertEquals($violations, $this->context->getViolations());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
|
||||
namespace Symfony\Tests\Component\Validator\Constraints;
|
||||
|
||||
use Symfony\Component\Validator\GlobalExecutionContext;
|
||||
|
||||
use Symfony\Component\Validator\ExecutionContext;
|
||||
use Symfony\Component\Validator\Constraints\Choice;
|
||||
use Symfony\Component\Validator\Constraints\ChoiceValidator;
|
||||
|
@ -22,6 +24,7 @@ function choice_callback()
|
|||
|
||||
class ChoiceValidatorTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
protected $context;
|
||||
protected $validator;
|
||||
|
||||
public static function staticCallback()
|
||||
|
@ -31,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');
|
||||
$context = new ExecutionContext('root', $walker, $factory);
|
||||
$context->setCurrentClass(__CLASS__);
|
||||
$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(
|
||||
|
@ -51,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')));
|
||||
}
|
||||
|
||||
|
@ -79,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));
|
||||
}
|
||||
|
||||
|
@ -86,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));
|
||||
}
|
||||
|
||||
|
@ -95,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));
|
||||
}
|
||||
|
||||
|
@ -102,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));
|
||||
}
|
||||
|
||||
|
@ -109,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));
|
||||
}
|
||||
|
||||
|
@ -119,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));
|
||||
}
|
||||
|
||||
|
@ -129,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()
|
||||
|
@ -144,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()
|
||||
|
@ -160,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()
|
||||
|
@ -176,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),
|
||||
|
@ -213,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));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,10 @@
|
|||
|
||||
namespace Symfony\Tests\Component\Validator\Constraints;
|
||||
|
||||
use Symfony\Component\Validator\GlobalExecutionContext;
|
||||
|
||||
use Symfony\Component\Validator\ConstraintViolation;
|
||||
use Symfony\Component\Validator\ConstraintViolationList;
|
||||
use Symfony\Component\Validator\ExecutionContext;
|
||||
use Symfony\Component\Validator\Constraints\Min;
|
||||
use Symfony\Component\Validator\Constraints\NotNull;
|
||||
|
@ -21,32 +25,42 @@ use Symfony\Component\Validator\Constraints\CollectionValidator;
|
|||
|
||||
abstract class CollectionValidatorTest 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');
|
||||
|
||||
$this->context = new ExecutionContext('Root', $this->walker, $metadataFactory);
|
||||
|
||||
$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->context = null;
|
||||
$this->validator = null;
|
||||
}
|
||||
|
||||
abstract protected function prepareTestData(array $contents);
|
||||
|
||||
public function testNullIsValid()
|
||||
{
|
||||
$this->context->expects($this->never())
|
||||
->method('addViolationAtSubPath');
|
||||
|
||||
$this->assertTrue($this->validator->isValid(null, new Collection(array('fields' => array(
|
||||
'foo' => new Min(4),
|
||||
)))));
|
||||
|
@ -56,6 +70,9 @@ abstract class CollectionValidatorTest extends \PHPUnit_Framework_TestCase
|
|||
{
|
||||
$data = $this->prepareTestData(array('foo' => 'foobar'));
|
||||
|
||||
$this->context->expects($this->never())
|
||||
->method('addViolationAtSubPath');
|
||||
|
||||
$this->assertTrue($this->validator->isValid($data, new Collection(array(
|
||||
'foo' => new Min(4),
|
||||
))));
|
||||
|
@ -73,52 +90,63 @@ abstract class CollectionValidatorTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
public function testWalkSingleConstraint()
|
||||
{
|
||||
$this->context->setGroup('MyGroup');
|
||||
$this->context->setPropertyPath('foo');
|
||||
|
||||
$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('foo['.$key.']'));
|
||||
->with($constraint, $value, 'MyGroup', 'foo.bar['.$key.']');
|
||||
}
|
||||
|
||||
$data = $this->prepareTestData($array);
|
||||
|
||||
$this->context->expects($this->never())
|
||||
->method('addViolationAtSubPath');
|
||||
|
||||
$this->assertTrue($this->validator->isValid($data, new Collection(array(
|
||||
'fields' => array(
|
||||
'foo' => $constraint,
|
||||
'bar' => $constraint,
|
||||
),
|
||||
))));
|
||||
}
|
||||
|
||||
public function testWalkMultipleConstraints()
|
||||
{
|
||||
$this->context->setGroup('MyGroup');
|
||||
$this->context->setPropertyPath('foo');
|
||||
|
||||
$constraints = array(
|
||||
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('foo['.$key.']'));
|
||||
->with($constraint, $value, 'MyGroup', 'foo.bar['.$key.']');
|
||||
}
|
||||
}
|
||||
|
||||
$data = $this->prepareTestData($array);
|
||||
|
||||
$this->context->expects($this->never())
|
||||
->method('addViolationAtSubPath');
|
||||
|
||||
$this->assertTrue($this->validator->isValid($data, new Collection(array(
|
||||
'fields' => array(
|
||||
'foo' => $constraints,
|
||||
'bar' => $constraints,
|
||||
)
|
||||
))));
|
||||
}
|
||||
|
@ -127,13 +155,20 @@ abstract class CollectionValidatorTest extends \PHPUnit_Framework_TestCase
|
|||
{
|
||||
$data = $this->prepareTestData(array(
|
||||
'foo' => 5,
|
||||
'bar' => 6,
|
||||
'baz' => 6,
|
||||
));
|
||||
|
||||
$this->context->expects($this->once())
|
||||
->method('addViolationAtSubPath')
|
||||
->with('[baz]', 'myMessage', array(
|
||||
'{{ field }}' => 'baz'
|
||||
));
|
||||
|
||||
$this->assertFalse($this->validator->isValid($data, new Collection(array(
|
||||
'fields' => array(
|
||||
'foo' => new Min(4),
|
||||
),
|
||||
'extraFieldsMessage' => 'myMessage',
|
||||
))));
|
||||
}
|
||||
|
||||
|
@ -143,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('addViolationAtSubPath');
|
||||
|
||||
$this->assertTrue($this->validator->isValid($data, $constraint));
|
||||
}
|
||||
|
||||
public function testExtraFieldsAllowed()
|
||||
|
@ -158,37 +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('addViolationAtSubPath');
|
||||
|
||||
$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->context->expects($this->once())
|
||||
->method('addViolationAtSubPath')
|
||||
->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('addViolationAtSubPath');
|
||||
|
||||
$this->assertTrue($this->validator->isValid($data, $constraint));
|
||||
}
|
||||
|
||||
public function testOptionalFieldPresent()
|
||||
|
@ -197,6 +254,9 @@ abstract class CollectionValidatorTest extends \PHPUnit_Framework_TestCase
|
|||
'foo' => null,
|
||||
));
|
||||
|
||||
$this->context->expects($this->never())
|
||||
->method('addViolationAtSubPath');
|
||||
|
||||
$this->assertTrue($this->validator->isValid($data, new Collection(array(
|
||||
'foo' => new Optional(),
|
||||
))));
|
||||
|
@ -206,6 +266,9 @@ abstract class CollectionValidatorTest extends \PHPUnit_Framework_TestCase
|
|||
{
|
||||
$data = $this->prepareTestData(array());
|
||||
|
||||
$this->context->expects($this->never())
|
||||
->method('addViolationAtSubPath');
|
||||
|
||||
$this->assertTrue($this->validator->isValid($data, new Collection(array(
|
||||
'foo' => new Optional(),
|
||||
))));
|
||||
|
@ -213,9 +276,6 @@ abstract class CollectionValidatorTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
public function testOptionalFieldSingleConstraint()
|
||||
{
|
||||
$this->context->setGroup('MyGroup');
|
||||
$this->context->setPropertyPath('bar');
|
||||
|
||||
$array = array(
|
||||
'foo' => 5,
|
||||
);
|
||||
|
@ -224,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('addViolationAtSubPath');
|
||||
|
||||
$data = $this->prepareTestData($array);
|
||||
|
||||
|
@ -235,9 +298,6 @@ abstract class CollectionValidatorTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
public function testOptionalFieldMultipleConstraints()
|
||||
{
|
||||
$this->context->setGroup('MyGroup');
|
||||
$this->context->setPropertyPath('bar');
|
||||
|
||||
$array = array(
|
||||
'foo' => 5,
|
||||
);
|
||||
|
@ -250,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('addViolationAtSubPath');
|
||||
|
||||
$data = $this->prepareTestData($array);
|
||||
|
||||
$this->assertTrue($this->validator->isValid($data, new Collection(array(
|
||||
|
@ -266,6 +329,9 @@ abstract class CollectionValidatorTest extends \PHPUnit_Framework_TestCase
|
|||
'foo' => null,
|
||||
));
|
||||
|
||||
$this->context->expects($this->never())
|
||||
->method('addViolationAtSubPath');
|
||||
|
||||
$this->assertTrue($this->validator->isValid($data, new Collection(array(
|
||||
'foo' => new Required(),
|
||||
))));
|
||||
|
@ -275,16 +341,22 @@ abstract class CollectionValidatorTest extends \PHPUnit_Framework_TestCase
|
|||
{
|
||||
$data = $this->prepareTestData(array());
|
||||
|
||||
$this->context->expects($this->once())
|
||||
->method('addViolationAtSubPath')
|
||||
->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',
|
||||
))));
|
||||
}
|
||||
|
||||
public function testRequiredFieldSingleConstraint()
|
||||
{
|
||||
$this->context->setGroup('MyGroup');
|
||||
$this->context->setPropertyPath('bar');
|
||||
|
||||
$array = array(
|
||||
'foo' => 5,
|
||||
);
|
||||
|
@ -293,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('addViolationAtSubPath');
|
||||
|
||||
$data = $this->prepareTestData($array);
|
||||
|
||||
|
@ -304,9 +379,6 @@ abstract class CollectionValidatorTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
public function testRequiredFieldMultipleConstraints()
|
||||
{
|
||||
$this->context->setGroup('MyGroup');
|
||||
$this->context->setPropertyPath('bar');
|
||||
|
||||
$array = array(
|
||||
'foo' => 5,
|
||||
);
|
||||
|
@ -319,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('addViolationAtSubPath');
|
||||
|
||||
$data = $this->prepareTestData($array);
|
||||
|
||||
$this->assertTrue($this->validator->isValid($array, new Collection(array(
|
||||
|
@ -334,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),
|
||||
|
|
|
@ -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',
|
||||
));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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',
|
||||
));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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',
|
||||
));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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',
|
||||
));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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));
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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',
|
||||
));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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',
|
||||
));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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',
|
||||
));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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',
|
||||
));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
|
@ -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) {
|
|
@ -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',
|
||||
));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,151 +11,213 @@
|
|||
|
||||
namespace Symfony\Tests\Component\Validator;
|
||||
|
||||
use Symfony\Component\Validator\GlobalExecutionContext;
|
||||
|
||||
use Symfony\Component\Validator\ConstraintViolation;
|
||||
|
||||
use Symfony\Component\Validator\ConstraintViolationList;
|
||||
|
||||
use Symfony\Component\Validator\ExecutionContext;
|
||||
|
||||
class ExecutionContextTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
protected $walker;
|
||||
protected $metadataFactory;
|
||||
protected $globalContext;
|
||||
protected $context;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
$this->walker = $this->getMock('Symfony\Component\Validator\GraphWalker', array(), array(), '', false);
|
||||
$this->metadataFactory = $this->getMock('Symfony\Component\Validator\Mapping\ClassMetadataFactoryInterface');
|
||||
$this->context = new ExecutionContext('Root', $this->walker, $this->metadataFactory);
|
||||
$this->globalContext = new GlobalExecutionContext('Root', $this->walker, $this->metadataFactory);
|
||||
$this->context = new ExecutionContext($this->globalContext, 'currentValue', 'foo.bar', 'Group', 'ClassName', 'propertyName');
|
||||
}
|
||||
|
||||
protected function tearDown()
|
||||
{
|
||||
$this->walker = null;
|
||||
$this->metadataFactory = null;
|
||||
$this->globalContext = null;
|
||||
$this->context = null;
|
||||
}
|
||||
|
||||
public function testInit()
|
||||
{
|
||||
$this->assertCount(0, $this->context->getViolations());
|
||||
$this->assertSame('Root', $this->context->getRoot());
|
||||
$this->assertSame('foo.bar', $this->context->getPropertyPath());
|
||||
$this->assertSame('ClassName', $this->context->getCurrentClass());
|
||||
$this->assertSame('propertyName', $this->context->getCurrentProperty());
|
||||
$this->assertSame('Group', $this->context->getGroup());
|
||||
$this->assertSame($this->walker, $this->context->getGraphWalker());
|
||||
$this->assertSame($this->metadataFactory, $this->context->getMetadataFactory());
|
||||
}
|
||||
|
||||
public function testClone()
|
||||
{
|
||||
$clone = clone $this->context;
|
||||
|
||||
$this->assertNotSame($this->context, $clone);
|
||||
$this->assertNotSame($this->context->getViolations(), $clone->getViolations());
|
||||
}
|
||||
|
||||
public function testAddViolation()
|
||||
{
|
||||
$this->assertCount(0, $this->context->getViolations());
|
||||
$this->context->addViolation('', array(), '');
|
||||
$this->context->addViolation('Error', array('foo' => 'bar'), 'invalid');
|
||||
|
||||
$this->assertCount(1, $this->context->getViolations());
|
||||
$this->assertEquals(new ConstraintViolationList(array(
|
||||
new ConstraintViolation(
|
||||
'Error',
|
||||
array('foo' => 'bar'),
|
||||
'Root',
|
||||
'foo.bar',
|
||||
'invalid'
|
||||
),
|
||||
)), $this->context->getViolations());
|
||||
}
|
||||
|
||||
public function testGetViolations()
|
||||
public function testAddViolationUsesPreconfiguredValueIfNotPassed()
|
||||
{
|
||||
$this->context->addViolation('', array(), '');
|
||||
$this->context->addViolation('Error');
|
||||
|
||||
$violations = $this->context->getViolations();
|
||||
|
||||
$this->assertCount(1, $violations);
|
||||
$this->assertInstanceOf('Symfony\Component\Validator\ConstraintViolationList', $violations);
|
||||
|
||||
$this->assertInstanceOf('ArrayIterator', $violations->getIterator());
|
||||
|
||||
$this->assertTrue(isset($violations[0]));
|
||||
$this->assertFalse(isset($violations[1]));
|
||||
|
||||
$violations[] = 'fake';
|
||||
$this->assertEquals('fake', $violations[1]);
|
||||
$this->assertTrue(isset($violations[1]));
|
||||
|
||||
unset($violations[1]);
|
||||
$this->assertFalse(isset($violations[1]));
|
||||
|
||||
$violations[0] = 'fake';
|
||||
$this->assertEquals('fake', $violations[0]);
|
||||
$this->assertEquals(new ConstraintViolationList(array(
|
||||
new ConstraintViolation(
|
||||
'Error',
|
||||
array(),
|
||||
'Root',
|
||||
'foo.bar',
|
||||
'currentValue'
|
||||
),
|
||||
)), $this->context->getViolations());
|
||||
}
|
||||
|
||||
public function testViolationsMerge()
|
||||
public function testAddViolationUsesPassedNullValue()
|
||||
{
|
||||
$this->context->addViolation('Message 1', array(), '');
|
||||
$this->context->addViolation('Message 2', array(), '');
|
||||
// passed null value should override preconfigured value "invalid"
|
||||
$this->context->addViolation('Error', array('foo' => 'bar'), null);
|
||||
|
||||
$violations1 = $this->context->getViolations();
|
||||
|
||||
$this->context->addViolation('', array(), '');
|
||||
|
||||
$violations2 = $this->context->getViolations();
|
||||
unset($violations2[1]);
|
||||
|
||||
$violations1->addAll($violations2);
|
||||
|
||||
$this->assertEmpty($violations1[2]->getMessage());
|
||||
$this->assertEquals(new ConstraintViolationList(array(
|
||||
new ConstraintViolation(
|
||||
'Error',
|
||||
array('foo' => 'bar'),
|
||||
'Root',
|
||||
'foo.bar',
|
||||
null
|
||||
),
|
||||
)), $this->context->getViolations());
|
||||
}
|
||||
|
||||
public function testViolationsAsString()
|
||||
public function testAddViolationAtPath()
|
||||
{
|
||||
$this->context->addViolation('Message 1', array(), '');
|
||||
$this->context->addViolation('Message 2', array(), '');
|
||||
// override preconfigured property path
|
||||
$this->context->addViolationAtPath('bar.baz', 'Error', array('foo' => 'bar'), 'invalid');
|
||||
|
||||
$violations = $this->context->getViolations();
|
||||
|
||||
$expected = <<<EOF
|
||||
Root.:
|
||||
Message 1
|
||||
Root.:
|
||||
Message 2
|
||||
|
||||
EOF;
|
||||
|
||||
$this->assertEquals($expected, $violations->__toString());
|
||||
$this->assertEquals(new ConstraintViolationList(array(
|
||||
new ConstraintViolation(
|
||||
'Error',
|
||||
array('foo' => 'bar'),
|
||||
'Root',
|
||||
'bar.baz',
|
||||
'invalid'
|
||||
),
|
||||
)), $this->context->getViolations());
|
||||
}
|
||||
|
||||
public function testGetRoot()
|
||||
public function testAddViolationAtPathUsesPreconfiguredValueIfNotPassed()
|
||||
{
|
||||
$this->assertEquals('Root', $this->context->getRoot());
|
||||
$this->context->addViolationAtPath('bar.baz', 'Error');
|
||||
|
||||
$this->assertEquals(new ConstraintViolationList(array(
|
||||
new ConstraintViolation(
|
||||
'Error',
|
||||
array(),
|
||||
'Root',
|
||||
'bar.baz',
|
||||
'currentValue'
|
||||
),
|
||||
)), $this->context->getViolations());
|
||||
}
|
||||
|
||||
public function testSetGetPropertyPath()
|
||||
public function testAddViolationAtPathUsesPassedNullValue()
|
||||
{
|
||||
$this->context->setPropertyPath('property_path');
|
||||
// passed null value should override preconfigured value "invalid"
|
||||
$this->context->addViolationAtPath('bar.baz', 'Error', array('foo' => 'bar'), null);
|
||||
|
||||
$this->assertEquals('property_path', $this->context->getPropertyPath());
|
||||
$this->assertEquals(new ConstraintViolationList(array(
|
||||
new ConstraintViolation(
|
||||
'Error',
|
||||
array('foo' => 'bar'),
|
||||
'Root',
|
||||
'bar.baz',
|
||||
null
|
||||
),
|
||||
)), $this->context->getViolations());
|
||||
}
|
||||
|
||||
public function testSetGetCurrentClass()
|
||||
public function testAddViolationAtSubPath()
|
||||
{
|
||||
$this->context->setCurrentClass('current_class');
|
||||
// override preconfigured property path
|
||||
$this->context->addViolationAtSubPath('bam.baz', 'Error', array('foo' => 'bar'), 'invalid');
|
||||
|
||||
$this->assertEquals('current_class', $this->context->getCurrentClass());
|
||||
$this->assertEquals(new ConstraintViolationList(array(
|
||||
new ConstraintViolation(
|
||||
'Error',
|
||||
array('foo' => 'bar'),
|
||||
'Root',
|
||||
'foo.bar.bam.baz',
|
||||
'invalid'
|
||||
),
|
||||
)), $this->context->getViolations());
|
||||
}
|
||||
|
||||
public function testSetGetCurrentProperty()
|
||||
public function testAddViolationAtSubPathUsesPreconfiguredValueIfNotPassed()
|
||||
{
|
||||
$this->context->setCurrentProperty('current_property');
|
||||
$this->context->addViolationAtSubPath('bam.baz', 'Error');
|
||||
|
||||
$this->assertEquals('current_property', $this->context->getCurrentProperty());
|
||||
$this->assertEquals(new ConstraintViolationList(array(
|
||||
new ConstraintViolation(
|
||||
'Error',
|
||||
array(),
|
||||
'Root',
|
||||
'foo.bar.bam.baz',
|
||||
'currentValue'
|
||||
),
|
||||
)), $this->context->getViolations());
|
||||
}
|
||||
|
||||
public function testSetGetGroup()
|
||||
public function testAddViolationAtSubPathUsesPassedNullValue()
|
||||
{
|
||||
$this->context->setGroup('group');
|
||||
// passed null value should override preconfigured value "invalid"
|
||||
$this->context->addViolationAtSubPath('bam.baz', 'Error', array('foo' => 'bar'), null);
|
||||
|
||||
$this->assertEquals('group', $this->context->getGroup());
|
||||
$this->assertEquals(new ConstraintViolationList(array(
|
||||
new ConstraintViolation(
|
||||
'Error',
|
||||
array('foo' => 'bar'),
|
||||
'Root',
|
||||
'foo.bar.bam.baz',
|
||||
null
|
||||
),
|
||||
)), $this->context->getViolations());
|
||||
}
|
||||
|
||||
public function testGetGraphWalker()
|
||||
public function testGetPropertyPath()
|
||||
{
|
||||
$this->assertSame($this->walker, $this->context->getGraphWalker());
|
||||
$this->assertInstanceOf(
|
||||
'Symfony\Component\Validator\GraphWalker',
|
||||
$this->context->getGraphWalker()
|
||||
);
|
||||
$this->assertEquals('foo.bar', $this->context->getPropertyPath());
|
||||
}
|
||||
|
||||
public function testGetMetadataFactory()
|
||||
public function testGetPropertyPathWithIndexPath()
|
||||
{
|
||||
$this->assertSame($this->metadataFactory, $this->context->getMetadataFactory());
|
||||
$this->assertInstanceOf(
|
||||
'Symfony\Component\Validator\Mapping\ClassMetadataFactoryInterface',
|
||||
$this->context->getMetadataFactory()
|
||||
);
|
||||
$this->assertEquals('foo.bar[bam]', $this->context->getPropertyPath('[bam]'));
|
||||
}
|
||||
|
||||
public function testGetPropertyPathWithEmptyPath()
|
||||
{
|
||||
$this->assertEquals('foo.bar', $this->context->getPropertyPath(''));
|
||||
}
|
||||
|
||||
public function testGetPropertyPathWithEmptyCurrentPropertyPath()
|
||||
{
|
||||
$this->context = new ExecutionContext($this->globalContext, 'currentValue', '', 'Group', 'ClassName', 'propertyName');
|
||||
|
||||
$this->assertEquals('bam.baz', $this->context->getPropertyPath('bam.baz'));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,13 +4,23 @@ namespace Symfony\Tests\Component\Validator\Fixtures;
|
|||
|
||||
use Symfony\Component\Validator\Constraint;
|
||||
use Symfony\Component\Validator\ConstraintValidator;
|
||||
use Symfony\Component\Validator\ExecutionContext;
|
||||
|
||||
class ConstraintAValidator extends ConstraintValidator
|
||||
{
|
||||
static public $passedContext;
|
||||
|
||||
public function initialize(ExecutionContext $context)
|
||||
{
|
||||
parent::initialize($context);
|
||||
|
||||
self::$passedContext = $context;
|
||||
}
|
||||
|
||||
public function isValid($value, Constraint $constraint)
|
||||
{
|
||||
if ('VALID' != $value) {
|
||||
$this->setMessage('message', array('param' => 'value'));
|
||||
$this->context->addViolation('message', array('param' => 'value'));
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@ use Symfony\Component\Validator\Constraint;
|
|||
|
||||
class FailingConstraint extends Constraint
|
||||
{
|
||||
public $message = '';
|
||||
public $message = 'Failed';
|
||||
|
||||
public function getTargets()
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,63 @@
|
|||
<?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;
|
||||
|
||||
use Symfony\Component\Validator\ConstraintViolationList;
|
||||
|
||||
use Symfony\Component\Validator\GlobalExecutionContext;
|
||||
|
||||
class GlobalExecutionContextTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
protected $walker;
|
||||
protected $metadataFactory;
|
||||
protected $context;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
$this->walker = $this->getMock('Symfony\Component\Validator\GraphWalker', array(), array(), '', false);
|
||||
$this->metadataFactory = $this->getMock('Symfony\Component\Validator\Mapping\ClassMetadataFactoryInterface');
|
||||
$this->context = new GlobalExecutionContext('Root', $this->walker, $this->metadataFactory);
|
||||
}
|
||||
|
||||
protected function tearDown()
|
||||
{
|
||||
$this->walker = null;
|
||||
$this->metadataFactory = null;
|
||||
$this->context = null;
|
||||
}
|
||||
|
||||
public function testInit()
|
||||
{
|
||||
$this->assertCount(0, $this->context->getViolations());
|
||||
$this->assertSame('Root', $this->context->getRoot());
|
||||
$this->assertSame($this->walker, $this->context->getGraphWalker());
|
||||
$this->assertSame($this->metadataFactory, $this->context->getMetadataFactory());
|
||||
}
|
||||
|
||||
public function testClone()
|
||||
{
|
||||
$clone = clone $this->context;
|
||||
|
||||
$this->assertNotSame($this->context->getViolations(), $clone->getViolations());
|
||||
}
|
||||
|
||||
public function testAddViolation()
|
||||
{
|
||||
$violation = new ConstraintViolation('Error', array(), 'Root', 'foo.bar', 'invalid');
|
||||
|
||||
$this->context->addViolation($violation);
|
||||
|
||||
$this->assertEquals(new ConstraintViolationList(array($violation)), $this->context->getViolations());
|
||||
}
|
||||
}
|
|
@ -11,6 +11,8 @@
|
|||
|
||||
namespace Symfony\Tests\Component\Validator;
|
||||
|
||||
use Symfony\Tests\Component\Validator\Fixtures\ConstraintAValidator;
|
||||
|
||||
require_once __DIR__.'/Fixtures/Entity.php';
|
||||
require_once __DIR__.'/Fixtures/Reference.php';
|
||||
require_once __DIR__.'/Fixtures/ConstraintA.php';
|
||||
|
@ -54,13 +56,17 @@ class GraphWalkerTest extends \PHPUnit_Framework_TestCase
|
|||
$this->metadata = null;
|
||||
}
|
||||
|
||||
public function testWalkObjectUpdatesContext()
|
||||
public function testWalkObjectPassesCorrectClassAndProperty()
|
||||
{
|
||||
$this->metadata->addConstraint(new ConstraintA());
|
||||
|
||||
$this->walker->walkObject($this->metadata, new Entity(), 'Default', '');
|
||||
$entity = new Entity();
|
||||
$this->walker->walkObject($this->metadata, $entity, 'Default', '');
|
||||
|
||||
$this->assertEquals('Symfony\Tests\Component\Validator\Fixtures\Entity', $this->getContext()->getCurrentClass());
|
||||
$context = ConstraintAValidator::$passedContext;
|
||||
|
||||
$this->assertEquals('Symfony\Tests\Component\Validator\Fixtures\Entity', $context->getCurrentClass());
|
||||
$this->assertNull($context->getCurrentProperty());
|
||||
}
|
||||
|
||||
public function testWalkObjectValidatesConstraints()
|
||||
|
@ -143,7 +149,7 @@ class GraphWalkerTest extends \PHPUnit_Framework_TestCase
|
|||
// validated
|
||||
$violations = new ConstraintViolationList();
|
||||
$violations->add(new ConstraintViolation(
|
||||
'',
|
||||
'Failed',
|
||||
array(),
|
||||
'Root',
|
||||
'firstName',
|
||||
|
@ -175,7 +181,7 @@ class GraphWalkerTest extends \PHPUnit_Framework_TestCase
|
|||
// "Default" was launched
|
||||
$violations = new ConstraintViolationList();
|
||||
$violations->add(new ConstraintViolation(
|
||||
'',
|
||||
'Failed',
|
||||
array(),
|
||||
'Root',
|
||||
'reference',
|
||||
|
@ -202,7 +208,7 @@ class GraphWalkerTest extends \PHPUnit_Framework_TestCase
|
|||
// Only group "Second" was validated
|
||||
$violations = new ConstraintViolationList();
|
||||
$violations->add(new ConstraintViolation(
|
||||
'',
|
||||
'Failed',
|
||||
array(),
|
||||
'Root',
|
||||
'lastName',
|
||||
|
@ -212,14 +218,16 @@ class GraphWalkerTest extends \PHPUnit_Framework_TestCase
|
|||
$this->assertEquals($violations, $this->walker->getViolations());
|
||||
}
|
||||
|
||||
public function testWalkPropertyUpdatesContext()
|
||||
public function testWalkPropertyPassesCorrectClassAndProperty()
|
||||
{
|
||||
$this->metadata->addPropertyConstraint('firstName', new ConstraintA());
|
||||
|
||||
$this->walker->walkPropertyValue($this->metadata, 'firstName', 'value', 'Default', '');
|
||||
|
||||
$this->assertEquals('Symfony\Tests\Component\Validator\Fixtures\Entity', $this->getContext()->getCurrentClass());
|
||||
$this->assertEquals('firstName', $this->getContext()->getCurrentProperty());
|
||||
$context = ConstraintAValidator::$passedContext;
|
||||
|
||||
$this->assertEquals('Symfony\Tests\Component\Validator\Fixtures\Entity', $context->getCurrentClass());
|
||||
$this->assertEquals('firstName', $context->getCurrentProperty());
|
||||
}
|
||||
|
||||
public function testWalkPropertyValueValidatesConstraints()
|
||||
|
@ -254,7 +262,7 @@ class GraphWalkerTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
$violations = new ConstraintViolationList();
|
||||
$violations->add(new ConstraintViolation(
|
||||
'',
|
||||
'Failed',
|
||||
array(),
|
||||
'Root',
|
||||
'path',
|
||||
|
@ -286,7 +294,7 @@ class GraphWalkerTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
$violations = new ConstraintViolationList();
|
||||
$violations->add(new ConstraintViolation(
|
||||
'',
|
||||
'Failed',
|
||||
array(),
|
||||
'Root',
|
||||
'path[key]',
|
||||
|
@ -319,7 +327,7 @@ class GraphWalkerTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
$violations = new ConstraintViolationList();
|
||||
$violations->add(new ConstraintViolation(
|
||||
'',
|
||||
'Failed',
|
||||
array(),
|
||||
'Root',
|
||||
'path[key]',
|
||||
|
@ -441,7 +449,7 @@ class GraphWalkerTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
$this->walker->walkConstraint($constraint, array('foo' => 'VALID'), 'Default', 'collection');
|
||||
$violations = $this->walker->getViolations();
|
||||
$this->assertEquals('collection', $violations[0]->getPropertyPath());
|
||||
$this->assertEquals('collection[bar]', $violations[0]->getPropertyPath());
|
||||
}
|
||||
|
||||
public function testWalkObjectUsesCorrectPropertyPathInViolationsWhenUsingNestedCollections()
|
||||
|
@ -455,12 +463,12 @@ class GraphWalkerTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
$this->walker->walkConstraint($constraint, array('foo' => array('foo' => 'VALID')), 'Default', 'collection');
|
||||
$violations = $this->walker->getViolations();
|
||||
$this->assertEquals('collection[foo]', $violations[0]->getPropertyPath());
|
||||
$this->assertEquals('collection[foo][bar]', $violations[0]->getPropertyPath());
|
||||
}
|
||||
|
||||
protected function getContext()
|
||||
protected function getProperty($property)
|
||||
{
|
||||
$p = new \ReflectionProperty($this->walker, 'context');
|
||||
$p = new \ReflectionProperty($this->walker, $property);
|
||||
$p->setAccessible(true);
|
||||
|
||||
return $p->getValue($this->walker);
|
||||
|
|
|
@ -55,7 +55,7 @@ class ValidatorTest extends \PHPUnit_Framework_TestCase
|
|||
// Only the constraint of group "Default" failed
|
||||
$violations = new ConstraintViolationList();
|
||||
$violations->add(new ConstraintViolation(
|
||||
'',
|
||||
'Failed',
|
||||
array(),
|
||||
$entity,
|
||||
'firstName',
|
||||
|
@ -78,7 +78,7 @@ class ValidatorTest extends \PHPUnit_Framework_TestCase
|
|||
// Only the constraint of group "Custom" failed
|
||||
$violations = new ConstraintViolationList();
|
||||
$violations->add(new ConstraintViolation(
|
||||
'',
|
||||
'Failed',
|
||||
array(),
|
||||
$entity,
|
||||
'lastName',
|
||||
|
@ -103,14 +103,14 @@ class ValidatorTest extends \PHPUnit_Framework_TestCase
|
|||
// The constraints of both groups failed
|
||||
$violations = new ConstraintViolationList();
|
||||
$violations->add(new ConstraintViolation(
|
||||
'',
|
||||
'Failed',
|
||||
array(),
|
||||
$entity,
|
||||
'firstName',
|
||||
''
|
||||
));
|
||||
$violations->add(new ConstraintViolation(
|
||||
'',
|
||||
'Failed',
|
||||
array(),
|
||||
$entity,
|
||||
'lastName',
|
||||
|
@ -148,9 +148,16 @@ class ValidatorTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
public function testValidateValue()
|
||||
{
|
||||
$result = $this->validator->validateValue('Bernhard', new FailingConstraint());
|
||||
$violations = new ConstraintViolationList();
|
||||
$violations->add(new ConstraintViolation(
|
||||
'Failed',
|
||||
array(),
|
||||
'',
|
||||
'',
|
||||
'Bernhard'
|
||||
));
|
||||
|
||||
$this->assertCount(1, $result);
|
||||
$this->assertEquals($violations, $this->validator->validateValue('Bernhard', new FailingConstraint()));
|
||||
}
|
||||
|
||||
public function testGetMetadataFactory()
|
||||
|
|
Reference in New Issue