You are here

public function AbstractValidatorTest::testEnableRecursiveTraversableTraversal in Plug 7

File

lib/Symfony/validator/Symfony/Component/Validator/Tests/Validator/AbstractValidatorTest.php, line 747

Class

AbstractValidatorTest
@since 2.5 @author Bernhard Schussek <bschussek@gmail.com>

Namespace

Symfony\Component\Validator\Tests\Validator

Code

public function testEnableRecursiveTraversableTraversal() {
  $test = $this;
  $entity = new Entity();
  $entity->reference = new \ArrayIterator(array(
    2 => new \ArrayIterator(array(
      'key' => new Reference(),
    )),
  ));
  $callback = function ($value, ExecutionContextInterface $context) use ($test, $entity) {
    $test
      ->assertSame($test::REFERENCE_CLASS, $context
      ->getClassName());
    $test
      ->assertNull($context
      ->getPropertyName());
    $test
      ->assertSame('reference[2][key]', $context
      ->getPropertyPath());
    $test
      ->assertSame('Group', $context
      ->getGroup());
    $test
      ->assertSame($test->referenceMetadata, $context
      ->getMetadata());
    $test
      ->assertSame($entity, $context
      ->getRoot());
    $test
      ->assertSame($entity->reference[2]['key'], $context
      ->getValue());
    $test
      ->assertSame($entity->reference[2]['key'], $value);
    $context
      ->addViolation('Message %param%', array(
      '%param%' => 'value',
    ));
  };
  $this->metadata
    ->addPropertyConstraint('reference', new Valid(array(
    'deep' => true,
  )));
  $this->referenceMetadata
    ->addConstraint(new Callback(array(
    'callback' => $callback,
    'groups' => 'Group',
  )));
  $violations = $this
    ->validate($entity, null, 'Group');

  /** @var ConstraintViolationInterface[] $violations */
  $this
    ->assertCount(1, $violations);
  $this
    ->assertSame('Message value', $violations[0]
    ->getMessage());
  $this
    ->assertSame('Message %param%', $violations[0]
    ->getMessageTemplate());
  $this
    ->assertSame(array(
    '%param%' => 'value',
  ), $violations[0]
    ->getMessageParameters());
  $this
    ->assertSame('reference[2][key]', $violations[0]
    ->getPropertyPath());
  $this
    ->assertSame($entity, $violations[0]
    ->getRoot());
  $this
    ->assertSame($entity->reference[2]['key'], $violations[0]
    ->getInvalidValue());
  $this
    ->assertNull($violations[0]
    ->getMessagePluralization());
  $this
    ->assertNull($violations[0]
    ->getCode());
}