You are here

abstract class AbstractConstraintValidatorTest in Plug 7

@since 2.5.3

@author Bernhard Schussek <bschussek@gmail.com>

Hierarchy

  • class \Symfony\Component\Validator\Tests\Constraints\AbstractConstraintValidatorTest extends \Symfony\Component\Validator\Tests\Constraints\PHPUnit_Framework_TestCase

Expanded class hierarchy of AbstractConstraintValidatorTest

File

lib/Symfony/validator/Symfony/Component/Validator/Tests/Constraints/AbstractConstraintValidatorTest.php, line 32

Namespace

Symfony\Component\Validator\Tests\Constraints
View source
abstract class AbstractConstraintValidatorTest extends \PHPUnit_Framework_TestCase {

  /**
   * @var ExecutionContextInterface
   */
  protected $context;

  /**
   * @var ConstraintValidatorInterface
   */
  protected $validator;
  protected $group;
  protected $metadata;
  protected $object;
  protected $value;
  protected $root;
  protected $propertyPath;
  protected $constraint;
  protected $defaultTimezone;
  protected function setUp() {
    if (Validation::API_VERSION_2_5 !== $this
      ->getApiVersion()) {
      $this
        ->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
    }
    $this->group = 'MyGroup';
    $this->metadata = null;
    $this->object = null;
    $this->value = 'InvalidValue';
    $this->root = 'root';
    $this->propertyPath = 'property.path';

    // Initialize the context with some constraint so that we can
    // successfully build a violation.
    // The 2.4 API does not keep a reference to the current
    // constraint yet. There the violation stores null.
    $this->constraint = Validation::API_VERSION_2_4 === $this
      ->getApiVersion() ? null : new NotNull();
    $this->context = $this
      ->createContext();
    $this->validator = $this
      ->createValidator();
    $this->validator
      ->initialize($this->context);
    \Locale::setDefault('en');
    $this
      ->setDefaultTimezone('UTC');
  }
  protected function tearDown() {
    $this
      ->restoreDefaultTimezone();
  }
  protected function setDefaultTimezone($defaultTimezone) {

    // Make sure this method can not be called twice before calling
    // also restoreDefaultTimezone()
    if (null === $this->defaultTimezone) {
      $this->defaultTimezone = date_default_timezone_get();
      date_default_timezone_set($defaultTimezone);
    }
  }
  protected function restoreDefaultTimezone() {
    if (null !== $this->defaultTimezone) {
      date_default_timezone_set($this->defaultTimezone);
      $this->defaultTimezone = null;
    }
  }
  protected function createContext() {
    $translator = $this
      ->getMock('Symfony\\Component\\Translation\\TranslatorInterface');
    if (Validation::API_VERSION_2_4 === $this
      ->getApiVersion()) {
      return $this
        ->getMockBuilder('Symfony\\Component\\Validator\\ExecutionContext')
        ->setConstructorArgs(array(
        new StubGlobalExecutionContext($this->root),
        $translator,
        null,
        $this->metadata,
        $this->value,
        $this->group,
        $this->propertyPath,
      ))
        ->setMethods(array(
        'validate',
        'validateValue',
      ))
        ->getMock();
    }
    $validator = $this
      ->getMock('Symfony\\Component\\Validator\\Validator\\ValidatorInterface');
    $contextualValidator = $this
      ->getMock('Symfony\\Component\\Validator\\Validator\\ContextualValidatorInterface');
    switch ($this
      ->getApiVersion()) {
      case Validation::API_VERSION_2_5:
        $context = new ExecutionContext($validator, $this->root, $translator);
        break;
      case Validation::API_VERSION_2_5_BC:
        $context = new LegacyExecutionContext($validator, $this->root, $this
          ->getMock('Symfony\\Component\\Validator\\MetadataFactoryInterface'), $translator);
        break;
      default:
        throw new \RuntimeException('Invalid API version');
    }
    $context
      ->setGroup($this->group);
    $context
      ->setNode($this->value, $this->object, $this->metadata, $this->propertyPath);
    $context
      ->setConstraint($this->constraint);
    $validator
      ->expects($this
      ->any())
      ->method('inContext')
      ->with($context)
      ->will($this
      ->returnValue($contextualValidator));
    return $context;
  }

