Upgrade 1-11.38

This commit is contained in:
xesmyd
2026-03-30 14:10:30 +02:00
parent f2a7e6d1fc
commit ac648ef29d
24665 changed files with 69682 additions and 2205004 deletions
@@ -13,6 +13,7 @@ namespace Symfony\Component\Validator\Tests\Constraints;
use Symfony\Component\Intl\Util\IntlTestHelper;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
use Symfony\Component\Validator\Test\ConstraintValidatorTestCase;
class ComparisonTest_Class
@@ -28,6 +29,11 @@ class ComparisonTest_Class
{
return (string) $this->value;
}
public function getValue()
{
return $this->value;
}
}
/**
@@ -76,12 +82,25 @@ abstract class AbstractComparisonValidatorTestCase extends ConstraintValidatorTe
/**
* @dataProvider provideInvalidConstraintOptions
* @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
* @expectedExceptionMessage requires either the "value" or "propertyPath" option to be set.
*/
public function testThrowsConstraintExceptionIfNoValueOrProperty($options)
public function testThrowsConstraintExceptionIfNoValueOrPropertyPath($options)
{
$this->createConstraint($options);
}
/**
* @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
* @expectedExceptionMessage requires only one of the "value" or "propertyPath" options to be set, not both.
*/
public function testThrowsConstraintExceptionIfBothValueAndPropertyPath()
{
$this->createConstraint((array(
'value' => 'value',
'propertyPath' => 'propertyPath',
)));
}
/**
* @dataProvider provideAllValidComparisons
*
@@ -113,11 +132,75 @@ abstract class AbstractComparisonValidatorTestCase extends ConstraintValidatorTe
return $comparisons;
}
/**
* @dataProvider provideValidComparisonsToPropertyPath
*/
public function testValidComparisonToPropertyPath($comparedValue)
{
$constraint = $this->createConstraint(array('propertyPath' => 'value'));
$object = new ComparisonTest_Class(5);
$this->setObject($object);
$this->validator->validate($comparedValue, $constraint);
$this->assertNoViolation();
}
/**
* @dataProvider provideValidComparisonsToPropertyPath
*/
public function testValidComparisonToPropertyPathOnArray($comparedValue)
{
$constraint = $this->createConstraint(array('propertyPath' => '[root][value]'));
$this->setObject(array('root' => array('value' => 5)));
$this->validator->validate($comparedValue, $constraint);
$this->assertNoViolation();
}
public function testNoViolationOnNullObjectWithPropertyPath()
{
$constraint = $this->createConstraint(array('propertyPath' => 'propertyPath'));
$this->setObject(null);
$this->validator->validate('some data', $constraint);
$this->assertNoViolation();
}
public function testInvalidValuePath()
{
$constraint = $this->createConstraint(array('propertyPath' => 'foo'));
if (method_exists($this, 'expectException')) {
$this->expectException(ConstraintDefinitionException::class);
$this->expectExceptionMessage(sprintf('Invalid property path "foo" provided to "%s" constraint', \get_class($constraint)));
} else {
$this->setExpectedException(ConstraintDefinitionException::class, sprintf('Invalid property path "foo" provided to "%s" constraint', \get_class($constraint)));
}
$object = new ComparisonTest_Class(5);
$this->setObject($object);
$this->validator->validate(5, $constraint);
}
/**
* @return array
*/
abstract public function provideValidComparisons();
/**
* @return array
*/
abstract public function provideValidComparisonsToPropertyPath();
/**
* @dataProvider provideAllInvalidComparisons
*
@@ -1,21 +0,0 @@
<?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\Tests\Constraints;
use Symfony\Component\Validator\Test\ConstraintValidatorTestCase;
/**
* @deprecated Since Symfony 3.2, use ConstraintValidatorTestCase instead.
*/
abstract class AbstractConstraintValidatorTest extends ConstraintValidatorTestCase
{
}
@@ -11,8 +11,8 @@
namespace Symfony\Component\Validator\Tests\Constraints;
use Symfony\Component\Validator\Constraints\BicValidator;
use Symfony\Component\Validator\Constraints\Bic;
use Symfony\Component\Validator\Constraints\BicValidator;
use Symfony\Component\Validator\Test\ConstraintValidatorTestCase;
class BicValidatorTest extends ConstraintValidatorTestCase
@@ -59,7 +59,7 @@ class CardSchemeValidatorTest extends ConstraintValidatorTestCase
$this->validator->validate($number, $constraint);
$this->buildViolation('myMessage')
->setParameter('{{ value }}', is_string($number) ? '"'.$number.'"' : $number)
->setParameter('{{ value }}', \is_string($number) ? '"'.$number.'"' : $number)
->setCode($code)
->assertRaised();
}
@@ -45,7 +45,6 @@ class ChoiceValidatorTest extends ConstraintValidatorTestCase
$constraint = new Choice(array(
'choices' => array('foo', 'bar'),
'multiple' => true,
'strict' => true,
));
$this->validator->validate('asdf', $constraint);
@@ -58,7 +57,6 @@ class ChoiceValidatorTest extends ConstraintValidatorTestCase
new Choice(
array(
'choices' => array('foo', 'bar'),
'strict' => true,
)
)
);
@@ -71,7 +69,7 @@ class ChoiceValidatorTest extends ConstraintValidatorTestCase
*/
public function testChoicesOrCallbackExpected()
{
$this->validator->validate('foobar', new Choice(array('strict' => true)));
$this->validator->validate('foobar', new Choice());
}
/**
@@ -79,12 +77,12 @@ class ChoiceValidatorTest extends ConstraintValidatorTestCase
*/
public function testValidCallbackExpected()
{
$this->validator->validate('foobar', new Choice(array('callback' => 'abcd', 'strict' => true)));
$this->validator->validate('foobar', new Choice(array('callback' => 'abcd')));
}
public function testValidChoiceArray()
{
$constraint = new Choice(array('choices' => array('foo', 'bar'), 'strict' => true));
$constraint = new Choice(array('choices' => array('foo', 'bar')));
$this->validator->validate('bar', $constraint);
@@ -93,7 +91,7 @@ class ChoiceValidatorTest extends ConstraintValidatorTestCase
public function testValidChoiceCallbackFunction()
{
$constraint = new Choice(array('callback' => __NAMESPACE__.'\choice_callback', 'strict' => true));
$constraint = new Choice(array('callback' => __NAMESPACE__.'\choice_callback'));
$this->validator->validate('bar', $constraint);
@@ -104,7 +102,6 @@ class ChoiceValidatorTest extends ConstraintValidatorTestCase
{
$constraint = new Choice(
array(
'strict' => true,
'callback' => function () {
return array('foo', 'bar');
},
@@ -118,7 +115,7 @@ class ChoiceValidatorTest extends ConstraintValidatorTestCase
public function testValidChoiceCallbackStaticMethod()
{
$constraint = new Choice(array('callback' => array(__CLASS__, 'staticCallback'), 'strict' => true));
$constraint = new Choice(array('callback' => array(__CLASS__, 'staticCallback')));
$this->validator->validate('bar', $constraint);
@@ -130,7 +127,7 @@ class ChoiceValidatorTest extends ConstraintValidatorTestCase
// search $this for "staticCallback"
$this->setObject($this);
$constraint = new Choice(array('callback' => 'staticCallback', 'strict' => true));
$constraint = new Choice(array('callback' => 'staticCallback'));
$this->validator->validate('bar', $constraint);
@@ -142,7 +139,7 @@ class ChoiceValidatorTest extends ConstraintValidatorTestCase
// search $this for "objectMethodCallback"
$this->setObject($this);
$constraint = new Choice(array('callback' => 'objectMethodCallback', 'strict' => true));
$constraint = new Choice(array('callback' => 'objectMethodCallback'));
$this->validator->validate('bar', $constraint);
@@ -154,7 +151,6 @@ class ChoiceValidatorTest extends ConstraintValidatorTestCase
$constraint = new Choice(array(
'choices' => array('foo', 'bar', 'baz'),
'multiple' => true,
'strict' => true,
));
$this->validator->validate(array('baz', 'bar'), $constraint);
@@ -167,7 +163,6 @@ class ChoiceValidatorTest extends ConstraintValidatorTestCase
$constraint = new Choice(array(
'choices' => array('foo', 'bar'),
'message' => 'myMessage',
'strict' => true,
));
$this->validator->validate('baz', $constraint);
@@ -185,7 +180,6 @@ class ChoiceValidatorTest extends ConstraintValidatorTestCase
// the DB or the model
'choices' => array(),
'message' => 'myMessage',
'strict' => true,
));
$this->validator->validate('baz', $constraint);
@@ -202,7 +196,6 @@ class ChoiceValidatorTest extends ConstraintValidatorTestCase
'choices' => array('foo', 'bar'),
'multipleMessage' => 'myMessage',
'multiple' => true,
'strict' => true,
));
$this->validator->validate(array('foo', 'baz'), $constraint);
@@ -221,7 +214,6 @@ class ChoiceValidatorTest extends ConstraintValidatorTestCase
'multiple' => true,
'min' => 2,
'minMessage' => 'myMessage',
'strict' => true,
));
$value = array('foo');
@@ -245,7 +237,6 @@ class ChoiceValidatorTest extends ConstraintValidatorTestCase
'multiple' => true,
'max' => 2,
'maxMessage' => 'myMessage',
'strict' => true,
));
$value = array('foo', 'bar', 'moo');
@@ -262,27 +253,10 @@ class ChoiceValidatorTest extends ConstraintValidatorTestCase
->assertRaised();
}
/**
* @group legacy
*/
public function testNonStrict()
{
$constraint = new Choice(array(
'choices' => array(1, 2),
'strict' => false,
));
$this->validator->validate('2', $constraint);
$this->validator->validate(2, $constraint);
$this->assertNoViolation();
}
public function testStrictAllowsExactValue()
{
$constraint = new Choice(array(
'choices' => array(1, 2),
'strict' => true,
));
$this->validator->validate(2, $constraint);
@@ -294,7 +268,6 @@ class ChoiceValidatorTest extends ConstraintValidatorTestCase
{
$constraint = new Choice(array(
'choices' => array(1, 2),
'strict' => true,
'message' => 'myMessage',
));
@@ -306,28 +279,11 @@ class ChoiceValidatorTest extends ConstraintValidatorTestCase
->assertRaised();
}
/**
* @group legacy
*/
public function testNonStrictWithMultipleChoices()
{
$constraint = new Choice(array(
'choices' => array(1, 2, 3),
'multiple' => true,
'strict' => false,
));
$this->validator->validate(array('2', 3), $constraint);
$this->assertNoViolation();
}
public function testStrictWithMultipleChoices()
{
$constraint = new Choice(array(
'choices' => array(1, 2, 3),
'multiple' => true,
'strict' => true,
'multipleMessage' => 'myMessage',
));
@@ -115,7 +115,7 @@ abstract class CountValidatorTest extends ConstraintValidatorTestCase
$this->validator->validate($value, $constraint);
$this->buildViolation('myMessage')
->setParameter('{{ count }}', count($value))
->setParameter('{{ count }}', \count($value))
->setParameter('{{ limit }}', 4)
->setInvalidValue($value)
->setPlural(4)
@@ -136,7 +136,7 @@ abstract class CountValidatorTest extends ConstraintValidatorTestCase
$this->validator->validate($value, $constraint);
$this->buildViolation('myMessage')
->setParameter('{{ count }}', count($value))
->setParameter('{{ count }}', \count($value))
->setParameter('{{ limit }}', 4)
->setInvalidValue($value)
->setPlural(4)
@@ -158,7 +158,7 @@ abstract class CountValidatorTest extends ConstraintValidatorTestCase
$this->validator->validate($value, $constraint);
$this->buildViolation('myMessage')
->setParameter('{{ count }}', count($value))
->setParameter('{{ count }}', \count($value))
->setParameter('{{ limit }}', 4)
->setInvalidValue($value)
->setPlural(4)
@@ -180,7 +180,7 @@ abstract class CountValidatorTest extends ConstraintValidatorTestCase
$this->validator->validate($value, $constraint);
$this->buildViolation('myMessage')
->setParameter('{{ count }}', count($value))
->setParameter('{{ count }}', \count($value))
->setParameter('{{ limit }}', 4)
->setInvalidValue($value)
->setPlural(4)
@@ -152,10 +152,10 @@ class EmailValidatorTest extends ConstraintValidatorTestCase
array('"test""test"@iana.org'),
array('"test"."test"@iana.org'),
array('"test".test@iana.org'),
array('"test"'.chr(0).'@iana.org'),
array('"test"'.\chr(0).'@iana.org'),
array('"test\"@iana.org'),
array(chr(226).'@iana.org'),
array('test@'.chr(226).'.org'),
array(\chr(226).'@iana.org'),
array('test@'.\chr(226).'.org'),
array('\r\ntest@iana.org'),
array('\r\n test@iana.org'),
array('\r\n \r\ntest@iana.org'),
@@ -51,6 +51,16 @@ class EqualToValidatorTest extends AbstractComparisonValidatorTestCase
);
}
/**
* {@inheritdoc}
*/
public function provideValidComparisonsToPropertyPath()
{
return array(
array(5),
);
}
/**
* {@inheritdoc}
*/
@@ -31,7 +31,7 @@ abstract class FileValidatorTest extends ConstraintValidatorTestCase
{
parent::setUp();
$this->path = sys_get_temp_dir().DIRECTORY_SEPARATOR.'FileValidatorTest';
$this->path = sys_get_temp_dir().\DIRECTORY_SEPARATOR.'FileValidatorTest';
$this->file = fopen($this->path, 'w');
fwrite($this->file, ' ', 1);
}
@@ -40,7 +40,7 @@ abstract class FileValidatorTest extends ConstraintValidatorTestCase
{
parent::tearDown();
if (is_resource($this->file)) {
if (\is_resource($this->file)) {
fclose($this->file);
}
@@ -54,6 +54,17 @@ class GreaterThanOrEqualValidatorTest extends AbstractComparisonValidatorTestCas
);
}
/**
* {@inheritdoc}
*/
public function provideValidComparisonsToPropertyPath()
{
return array(
array(5),
array(6),
);
}
/**
* {@inheritdoc}
*/
@@ -50,6 +50,16 @@ class GreaterThanValidatorTest extends AbstractComparisonValidatorTestCase
);
}
/**
* {@inheritdoc}
*/
public function provideValidComparisonsToPropertyPath()
{
return array(
array(6),
);
}
/**
* {@inheritdoc}
*/
@@ -69,6 +69,16 @@ class IdenticalToValidatorTest extends AbstractComparisonValidatorTestCase
return $comparisons;
}
/**
* {@inheritdoc}
*/
public function provideValidComparisonsToPropertyPath()
{
return array(
array(5),
);
}
/**
* {@inheritdoc}
*/
@@ -164,6 +164,42 @@ class ImageValidatorTest extends ConstraintValidatorTestCase
->assertRaised();
}
public function testPixelsTooFew()
{
$constraint = new Image(array(
'minPixels' => 5,
'minPixelsMessage' => 'myMessage',
));
$this->validator->validate($this->image, $constraint);
$this->buildViolation('myMessage')
->setParameter('{{ pixels }}', '4')
->setParameter('{{ min_pixels }}', '5')
->setParameter('{{ height }}', '2')
->setParameter('{{ width }}', '2')
->setCode(Image::TOO_FEW_PIXEL_ERROR)
->assertRaised();
}
public function testPixelsTooMany()
{
$constraint = new Image(array(
'maxPixels' => 3,
'maxPixelsMessage' => 'myMessage',
));
$this->validator->validate($this->image, $constraint);
$this->buildViolation('myMessage')
->setParameter('{{ pixels }}', '4')
->setParameter('{{ max_pixels }}', '3')
->setParameter('{{ height }}', '2')
->setParameter('{{ width }}', '2')
->setCode(Image::TOO_MANY_PIXEL_ERROR)
->assertRaised();
}
/**
* @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
*/
@@ -212,6 +248,30 @@ class ImageValidatorTest extends ConstraintValidatorTestCase
$this->validator->validate($this->image, $constraint);
}
/**
* @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
*/
public function testInvalidMinPixels()
{
$constraint = new Image(array(
'minPixels' => '1abc',
));
$this->validator->validate($this->image, $constraint);
}
/**
* @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
*/
public function testInvalidMaxPixels()
{
$constraint = new Image(array(
'maxPixels' => '1abc',
));
$this->validator->validate($this->image, $constraint);
}
public function testRatioTooSmall()
{
$constraint = new Image(array(
@@ -329,7 +389,7 @@ class ImageValidatorTest extends ConstraintValidatorTestCase
public function testCorrupted()
{
if (!function_exists('imagecreatefromstring')) {
if (!\function_exists('imagecreatefromstring')) {
$this->markTestSkipped('This test require GD extension');
}
@@ -60,7 +60,7 @@ class IsbnValidatorTest extends ConstraintValidatorTestCase
array('1A34567890', Isbn::INVALID_CHARACTERS_ERROR),
// chr(1) evaluates to 0
// 2070546810 is valid
array('2'.chr(1).'70546810', Isbn::INVALID_CHARACTERS_ERROR),
array('2'.\chr(1).'70546810', Isbn::INVALID_CHARACTERS_ERROR),
);
}
@@ -98,7 +98,7 @@ class IsbnValidatorTest extends ConstraintValidatorTestCase
array('978-272C442282', Isbn::INVALID_CHARACTERS_ERROR),
// chr(1) evaluates to 0
// 978-2070546817 is valid
array('978-2'.chr(1).'70546817', Isbn::INVALID_CHARACTERS_ERROR),
array('978-2'.\chr(1).'70546817', Isbn::INVALID_CHARACTERS_ERROR),
);
}
@@ -56,6 +56,17 @@ class LessThanOrEqualValidatorTest extends AbstractComparisonValidatorTestCase
);
}
/**
* {@inheritdoc}
*/
public function provideValidComparisonsToPropertyPath()
{
return array(
array(4),
array(5),
);
}
/**
* {@inheritdoc}
*/
@@ -50,6 +50,16 @@ class LessThanValidatorTest extends AbstractComparisonValidatorTestCase
);
}
/**
* {@inheritdoc}
*/
public function provideValidComparisonsToPropertyPath()
{
return array(
array(4),
);
}
/**
* {@inheritdoc}
*/
@@ -50,6 +50,16 @@ class NotEqualToValidatorTest extends AbstractComparisonValidatorTestCase
);
}
/**
* {@inheritdoc}
*/
public function provideValidComparisonsToPropertyPath()
{
return array(
array(0),
);
}
/**
* {@inheritdoc}
*/
@@ -53,6 +53,16 @@ class NotIdenticalToValidatorTest extends AbstractComparisonValidatorTestCase
);
}
/**
* {@inheritdoc}
*/
public function provideValidComparisonsToPropertyPath()
{
return array(
array(0),
);
}
public function provideAllInvalidComparisons()
{
$this->setDefaultTimezone('UTC');
+1 -1
View File
@@ -9,7 +9,7 @@
* file that was distributed with this source code.
*/
namespace Constraints;
namespace Symfony\Component\Validator\Tests\Constraints;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Validator\Constraints\Regex;
@@ -206,7 +206,7 @@ class UrlValidatorTest extends ConstraintValidatorTestCase
DnsMock::withMockedHosts(array('example.com' => array(array('type' => $violation ? '' : 'A'))));
$constraint = new Url(array(
'checkDNS' => true,
'checkDNS' => 'ANY',
'dnsMessage' => 'myMessage',
));
@@ -226,6 +226,58 @@ class UrlValidatorTest extends ConstraintValidatorTestCase
{
return array(array(true), array(false));
}
/**
* @dataProvider getCheckDnsTypes
* @requires function Symfony\Bridge\PhpUnit\DnsMock::withMockedHosts
*/
public function testCheckDnsByType($type)
{
DnsMock::withMockedHosts(array('example.com' => array(array('type' => $type))));
$constraint = new Url(array(
'checkDNS' => $type,
'dnsMessage' => 'myMessage',
));
$this->validator->validate('http://example.com', $constraint);
$this->assertNoViolation();
}
public function getCheckDnsTypes()
{
return array(
array('ANY'),
array('A'),
array('A6'),
array('AAAA'),
array('CNAME'),
array('MX'),
array('NAPTR'),
array('NS'),
array('PTR'),
array('SOA'),
array('SRV'),
array('TXT'),
);
}
/**
* @expectedException \Symfony\Component\Validator\Exception\InvalidOptionsException
* @requires function Symfony\Bridge\PhpUnit\DnsMock::withMockedHosts
*/
public function testCheckDnsWithInvalidType()
{
DnsMock::withMockedHosts(array('example.com' => array(array('type' => 'A'))));
$constraint = new Url(array(
'checkDNS' => 'BOGUS',
'dnsMessage' => 'myMessage',
));
$this->validator->validate('http://example.com', $constraint);
}
}
class EmailProvider
+11 -5
View File
@@ -19,11 +19,17 @@ use Symfony\Component\Validator\Constraints\Valid;
*/
class ValidTest extends TestCase
{
/**
* @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
*/
public function testRejectGroupsOption()
public function testGroupsCanBeSet()
{
new Valid(array('groups' => 'foo'));
$constraint = new Valid(array('groups' => 'foo'));
$this->assertSame(array('foo'), $constraint->groups);
}
public function testGroupsAreNullByDefault()
{
$constraint = new Valid();
$this->assertNull($constraint->groups);
}
}
@@ -13,7 +13,6 @@ namespace Symfony\Component\Validator\Tests;
use PHPUnit\Framework\TestCase;
use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\Constraints\Blank as BlankConstraint;
use Symfony\Component\Validator\ConstraintValidator;
@@ -23,16 +22,8 @@ class ContainerConstraintValidatorFactoryTest extends TestCase
{
public function testGetInstanceCreatesValidator()
{
$class = get_class($this->getMockForAbstractClass(ConstraintValidator::class));
$constraint = $this->getMockBuilder(Constraint::class)->getMock();
$constraint
->expects($this->once())
->method('validatedBy')
->will($this->returnValue($class));
$factory = new ContainerConstraintValidatorFactory(new Container());
$this->assertInstanceOf($class, $factory->getInstance($constraint));
$this->assertInstanceOf(DummyConstraintValidator::class, $factory->getInstance(new DummyConstraint()));
}
public function testGetInstanceReturnsExistingValidator()
@@ -45,30 +36,13 @@ class ContainerConstraintValidatorFactoryTest extends TestCase
public function testGetInstanceReturnsService()
{
$service = 'validator_constraint_service';
$validator = $this->getMockForAbstractClass(ConstraintValidator::class);
// mock ContainerBuilder b/c it implements TaggedContainerInterface
$container = $this->getMockBuilder(ContainerBuilder::class)->setMethods(array('get', 'has'))->getMock();
$container
->expects($this->once())
->method('get')
->with($service)
->willReturn($validator);
$container
->expects($this->once())
->method('has')
->with($service)
->willReturn(true);
$constraint = $this->getMockBuilder(Constraint::class)->getMock();
$constraint
->expects($this->once())
->method('validatedBy')
->will($this->returnValue($service));
$validator = new DummyConstraintValidator();
$container = new Container();
$container->set(DummyConstraintValidator::class, $validator);
$factory = new ContainerConstraintValidatorFactory($container);
$this->assertSame($validator, $factory->getInstance($constraint));
$this->assertSame($validator, $factory->getInstance(new DummyConstraint()));
}
/**
@@ -86,3 +60,18 @@ class ContainerConstraintValidatorFactoryTest extends TestCase
$factory->getInstance($constraint);
}
}
class DummyConstraint extends Constraint
{
public function validatedBy()
{
return DummyConstraintValidator::class;
}
}
class DummyConstraintValidator extends ConstraintValidator
{
public function validate($value, Constraint $constraint)
{
}
}
@@ -12,12 +12,12 @@
namespace Symfony\Component\Validator\Tests\DependencyInjection;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Validator\DependencyInjection\AddConstraintValidatorsPass;
use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\DependencyInjection\ServiceLocator;
use Symfony\Component\Validator\DependencyInjection\AddConstraintValidatorsPass;
class AddConstraintValidatorsPassTest extends TestCase
{
@@ -50,7 +50,7 @@ class AddConstraintValidatorsPassTest extends TestCase
public function testAbstractConstraintValidator()
{
$container = new ContainerBuilder();
$validatorFactory = $container->register('validator.validator_factory')
$container->register('validator.validator_factory')
->addArgument(array());
$container->register('my_abstract_constraint_validator')
@@ -63,18 +63,16 @@ class AddConstraintValidatorsPassTest extends TestCase
public function testThatCompilerPassIsIgnoredIfThereIsNoConstraintValidatorFactoryDefinition()
{
$definition = $this->getMockBuilder('Symfony\Component\DependencyInjection\Definition')->getMock();
$container = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')->setMethods(array('hasDefinition', 'findTaggedServiceIds', 'getDefinition'))->getMock();
$container = new ContainerBuilder();
$container->expects($this->never())->method('findTaggedServiceIds');
$container->expects($this->never())->method('getDefinition');
$container->expects($this->atLeastOnce())
->method('hasDefinition')
->with('validator.validator_factory')
->will($this->returnValue(false));
$definition->expects($this->never())->method('replaceArgument');
$definitionsBefore = \count($container->getDefinitions());
$aliasesBefore = \count($container->getAliases());
$addConstraintValidatorsPass = new AddConstraintValidatorsPass();
$addConstraintValidatorsPass->process($container);
// the container is untouched (i.e. no new definitions or aliases)
$this->assertCount($definitionsBefore, $container->getDefinitions());
$this->assertCount($aliasesBefore, $container->getAliases());
}
}
+1 -1
View File
@@ -22,6 +22,6 @@ class Countable implements \Countable
public function count()
{
return count($this->content);
return \count($this->content);
}
}
@@ -55,7 +55,7 @@ class CustomArrayObject implements \ArrayAccess, \IteratorAggregate, \Countable,
public function count()
{
return count($this->array);
return \count($this->array);
}
public function serialize()
@@ -11,8 +11,8 @@
namespace Symfony\Component\Validator\Tests\Fixtures;
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Symfony\Component\Validator\Constraints\Length;
use Symfony\Component\Validator\Mapping\ClassMetadata;
class EntityStaticCar extends EntityStaticVehicle
{
@@ -11,8 +11,8 @@
namespace Symfony\Component\Validator\Tests\Fixtures;
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Symfony\Component\Validator\Constraints\Length;
use Symfony\Component\Validator\Mapping\ClassMetadata;
class EntityStaticCarTurbo extends EntityStaticCar
{
@@ -11,8 +11,8 @@
namespace Symfony\Component\Validator\Tests\Fixtures;
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Symfony\Component\Validator\Constraints\Length;
use Symfony\Component\Validator\Mapping\ClassMetadata;
class EntityStaticVehicle
{
@@ -23,13 +23,13 @@ class FakeMetadataFactory implements MetadataFactoryInterface
{
$hash = null;
if (is_object($class)) {
if (\is_object($class)) {
$hash = spl_object_hash($class);
$class = get_class($class);
$class = \get_class($class);
}
if (!is_string($class)) {
throw new NoSuchMetadataException(sprintf('No metadata for type %s', gettype($class)));
if (!\is_string($class)) {
throw new NoSuchMetadataException(sprintf('No metadata for type %s', \gettype($class)));
}
if (!isset($this->metadatas[$class])) {
@@ -47,12 +47,12 @@ class FakeMetadataFactory implements MetadataFactoryInterface
{
$hash = null;
if (is_object($class)) {
if (\is_object($class)) {
$hash = spl_object_hash($class);
$class = get_class($class);
$class = \get_class($class);
}
if (!is_string($class)) {
if (!\is_string($class)) {
return false;
}
@@ -66,7 +66,7 @@ class FakeMetadataFactory implements MetadataFactoryInterface
public function addMetadataForValue($value, MetadataInterface $metadata)
{
$key = is_object($value) ? spl_object_hash($value) : $value;
$key = \is_object($value) ? spl_object_hash($value) : $value;
$this->metadatas[$key] = $metadata;
}
}
@@ -149,6 +149,21 @@ class LazyLoadingMetadataFactoryTest extends TestCase
$this->assertEquals($metadata, $factory->getMetadataFor(self::PARENT_CLASS));
}
/**
* @expectedException \Symfony\Component\Validator\Exception\NoSuchMetadataException
*/
public function testNonClassNameStringValues()
{
$testedValue = 'error@example.com';
$loader = $this->getMockBuilder('Symfony\Component\Validator\Mapping\Loader\LoaderInterface')->getMock();
$cache = $this->getMockBuilder('Symfony\Component\Validator\Mapping\Cache\CacheInterface')->getMock();
$factory = new LazyLoadingMetadataFactory($loader, $cache);
$cache
->expects($this->never())
->method('read');
$factory->getMetadataFor($testedValue);
}
public function testMetadataCacheWithRuntimeConstraint()
{
$cache = $this->getMockBuilder('Symfony\Component\Validator\Mapping\Cache\CacheInterface')->getMock();
@@ -17,9 +17,9 @@ use Symfony\Component\Validator\Constraints\All;
use Symfony\Component\Validator\Constraints\Callback;
use Symfony\Component\Validator\Constraints\Choice;
use Symfony\Component\Validator\Constraints\Collection;
use Symfony\Component\Validator\Constraints\IsTrue;
use Symfony\Component\Validator\Constraints\NotNull;
use Symfony\Component\Validator\Constraints\Range;
use Symfony\Component\Validator\Constraints\IsTrue;
use Symfony\Component\Validator\Constraints\Valid;
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Symfony\Component\Validator\Mapping\Loader\AnnotationLoader;
@@ -16,10 +16,10 @@ use Symfony\Component\Validator\Constraints\All;
use Symfony\Component\Validator\Constraints\Callback;
use Symfony\Component\Validator\Constraints\Choice;
use Symfony\Component\Validator\Constraints\Collection;
use Symfony\Component\Validator\Constraints\IsTrue;
use Symfony\Component\Validator\Constraints\NotNull;
use Symfony\Component\Validator\Constraints\Range;
use Symfony\Component\Validator\Constraints\Regex;
use Symfony\Component\Validator\Constraints\IsTrue;
use Symfony\Component\Validator\Constraints\Traverse;
use Symfony\Component\Validator\Exception\MappingException;
use Symfony\Component\Validator\Mapping\ClassMetadata;
@@ -16,9 +16,9 @@ use Symfony\Component\Validator\Constraints\All;
use Symfony\Component\Validator\Constraints\Callback;
use Symfony\Component\Validator\Constraints\Choice;
use Symfony\Component\Validator\Constraints\Collection;
use Symfony\Component\Validator\Constraints\IsTrue;
use Symfony\Component\Validator\Constraints\NotNull;
use Symfony\Component\Validator\Constraints\Range;
use Symfony\Component\Validator\Constraints\IsTrue;
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Symfony\Component\Validator\Mapping\Loader\YamlFileLoader;
use Symfony\Component\Validator\Tests\Fixtures\ConstraintA;
@@ -124,6 +124,19 @@ class YamlFileLoaderTest extends TestCase
$this->assertEquals($expected, $metadata);
}
public function testLoadClassMetadataWithConstants()
{
$loader = new YamlFileLoader(__DIR__.'/mapping-with-constants.yml');
$metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity');
$loader->loadClassMetadata($metadata);
$expected = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity');
$expected->addPropertyConstraint('firstName', new Range(array('max' => PHP_INT_MAX)));
$this->assertEquals($expected, $metadata);
}
public function testLoadGroupSequenceProvider()
{
$loader = new YamlFileLoader(__DIR__.'/constraint-mapping.yml');
@@ -33,15 +33,15 @@ class TranslationFilesTest extends TestCase
{
return array_map(
function ($filePath) { return (array) $filePath; },
glob(dirname(dirname(__DIR__)).'/Resources/translations/*.xlf')
glob(\dirname(\dirname(__DIR__)).'/Resources/translations/*.xlf')
);
}
public function testNorwegianAlias()
{
$this->assertFileEquals(
dirname(dirname(__DIR__)).'/Resources/translations/validators.nb.xlf',
dirname(dirname(__DIR__)).'/Resources/translations/validators.no.xlf',
\dirname(\dirname(__DIR__)).'/Resources/translations/validators.nb.xlf',
\dirname(\dirname(__DIR__)).'/Resources/translations/validators.no.xlf',
'The NO locale should be an alias for the NB variant of the Norwegian language.'
);
}
@@ -15,6 +15,7 @@ use Symfony\Component\Validator\Constraints\Callback;
use Symfony\Component\Validator\Constraints\Collection;
use Symfony\Component\Validator\Constraints\Expression;
use Symfony\Component\Validator\Constraints\GroupSequence;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Validator\Constraints\NotNull;
use Symfony\Component\Validator\Constraints\Traverse;
use Symfony\Component\Validator\Constraints\Valid;
@@ -670,4 +671,38 @@ abstract class AbstractTest extends AbstractValidatorTest
$this->assertCount(1, $violations);
$this->assertSame($constraint, $violations[0]->getConstraint());
}
public function testNestedObjectIsNotValidatedIfGroupInValidConstraintIsNotValidated()
{
$entity = new Entity();
$entity->firstName = '';
$reference = new Reference();
$reference->value = '';
$entity->childA = $reference;
$this->metadata->addPropertyConstraint('firstName', new NotBlank(array('groups' => 'group1')));
$this->metadata->addPropertyConstraint('childA', new Valid(array('groups' => 'group1')));
$this->referenceMetadata->addPropertyConstraint('value', new NotBlank());
$violations = $this->validator->validate($entity, null, array());
$this->assertCount(0, $violations);
}
public function testNestedObjectIsValidatedIfGroupInValidConstraintIsValidated()
{
$entity = new Entity();
$entity->firstName = '';
$reference = new Reference();
$reference->value = '';
$entity->childA = $reference;
$this->metadata->addPropertyConstraint('firstName', new NotBlank(array('groups' => 'group1')));
$this->metadata->addPropertyConstraint('childA', new Valid(array('groups' => 'group1')));
$this->referenceMetadata->addPropertyConstraint('value', new NotBlank(array('groups' => 'group1')));
$violations = $this->validator->validate($entity, null, array('Default', 'group1'));
$this->assertCount(2, $violations);
}
}
@@ -1172,7 +1172,7 @@ abstract class AbstractValidatorTest extends TestCase
$context->addViolation('Violation in Group 3');
};
$metadata = new ClassMetadata(get_class($entity));
$metadata = new ClassMetadata(\get_class($entity));
$metadata->addConstraint(new Callback(array(
'callback' => function () {},
'groups' => 'Group 1',
@@ -1192,7 +1192,7 @@ abstract class AbstractValidatorTest extends TestCase
$violations = $this->validate($entity, null, 'Default');
/* @var ConstraintViolationInterface[] $violations */
$this->assertCount(count($assertViolations), $violations);
$this->assertCount(\count($assertViolations), $violations);
foreach ($assertViolations as $key => $message) {
$this->assertSame($message, $violations[$key]->getMessage());
}