forked from GNUsocial/gnu-social
		
	
		
			
	
	
		
			246 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			246 lines
		
	
	
		
			7.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; | ||
|  | 
 | ||
|  | use PHPUnit\Framework\TestCase; | ||
|  | use Symfony\Component\Validator\Constraint; | ||
|  | use Symfony\Component\Validator\Tests\Fixtures\ClassConstraint; | ||
|  | use Symfony\Component\Validator\Tests\Fixtures\ConstraintA; | ||
|  | use Symfony\Component\Validator\Tests\Fixtures\ConstraintB; | ||
|  | use Symfony\Component\Validator\Tests\Fixtures\ConstraintC; | ||
|  | use Symfony\Component\Validator\Tests\Fixtures\ConstraintWithValue; | ||
|  | use Symfony\Component\Validator\Tests\Fixtures\ConstraintWithValueAsDefault; | ||
|  | 
 | ||
|  | class ConstraintTest extends TestCase | ||
|  | { | ||
|  |     public function testSetProperties() | ||
|  |     { | ||
|  |         $constraint = new ConstraintA(array( | ||
|  |             'property1' => 'foo', | ||
|  |             'property2' => 'bar', | ||
|  |         )); | ||
|  | 
 | ||
|  |         $this->assertEquals('foo', $constraint->property1); | ||
|  |         $this->assertEquals('bar', $constraint->property2); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testSetNotExistingPropertyThrowsException() | ||
|  |     { | ||
|  |         $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\Validator\Exception\InvalidOptionsException'); | ||
|  | 
 | ||
|  |         new ConstraintA(array( | ||
|  |             'foo' => 'bar', | ||
|  |         )); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testMagicPropertiesAreNotAllowed() | ||
|  |     { | ||
|  |         $constraint = new ConstraintA(); | ||
|  | 
 | ||
|  |         $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\Validator\Exception\InvalidOptionsException'); | ||
|  | 
 | ||
|  |         $constraint->foo = 'bar'; | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testInvalidAndRequiredOptionsPassed() | ||
|  |     { | ||
|  |         $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\Validator\Exception\InvalidOptionsException'); | ||
|  | 
 | ||
|  |         new ConstraintC(array( | ||
|  |             'option1' => 'default', | ||
|  |             'foo' => 'bar', | ||
|  |         )); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testSetDefaultProperty() | ||
|  |     { | ||
|  |         $constraint = new ConstraintA('foo'); | ||
|  | 
 | ||
|  |         $this->assertEquals('foo', $constraint->property2); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testSetDefaultPropertyDoctrineStyle() | ||
|  |     { | ||
|  |         $constraint = new ConstraintA(array('value' => 'foo')); | ||
|  | 
 | ||
|  |         $this->assertEquals('foo', $constraint->property2); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testSetDefaultPropertyDoctrineStylePlusOtherProperty() | ||
|  |     { | ||
|  |         $constraint = new ConstraintA(array('value' => 'foo', 'property1' => 'bar')); | ||
|  | 
 | ||
|  |         $this->assertEquals('foo', $constraint->property2); | ||
|  |         $this->assertEquals('bar', $constraint->property1); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testSetDefaultPropertyDoctrineStyleWhenDefaultPropertyIsNamedValue() | ||
|  |     { | ||
|  |         $constraint = new ConstraintWithValueAsDefault(array('value' => 'foo')); | ||
|  | 
 | ||
|  |         $this->assertEquals('foo', $constraint->value); | ||
|  |         $this->assertNull($constraint->property); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testDontSetDefaultPropertyIfValuePropertyExists() | ||
|  |     { | ||
|  |         $constraint = new ConstraintWithValue(array('value' => 'foo')); | ||
|  | 
 | ||
|  |         $this->assertEquals('foo', $constraint->value); | ||
|  |         $this->assertNull($constraint->property); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testSetUndefinedDefaultProperty() | ||
|  |     { | ||
|  |         $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\Validator\Exception\ConstraintDefinitionException'); | ||
|  | 
 | ||
|  |         new ConstraintB('foo'); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testRequiredOptionsMustBeDefined() | ||
|  |     { | ||
|  |         $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\Validator\Exception\MissingOptionsException'); | ||
|  | 
 | ||
|  |         new ConstraintC(); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testRequiredOptionsPassed() | ||
|  |     { | ||
|  |         $constraint = new ConstraintC(array('option1' => 'default')); | ||
|  | 
 | ||
|  |         $this->assertSame('default', $constraint->option1); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testGroupsAreConvertedToArray() | ||
|  |     { | ||
|  |         $constraint = new ConstraintA(array('groups' => 'Foo')); | ||
|  | 
 | ||
|  |         $this->assertEquals(array('Foo'), $constraint->groups); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testAddDefaultGroupAddsGroup() | ||
|  |     { | ||
|  |         $constraint = new ConstraintA(array('groups' => 'Default')); | ||
|  |         $constraint->addImplicitGroupName('Foo'); | ||
|  |         $this->assertEquals(array('Default', 'Foo'), $constraint->groups); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testAllowsSettingZeroRequiredPropertyValue() | ||
|  |     { | ||
|  |         $constraint = new ConstraintA(0); | ||
|  |         $this->assertEquals(0, $constraint->property2); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testCanCreateConstraintWithNoDefaultOptionAndEmptyArray() | ||
|  |     { | ||
|  |         $constraint = new ConstraintB(array()); | ||
|  | 
 | ||
|  |         $this->assertSame(array(Constraint::PROPERTY_CONSTRAINT, Constraint::CLASS_CONSTRAINT), $constraint->getTargets()); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testGetTargetsCanBeString() | ||
|  |     { | ||
|  |         $constraint = new ClassConstraint(); | ||
|  | 
 | ||
|  |         $this->assertEquals('class', $constraint->getTargets()); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testGetTargetsCanBeArray() | ||
|  |     { | ||
|  |         $constraint = new ConstraintA(); | ||
|  | 
 | ||
|  |         $this->assertEquals(array('property', 'class'), $constraint->getTargets()); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testSerialize() | ||
|  |     { | ||
|  |         $constraint = new ConstraintA(array( | ||
|  |             'property1' => 'foo', | ||
|  |             'property2' => 'bar', | ||
|  |         )); | ||
|  | 
 | ||
|  |         $restoredConstraint = unserialize(serialize($constraint)); | ||
|  | 
 | ||
|  |         $this->assertEquals($constraint, $restoredConstraint); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testSerializeInitializesGroupsOptionToDefault() | ||
|  |     { | ||
|  |         $constraint = new ConstraintA(array( | ||
|  |             'property1' => 'foo', | ||
|  |             'property2' => 'bar', | ||
|  |         )); | ||
|  | 
 | ||
|  |         $constraint = unserialize(serialize($constraint)); | ||
|  | 
 | ||
|  |         $expected = new ConstraintA(array( | ||
|  |             'property1' => 'foo', | ||
|  |             'property2' => 'bar', | ||
|  |             'groups' => 'Default', | ||
|  |         )); | ||
|  | 
 | ||
|  |         $this->assertEquals($expected, $constraint); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testSerializeKeepsCustomGroups() | ||
|  |     { | ||
|  |         $constraint = new ConstraintA(array( | ||
|  |             'property1' => 'foo', | ||
|  |             'property2' => 'bar', | ||
|  |             'groups' => 'MyGroup', | ||
|  |         )); | ||
|  | 
 | ||
|  |         $constraint = unserialize(serialize($constraint)); | ||
|  | 
 | ||
|  |         $this->assertSame(array('MyGroup'), $constraint->groups); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @expectedException \Symfony\Component\Validator\Exception\InvalidArgumentException | ||
|  |      */ | ||
|  |     public function testGetErrorNameForUnknownCode() | ||
|  |     { | ||
|  |         Constraint::getErrorName(1); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testOptionsAsDefaultOption() | ||
|  |     { | ||
|  |         $constraint = new ConstraintA($options = array('value1')); | ||
|  | 
 | ||
|  |         $this->assertEquals($options, $constraint->property2); | ||
|  | 
 | ||
|  |         $constraint = new ConstraintA($options = array('value1', 'property1' => 'value2')); | ||
|  | 
 | ||
|  |         $this->assertEquals($options, $constraint->property2); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @expectedException \Symfony\Component\Validator\Exception\InvalidOptionsException | ||
|  |      * @expectedExceptionMessage The options "0", "5" do not exist | ||
|  |      */ | ||
|  |     public function testInvalidOptions() | ||
|  |     { | ||
|  |         new ConstraintA(array('property2' => 'foo', 'bar', 5 => 'baz')); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testOptionsWithInvalidInternalPointer() | ||
|  |     { | ||
|  |         $options = array('property1' => 'foo'); | ||
|  |         next($options); | ||
|  |         next($options); | ||
|  | 
 | ||
|  |         $constraint = new ConstraintA($options); | ||
|  | 
 | ||
|  |         $this->assertEquals('foo', $constraint->property1); | ||
|  |     } | ||
|  | } |