forked from GNUsocial/gnu-social
		
	
		
			
	
	
		
			193 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			193 lines
		
	
	
		
			5.3 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\Constraint; | ||
|  | 
 | ||
|  | class ComparisonTest_Class | ||
|  | { | ||
|  |     protected $value; | ||
|  | 
 | ||
|  |     public function __construct($value) | ||
|  |     { | ||
|  |         $this->value = $value; | ||
|  |     } | ||
|  | 
 | ||
|  |     public function __toString() | ||
|  |     { | ||
|  |         return (string) $this->value; | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * @author Daniel Holmes <daniel@danielholmes.org> | ||
|  |  */ | ||
|  | abstract class AbstractComparisonValidatorTestCase extends AbstractConstraintValidatorTest | ||
|  | { | ||
|  |     protected static function addPhp5Dot5Comparisons(array $comparisons) | ||
|  |     { | ||
|  |         if (\PHP_VERSION_ID < 50500) { | ||
|  |             return $comparisons; | ||
|  |         } | ||
|  | 
 | ||
|  |         $result = $comparisons; | ||
|  | 
 | ||
|  |         // Duplicate all tests involving DateTime objects to be tested with
 | ||
|  |         // DateTimeImmutable objects as well
 | ||
|  |         foreach ($comparisons as $comparison) { | ||
|  |             $add = false; | ||
|  | 
 | ||
|  |             foreach ($comparison as $i => $value) { | ||
|  |                 if ($value instanceof \DateTime) { | ||
|  |                     $comparison[$i] = new \DateTimeImmutable( | ||
|  |                         $value->format('Y-m-d H:i:s.u e'), | ||
|  |                         $value->getTimezone() | ||
|  |                     ); | ||
|  |                     $add = true; | ||
|  |                 } elseif ('DateTime' === $value) { | ||
|  |                     $comparison[$i] = 'DateTimeImmutable'; | ||
|  |                     $add = true; | ||
|  |                 } | ||
|  |             } | ||
|  | 
 | ||
|  |             if ($add) { | ||
|  |                 $result[] = $comparison; | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         return $result; | ||
|  |     } | ||
|  | 
 | ||
|  |     public function provideInvalidConstraintOptions() | ||
|  |     { | ||
|  |         return array( | ||
|  |             array(null), | ||
|  |             array(array()), | ||
|  |         ); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @dataProvider provideInvalidConstraintOptions | ||
|  |      * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException | ||
|  |      */ | ||
|  |     public function testThrowsConstraintExceptionIfNoValueOrProperty($options) | ||
|  |     { | ||
|  |         $this->createConstraint($options); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @dataProvider provideAllValidComparisons | ||
|  |      * | ||
|  |      * @param mixed $dirtyValue | ||
|  |      * @param mixed $comparisonValue | ||
|  |      */ | ||
|  |     public function testValidComparisonToValue($dirtyValue, $comparisonValue) | ||
|  |     { | ||
|  |         $constraint = $this->createConstraint(array('value' => $comparisonValue)); | ||
|  | 
 | ||
|  |         $this->validator->validate($dirtyValue, $constraint); | ||
|  | 
 | ||
|  |         $this->assertNoViolation(); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @return array | ||
|  |      */ | ||
|  |     public function provideAllValidComparisons() | ||
|  |     { | ||
|  |         // The provider runs before setUp(), so we need to manually fix
 | ||
|  |         // the default timezone
 | ||
|  |         $this->setDefaultTimezone('UTC'); | ||
|  | 
 | ||
|  |         $comparisons = self::addPhp5Dot5Comparisons($this->provideValidComparisons()); | ||
|  | 
 | ||
|  |         $this->restoreDefaultTimezone(); | ||
|  | 
 | ||
|  |         return $comparisons; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @return array | ||
|  |      */ | ||
|  |     abstract public function provideValidComparisons(); | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @dataProvider provideAllInvalidComparisons | ||
|  |      * | ||
|  |      * @param mixed  $dirtyValue | ||
|  |      * @param mixed  $dirtyValueAsString | ||
|  |      * @param mixed  $comparedValue | ||
|  |      * @param mixed  $comparedValueString | ||
|  |      * @param string $comparedValueType | ||
|  |      */ | ||
|  |     public function testInvalidComparisonToValue($dirtyValue, $dirtyValueAsString, $comparedValue, $comparedValueString, $comparedValueType) | ||
|  |     { | ||
|  |         // Conversion of dates to string differs between ICU versions
 | ||
|  |         // Make sure we have the correct version loaded
 | ||
|  |         if ($dirtyValue instanceof \DateTime || $dirtyValue instanceof \DateTimeInterface) { | ||
|  |             IntlTestHelper::requireIntl($this, '57.1'); | ||
|  | 
 | ||
|  |             if (\PHP_VERSION_ID < 50304 && !(\extension_loaded('intl') && method_exists('IntlDateFormatter', 'setTimeZone'))) { | ||
|  |                 $this->markTestSkipped('Intl supports formatting DateTime objects since 5.3.4'); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         $constraint = $this->createConstraint(array('value' => $comparedValue)); | ||
|  |         $constraint->message = 'Constraint Message'; | ||
|  | 
 | ||
|  |         $this->validator->validate($dirtyValue, $constraint); | ||
|  | 
 | ||
|  |         $this->buildViolation('Constraint Message') | ||
|  |             ->setParameter('{{ value }}', $dirtyValueAsString) | ||
|  |             ->setParameter('{{ compared_value }}', $comparedValueString) | ||
|  |             ->setParameter('{{ compared_value_type }}', $comparedValueType) | ||
|  |             ->setCode($this->getErrorCode()) | ||
|  |             ->assertRaised(); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @return array | ||
|  |      */ | ||
|  |     public function provideAllInvalidComparisons() | ||
|  |     { | ||
|  |         // The provider runs before setUp(), so we need to manually fix
 | ||
|  |         // the default timezone
 | ||
|  |         $this->setDefaultTimezone('UTC'); | ||
|  | 
 | ||
|  |         $comparisons = self::addPhp5Dot5Comparisons($this->provideInvalidComparisons()); | ||
|  | 
 | ||
|  |         $this->restoreDefaultTimezone(); | ||
|  | 
 | ||
|  |         return $comparisons; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @return array | ||
|  |      */ | ||
|  |     abstract public function provideInvalidComparisons(); | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @param array|null $options Options for the constraint | ||
|  |      * | ||
|  |      * @return Constraint | ||
|  |      */ | ||
|  |     abstract protected function createConstraint(array $options = null); | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @return string|null | ||
|  |      */ | ||
|  |     protected function getErrorCode() | ||
|  |     { | ||
|  |     } | ||
|  | } |