  /**
   * @param mixed  $message
   * @param array  $parameters
   * @param string $propertyPath
   * @param string $invalidValue
   * @param null   $plural
   * @param null   $code
   *
   * @return ConstraintViolation
   *
   * @deprecated To be removed in Symfony 3.0. Use
   *             {@link buildViolation()} instead.
   */
  protected function createViolation($message, array $parameters = array(), $propertyPath = 'property.path', $invalidValue = 'InvalidValue', $plural = null, $code = null) {
    return new ConstraintViolation(null, $message, $parameters, $this->root, $propertyPath, $invalidValue, $plural, $code, $this->constraint);
  }
  protected function setGroup($group) {
    $this->group = $group;
    switch ($this
      ->getApiVersion()) {
      case Validation::API_VERSION_2_4:
        $this->context = $this
          ->createContext();
        $this->validator
          ->initialize($this->context);
        break;
      case Validation::API_VERSION_2_5:
      case Validation::API_VERSION_2_5_BC:
        $this->context
          ->setGroup($group);
        break;
    }
  }
  protected function setObject($object) {
    $this->object = $object;
    $this->metadata = is_object($object) ? new ClassMetadata(get_class($object)) : null;
    switch ($this
      ->getApiVersion()) {
      case Validation::API_VERSION_2_4:
        $this->context = $this
          ->createContext();
        $this->validator
          ->initialize($this->context);
        break;
      case Validation::API_VERSION_2_5:
      case Validation::API_VERSION_2_5_BC:
        $this->context
          ->setNode($this->value, $this->object, $this->metadata, $this->propertyPath);
        break;
    }
  }
  protected function setProperty($object, $property) {
    $this->object = $object;
    $this->metadata = is_object($object) ? new PropertyMetadata(get_class($object), $property) : null;
    switch ($this
      ->getApiVersion()) {
      case Validation::API_VERSION_2_4:
        $this->context = $this
          ->createContext();
        $this->validator
          ->initialize($this->context);
        break;
      case Validation::API_VERSION_2_5:
      case Validation::API_VERSION_2_5_BC:
        $this->context
          ->setNode($this->value, $this->object, $this->metadata, $this->propertyPath);
        break;
    }
  }
  protected function setValue($value) {
    $this->value = $value;
    switch ($this
      ->getApiVersion()) {
      case Validation::API_VERSION_2_4:
        $this->context = $this
          ->createContext();
        $this->validator
          ->initialize($this->context);
        break;
      case Validation::API_VERSION_2_5:
      case Validation::API_VERSION_2_5_BC:
        $this->context
          ->setNode($this->value, $this->object, $this->metadata, $this->propertyPath);
        break;
    }
  }
  protected function setRoot($root) {
    $this->root = $root;
    $this->context = $this
      ->createContext();
    $this->validator
      ->initialize($this->context);
  }
  protected function setPropertyPath($propertyPath) {
    $this->propertyPath = $propertyPath;
    switch ($this
      ->getApiVersion()) {
      case Validation::API_VERSION_2_4:
        $this->context = $this
          ->createContext();
        $this->validator
          ->initialize($this->context);
        break;
      case Validation::API_VERSION_2_5:
      case Validation::API_VERSION_2_5_BC:
        $this->context
          ->setNode($this->value, $this->object, $this->metadata, $this->propertyPath);
        break;
    }
  }
  protected function expectNoValidate() {
    switch ($this
      ->getApiVersion()) {
      case Validation::API_VERSION_2_4:
        $this->context
          ->expects($this
          ->never())
          ->method('validate');
        $this->context
          ->expects($this
          ->never())
          ->method('validateValue');
        break;
      case Validation::API_VERSION_2_5:
      case Validation::API_VERSION_2_5_BC:
        $validator = $this->context
          ->getValidator()
          ->inContext($this->context);
        $validator
          ->expects($this
          ->never())
          ->method('atPath');
        $validator
          ->expects($this
          ->never())
          ->method('validate');
        break;
    }
  }
  protected function expectValidateAt($i, $propertyPath, $value, $group) {
    switch ($this
      ->getApiVersion()) {
      case Validation::API_VERSION_2_4:
        $this->context
          ->expects($this
          ->at($i))
          ->method('validate')
          ->with($value, $propertyPath, $group);
        break;
      case Validation::API_VERSION_2_5:
      case Validation::API_VERSION_2_5_BC:
        $validator = $this->context
          ->getValidator()
          ->inContext($this->context);
        $validator
          ->expects($this
          ->at(2 * $i))
          ->method('atPath')
          ->with($propertyPath)
          ->will($this
          ->returnValue($validator));
        $validator
          ->expects($this
          ->at(2 * $i + 1))
          ->method('validate')
          ->with($value, $this
          ->logicalOr(null, array()), $group);
        break;
    }
  }
  protected function expectValidateValueAt($i, $propertyPath, $value, $constraints, $group = null) {
    switch ($this
      ->getApiVersion()) {
      case Validation::API_VERSION_2_4:
        $this->context
          ->expects($this
          ->at($i))
          ->method('validateValue')
          ->with($value, $constraints, $propertyPath, $group);
        break;
      case Validation::API_VERSION_2_5:
      case Validation::API_VERSION_2_5_BC:
        $contextualValidator = $this->context
          ->getValidator()
          ->inContext($this->context);
        $contextualValidator
          ->expects($this
          ->at(2 * $i))
          ->method('atPath')
          ->with($propertyPath)
          ->will($this
          ->returnValue($contextualValidator));
        $contextualValidator
          ->expects($this
          ->at(2 * $i + 1))
          ->method('validate')
          ->with($value, $constraints, $group);
        break;
    }
  }
  protected function assertNoViolation() {
    $this
      ->assertCount(0, $this->context
      ->getViolations());
  }

