forked from GNUsocial/gnu-social
		
	
		
			
				
	
	
		
			404 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			404 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?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\Intl\Util\IntlTestHelper;
 | 
						|
use Symfony\Component\Validator\Constraints\Range;
 | 
						|
use Symfony\Component\Validator\Constraints\RangeValidator;
 | 
						|
use Symfony\Component\Validator\Validation;
 | 
						|
 | 
						|
class RangeValidatorTest extends AbstractConstraintValidatorTest
 | 
						|
{
 | 
						|
    protected function getApiVersion()
 | 
						|
    {
 | 
						|
        return Validation::API_VERSION_2_5;
 | 
						|
    }
 | 
						|
 | 
						|
    protected function createValidator()
 | 
						|
    {
 | 
						|
        return new RangeValidator();
 | 
						|
    }
 | 
						|
 | 
						|
    public function testNullIsValid()
 | 
						|
    {
 | 
						|
        $this->validator->validate(null, new Range(array('min' => 10, 'max' => 20)));
 | 
						|
 | 
						|
        $this->assertNoViolation();
 | 
						|
    }
 | 
						|
 | 
						|
    public function getTenToTwenty()
 | 
						|
    {
 | 
						|
        return array(
 | 
						|
            array(10.00001),
 | 
						|
            array(19.99999),
 | 
						|
            array('10.00001'),
 | 
						|
            array('19.99999'),
 | 
						|
            array(10),
 | 
						|
            array(20),
 | 
						|
            array(10.0),
 | 
						|
            array(20.0),
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    public function getLessThanTen()
 | 
						|
    {
 | 
						|
        return array(
 | 
						|
            array(9.99999, '9.99999'),
 | 
						|
            array('9.99999', '"9.99999"'),
 | 
						|
            array(5, '5'),
 | 
						|
            array(1.0, '1.0'),
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    public function getMoreThanTwenty()
 | 
						|
    {
 | 
						|
        return array(
 | 
						|
            array(20.000001, '20.000001'),
 | 
						|
            array('20.000001', '"20.000001"'),
 | 
						|
            array(21, '21'),
 | 
						|
            array(30.0, '30.0'),
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @dataProvider getTenToTwenty
 | 
						|
     */
 | 
						|
    public function testValidValuesMin($value)
 | 
						|
    {
 | 
						|
        $constraint = new Range(array('min' => 10));
 | 
						|
        $this->validator->validate($value, $constraint);
 | 
						|
 | 
						|
        $this->assertNoViolation();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @dataProvider getTenToTwenty
 | 
						|
     */
 | 
						|
    public function testValidValuesMax($value)
 | 
						|
    {
 | 
						|
        $constraint = new Range(array('max' => 20));
 | 
						|
        $this->validator->validate($value, $constraint);
 | 
						|
 | 
						|
        $this->assertNoViolation();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @dataProvider getTenToTwenty
 | 
						|
     */
 | 
						|
    public function testValidValuesMinMax($value)
 | 
						|
    {
 | 
						|
        $constraint = new Range(array('min' => 10, 'max' => 20));
 | 
						|
        $this->validator->validate($value, $constraint);
 | 
						|
 | 
						|
        $this->assertNoViolation();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @dataProvider getLessThanTen
 | 
						|
     */
 | 
						|
    public function testInvalidValuesMin($value, $formattedValue)
 | 
						|
    {
 | 
						|
        $constraint = new Range(array(
 | 
						|
            'min' => 10,
 | 
						|
            'minMessage' => 'myMessage',
 | 
						|
        ));
 | 
						|
 | 
						|
        $this->validator->validate($value, $constraint);
 | 
						|
 | 
						|
        $this->buildViolation('myMessage')
 | 
						|
            ->setParameter('{{ value }}', $formattedValue)
 | 
						|
            ->setParameter('{{ limit }}', 10)
 | 
						|
            ->setCode(Range::TOO_LOW_ERROR)
 | 
						|
            ->assertRaised();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @dataProvider getMoreThanTwenty
 | 
						|
     */
 | 
						|
    public function testInvalidValuesMax($value, $formattedValue)
 | 
						|
    {
 | 
						|
        $constraint = new Range(array(
 | 
						|
            'max' => 20,
 | 
						|
            'maxMessage' => 'myMessage',
 | 
						|
        ));
 | 
						|
 | 
						|
        $this->validator->validate($value, $constraint);
 | 
						|
 | 
						|
        $this->buildViolation('myMessage')
 | 
						|
            ->setParameter('{{ value }}', $formattedValue)
 | 
						|
            ->setParameter('{{ limit }}', 20)
 | 
						|
            ->setCode(Range::TOO_HIGH_ERROR)
 | 
						|
            ->assertRaised();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @dataProvider getMoreThanTwenty
 | 
						|
     */
 | 
						|
    public function testInvalidValuesCombinedMax($value, $formattedValue)
 | 
						|
    {
 | 
						|
        $constraint = new Range(array(
 | 
						|
            'min' => 10,
 | 
						|
            'max' => 20,
 | 
						|
            'minMessage' => 'myMinMessage',
 | 
						|
            'maxMessage' => 'myMaxMessage',
 | 
						|
        ));
 | 
						|
 | 
						|
        $this->validator->validate($value, $constraint);
 | 
						|
 | 
						|
        $this->buildViolation('myMaxMessage')
 | 
						|
            ->setParameter('{{ value }}', $formattedValue)
 | 
						|
            ->setParameter('{{ limit }}', 20)
 | 
						|
            ->setCode(Range::TOO_HIGH_ERROR)
 | 
						|
            ->assertRaised();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @dataProvider getLessThanTen
 | 
						|
     */
 | 
						|
    public function testInvalidValuesCombinedMin($value, $formattedValue)
 | 
						|
    {
 | 
						|
        $constraint = new Range(array(
 | 
						|
            'min' => 10,
 | 
						|
            'max' => 20,
 | 
						|
            'minMessage' => 'myMinMessage',
 | 
						|
            'maxMessage' => 'myMaxMessage',
 | 
						|
        ));
 | 
						|
 | 
						|
        $this->validator->validate($value, $constraint);
 | 
						|
 | 
						|
        $this->buildViolation('myMinMessage')
 | 
						|
            ->setParameter('{{ value }}', $formattedValue)
 | 
						|
            ->setParameter('{{ limit }}', 10)
 | 
						|
            ->setCode(Range::TOO_LOW_ERROR)
 | 
						|
            ->assertRaised();
 | 
						|
    }
 | 
						|
 | 
						|
    public function getTenthToTwentiethMarch2014()
 | 
						|
    {
 | 
						|
        // The provider runs before setUp(), so we need to manually fix
 | 
						|
        // the default timezone
 | 
						|
        $this->setDefaultTimezone('UTC');
 | 
						|
 | 
						|
        $tests = array(
 | 
						|
            array(new \DateTime('March 10, 2014')),
 | 
						|
            array(new \DateTime('March 15, 2014')),
 | 
						|
            array(new \DateTime('March 20, 2014')),
 | 
						|
        );
 | 
						|
 | 
						|
        if (\PHP_VERSION_ID >= 50500) {
 | 
						|
            $tests[] = array(new \DateTimeImmutable('March 10, 2014'));
 | 
						|
            $tests[] = array(new \DateTimeImmutable('March 15, 2014'));
 | 
						|
            $tests[] = array(new \DateTimeImmutable('March 20, 2014'));
 | 
						|
        }
 | 
						|
 | 
						|
        $this->restoreDefaultTimezone();
 | 
						|
 | 
						|
        return $tests;
 | 
						|
    }
 | 
						|
 | 
						|
    public function getSoonerThanTenthMarch2014()
 | 
						|
    {
 | 
						|
        // The provider runs before setUp(), so we need to manually fix
 | 
						|
        // the default timezone
 | 
						|
        $this->setDefaultTimezone('UTC');
 | 
						|
 | 
						|
        $tests = array(
 | 
						|
            array(new \DateTime('March 20, 2013'), 'Mar 20, 2013, 12:00 AM'),
 | 
						|
            array(new \DateTime('March 9, 2014'), 'Mar 9, 2014, 12:00 AM'),
 | 
						|
        );
 | 
						|
 | 
						|
        if (\PHP_VERSION_ID >= 50500) {
 | 
						|
            $tests[] = array(new \DateTimeImmutable('March 20, 2013'), 'Mar 20, 2013, 12:00 AM');
 | 
						|
            $tests[] = array(new \DateTimeImmutable('March 9, 2014'), 'Mar 9, 2014, 12:00 AM');
 | 
						|
        }
 | 
						|
 | 
						|
        $this->restoreDefaultTimezone();
 | 
						|
 | 
						|
        return $tests;
 | 
						|
    }
 | 
						|
 | 
						|
    public function getLaterThanTwentiethMarch2014()
 | 
						|
    {
 | 
						|
        // The provider runs before setUp(), so we need to manually fix
 | 
						|
        // the default timezone
 | 
						|
        $this->setDefaultTimezone('UTC');
 | 
						|
 | 
						|
        $tests = array(
 | 
						|
            array(new \DateTime('March 21, 2014'), 'Mar 21, 2014, 12:00 AM'),
 | 
						|
            array(new \DateTime('March 9, 2015'), 'Mar 9, 2015, 12:00 AM'),
 | 
						|
        );
 | 
						|
 | 
						|
        if (\PHP_VERSION_ID >= 50500) {
 | 
						|
            $tests[] = array(new \DateTimeImmutable('March 21, 2014'), 'Mar 21, 2014, 12:00 AM');
 | 
						|
            $tests[] = array(new \DateTimeImmutable('March 9, 2015'), 'Mar 9, 2015, 12:00 AM');
 | 
						|
        }
 | 
						|
 | 
						|
        $this->restoreDefaultTimezone();
 | 
						|
 | 
						|
        return $tests;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @dataProvider getTenthToTwentiethMarch2014
 | 
						|
     */
 | 
						|
    public function testValidDatesMin($value)
 | 
						|
    {
 | 
						|
        $constraint = new Range(array('min' => 'March 10, 2014'));
 | 
						|
        $this->validator->validate($value, $constraint);
 | 
						|
 | 
						|
        $this->assertNoViolation();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @dataProvider getTenthToTwentiethMarch2014
 | 
						|
     */
 | 
						|
    public function testValidDatesMax($value)
 | 
						|
    {
 | 
						|
        $constraint = new Range(array('max' => 'March 20, 2014'));
 | 
						|
        $this->validator->validate($value, $constraint);
 | 
						|
 | 
						|
        $this->assertNoViolation();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @dataProvider getTenthToTwentiethMarch2014
 | 
						|
     */
 | 
						|
    public function testValidDatesMinMax($value)
 | 
						|
    {
 | 
						|
        $constraint = new Range(array('min' => 'March 10, 2014', 'max' => 'March 20, 2014'));
 | 
						|
        $this->validator->validate($value, $constraint);
 | 
						|
 | 
						|
        $this->assertNoViolation();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @dataProvider getSoonerThanTenthMarch2014
 | 
						|
     */
 | 
						|
    public function testInvalidDatesMin($value, $dateTimeAsString)
 | 
						|
    {
 | 
						|
        // Conversion of dates to string differs between ICU versions
 | 
						|
        // Make sure we have the correct version loaded
 | 
						|
        IntlTestHelper::requireIntl($this, '57.1');
 | 
						|
 | 
						|
        $constraint = new Range(array(
 | 
						|
            'min' => 'March 10, 2014',
 | 
						|
            'minMessage' => 'myMessage',
 | 
						|
        ));
 | 
						|
 | 
						|
        $this->validator->validate($value, $constraint);
 | 
						|
 | 
						|
        $this->buildViolation('myMessage')
 | 
						|
            ->setParameter('{{ value }}', $dateTimeAsString)
 | 
						|
            ->setParameter('{{ limit }}', 'Mar 10, 2014, 12:00 AM')
 | 
						|
            ->setCode(Range::TOO_LOW_ERROR)
 | 
						|
            ->assertRaised();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @dataProvider getLaterThanTwentiethMarch2014
 | 
						|
     */
 | 
						|
    public function testInvalidDatesMax($value, $dateTimeAsString)
 | 
						|
    {
 | 
						|
        // Conversion of dates to string differs between ICU versions
 | 
						|
        // Make sure we have the correct version loaded
 | 
						|
        IntlTestHelper::requireIntl($this, '57.1');
 | 
						|
 | 
						|
        $constraint = new Range(array(
 | 
						|
            'max' => 'March 20, 2014',
 | 
						|
            'maxMessage' => 'myMessage',
 | 
						|
        ));
 | 
						|
 | 
						|
        $this->validator->validate($value, $constraint);
 | 
						|
 | 
						|
        $this->buildViolation('myMessage')
 | 
						|
            ->setParameter('{{ value }}', $dateTimeAsString)
 | 
						|
            ->setParameter('{{ limit }}', 'Mar 20, 2014, 12:00 AM')
 | 
						|
            ->setCode(Range::TOO_HIGH_ERROR)
 | 
						|
            ->assertRaised();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @dataProvider getLaterThanTwentiethMarch2014
 | 
						|
     */
 | 
						|
    public function testInvalidDatesCombinedMax($value, $dateTimeAsString)
 | 
						|
    {
 | 
						|
        // Conversion of dates to string differs between ICU versions
 | 
						|
        // Make sure we have the correct version loaded
 | 
						|
        IntlTestHelper::requireIntl($this, '57.1');
 | 
						|
 | 
						|
        $constraint = new Range(array(
 | 
						|
            'min' => 'March 10, 2014',
 | 
						|
            'max' => 'March 20, 2014',
 | 
						|
            'minMessage' => 'myMinMessage',
 | 
						|
            'maxMessage' => 'myMaxMessage',
 | 
						|
        ));
 | 
						|
 | 
						|
        $this->validator->validate($value, $constraint);
 | 
						|
 | 
						|
        $this->buildViolation('myMaxMessage')
 | 
						|
            ->setParameter('{{ value }}', $dateTimeAsString)
 | 
						|
            ->setParameter('{{ limit }}', 'Mar 20, 2014, 12:00 AM')
 | 
						|
            ->setCode(Range::TOO_HIGH_ERROR)
 | 
						|
            ->assertRaised();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @dataProvider getSoonerThanTenthMarch2014
 | 
						|
     */
 | 
						|
    public function testInvalidDatesCombinedMin($value, $dateTimeAsString)
 | 
						|
    {
 | 
						|
        // Conversion of dates to string differs between ICU versions
 | 
						|
        // Make sure we have the correct version loaded
 | 
						|
        IntlTestHelper::requireIntl($this, '57.1');
 | 
						|
 | 
						|
        $constraint = new Range(array(
 | 
						|
            'min' => 'March 10, 2014',
 | 
						|
            'max' => 'March 20, 2014',
 | 
						|
            'minMessage' => 'myMinMessage',
 | 
						|
            'maxMessage' => 'myMaxMessage',
 | 
						|
        ));
 | 
						|
 | 
						|
        $this->validator->validate($value, $constraint);
 | 
						|
 | 
						|
        $this->buildViolation('myMinMessage')
 | 
						|
            ->setParameter('{{ value }}', $dateTimeAsString)
 | 
						|
            ->setParameter('{{ limit }}', 'Mar 10, 2014, 12:00 AM')
 | 
						|
            ->setCode(Range::TOO_LOW_ERROR)
 | 
						|
            ->assertRaised();
 | 
						|
    }
 | 
						|
 | 
						|
    public function getInvalidValues()
 | 
						|
    {
 | 
						|
        return array(
 | 
						|
            array(9.999999),
 | 
						|
            array(20.000001),
 | 
						|
            array('9.999999'),
 | 
						|
            array('20.000001'),
 | 
						|
            array(new \stdClass()),
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    public function testNonNumeric()
 | 
						|
    {
 | 
						|
        $this->validator->validate('abcd', new Range(array(
 | 
						|
            'min' => 10,
 | 
						|
            'max' => 20,
 | 
						|
            'invalidMessage' => 'myMessage',
 | 
						|
        )));
 | 
						|
 | 
						|
        $this->buildViolation('myMessage')
 | 
						|
            ->setParameter('{{ value }}', '"abcd"')
 | 
						|
            ->setCode(Range::INVALID_CHARACTERS_ERROR)
 | 
						|
            ->assertRaised();
 | 
						|
    }
 | 
						|
}
 |