forked from GNUsocial/gnu-social
		
	
		
			
	
	
		
			222 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			222 lines
		
	
	
		
			9.1 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\Validator\Constraints\Uuid; | ||
|  | use Symfony\Component\Validator\Constraints\UuidValidator; | ||
|  | use Symfony\Component\Validator\Validation; | ||
|  | 
 | ||
|  | /** | ||
|  |  * @author Colin O'Dell <colinodell@gmail.com> | ||
|  |  */ | ||
|  | class UuidValidatorTest extends AbstractConstraintValidatorTest | ||
|  | { | ||
|  |     protected function getApiVersion() | ||
|  |     { | ||
|  |         return Validation::API_VERSION_2_5; | ||
|  |     } | ||
|  | 
 | ||
|  |     protected function createValidator() | ||
|  |     { | ||
|  |         return new UuidValidator(); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testNullIsValid() | ||
|  |     { | ||
|  |         $this->validator->validate(null, new Uuid()); | ||
|  | 
 | ||
|  |         $this->assertNoViolation(); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testEmptyStringIsValid() | ||
|  |     { | ||
|  |         $this->validator->validate('', new Uuid()); | ||
|  | 
 | ||
|  |         $this->assertNoViolation(); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException | ||
|  |      */ | ||
|  |     public function testExpectsUuidConstraintCompatibleType() | ||
|  |     { | ||
|  |         $constraint = $this->getMockForAbstractClass('Symfony\\Component\\Validator\\Constraint'); | ||
|  | 
 | ||
|  |         $this->validator->validate('216fff40-98d9-11e3-a5e2-0800200c9a66', $constraint); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException | ||
|  |      */ | ||
|  |     public function testExpectsStringCompatibleType() | ||
|  |     { | ||
|  |         $this->validator->validate(new \stdClass(), new Uuid()); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @dataProvider getValidStrictUuids | ||
|  |      */ | ||
|  |     public function testValidStrictUuids($uuid, $versions = null) | ||
|  |     { | ||
|  |         $constraint = new Uuid(); | ||
|  | 
 | ||
|  |         if (null !== $versions) { | ||
|  |             $constraint->versions = $versions; | ||
|  |         } | ||
|  | 
 | ||
|  |         $this->validator->validate($uuid, $constraint); | ||
|  | 
 | ||
|  |         $this->assertNoViolation(); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function getValidStrictUuids() | ||
|  |     { | ||
|  |         return array( | ||
|  |             array('216fff40-98d9-11e3-a5e2-0800200c9a66'), // Version 1 UUID in lowercase
 | ||
|  |             array('216fff40-98d9-11e3-a5e2-0800200c9a66', array(Uuid::V1_MAC)), | ||
|  |             array('216FFF40-98D9-11E3-A5E2-0800200C9A66'), // Version 1 UUID in UPPERCASE
 | ||
|  |             array('456daefb-5aa6-41b5-8dbc-068b05a8b201'), // Version 4 UUID in lowercase
 | ||
|  |             array('456daEFb-5AA6-41B5-8DBC-068B05A8B201'), // Version 4 UUID in mixed case
 | ||
|  |             array('456daEFb-5AA6-41B5-8DBC-068B05A8B201', array(Uuid::V4_RANDOM)), | ||
|  |         ); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @dataProvider getInvalidStrictUuids | ||
|  |      */ | ||
|  |     public function testInvalidStrictUuids($uuid, $code, $versions = null) | ||
|  |     { | ||
|  |         $constraint = new Uuid(array( | ||
|  |             'message' => 'testMessage', | ||
|  |         )); | ||
|  | 
 | ||
|  |         if (null !== $versions) { | ||
|  |             $constraint->versions = $versions; | ||
|  |         } | ||
|  | 
 | ||
|  |         $this->validator->validate($uuid, $constraint); | ||
|  | 
 | ||
|  |         $this->buildViolation('testMessage') | ||
|  |             ->setParameter('{{ value }}', '"'.$uuid.'"') | ||
|  |             ->setCode($code) | ||
|  |             ->assertRaised(); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function getInvalidStrictUuids() | ||
|  |     { | ||
|  |         return array( | ||
|  |             array('216fff40-98d9-11e3-a5e2_0800200c9a66', Uuid::INVALID_CHARACTERS_ERROR), | ||
|  |             array('216gff40-98d9-11e3-a5e2-0800200c9a66', Uuid::INVALID_CHARACTERS_ERROR), | ||
|  |             array('216Gff40-98d9-11e3-a5e2-0800200c9a66', Uuid::INVALID_CHARACTERS_ERROR), | ||
|  |             array('216fff40-98d9-11e3-a5e-20800200c9a66', Uuid::INVALID_HYPHEN_PLACEMENT_ERROR), | ||
|  |             array('216f-ff40-98d9-11e3-a5e2-0800200c9a66', Uuid::INVALID_HYPHEN_PLACEMENT_ERROR), | ||
|  |             array('216fff40-98d9-11e3-a5e2-0800-200c9a66', Uuid::INVALID_HYPHEN_PLACEMENT_ERROR), | ||
|  |             array('216fff40-98d9-11e3-a5e2-0800200c-9a66', Uuid::INVALID_HYPHEN_PLACEMENT_ERROR), | ||
|  |             array('216fff40-98d9-11e3-a5e20800200c9a66', Uuid::INVALID_HYPHEN_PLACEMENT_ERROR), | ||
|  |             array('216fff4098d911e3a5e20800200c9a66', Uuid::INVALID_HYPHEN_PLACEMENT_ERROR), | ||
|  |             array('216fff40-98d9-11e3-a5e2-0800200c9a6', Uuid::TOO_SHORT_ERROR), | ||
|  |             array('216fff40-98d9-11e3-a5e2-0800200c9a666', Uuid::TOO_LONG_ERROR), | ||
|  |             array('216fff40-98d9-01e3-a5e2-0800200c9a66', Uuid::INVALID_VERSION_ERROR), | ||
|  |             array('216fff40-98d9-61e3-a5e2-0800200c9a66', Uuid::INVALID_VERSION_ERROR), | ||
|  |             array('216fff40-98d9-71e3-a5e2-0800200c9a66', Uuid::INVALID_VERSION_ERROR), | ||
|  |             array('216fff40-98d9-81e3-a5e2-0800200c9a66', Uuid::INVALID_VERSION_ERROR), | ||
|  |             array('216fff40-98d9-91e3-a5e2-0800200c9a66', Uuid::INVALID_VERSION_ERROR), | ||
|  |             array('216fff40-98d9-a1e3-a5e2-0800200c9a66', Uuid::INVALID_VERSION_ERROR), | ||
|  |             array('216fff40-98d9-b1e3-a5e2-0800200c9a66', Uuid::INVALID_VERSION_ERROR), | ||
|  |             array('216fff40-98d9-c1e3-a5e2-0800200c9a66', Uuid::INVALID_VERSION_ERROR), | ||
|  |             array('216fff40-98d9-d1e3-a5e2-0800200c9a66', Uuid::INVALID_VERSION_ERROR), | ||
|  |             array('216fff40-98d9-e1e3-a5e2-0800200c9a66', Uuid::INVALID_VERSION_ERROR), | ||
|  |             array('216fff40-98d9-f1e3-a5e2-0800200c9a66', Uuid::INVALID_VERSION_ERROR), | ||
|  |             array('216fff40-98d9-11e3-a5e2-0800200c9a66', Uuid::INVALID_VERSION_ERROR, array(Uuid::V2_DCE, Uuid::V3_MD5, Uuid::V4_RANDOM, Uuid::V5_SHA1)), | ||
|  |             array('216fff40-98d9-21e3-a5e2-0800200c9a66', Uuid::INVALID_VERSION_ERROR, array(Uuid::V1_MAC, Uuid::V3_MD5, Uuid::V4_RANDOM, Uuid::V5_SHA1)), | ||
|  |             array('216fff40-98d9-11e3-05e2-0800200c9a66', Uuid::INVALID_VARIANT_ERROR), | ||
|  |             array('216fff40-98d9-11e3-15e2-0800200c9a66', Uuid::INVALID_VARIANT_ERROR), | ||
|  |             array('216fff40-98d9-11e3-25e2-0800200c9a66', Uuid::INVALID_VARIANT_ERROR), | ||
|  |             array('216fff40-98d9-11e3-35e2-0800200c9a66', Uuid::INVALID_VARIANT_ERROR), | ||
|  |             array('216fff40-98d9-11e3-45e2-0800200c9a66', Uuid::INVALID_VARIANT_ERROR), | ||
|  |             array('216fff40-98d9-11e3-55e2-0800200c9a66', Uuid::INVALID_VARIANT_ERROR), | ||
|  |             array('216fff40-98d9-11e3-65e2-0800200c9a66', Uuid::INVALID_VARIANT_ERROR), | ||
|  |             array('216fff40-98d9-11e3-75e2-0800200c9a66', Uuid::INVALID_VARIANT_ERROR), | ||
|  |             array('216fff40-98d9-11e3-c5e2-0800200c9a66', Uuid::INVALID_VARIANT_ERROR), | ||
|  |             array('216fff40-98d9-11e3-d5e2-0800200c9a66', Uuid::INVALID_VARIANT_ERROR), | ||
|  |             array('216fff40-98d9-11e3-e5e2-0800200c9a66', Uuid::INVALID_VARIANT_ERROR), | ||
|  |             array('216fff40-98d9-11e3-f5e2-0800200c9a66', Uuid::INVALID_VARIANT_ERROR), | ||
|  | 
 | ||
|  |             // Non-standard UUID allowed by some other systems
 | ||
|  |             array('{216fff40-98d9-11e3-a5e2-0800200c9a66}', Uuid::INVALID_CHARACTERS_ERROR), | ||
|  |             array('[216fff40-98d9-11e3-a5e2-0800200c9a66]', Uuid::INVALID_CHARACTERS_ERROR), | ||
|  |         ); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @dataProvider getValidNonStrictUuids | ||
|  |      */ | ||
|  |     public function testValidNonStrictUuids($uuid) | ||
|  |     { | ||
|  |         $constraint = new Uuid(array( | ||
|  |             'strict' => false, | ||
|  |         )); | ||
|  | 
 | ||
|  |         $this->validator->validate($uuid, $constraint); | ||
|  | 
 | ||
|  |         $this->assertNoViolation(); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function getValidNonStrictUuids() | ||
|  |     { | ||
|  |         return array( | ||
|  |             array('216fff40-98d9-11e3-a5e2-0800200c9a66'),    // Version 1 UUID in lowercase
 | ||
|  |             array('216FFF40-98D9-11E3-A5E2-0800200C9A66'),    // Version 1 UUID in UPPERCASE
 | ||
|  |             array('456daefb-5aa6-41b5-8dbc-068b05a8b201'),    // Version 4 UUID in lowercase
 | ||
|  |             array('456DAEFb-5AA6-41B5-8DBC-068b05a8B201'),    // Version 4 UUID in mixed case
 | ||
|  | 
 | ||
|  |             // Non-standard UUIDs allowed by some other systems
 | ||
|  |             array('216f-ff40-98d9-11e3-a5e2-0800-200c-9a66'), // Non-standard dash positions (every 4 chars)
 | ||
|  |             array('216fff40-98d911e3-a5e20800-200c9a66'),     // Non-standard dash positions (every 8 chars)
 | ||
|  |             array('216fff4098d911e3a5e20800200c9a66'),        // No dashes at all
 | ||
|  |             array('{216fff40-98d9-11e3-a5e2-0800200c9a66}'),  // Wrapped with curly braces
 | ||
|  |             array('[216fff40-98d9-11e3-a5e2-0800200c9a66]'),  // Wrapped with squared braces
 | ||
|  |         ); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @dataProvider getInvalidNonStrictUuids | ||
|  |      */ | ||
|  |     public function testInvalidNonStrictUuids($uuid, $code) | ||
|  |     { | ||
|  |         $constraint = new Uuid(array( | ||
|  |             'strict' => false, | ||
|  |             'message' => 'myMessage', | ||
|  |         )); | ||
|  | 
 | ||
|  |         $this->validator->validate($uuid, $constraint); | ||
|  | 
 | ||
|  |         $this->buildViolation('myMessage') | ||
|  |             ->setParameter('{{ value }}', '"'.$uuid.'"') | ||
|  |             ->setCode($code) | ||
|  |             ->assertRaised(); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function getInvalidNonStrictUuids() | ||
|  |     { | ||
|  |         return array( | ||
|  |             array('216fff40-98d9-11e3-a5e2_0800200c9a66', Uuid::INVALID_CHARACTERS_ERROR), | ||
|  |             array('216gff40-98d9-11e3-a5e2-0800200c9a66', Uuid::INVALID_CHARACTERS_ERROR), | ||
|  |             array('216Gff40-98d9-11e3-a5e2-0800200c9a66', Uuid::INVALID_CHARACTERS_ERROR), | ||
|  |             array('216fff40-98d9-11e3-a5e2_0800200c9a6', Uuid::INVALID_CHARACTERS_ERROR), | ||
|  |             array('216fff40-98d9-11e3-a5e-20800200c9a66', Uuid::INVALID_HYPHEN_PLACEMENT_ERROR), | ||
|  |             array('216fff40-98d9-11e3-a5e2-0800200c9a6', Uuid::TOO_SHORT_ERROR), | ||
|  |             array('216fff40-98d9-11e3-a5e2-0800200c9a666', Uuid::TOO_LONG_ERROR), | ||
|  |         ); | ||
|  |     } | ||
|  | } |