  /**
   * @param mixed  $message
   * @param array  $parameters
   * @param string $propertyPath
   * @param string $invalidValue
   * @param null   $plural
   * @param null   $code
   *
   * @deprecated To be removed in Symfony 3.0. Use
   *             {@link buildViolation()} instead.
   */
  protected function assertViolation($message, array $parameters = array(), $propertyPath = 'property.path', $invalidValue = 'InvalidValue', $plural = null, $code = null) {
    $this
      ->buildViolation($message)
      ->setParameters($parameters)
      ->atPath($propertyPath)
      ->setInvalidValue($invalidValue)
      ->setCode($code)
      ->setPlural($plural)
      ->assertRaised();
  }

  /**
   * @param array $expected
   *
   * @deprecated To be removed in Symfony 3.0. Use
   *             {@link buildViolation()} instead.
   */
  protected function assertViolations(array $expected) {
    $violations = $this->context
      ->getViolations();
    $this
      ->assertCount(count($expected), $violations);
    $i = 0;
    foreach ($expected as $violation) {
      $this
        ->assertEquals($violation, $violations[$i++]);
    }
  }

  /**
   * @param $message
   *
   * @return ConstraintViolationAssertion
   */
  protected function buildViolation($message) {
    return new ConstraintViolationAssertion($this->context, $message, $this->constraint);
  }
  protected abstract function getApiVersion();
  protected abstract function createValidator();

}

Members

Namesort descending Modifiers Type Description Overrides
AbstractConstraintValidatorTest::$constraint protected property
AbstractConstraintValidatorTest::$context protected property 1
AbstractConstraintValidatorTest::$defaultTimezone protected property
AbstractConstraintValidatorTest::$group protected property
AbstractConstraintValidatorTest::$metadata protected property
AbstractConstraintValidatorTest::$object protected property
AbstractConstraintValidatorTest::$propertyPath protected property
AbstractConstraintValidatorTest::$root protected property
AbstractConstraintValidatorTest::$validator protected property 1
AbstractConstraintValidatorTest::$value protected property
AbstractConstraintValidatorTest::assertNoViolation protected function
AbstractConstraintValidatorTest::assertViolation Deprecated protected function
AbstractConstraintValidatorTest::assertViolations Deprecated protected function
AbstractConstraintValidatorTest::buildViolation protected function
AbstractConstraintValidatorTest::createContext protected function
AbstractConstraintValidatorTest::createValidator abstract protected function 42
AbstractConstraintValidatorTest::createViolation Deprecated protected function
AbstractConstraintValidatorTest::expectNoValidate protected function
AbstractConstraintValidatorTest::expectValidateAt protected function
AbstractConstraintValidatorTest::expectValidateValueAt protected function
AbstractConstraintValidatorTest::getApiVersion abstract protected function 42
AbstractConstraintValidatorTest::restoreDefaultTimezone protected function
AbstractConstraintValidatorTest::setDefaultTimezone protected function
AbstractConstraintValidatorTest::setGroup protected function
AbstractConstraintValidatorTest::setObject protected function
AbstractConstraintValidatorTest::setProperty protected function
AbstractConstraintValidatorTest::setPropertyPath protected function
AbstractConstraintValidatorTest::setRoot protected function
AbstractConstraintValidatorTest::setUp protected function 6
AbstractConstraintValidatorTest::setValue protected function
AbstractConstraintValidatorTest::tearDown protected function 1