4 * This file is part of the Symfony package.
6 * (c) Fabien Potencier <fabien@symfony.com>
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
12 namespace Symfony\Component\Validator\Tests\DataCollector;
14 use PHPUnit\Framework\TestCase;
15 use Symfony\Component\Validator\ConstraintViolation;
16 use Symfony\Component\Validator\ConstraintViolationList;
17 use Symfony\Component\Validator\DataCollector\ValidatorDataCollector;
18 use Symfony\Component\Validator\Validator\TraceableValidator;
19 use Symfony\Component\Validator\Validator\ValidatorInterface;
21 class ValidatorDataCollectorTest extends TestCase
23 public function testCollectsValidatorCalls()
25 $originalValidator = $this->createMock(ValidatorInterface::class);
26 $validator = new TraceableValidator($originalValidator);
28 $collector = new ValidatorDataCollector($validator);
30 $violations = new ConstraintViolationList(array(
31 $this->createMock(ConstraintViolation::class),
32 $this->createMock(ConstraintViolation::class),
34 $originalValidator->method('validate')->willReturn($violations);
36 $validator->validate(new \stdClass());
38 $collector->lateCollect();
40 $calls = $collector->getCalls();
42 $this->assertCount(1, $calls);
43 $this->assertSame(2, $collector->getViolationsCount());
47 $this->assertArrayHasKey('caller', $call);
48 $this->assertArrayHasKey('context', $call);
49 $this->assertArrayHasKey('violations', $call);
50 $this->assertCount(2, $call['violations']);
53 public function testReset()
55 $originalValidator = $this->createMock(ValidatorInterface::class);
56 $validator = new TraceableValidator($originalValidator);
58 $collector = new ValidatorDataCollector($validator);
60 $violations = new ConstraintViolationList(array(
61 $this->createMock(ConstraintViolation::class),
62 $this->createMock(ConstraintViolation::class),
64 $originalValidator->method('validate')->willReturn($violations);
66 $validator->validate(new \stdClass());
68 $collector->lateCollect();
71 $this->assertCount(0, $collector->getCalls());
72 $this->assertSame(0, $collector->getViolationsCount());
75 protected function createMock($classname)
77 return $this->getMockBuilder($classname)->disableOriginalConstructor()->getMock();