ClassMetadataTest.php 4.5 KB

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