This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
symfony/tests/Symfony/Tests/Component/Validator/ExecutionContextTest.php

276 lines
8.0 KiB
PHP

<?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\Tests\Component\Validator;
use Symfony\Component\Validator\ConstraintViolation;
use Symfony\Component\Validator\ConstraintViolationList;
use Symfony\Component\Validator\ExecutionContext;
class ExecutionContextTest extends \PHPUnit_Framework_TestCase
{
protected $walker;
protected $metadataFactory;
protected $context;
protected function setUp()
{
$this->walker = $this->getMock('Symfony\Component\Validator\GraphWalker', array(), array(), '', false);
$this->metadataFactory = $this->getMock('Symfony\Component\Validator\Mapping\ClassMetadataFactoryInterface');
$this->context = new ExecutionContext('Root', $this->walker, $this->metadataFactory);
}
protected function tearDown()
{
$this->walker = null;
$this->metadataFactory = null;
$this->context = null;
}
public function testClone()
{
$clone = clone $this->context;
$this->assertNotSame($this->context, $clone);
}
public function testAddViolation()
{
$this->assertCount(0, $this->context->getViolations());
$this->context->setPropertyPath('foo.bar');
$this->context->addViolation('Error', array('foo' => 'bar'), 'invalid');
$this->assertEquals(new ConstraintViolationList(array(
new ConstraintViolation(
'Error',
array('foo' => 'bar'),
'Root',
'foo.bar',
'invalid'
),
)), $this->context->getViolations());
}
public function testAddViolationUsesPreconfiguredValueIfNotPassed()
{
$this->assertCount(0, $this->context->getViolations());
$this->context->setPropertyPath('foo.bar');
$this->context->setCurrentValue('invalid');
$this->context->addViolation('Error');
$this->assertEquals(new ConstraintViolationList(array(
new ConstraintViolation(
'Error',
array(),
'Root',
'foo.bar',
'invalid'
),
)), $this->context->getViolations());
}
public function testAddViolationUsesPassedNulValue()
{
$this->assertCount(0, $this->context->getViolations());
$this->context->setPropertyPath('foo.bar');
$this->context->setCurrentValue('invalid');
// passed null value should override preconfigured value "invalid"
$this->context->addViolation('Error', array('foo' => 'bar'), null);
$this->assertEquals(new ConstraintViolationList(array(
new ConstraintViolation(
'Error',
array('foo' => 'bar'),
'Root',
'foo.bar',
null
),
)), $this->context->getViolations());
}
public function testAddViolationAt()
{
$this->assertCount(0, $this->context->getViolations());
$this->context->setPropertyPath('foo.bar');
// override preconfigured property path
$this->context->addViolationAt('bar.baz', 'Error', array('foo' => 'bar'), 'invalid');
$this->assertEquals(new ConstraintViolationList(array(
new ConstraintViolation(
'Error',
array('foo' => 'bar'),
'Root',
'bar.baz',
'invalid'
),
)), $this->context->getViolations());
}
public function testAddViolationAtUsesPreconfiguredValueIfNotPassed()
{
$this->assertCount(0, $this->context->getViolations());
$this->context->setPropertyPath('foo.bar');
$this->context->setCurrentValue('invalid');
$this->context->addViolationAt('bar.baz', 'Error');
$this->assertEquals(new ConstraintViolationList(array(
new ConstraintViolation(
'Error',
array(),
'Root',
'bar.baz',
'invalid'
),
)), $this->context->getViolations());
}
public function testAddViolationAtUsesPassedNulValue()
{
$this->assertCount(0, $this->context->getViolations());
$this->context->setPropertyPath('foo.bar');
$this->context->setCurrentValue('invalid');
// passed null value should override preconfigured value "invalid"
$this->context->addViolationAt('bar.baz', 'Error', array('foo' => 'bar'), null);
$this->assertEquals(new ConstraintViolationList(array(
new ConstraintViolation(
'Error',
array('foo' => 'bar'),
'Root',
'bar.baz',
null
),
)), $this->context->getViolations());
}
public function testGetViolations()
{
$this->context->addViolation('', array(), '');
$violations = $this->context->getViolations();
$this->assertCount(1, $violations);
$this->assertInstanceOf('Symfony\Component\Validator\ConstraintViolationList', $violations);
$this->assertInstanceOf('ArrayIterator', $violations->getIterator());
$this->assertTrue(isset($violations[0]));
$this->assertFalse(isset($violations[1]));
$violations[] = 'fake';
$this->assertEquals('fake', $violations[1]);
$this->assertTrue(isset($violations[1]));
unset($violations[1]);
$this->assertFalse(isset($violations[1]));
$violations[0] = 'fake';
$this->assertEquals('fake', $violations[0]);
}
public function testViolationsMerge()
{
$this->context->addViolation('Message 1', array(), '');
$this->context->addViolation('Message 2', array(), '');
$violations1 = $this->context->getViolations();
$this->context->addViolation('', array(), '');
$violations2 = $this->context->getViolations();
unset($violations2[1]);
$violations1->addAll($violations2);
$this->assertEmpty($violations1[2]->getMessage());
}
public function testViolationsAsString()
{
$this->context->addViolation('Message 1', array(), '');
$this->context->addViolation('Message 2', array(), '');
$violations = $this->context->getViolations();
$expected = <<<EOF
Root:
Message 1
Root:
Message 2
EOF;
$this->assertEquals($expected, $violations->__toString());
}
public function testGetRoot()
{
$this->assertEquals('Root', $this->context->getRoot());
}
public function testSetGetPropertyPath()
{
$this->context->setPropertyPath('property_path');
$this->assertEquals('property_path', $this->context->getPropertyPath());
}
public function testSetGetCurrentClass()
{
$this->context->setCurrentClass('current_class');
$this->assertEquals('current_class', $this->context->getCurrentClass());
}
public function testSetGetCurrentProperty()
{
$this->context->setCurrentProperty('current_property');
$this->assertEquals('current_property', $this->context->getCurrentProperty());
}
public function testSetGetGroup()
{
$this->context->setGroup('group');
$this->assertEquals('group', $this->context->getGroup());
}
public function testGetGraphWalker()
{
$this->assertSame($this->walker, $this->context->getGraphWalker());
$this->assertInstanceOf(
'Symfony\Component\Validator\GraphWalker',
$this->context->getGraphWalker()
);
}
public function testGetMetadataFactory()
{
$this->assertSame($this->metadataFactory, $this->context->getMetadataFactory());
$this->assertInstanceOf(
'Symfony\Component\Validator\Mapping\ClassMetadataFactoryInterface',
$this->context->getMetadataFactory()
);
}
}