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\Constraints;
14 use Symfony\Component\Validator\Constraints\Type;
15 use Symfony\Component\Validator\Constraints\TypeValidator;
16 use Symfony\Component\Validator\Test\ConstraintValidatorTestCase;
18 class TypeValidatorTest extends ConstraintValidatorTestCase
20 protected static $file;
22 protected function createValidator()
24 return new TypeValidator();
27 public function testNullIsValid()
29 $constraint = new Type(array('type' => 'integer'));
31 $this->validator->validate(null, $constraint);
33 $this->assertNoViolation();
36 public function testEmptyIsValidIfString()
38 $constraint = new Type(array('type' => 'string'));
40 $this->validator->validate('', $constraint);
42 $this->assertNoViolation();
45 public function testEmptyIsInvalidIfNoString()
47 $constraint = new Type(array(
49 'message' => 'myMessage',
52 $this->validator->validate('', $constraint);
54 $this->buildViolation('myMessage')
55 ->setParameter('{{ value }}', '""')
56 ->setParameter('{{ type }}', 'integer')
57 ->setCode(Type::INVALID_TYPE_ERROR)
62 * @dataProvider getValidValues
64 public function testValidValues($value, $type)
66 $constraint = new Type(array('type' => $type));
68 $this->validator->validate($value, $constraint);
70 $this->assertNoViolation();
73 public function getValidValues()
75 $object = new \stdClass();
76 $file = $this->createFile();
79 array(true, 'Boolean'),
80 array(false, 'Boolean'),
81 array(true, 'boolean'),
82 array(false, 'boolean'),
86 array('0', 'numeric'),
87 array(1.5, 'numeric'),
88 array('1.5', 'numeric'),
91 array('12345', 'string'),
92 array(array(), 'array'),
93 array($object, 'object'),
94 array($object, 'stdClass'),
95 array($file, 'resource'),
96 array('12345', 'digit'),
97 array('12a34', 'alnum'),
98 array('abcde', 'alpha'),
99 array("\n\r\t", 'cntrl'),
100 array('arf12', 'graph'),
101 array('abcde', 'lower'),
102 array('ABCDE', 'upper'),
103 array('arf12', 'print'),
104 array('*&$()', 'punct'),
105 array("\n\r\t", 'space'),
106 array('AB10BC99', 'xdigit'),
111 * @dataProvider getInvalidValues
113 public function testInvalidValues($value, $type, $valueAsString)
115 $constraint = new Type(array(
117 'message' => 'myMessage',
120 $this->validator->validate($value, $constraint);
122 $this->buildViolation('myMessage')
123 ->setParameter('{{ value }}', $valueAsString)
124 ->setParameter('{{ type }}', $type)
125 ->setCode(Type::INVALID_TYPE_ERROR)
129 public function getInvalidValues()
131 $object = new \stdClass();
132 $file = $this->createFile();
135 array('foobar', 'numeric', '"foobar"'),
136 array('foobar', 'boolean', '"foobar"'),
137 array('0', 'integer', '"0"'),
138 array('1.5', 'float', '"1.5"'),
139 array(12345, 'string', '12345'),
140 array($object, 'boolean', 'object'),
141 array($object, 'numeric', 'object'),
142 array($object, 'integer', 'object'),
143 array($object, 'float', 'object'),
144 array($object, 'string', 'object'),
145 array($object, 'resource', 'object'),
146 array($file, 'boolean', 'resource'),
147 array($file, 'numeric', 'resource'),
148 array($file, 'integer', 'resource'),
149 array($file, 'float', 'resource'),
150 array($file, 'string', 'resource'),
151 array($file, 'object', 'resource'),
152 array('12a34', 'digit', '"12a34"'),
153 array('1a#23', 'alnum', '"1a#23"'),
154 array('abcd1', 'alpha', '"abcd1"'),
155 array("\nabc", 'cntrl', "\"\nabc\""),
156 array("abc\n", 'graph', "\"abc\n\""),
157 array('abCDE', 'lower', '"abCDE"'),
158 array('ABcde', 'upper', '"ABcde"'),
159 array("\nabc", 'print', "\"\nabc\""),
160 array('abc&$!', 'punct', '"abc&$!"'),
161 array("\nabc", 'space', "\"\nabc\""),
162 array('AR1012', 'xdigit', '"AR1012"'),
166 protected function createFile()
168 if (!static::$file) {
169 static::$file = fopen(__FILE__, 'r');
172 return static::$file;
175 public static function tearDownAfterClass()
178 fclose(static::$file);
179 static::$file = null;