You are here

CountValidatorTest.php in Plug 7

File

lib/Symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountValidatorTest.php
View source
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
namespace Symfony\Component\Validator\Tests\Constraints;

use Symfony\Component\Validator\Constraints\Count;
use Symfony\Component\Validator\Constraints\CountValidator;
use Symfony\Component\Validator\Validation;

/**
 * @author Bernhard Schussek <bschussek@gmail.com>
 */
abstract class CountValidatorTest extends AbstractConstraintValidatorTest {
  protected function getApiVersion() {
    return Validation::API_VERSION_2_5;
  }
  protected function createValidator() {
    return new CountValidator();
  }
  protected abstract function createCollection(array $content);
  public function testNullIsValid() {
    $this->validator
      ->validate(null, new Count(6));
    $this
      ->assertNoViolation();
  }

  /**
   * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException
   */
  public function testExpectsCountableType() {
    $this->validator
      ->validate(new \stdClass(), new Count(5));
  }
  public function getThreeOrLessElements() {
    return array(
      array(
        $this
          ->createCollection(array(
          1,
        )),
      ),
      array(
        $this
          ->createCollection(array(
          1,
          2,
        )),
      ),
      array(
        $this
          ->createCollection(array(
          1,
          2,
          3,
        )),
      ),
      array(
        $this
          ->createCollection(array(
          'a' => 1,
          'b' => 2,
          'c' => 3,
        )),
      ),
    );
  }
  public function getFourElements() {
    return array(
      array(
        $this
          ->createCollection(array(
          1,
          2,
          3,
          4,
        )),
      ),
      array(
        $this
          ->createCollection(array(
          'a' => 1,
          'b' => 2,
          'c' => 3,
          'd' => 4,
        )),
      ),
    );
  }
  public function getFiveOrMoreElements() {
    return array(
      array(
        $this
          ->createCollection(array(
          1,
          2,
          3,
          4,
          5,
        )),
      ),
      array(
        $this
          ->createCollection(array(
          1,
          2,
          3,
          4,
          5,
          6,
        )),
      ),
      array(
        $this
          ->createCollection(array(
          'a' => 1,
          'b' => 2,
          'c' => 3,
          'd' => 4,
          'e' => 5,
        )),
      ),
    );
  }

  /**
   * @dataProvider getThreeOrLessElements
   */
  public function testValidValuesMax($value) {
    $constraint = new Count(array(
      'max' => 3,
    ));
    $this->validator
      ->validate($value, $constraint);
    $this
      ->assertNoViolation();
  }

  /**
   * @dataProvider getFiveOrMoreElements
   */
  public function testValidValuesMin($value) {
    $constraint = new Count(array(
      'min' => 5,
    ));
    $this->validator
      ->validate($value, $constraint);
    $this
      ->assertNoViolation();
  }

  /**
   * @dataProvider getFourElements
   */
  public function testValidValuesExact($value) {
    $constraint = new Count(4);
    $this->validator
      ->validate($value, $constraint);
    $this
      ->assertNoViolation();
  }

  /**
   * @dataProvider getFiveOrMoreElements
   */
  public function testTooManyValues($value) {
    $constraint = new Count(array(
      'max' => 4,
      'maxMessage' => 'myMessage',
    ));
    $this->validator
      ->validate($value, $constraint);
    $this
      ->buildViolation('myMessage')
      ->setParameter('{{ count }}', count($value))
      ->setParameter('{{ limit }}', 4)
      ->setInvalidValue($value)
      ->setPlural(4)
      ->setCode(Count::TOO_MANY_ERROR)
      ->assertRaised();
  }

  /**
   * @dataProvider getThreeOrLessElements
   */
  public function testTooFewValues($value) {
    $constraint = new Count(array(
      'min' => 4,
      'minMessage' => 'myMessage',
    ));
    $this->validator
      ->validate($value, $constraint);
    $this
      ->buildViolation('myMessage')
      ->setParameter('{{ count }}', count($value))
      ->setParameter('{{ limit }}', 4)
      ->setInvalidValue($value)
      ->setPlural(4)
      ->setCode(Count::TOO_FEW_ERROR)
      ->assertRaised();
  }

  /**
   * @dataProvider getFiveOrMoreElements
   */
  public function testTooManyValuesExact($value) {
    $constraint = new Count(array(
      'min' => 4,
      'max' => 4,
      'exactMessage' => 'myMessage',
    ));
    $this->validator
      ->validate($value, $constraint);
    $this
      ->buildViolation('myMessage')
      ->setParameter('{{ count }}', count($value))
      ->setParameter('{{ limit }}', 4)
      ->setInvalidValue($value)
      ->setPlural(4)
      ->setCode(Count::TOO_MANY_ERROR)
      ->assertRaised();
  }

  /**
   * @dataProvider getThreeOrLessElements
   */
  public function testTooFewValuesExact($value) {
    $constraint = new Count(array(
      'min' => 4,
      'max' => 4,
      'exactMessage' => 'myMessage',
    ));
    $this->validator
      ->validate($value, $constraint);
    $this
      ->buildViolation('myMessage')
      ->setParameter('{{ count }}', count($value))
      ->setParameter('{{ limit }}', 4)
      ->setInvalidValue($value)
      ->setPlural(4)
      ->setCode(Count::TOO_FEW_ERROR)
      ->assertRaised();
  }
  public function testDefaultOption() {
    $constraint = new Count(5);
    $this
      ->assertEquals(5, $constraint->min);
    $this
      ->assertEquals(5, $constraint->max);
  }

}

Classes

Namesort descending Description
CountValidatorTest @author Bernhard Schussek <bschussek@gmail.com>