CallbackValidatorTest.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. <?php
  2. /*
  3. * This file is part of the Symfony package.
  4. *
  5. * (c) Fabien Potencier <fabien@symfony.com>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Symfony\Tests\Component\Validator\Constraints;
  11. use Symfony\Component\Validator\ExecutionContext;
  12. use Symfony\Component\Validator\ConstraintViolation;
  13. use Symfony\Component\Validator\ConstraintViolationList;
  14. use Symfony\Component\Validator\Constraints\Callback;
  15. use Symfony\Component\Validator\Constraints\CallbackValidator;
  16. class CallbackValidatorTest_Class
  17. {
  18. public static function validateStatic($object, ExecutionContext $context)
  19. {
  20. $context->setCurrentClass('Foo');
  21. $context->setCurrentProperty('bar');
  22. $context->setGroup('mygroup');
  23. $context->setPropertyPath('foo.bar');
  24. $context->addViolation('Static message', array('parameter'), 'invalidValue');
  25. }
  26. }
  27. class CallbackValidatorTest_Object
  28. {
  29. public function validateOne(ExecutionContext $context)
  30. {
  31. $context->setCurrentClass('Foo');
  32. $context->setCurrentProperty('bar');
  33. $context->setGroup('mygroup');
  34. $context->setPropertyPath('foo.bar');
  35. $context->addViolation('My message', array('parameter'), 'invalidValue');
  36. }
  37. public function validateTwo(ExecutionContext $context)
  38. {
  39. $context->addViolation('Other message', array('other parameter'), 'otherInvalidValue');
  40. }
  41. }
  42. class CallbackValidatorTest extends \PHPUnit_Framework_TestCase
  43. {
  44. protected $validator;
  45. protected $walker;
  46. protected $context;
  47. protected function setUp()
  48. {
  49. $this->walker = $this->getMock('Symfony\Component\Validator\GraphWalker', array(), array(), '', false);
  50. $metadataFactory = $this->getMock('Symfony\Component\Validator\Mapping\ClassMetadataFactoryInterface');
  51. $this->context = new ExecutionContext('Root', $this->walker, $metadataFactory);
  52. $this->context->setCurrentClass('InitialClass');
  53. $this->context->setCurrentProperty('initialProperty');
  54. $this->context->setGroup('InitialGroup');
  55. $this->context->setPropertyPath('initial.property.path');
  56. $this->validator = new CallbackValidator();
  57. $this->validator->initialize($this->context);
  58. }
  59. protected function tearDown()
  60. {
  61. $this->validator = null;
  62. $this->walker = null;
  63. $this->context = null;
  64. }
  65. public function testNullIsValid()
  66. {
  67. $this->assertTrue($this->validator->isValid(null, new Callback(array('foo'))));
  68. }
  69. public function testCallbackSingleMethod()
  70. {
  71. $object = new CallbackValidatorTest_Object();
  72. $this->assertTrue($this->validator->isValid($object, new Callback(array('validateOne'))));
  73. $violations = new ConstraintViolationList();
  74. $violations->add(new ConstraintViolation(
  75. 'My message',
  76. array('parameter'),
  77. 'Root',
  78. 'foo.bar',
  79. 'invalidValue'
  80. ));
  81. $this->assertEquals($violations, $this->context->getViolations());
  82. $this->assertEquals('InitialClass', $this->context->getCurrentClass());
  83. $this->assertEquals('initialProperty', $this->context->getCurrentProperty());
  84. $this->assertEquals('InitialGroup', $this->context->getGroup());
  85. $this->assertEquals('initial.property.path', $this->context->getPropertyPath());
  86. }
  87. public function testCallbackSingleStaticMethod()
  88. {
  89. $object = new CallbackValidatorTest_Object();
  90. $this->assertTrue($this->validator->isValid($object, new Callback(array(
  91. array(__NAMESPACE__.'\CallbackValidatorTest_Class', 'validateStatic')
  92. ))));
  93. $violations = new ConstraintViolationList();
  94. $violations->add(new ConstraintViolation(
  95. 'Static message',
  96. array('parameter'),
  97. 'Root',
  98. 'foo.bar',
  99. 'invalidValue'
  100. ));
  101. $this->assertEquals($violations, $this->context->getViolations());
  102. $this->assertEquals('InitialClass', $this->context->getCurrentClass());
  103. $this->assertEquals('initialProperty', $this->context->getCurrentProperty());
  104. $this->assertEquals('InitialGroup', $this->context->getGroup());
  105. $this->assertEquals('initial.property.path', $this->context->getPropertyPath());
  106. }
  107. public function testCallbackMultipleMethods()
  108. {
  109. $object = new CallbackValidatorTest_Object();
  110. $this->assertTrue($this->validator->isValid($object, new Callback(array(
  111. 'validateOne', 'validateTwo'
  112. ))));
  113. $violations = new ConstraintViolationList();
  114. $violations->add(new ConstraintViolation(
  115. 'My message',
  116. array('parameter'),
  117. 'Root',
  118. 'foo.bar',
  119. 'invalidValue'
  120. ));
  121. // context was reset
  122. $violations->add(new ConstraintViolation(
  123. 'Other message',
  124. array('other parameter'),
  125. 'Root',
  126. 'initial.property.path',
  127. 'otherInvalidValue'
  128. ));
  129. $this->assertEquals($violations, $this->context->getViolations());
  130. }
  131. /**
  132. * @expectedException Symfony\Component\Validator\Exception\UnexpectedTypeException
  133. */
  134. public function testExpectCallbackArray()
  135. {
  136. $object = new CallbackValidatorTest_Object();
  137. $this->validator->isValid($object, new Callback('foobar'));
  138. }
  139. /**
  140. * @expectedException Symfony\Component\Validator\Exception\ConstraintDefinitionException
  141. */
  142. public function testExpectValidMethods()
  143. {
  144. $object = new CallbackValidatorTest_Object();
  145. $this->validator->isValid($object, new Callback(array('foobar')));
  146. }
  147. /**
  148. * @expectedException Symfony\Component\Validator\Exception\ConstraintDefinitionException
  149. */
  150. public function testExpectValidCallbacks()
  151. {
  152. $object = new CallbackValidatorTest_Object();
  153. $this->validator->isValid($object, new Callback(array(array('foo', 'bar'))));
  154. }
  155. public function testConstraintGetTargets()
  156. {
  157. $constraint = new Callback(array('foo'));
  158. $this->assertEquals('class', $constraint->getTargets());
  159. }
  160. }