* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Validator\Tests\Mapping\Loader; use PHPUnit\Framework\TestCase; 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\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; use Symfony\Component\Validator\Mapping\Loader\XmlFileLoader; use Symfony\Component\Validator\Tests\Fixtures\ConstraintA; use Symfony\Component\Validator\Tests\Fixtures\ConstraintB; class XmlFileLoaderTest extends TestCase { public function testLoadClassMetadataReturnsTrueIfSuccessful() { $loader = new XmlFileLoader(__DIR__.'/constraint-mapping.xml'); $metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity'); $this->assertTrue($loader->loadClassMetadata($metadata)); } public function testLoadClassMetadataReturnsFalseIfNotSuccessful() { $loader = new XmlFileLoader(__DIR__.'/constraint-mapping.xml'); $metadata = new ClassMetadata('\stdClass'); $this->assertFalse($loader->loadClassMetadata($metadata)); } public function testLoadClassMetadata() { $loader = new XmlFileLoader(__DIR__.'/constraint-mapping.xml'); $metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity'); $loader->loadClassMetadata($metadata); $expected = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity'); $expected->setGroupSequence(array('Foo', 'Entity')); $expected->addConstraint(new ConstraintA()); $expected->addConstraint(new ConstraintB()); $expected->addConstraint(new Callback('validateMe')); $expected->addConstraint(new Callback('validateMeStatic')); $expected->addConstraint(new Callback(array('Symfony\Component\Validator\Tests\Fixtures\CallbackClass', 'callback'))); $expected->addConstraint(new Traverse(false)); $expected->addPropertyConstraint('firstName', new NotNull()); $expected->addPropertyConstraint('firstName', new Range(array('min' => 3))); $expected->addPropertyConstraint('firstName', new Choice(array('A', 'B'))); $expected->addPropertyConstraint('firstName', new All(array(new NotNull(), new Range(array('min' => 3))))); $expected->addPropertyConstraint('firstName', new All(array('constraints' => array(new NotNull(), new Range(array('min' => 3)))))); $expected->addPropertyConstraint('firstName', new Collection(array('fields' => array( 'foo' => array(new NotNull(), new Range(array('min' => 3))), 'bar' => array(new Range(array('min' => 5))), )))); $expected->addPropertyConstraint('firstName', new Choice(array( 'message' => 'Must be one of %choices%', 'choices' => array('A', 'B'), ))); $expected->addGetterConstraint('lastName', new NotNull()); $expected->addGetterConstraint('valid', new IsTrue()); $expected->addGetterConstraint('permissions', new IsTrue()); $this->assertEquals($expected, $metadata); } public function testLoadClassMetadataWithNonStrings() { $loader = new XmlFileLoader(__DIR__.'/constraint-mapping-non-strings.xml'); $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 Regex(array('pattern' => '/^1/', 'match' => false))); $properties = $metadata->getPropertyMetadata('firstName'); $constraints = $properties[0]->getConstraints(); $this->assertFalse($constraints[0]->match); } public function testLoadGroupSequenceProvider() { $loader = new XmlFileLoader(__DIR__.'/constraint-mapping.xml'); $metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\GroupSequenceProviderEntity'); $loader->loadClassMetadata($metadata); $expected = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\GroupSequenceProviderEntity'); $expected->setGroupSequenceProvider(true); $this->assertEquals($expected, $metadata); } public function testThrowExceptionIfDocTypeIsSet() { $loader = new XmlFileLoader(__DIR__.'/withdoctype.xml'); $metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity'); $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('\Symfony\Component\Validator\Exception\MappingException'); $loader->loadClassMetadata($metadata); } /** * @see https://github.com/symfony/symfony/pull/12158 */ public function testDoNotModifyStateIfExceptionIsThrown() { $loader = new XmlFileLoader(__DIR__.'/withdoctype.xml'); $metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity'); try { $loader->loadClassMetadata($metadata); } catch (MappingException $e) { $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('\Symfony\Component\Validator\Exception\MappingException'); $loader->loadClassMetadata($metadata); } } } __halt_compiler();----SIGNATURE:----kgLsSBkzMtBV4uCGXRa8QPFHII6b1ZbHYBIjv3ZlKNKMAszdy7FsKwf/Be2DsulKBQStim3/bXiKG+flOvfxGO6s0LWBwcrJB7SFhbD+ruUqRkPtwnYKN7irS9lLRv9KUiX2m8NTnYLg8nIF7GOvzv1TZDoUrJMp/mdseryjPQSABgMYe4db3UxnpcsNwX4+xVSaM10vOx25Yhz2RC7D3OhiLYy/VQGXUE+0v25Y5VVwfjwYI1vrtTzq8kYvV7z0W2+18cWNqkcgHA2N6wboyuFUi1IH+mM9scurk/PXmvlrheu+Pn+dUFOIFZJ4RIZTk4es74nee7nJMv/c7osPte8r39D393IdymYvIzHZ1YENTENPCSlmfVr9Qbiqb5SxGYaSyoMBEV2np5dTyCWGg8n/fLJ2gqozhvi6fM7Gf4GuyvJI1EQYfvraNbuky+j8lS55NNEiJqY+si0J9NLfQWQ+zVwvyhMYILlRzBEd3BNqvt8wCmIi9UzlGMRHRjkLTjlYVbrKZChU1kPmNyneeoxmF5SfIL+xQvfluMb8qqRN9h/5fjJpOSoxD0gvcl5iW9kaopdP3KAOuD/YeMBTfxZI0c/6Zsvaf6q3nECh555qnA1318EYEzc02XB6jZwPK2QZNDGJxFXJkKn6/NNwSByJy/qi5n3fhBv+ky8dAlI=----ATTACHMENT:----MTIyNjMwMTM1MjAyOTU3MiAxNjkzODY4ODQ4NDgzODY2IDk3NzQ1MzUxMTMwMjQyNDY=