diff --git a/tests/Symfony/Tests/Component/Validator/Constraints/CollectionValidatorArrayObjectTest.php b/tests/Symfony/Tests/Component/Validator/Constraints/CollectionValidatorArrayObjectTest.php new file mode 100644 index 0000000000..834138de9a --- /dev/null +++ b/tests/Symfony/Tests/Component/Validator/Constraints/CollectionValidatorArrayObjectTest.php @@ -0,0 +1,20 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Tests\Component\Validator\Constraints; + +class CollectionValidatorArrayObjectTest extends CollectionValidatorTest +{ + public function prepareTestData(array $contents) + { + return new \ArrayObject($contents); + } +} \ No newline at end of file diff --git a/tests/Symfony/Tests/Component/Validator/Constraints/CollectionValidatorArrayTest.php b/tests/Symfony/Tests/Component/Validator/Constraints/CollectionValidatorArrayTest.php new file mode 100644 index 0000000000..deba6d893d --- /dev/null +++ b/tests/Symfony/Tests/Component/Validator/Constraints/CollectionValidatorArrayTest.php @@ -0,0 +1,20 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Tests\Component\Validator\Constraints; + +class CollectionValidatorArrayTest extends CollectionValidatorTest +{ + public function prepareTestData(array $contents) + { + return $contents; + } +} \ No newline at end of file diff --git a/tests/Symfony/Tests/Component/Validator/Constraints/CollectionValidatorCustomArrayObjectTest.php b/tests/Symfony/Tests/Component/Validator/Constraints/CollectionValidatorCustomArrayObjectTest.php new file mode 100644 index 0000000000..bd7363d437 --- /dev/null +++ b/tests/Symfony/Tests/Component/Validator/Constraints/CollectionValidatorCustomArrayObjectTest.php @@ -0,0 +1,80 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Tests\Component\Validator\Constraints; + +/** +* This class is a hand written simplified version of PHP native `ArrayObject` +* class, to show that it behaves different than PHP native implementation. +*/ +class CustomArrayObject implements \ArrayAccess, \IteratorAggregate, \Countable, \Serializable +{ + private $array; + + public function __construct(array $array = null) + { + $this->array = (array) ($array ?: array()); + } + + public function offsetExists($offset) + { + return array_key_exists($offset, $this->array); + } + + public function offsetGet($offset) + { + return $this->array[$offset]; + } + + public function offsetSet($offset, $value) + { + if (null === $offset) { + $this->array[] = $value; + } else { + $this->array[$offset] = $value; + } + } + + public function offsetUnset($offset) + { + if (array_key_exists($offset, $this->array)) { + unset($this->array[$offset]); + } + } + + public function getIterator() + { + return new \ArrayIterator($this->array); + } + + public function count() + { + return count($this->array); + } + + public function serialize() + { + return serialize($this->array); + } + + public function unserialize($serialized) + { + $this->array = (array) unserialize((string) $serialized); + } +} + +class CollectionValidatorCustomArrayObjectTest extends CollectionValidatorTest +{ + public function prepareTestData(array $contents) + { + return new CustomArrayObject($contents); + } +} \ No newline at end of file diff --git a/tests/Symfony/Tests/Component/Validator/Constraints/CollectionValidatorTest.php b/tests/Symfony/Tests/Component/Validator/Constraints/CollectionValidatorTest.php index 1dd37efa84..a1cfc31980 100644 --- a/tests/Symfony/Tests/Component/Validator/Constraints/CollectionValidatorTest.php +++ b/tests/Symfony/Tests/Component/Validator/Constraints/CollectionValidatorTest.php @@ -20,67 +20,7 @@ use Symfony\Component\Validator\Constraints\Collection\Optional; use Symfony\Component\Validator\Constraints\Collection; use Symfony\Component\Validator\Constraints\CollectionValidator; -/** - * This class is a hand written simplified version of PHP native `ArrayObject` - * class, to show that it behaves different than PHP native implementation. - */ -class TestArrayObject implements \ArrayAccess, \IteratorAggregate, \Countable, \Serializable -{ - private $array; - - public function __construct(array $array = null) - { - $this->array = (array) ($array ?: array()); - } - - public function offsetExists($offset) - { - return array_key_exists($offset, $this->array); - } - - public function offsetGet($offset) - { - return $this->array[$offset]; - } - - public function offsetSet($offset, $value) - { - if (null === $offset) { - $this->array[] = $value; - } else { - $this->array[$offset] = $value; - } - } - - public function offsetUnset($offset) - { - if (array_key_exists($offset, $this->array)) { - unset($this->array[$offset]); - } - } - - public function getIterator() - { - return new \ArrayIterator($this->array); - } - - public function count() - { - return count($this->array); - } - - public function serialize() - { - return serialize($this->array); - } - - public function unserialize($serialized) - { - $this->array = (array) unserialize((string) $serialized); - } -} - -class CollectionValidatorTest extends \PHPUnit_Framework_TestCase +abstract class CollectionValidatorTest extends \PHPUnit_Framework_TestCase { protected $validator; protected $walker; @@ -104,6 +44,8 @@ class CollectionValidatorTest extends \PHPUnit_Framework_TestCase $this->context = null; } + abstract protected function prepareTestData(array $contents); + public function testNullIsValid() { $this->assertTrue($this->validator->isValid(null, new Collection(array('fields' => array( @@ -113,13 +55,9 @@ class CollectionValidatorTest extends \PHPUnit_Framework_TestCase public function testFieldsAsDefaultOption() { - $this->assertTrue($this->validator->isValid(array('foo' => 'foobar'), new Collection(array( - 'foo' => new Min(4), - )))); - $this->assertTrue($this->validator->isValid(new \ArrayObject(array('foo' => 'foobar')), new Collection(array( - 'foo' => new Min(4), - )))); - $this->assertTrue($this->validator->isValid(new TestArrayObject(array('foo' => 'foobar')), new Collection(array( + $data = $this->prepareTestData(array('foo' => 'foobar')); + + $this->assertTrue($this->validator->isValid($data, new Collection(array( 'foo' => new Min(4), )))); } @@ -134,61 +72,66 @@ class CollectionValidatorTest extends \PHPUnit_Framework_TestCase )))); } - /** - * @dataProvider getValidArguments - */ - public function testWalkSingleConstraint($array) + public function testWalkSingleConstraint() { $this->context->setGroup('MyGroup'); $this->context->setPropertyPath('foo'); $constraint = new Min(4); + $array = array('foo' => 3); + foreach ($array as $key => $value) { $this->walker->expects($this->once()) - ->method('walkConstraint') - ->with($this->equalTo($constraint), $this->equalTo($value), $this->equalTo('MyGroup'), $this->equalTo('foo['.$key.']')); + ->method('walkConstraint') + ->with($this->equalTo($constraint), $this->equalTo($value), $this->equalTo('MyGroup'), $this->equalTo('foo['.$key.']')); } - $this->assertTrue($this->validator->isValid($array, new Collection(array( + $data = $this->prepareTestData($array); + + $this->assertTrue($this->validator->isValid($data, new Collection(array( 'fields' => array( 'foo' => $constraint, ), )))); } - /** - * @dataProvider getValidArguments - */ - public function testWalkMultipleConstraints($array) + public function testWalkMultipleConstraints() { $this->context->setGroup('MyGroup'); $this->context->setPropertyPath('foo'); - $constraint = new Min(4); - // can only test for twice the same constraint because PHPUnits mocking - // can't test method calls with different arguments - $constraints = array($constraint, $constraint); + $constraints = array( + new Min(4), + new NotNull(), + ); + $array = array('foo' => 3); foreach ($array as $key => $value) { - $this->walker->expects($this->exactly(2)) - ->method('walkConstraint') - ->with($this->equalTo($constraint), $this->equalTo($value), $this->equalTo('MyGroup'), $this->equalTo('foo['.$key.']')); + foreach ($constraints as $i => $constraint) { + $this->walker->expects($this->at($i)) + ->method('walkConstraint') + ->with($this->equalTo($constraint), $this->equalTo($value), $this->equalTo('MyGroup'), $this->equalTo('foo['.$key.']')); + } } - $this->assertTrue($this->validator->isValid($array, new Collection(array( + $data = $this->prepareTestData($array); + + $this->assertTrue($this->validator->isValid($data, new Collection(array( 'fields' => array( 'foo' => $constraints, ) )))); } - /** - * @dataProvider getArgumentsWithExtraFields - */ - public function testExtraFieldsDisallowed($array) + public function testExtraFieldsDisallowed() { - $this->assertFalse($this->validator->isValid($array, new Collection(array( + $data = $this->prepareTestData(array( + 'foo' => 5, + 'bar' => 6, + )); + + $this->assertFalse($this->validator->isValid($data, new Collection(array( 'fields' => array( 'foo' => new Min(4), ), @@ -198,26 +141,24 @@ class CollectionValidatorTest extends \PHPUnit_Framework_TestCase // bug fix public function testNullNotConsideredExtraField() { - $array = array( + $data = $this->prepareTestData(array( 'foo' => null, - ); + )); $collection = new Collection(array( 'fields' => array( 'foo' => new Min(4), ), )); - $this->assertTrue($this->validator->isValid($array, $collection)); - $this->assertTrue($this->validator->isValid(new \ArrayObject($array), $collection)); - $this->assertTrue($this->validator->isValid(new TestArrayObject($array), $collection)); + $this->assertTrue($this->validator->isValid($data, $collection)); } public function testExtraFieldsAllowed() { - $array = array( + $data = $this->prepareTestData(array( 'foo' => 5, 'bar' => 6, - ); + )); $collection = new Collection(array( 'fields' => array( 'foo' => new Min(4), @@ -225,24 +166,14 @@ class CollectionValidatorTest extends \PHPUnit_Framework_TestCase 'allowExtraFields' => true, )); - $this->assertTrue($this->validator->isValid($array, $collection)); - $this->assertTrue($this->validator->isValid(new \ArrayObject($array), $collection)); - $this->assertTrue($this->validator->isValid(new TestArrayObject($array), $collection)); + $this->assertTrue($this->validator->isValid($data, $collection)); } public function testMissingFieldsDisallowed() { - $this->assertFalse($this->validator->isValid(array(), new Collection(array( - 'fields' => array( - 'foo' => new Min(4), - ), - )))); - $this->assertFalse($this->validator->isValid(new \ArrayObject(array()), new Collection(array( - 'fields' => array( - 'foo' => new Min(4), - ), - )))); - $this->assertFalse($this->validator->isValid(new TestArrayObject(array()), new Collection(array( + $data = $this->prepareTestData(array()); + + $this->assertFalse($this->validator->isValid($data, new Collection(array( 'fields' => array( 'foo' => new Min(4), ), @@ -251,83 +182,32 @@ class CollectionValidatorTest extends \PHPUnit_Framework_TestCase public function testMissingFieldsAllowed() { - $this->assertTrue($this->validator->isValid(array(), new Collection(array( + $data = $this->prepareTestData(array()); + + $this->assertTrue($this->validator->isValid($data, new Collection(array( 'fields' => array( 'foo' => new Min(4), ), 'allowMissingFields' => true, )))); - $this->assertTrue($this->validator->isValid(new \ArrayObject(array()), new Collection(array( - 'fields' => array( - 'foo' => new Min(4), - ), - 'allowMissingFields' => true, - )))); - $this->assertTrue($this->validator->isValid(new TestArrayObject(array()), new Collection(array( - 'fields' => array( - 'foo' => new Min(4), - ), - 'allowMissingFields' => true, - )))); - } - - public function testArrayAccessObject() { - $value = new TestArrayObject(); - $value['foo'] = 12; - $value['asdf'] = 'asdfaf'; - - $this->assertTrue(isset($value['asdf'])); - $this->assertTrue(isset($value['foo'])); - $this->assertFalse(empty($value['asdf'])); - $this->assertFalse(empty($value['foo'])); - - $result = $this->validator->isValid($value, new Collection(array( - 'fields' => array( - 'foo' => new NotBlank(), - 'asdf' => new NotBlank() - ) - ))); - - $this->assertTrue($result); - } - - public function testArrayObject() { - $value = new \ArrayObject(array()); - $value['foo'] = 12; - $value['asdf'] = 'asdfaf'; - - $this->assertTrue(isset($value['asdf'])); - $this->assertTrue(isset($value['foo'])); - $this->assertFalse(empty($value['asdf'])); - $this->assertFalse(empty($value['foo'])); - - $result = $this->validator->isValid($value, new Collection(array( - 'fields' => array( - 'foo' => new NotBlank(), - 'asdf' => new NotBlank() - ) - ))); - - $this->assertTrue($result); } public function testOptionalFieldPresent() { - $array = array( + $data = $this->prepareTestData(array( 'foo' => null, - ); + )); - $this->assertTrue($this->validator->isValid($array, new Collection(array( + $this->assertTrue($this->validator->isValid($data, new Collection(array( 'foo' => new Optional(), )))); } public function testOptionalFieldNotPresent() { - $array = array( - ); + $data = $this->prepareTestData(array()); - $this->assertTrue($this->validator->isValid($array, new Collection(array( + $this->assertTrue($this->validator->isValid($data, new Collection(array( 'foo' => new Optional(), )))); } @@ -347,7 +227,9 @@ class CollectionValidatorTest extends \PHPUnit_Framework_TestCase ->method('walkConstraint') ->with($this->equalTo($constraint), $this->equalTo($array['foo']), $this->equalTo('MyGroup'), $this->equalTo('bar[foo]')); - $this->assertTrue($this->validator->isValid($array, new Collection(array( + $data = $this->prepareTestData($array); + + $this->assertTrue($this->validator->isValid($data, new Collection(array( 'foo' => new Optional($constraint), )))); } @@ -372,28 +254,29 @@ class CollectionValidatorTest extends \PHPUnit_Framework_TestCase ->with($this->equalTo($constraint), $this->equalTo($array['foo']), $this->equalTo('MyGroup'), $this->equalTo('bar[foo]')); } - $this->assertTrue($this->validator->isValid($array, new Collection(array( + $data = $this->prepareTestData($array); + + $this->assertTrue($this->validator->isValid($data, new Collection(array( 'foo' => new Optional($constraints), )))); } public function testRequiredFieldPresent() { - $array = array( + $data = $this->prepareTestData(array( 'foo' => null, - ); + )); - $this->assertTrue($this->validator->isValid($array, new Collection(array( + $this->assertTrue($this->validator->isValid($data, new Collection(array( 'foo' => new Required(), )))); } public function testRequiredFieldNotPresent() { - $array = array( - ); + $data = $this->prepareTestData(array()); - $this->assertFalse($this->validator->isValid($array, new Collection(array( + $this->assertFalse($this->validator->isValid($data, new Collection(array( 'foo' => new Required(), )))); } @@ -410,10 +293,12 @@ class CollectionValidatorTest extends \PHPUnit_Framework_TestCase $constraint = new Min(4); $this->walker->expects($this->once()) - ->method('walkConstraint') - ->with($this->equalTo($constraint), $this->equalTo($array['foo']), $this->equalTo('MyGroup'), $this->equalTo('bar[foo]')); + ->method('walkConstraint') + ->with($this->equalTo($constraint), $this->equalTo($array['foo']), $this->equalTo('MyGroup'), $this->equalTo('bar[foo]')); - $this->assertTrue($this->validator->isValid($array, new Collection(array( + $data = $this->prepareTestData($array); + + $this->assertTrue($this->validator->isValid($data, new Collection(array( 'foo' => new Required($constraint), )))); } @@ -434,10 +319,12 @@ class CollectionValidatorTest extends \PHPUnit_Framework_TestCase foreach ($constraints as $i => $constraint) { $this->walker->expects($this->at($i)) - ->method('walkConstraint') - ->with($this->equalTo($constraint), $this->equalTo($array['foo']), $this->equalTo('MyGroup'), $this->equalTo('bar[foo]')); + ->method('walkConstraint') + ->with($this->equalTo($constraint), $this->equalTo($array['foo']), $this->equalTo('MyGroup'), $this->equalTo('bar[foo]')); } + $data = $this->prepareTestData($array); + $this->assertTrue($this->validator->isValid($array, new Collection(array( 'foo' => new Required($constraints), )))); @@ -458,34 +345,4 @@ class CollectionValidatorTest extends \PHPUnit_Framework_TestCase 'foo' => 3 ), (array) $value); } - - public function getValidArguments() - { - return array( - // can only test for one entry, because PHPUnits mocking does not allow - // to expect multiple method calls with different arguments - array(array('foo' => 3)), - array(new \ArrayObject(array('foo' => 3))), - array(new TestArrayObject(array('foo' => 3))), - ); - } - - public function getArgumentsWithExtraFields() - { - return array( - array(array( - 'foo' => 5, - 'bar' => 6, - )), - array(new \ArrayObject(array( - 'foo' => 5, - 'bar' => 6, - ))), - array(new TestArrayObject(array( - 'foo' => 5, - 'bar' => 6, - ))) - ); - } } -