ClassMetadataTest.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <?php
  2. namespace Symfony\Tests\Component\Validator\Mapping;
  3. require_once __DIR__.'/../Fixtures/Entity.php';
  4. require_once __DIR__.'/../Fixtures/ConstraintA.php';
  5. require_once __DIR__.'/../Fixtures/ConstraintB.php';
  6. use Symfony\Tests\Component\Validator\Fixtures\Entity;
  7. use Symfony\Tests\Component\Validator\Fixtures\ConstraintA;
  8. use Symfony\Tests\Component\Validator\Fixtures\ConstraintB;
  9. use Symfony\Component\Validator\Constraints\Valid;
  10. use Symfony\Component\Validator\Mapping\ClassMetadata;
  11. use Symfony\Component\Validator\Mapping\PropertyMetadata;
  12. class ClassMetadataTest extends \PHPUnit_Framework_TestCase
  13. {
  14. const CLASSNAME = 'Symfony\Tests\Component\Validator\Fixtures\Entity';
  15. const PARENTCLASS = 'Symfony\Tests\Component\Validator\Fixtures\EntityParent';
  16. protected $metadata;
  17. public function setUp()
  18. {
  19. $this->metadata = new ClassMetadata(self::CLASSNAME);
  20. }
  21. public function testAddConstraintDoesNotAcceptValid()
  22. {
  23. $this->setExpectedException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
  24. $this->metadata->addConstraint(new Valid());
  25. }
  26. public function testAddPropertyConstraints()
  27. {
  28. $this->metadata->addPropertyConstraint('firstName', new ConstraintA());
  29. $this->metadata->addPropertyConstraint('lastName', new ConstraintB());
  30. $this->assertEquals(array('firstName', 'lastName'), $this->metadata->getConstrainedProperties());
  31. }
  32. public function testMergeConstraintsMergesClassConstraints()
  33. {
  34. $parent = new ClassMetadata(self::PARENTCLASS);
  35. $parent->addConstraint(new ConstraintA());
  36. $this->metadata->mergeConstraints($parent);
  37. $this->metadata->addConstraint(new ConstraintA());
  38. $constraints = array(
  39. new ConstraintA(array('groups' => array(
  40. 'Default',
  41. 'EntityParent',
  42. 'Entity',
  43. ))),
  44. new ConstraintA(array('groups' => array(
  45. 'Default',
  46. 'Entity',
  47. ))),
  48. );
  49. $this->assertEquals($constraints, $this->metadata->getConstraints());
  50. }
  51. public function testMergeConstraintsMergesMemberConstraints()
  52. {
  53. $parent = new ClassMetadata(self::PARENTCLASS);
  54. $parent->addPropertyConstraint('firstName', new ConstraintA());
  55. $this->metadata->mergeConstraints($parent);
  56. $this->metadata->addPropertyConstraint('firstName', new ConstraintA());
  57. $constraints = array(
  58. new ConstraintA(array('groups' => array(
  59. 'Default',
  60. 'EntityParent',
  61. 'Entity',
  62. ))),
  63. new ConstraintA(array('groups' => array(
  64. 'Default',
  65. 'Entity',
  66. ))),
  67. );
  68. $members = $this->metadata->getMemberMetadatas('firstName');
  69. $this->assertEquals(1, count($members));
  70. $this->assertEquals(self::PARENTCLASS, $members[0]->getClassName());
  71. $this->assertEquals($constraints, $members[0]->getConstraints());
  72. }
  73. public function testMergeConstraintsKeepsPrivateMembersSeperate()
  74. {
  75. $parent = new ClassMetadata(self::PARENTCLASS);
  76. $parent->addPropertyConstraint('internal', new ConstraintA());
  77. $this->metadata->mergeConstraints($parent);
  78. $this->metadata->addPropertyConstraint('internal', new ConstraintA());
  79. $parentConstraints = array(
  80. new ConstraintA(array('groups' => array(
  81. 'Default',
  82. 'EntityParent',
  83. 'Entity',
  84. ))),
  85. );
  86. $constraints = array(
  87. new ConstraintA(array('groups' => array(
  88. 'Default',
  89. 'Entity',
  90. ))),
  91. );
  92. $members = $this->metadata->getMemberMetadatas('internal');
  93. $this->assertEquals(2, count($members));
  94. $this->assertEquals(self::PARENTCLASS, $members[0]->getClassName());
  95. $this->assertEquals($parentConstraints, $members[0]->getConstraints());
  96. $this->assertEquals(self::CLASSNAME, $members[1]->getClassName());
  97. $this->assertEquals($constraints, $members[1]->getConstraints());
  98. }
  99. public function testGetReflectionClass()
  100. {
  101. $reflClass = new \ReflectionClass(self::CLASSNAME);
  102. $this->assertEquals($reflClass, $this->metadata->getReflectionClass());
  103. }
  104. public function testSerialize()
  105. {
  106. $this->metadata->addConstraint(new ConstraintA(array('property1' => 'A')));
  107. $this->metadata->addConstraint(new ConstraintB(array('groups' => 'TestGroup')));
  108. $this->metadata->addPropertyConstraint('firstName', new ConstraintA());
  109. $this->metadata->addGetterConstraint('lastName', new ConstraintB());
  110. $metadata = unserialize(serialize($this->metadata));
  111. $this->assertEquals($this->metadata, $metadata);
  112. }
  113. }