ClassMetadataTest.php 4.1 KB

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