Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 /*
|
Chris@0
|
4 * This file is part of the webmozart/assert package.
|
Chris@0
|
5 *
|
Chris@0
|
6 * (c) Bernhard Schussek <bschussek@gmail.com>
|
Chris@0
|
7 *
|
Chris@0
|
8 * For the full copyright and license information, please view the LICENSE
|
Chris@0
|
9 * file that was distributed with this source code.
|
Chris@0
|
10 */
|
Chris@0
|
11
|
Chris@0
|
12 namespace Webmozart\Assert\Tests;
|
Chris@0
|
13
|
Chris@0
|
14 use ArrayIterator;
|
Chris@0
|
15 use Exception;
|
Chris@0
|
16 use Error;
|
Chris@0
|
17 use LogicException;
|
Chris@0
|
18 use PHPUnit_Framework_TestCase;
|
Chris@0
|
19 use RuntimeException;
|
Chris@0
|
20 use stdClass;
|
Chris@0
|
21 use Webmozart\Assert\Assert;
|
Chris@0
|
22
|
Chris@0
|
23 /**
|
Chris@0
|
24 * @since 1.0
|
Chris@0
|
25 *
|
Chris@0
|
26 * @author Bernhard Schussek <bschussek@gmail.com>
|
Chris@0
|
27 */
|
Chris@0
|
28 class AssertTest extends PHPUnit_Framework_TestCase
|
Chris@0
|
29 {
|
Chris@0
|
30 private static $resource;
|
Chris@0
|
31
|
Chris@0
|
32 public static function getResource()
|
Chris@0
|
33 {
|
Chris@0
|
34 if (!static::$resource) {
|
Chris@0
|
35 static::$resource = fopen(__FILE__, 'r');
|
Chris@0
|
36 }
|
Chris@0
|
37
|
Chris@0
|
38 return static::$resource;
|
Chris@0
|
39 }
|
Chris@0
|
40
|
Chris@0
|
41 public static function tearDownAfterClass()
|
Chris@0
|
42 {
|
Chris@0
|
43 @fclose(self::$resource);
|
Chris@0
|
44 }
|
Chris@0
|
45
|
Chris@0
|
46 public function getTests()
|
Chris@0
|
47 {
|
Chris@0
|
48 $resource = self::getResource();
|
Chris@0
|
49
|
Chris@0
|
50 return array(
|
Chris@0
|
51 array('string', array('value'), true),
|
Chris@0
|
52 array('string', array(''), true),
|
Chris@0
|
53 array('string', array(1234), false),
|
Chris@0
|
54 array('stringNotEmpty', array('value'), true),
|
Chris@0
|
55 array('stringNotEmpty', array(''), false),
|
Chris@0
|
56 array('stringNotEmpty', array(1234), false),
|
Chris@0
|
57 array('integer', array(123), true),
|
Chris@0
|
58 array('integer', array('123'), false),
|
Chris@0
|
59 array('integer', array(1.0), false),
|
Chris@0
|
60 array('integer', array(1.23), false),
|
Chris@0
|
61 array('integerish', array(1.0), true),
|
Chris@0
|
62 array('integerish', array(1.23), false),
|
Chris@0
|
63 array('integerish', array(123), true),
|
Chris@0
|
64 array('integerish', array('123'), true),
|
Chris@0
|
65 array('float', array(1.0), true),
|
Chris@0
|
66 array('float', array(1.23), true),
|
Chris@0
|
67 array('float', array(123), false),
|
Chris@0
|
68 array('float', array('123'), false),
|
Chris@0
|
69 array('numeric', array(1.0), true),
|
Chris@0
|
70 array('numeric', array(1.23), true),
|
Chris@0
|
71 array('numeric', array(123), true),
|
Chris@0
|
72 array('numeric', array('123'), true),
|
Chris@0
|
73 array('numeric', array('foo'), false),
|
Chris@0
|
74 array('boolean', array(true), true),
|
Chris@0
|
75 array('boolean', array(false), true),
|
Chris@0
|
76 array('boolean', array(1), false),
|
Chris@0
|
77 array('boolean', array('1'), false),
|
Chris@0
|
78 array('scalar', array('1'), true),
|
Chris@0
|
79 array('scalar', array(123), true),
|
Chris@0
|
80 array('scalar', array(true), true),
|
Chris@0
|
81 array('scalar', array(null), false),
|
Chris@0
|
82 array('scalar', array(array()), false),
|
Chris@0
|
83 array('scalar', array(new stdClass()), false),
|
Chris@0
|
84 array('object', array(new stdClass()), true),
|
Chris@0
|
85 array('object', array(new RuntimeException()), true),
|
Chris@0
|
86 array('object', array(null), false),
|
Chris@0
|
87 array('object', array(true), false),
|
Chris@0
|
88 array('object', array(1), false),
|
Chris@0
|
89 array('object', array(array()), false),
|
Chris@0
|
90 array('resource', array($resource), true),
|
Chris@0
|
91 array('resource', array($resource, 'stream'), true),
|
Chris@0
|
92 array('resource', array($resource, 'other'), false),
|
Chris@0
|
93 array('resource', array(1), false),
|
Chris@0
|
94 array('isCallable', array('strlen'), true),
|
Chris@0
|
95 array('isCallable', array(array($this, 'getTests')), true),
|
Chris@0
|
96 array('isCallable', array(function () {}), true),
|
Chris@0
|
97 array('isCallable', array(1234), false),
|
Chris@0
|
98 array('isCallable', array('foobar'), false),
|
Chris@0
|
99 array('isArray', array(array()), true),
|
Chris@0
|
100 array('isArray', array(array(1, 2, 3)), true),
|
Chris@0
|
101 array('isArray', array(new ArrayIterator(array())), false),
|
Chris@0
|
102 array('isArray', array(123), false),
|
Chris@0
|
103 array('isArray', array(new stdClass()), false),
|
Chris@0
|
104 array('isTraversable', array(array()), true),
|
Chris@0
|
105 array('isTraversable', array(array(1, 2, 3)), true),
|
Chris@0
|
106 array('isTraversable', array(new ArrayIterator(array())), true),
|
Chris@0
|
107 array('isTraversable', array(123), false),
|
Chris@0
|
108 array('isTraversable', array(new stdClass()), false),
|
Chris@0
|
109 array('isInstanceOf', array(new stdClass(), 'stdClass'), true),
|
Chris@0
|
110 array('isInstanceOf', array(new Exception(), 'stdClass'), false),
|
Chris@0
|
111 array('isInstanceOf', array(123, 'stdClass'), false),
|
Chris@0
|
112 array('isInstanceOf', array(array(), 'stdClass'), false),
|
Chris@0
|
113 array('notInstanceOf', array(new stdClass(), 'stdClass'), false),
|
Chris@0
|
114 array('notInstanceOf', array(new Exception(), 'stdClass'), true),
|
Chris@0
|
115 array('notInstanceOf', array(123, 'stdClass'), true),
|
Chris@0
|
116 array('notInstanceOf', array(array(), 'stdClass'), true),
|
Chris@0
|
117 array('true', array(true), true),
|
Chris@0
|
118 array('true', array(false), false),
|
Chris@0
|
119 array('true', array(1), false),
|
Chris@0
|
120 array('true', array(null), false),
|
Chris@0
|
121 array('false', array(false), true),
|
Chris@0
|
122 array('false', array(true), false),
|
Chris@0
|
123 array('false', array(1), false),
|
Chris@0
|
124 array('false', array(0), false),
|
Chris@0
|
125 array('false', array(null), false),
|
Chris@0
|
126 array('null', array(null), true),
|
Chris@0
|
127 array('null', array(false), false),
|
Chris@0
|
128 array('null', array(0), false),
|
Chris@0
|
129 array('notNull', array(false), true),
|
Chris@0
|
130 array('notNull', array(0), true),
|
Chris@0
|
131 array('notNull', array(null), false),
|
Chris@0
|
132 array('isEmpty', array(null), true),
|
Chris@0
|
133 array('isEmpty', array(false), true),
|
Chris@0
|
134 array('isEmpty', array(0), true),
|
Chris@0
|
135 array('isEmpty', array(''), true),
|
Chris@0
|
136 array('isEmpty', array(1), false),
|
Chris@0
|
137 array('isEmpty', array('a'), false),
|
Chris@0
|
138 array('notEmpty', array(1), true),
|
Chris@0
|
139 array('notEmpty', array('a'), true),
|
Chris@0
|
140 array('notEmpty', array(null), false),
|
Chris@0
|
141 array('notEmpty', array(false), false),
|
Chris@0
|
142 array('notEmpty', array(0), false),
|
Chris@0
|
143 array('notEmpty', array(''), false),
|
Chris@0
|
144 array('eq', array(1, 1), true),
|
Chris@0
|
145 array('eq', array(1, '1'), true),
|
Chris@0
|
146 array('eq', array(1, true), true),
|
Chris@0
|
147 array('eq', array(1, 0), false),
|
Chris@0
|
148 array('notEq', array(1, 0), true),
|
Chris@0
|
149 array('notEq', array(1, 1), false),
|
Chris@0
|
150 array('notEq', array(1, '1'), false),
|
Chris@0
|
151 array('notEq', array(1, true), false),
|
Chris@0
|
152 array('same', array(1, 1), true),
|
Chris@0
|
153 array('same', array(1, '1'), false),
|
Chris@0
|
154 array('same', array(1, true), false),
|
Chris@0
|
155 array('same', array(1, 0), false),
|
Chris@0
|
156 array('notSame', array(1, 0), true),
|
Chris@0
|
157 array('notSame', array(1, 1), false),
|
Chris@0
|
158 array('notSame', array(1, '1'), true),
|
Chris@0
|
159 array('notSame', array(1, true), true),
|
Chris@0
|
160 array('greaterThan', array(1, 0), true),
|
Chris@0
|
161 array('greaterThan', array(0, 0), false),
|
Chris@0
|
162 array('greaterThanEq', array(2, 1), true),
|
Chris@0
|
163 array('greaterThanEq', array(1, 1), true),
|
Chris@0
|
164 array('greaterThanEq', array(0, 1), false),
|
Chris@0
|
165 array('lessThan', array(0, 1), true),
|
Chris@0
|
166 array('lessThan', array(1, 1), false),
|
Chris@0
|
167 array('lessThanEq', array(0, 1), true),
|
Chris@0
|
168 array('lessThanEq', array(1, 1), true),
|
Chris@0
|
169 array('lessThanEq', array(2, 1), false),
|
Chris@0
|
170 array('range', array(1, 1, 2), true),
|
Chris@0
|
171 array('range', array(2, 1, 2), true),
|
Chris@0
|
172 array('range', array(0, 1, 2), false),
|
Chris@0
|
173 array('range', array(3, 1, 2), false),
|
Chris@0
|
174 array('oneOf', array(1, array(1, 2, 3)), true),
|
Chris@0
|
175 array('oneOf', array(1, array('1', '2', '3')), false),
|
Chris@0
|
176 array('contains', array('abcd', 'ab'), true),
|
Chris@0
|
177 array('contains', array('abcd', 'bc'), true),
|
Chris@0
|
178 array('contains', array('abcd', 'cd'), true),
|
Chris@0
|
179 array('contains', array('abcd', 'de'), false),
|
Chris@0
|
180 array('contains', array('', 'de'), false),
|
Chris@0
|
181 array('startsWith', array('abcd', 'ab'), true),
|
Chris@0
|
182 array('startsWith', array('abcd', 'bc'), false),
|
Chris@0
|
183 array('startsWith', array('', 'bc'), false),
|
Chris@0
|
184 array('startsWithLetter', array('abcd'), true),
|
Chris@0
|
185 array('startsWithLetter', array('1abcd'), false),
|
Chris@0
|
186 array('startsWithLetter', array(''), false),
|
Chris@0
|
187 array('endsWith', array('abcd', 'cd'), true),
|
Chris@0
|
188 array('endsWith', array('abcd', 'bc'), false),
|
Chris@0
|
189 array('endsWith', array('', 'bc'), false),
|
Chris@0
|
190 array('regex', array('abcd', '~^ab~'), true),
|
Chris@0
|
191 array('regex', array('abcd', '~^bc~'), false),
|
Chris@0
|
192 array('regex', array('', '~^bc~'), false),
|
Chris@0
|
193 array('alpha', array('abcd'), true),
|
Chris@0
|
194 array('alpha', array('ab1cd'), false),
|
Chris@0
|
195 array('alpha', array(''), false),
|
Chris@0
|
196 array('digits', array('1234'), true),
|
Chris@0
|
197 array('digits', array('12a34'), false),
|
Chris@0
|
198 array('digits', array(''), false),
|
Chris@0
|
199 array('alnum', array('ab12'), true),
|
Chris@0
|
200 array('alnum', array('ab12$'), false),
|
Chris@0
|
201 array('alnum', array(''), false),
|
Chris@0
|
202 array('lower', array('abcd'), true),
|
Chris@0
|
203 array('lower', array('abCd'), false),
|
Chris@0
|
204 array('lower', array('ab_d'), false),
|
Chris@0
|
205 array('lower', array(''), false),
|
Chris@0
|
206 array('upper', array('ABCD'), true),
|
Chris@0
|
207 array('upper', array('ABcD'), false),
|
Chris@0
|
208 array('upper', array('AB_D'), false),
|
Chris@0
|
209 array('upper', array(''), false),
|
Chris@0
|
210 array('length', array('abcd', 4), true),
|
Chris@0
|
211 array('length', array('abc', 4), false),
|
Chris@0
|
212 array('length', array('abcde', 4), false),
|
Chris@0
|
213 array('length', array('äbcd', 4), true, true),
|
Chris@0
|
214 array('length', array('äbc', 4), false, true),
|
Chris@0
|
215 array('length', array('äbcde', 4), false, true),
|
Chris@0
|
216 array('minLength', array('abcd', 4), true),
|
Chris@0
|
217 array('minLength', array('abcde', 4), true),
|
Chris@0
|
218 array('minLength', array('abc', 4), false),
|
Chris@0
|
219 array('minLength', array('äbcd', 4), true, true),
|
Chris@0
|
220 array('minLength', array('äbcde', 4), true, true),
|
Chris@0
|
221 array('minLength', array('äbc', 4), false, true),
|
Chris@0
|
222 array('maxLength', array('abcd', 4), true),
|
Chris@0
|
223 array('maxLength', array('abc', 4), true),
|
Chris@0
|
224 array('maxLength', array('abcde', 4), false),
|
Chris@0
|
225 array('maxLength', array('äbcd', 4), true, true),
|
Chris@0
|
226 array('maxLength', array('äbc', 4), true, true),
|
Chris@0
|
227 array('maxLength', array('äbcde', 4), false, true),
|
Chris@0
|
228 array('lengthBetween', array('abcd', 3, 5), true),
|
Chris@0
|
229 array('lengthBetween', array('abc', 3, 5), true),
|
Chris@0
|
230 array('lengthBetween', array('abcde', 3, 5), true),
|
Chris@0
|
231 array('lengthBetween', array('ab', 3, 5), false),
|
Chris@0
|
232 array('lengthBetween', array('abcdef', 3, 5), false),
|
Chris@0
|
233 array('lengthBetween', array('äbcd', 3, 5), true, true),
|
Chris@0
|
234 array('lengthBetween', array('äbc', 3, 5), true, true),
|
Chris@0
|
235 array('lengthBetween', array('äbcde', 3, 5), true, true),
|
Chris@0
|
236 array('lengthBetween', array('äb', 3, 5), false, true),
|
Chris@0
|
237 array('lengthBetween', array('äbcdef', 3, 5), false, true),
|
Chris@0
|
238 array('fileExists', array(__FILE__), true),
|
Chris@0
|
239 array('fileExists', array(__DIR__), true),
|
Chris@0
|
240 array('fileExists', array(__DIR__.'/foobar'), false),
|
Chris@0
|
241 array('file', array(__FILE__), true),
|
Chris@0
|
242 array('file', array(__DIR__), false),
|
Chris@0
|
243 array('file', array(__DIR__.'/foobar'), false),
|
Chris@0
|
244 array('directory', array(__DIR__), true),
|
Chris@0
|
245 array('directory', array(__FILE__), false),
|
Chris@0
|
246 array('directory', array(__DIR__.'/foobar'), false),
|
Chris@0
|
247 // no tests for readable()/writable() for now
|
Chris@0
|
248 array('classExists', array(__CLASS__), true),
|
Chris@0
|
249 array('classExists', array(__NAMESPACE__.'\Foobar'), false),
|
Chris@0
|
250 array('subclassOf', array(__CLASS__, 'PHPUnit_Framework_TestCase'), true),
|
Chris@0
|
251 array('subclassOf', array(__CLASS__, 'stdClass'), false),
|
Chris@0
|
252 array('implementsInterface', array('ArrayIterator', 'Traversable'), true),
|
Chris@0
|
253 array('implementsInterface', array(__CLASS__, 'Traversable'), false),
|
Chris@0
|
254 array('propertyExists', array((object) array('property' => 0), 'property'), true),
|
Chris@0
|
255 array('propertyExists', array((object) array('property' => null), 'property'), true),
|
Chris@0
|
256 array('propertyExists', array((object) array('property' => null), 'foo'), false),
|
Chris@0
|
257 array('propertyNotExists', array((object) array('property' => 0), 'property'), false),
|
Chris@0
|
258 array('propertyNotExists', array((object) array('property' => null), 'property'), false),
|
Chris@0
|
259 array('propertyNotExists', array((object) array('property' => null), 'foo'), true),
|
Chris@0
|
260 array('methodExists', array('RuntimeException', 'getMessage'), true),
|
Chris@0
|
261 array('methodExists', array(new RuntimeException(), 'getMessage'), true),
|
Chris@0
|
262 array('methodExists', array('stdClass', 'getMessage'), false),
|
Chris@0
|
263 array('methodExists', array(new stdClass(), 'getMessage'), false),
|
Chris@0
|
264 array('methodExists', array(null, 'getMessage'), false),
|
Chris@0
|
265 array('methodExists', array(true, 'getMessage'), false),
|
Chris@0
|
266 array('methodExists', array(1, 'getMessage'), false),
|
Chris@0
|
267 array('methodNotExists', array('RuntimeException', 'getMessage'), false),
|
Chris@0
|
268 array('methodNotExists', array(new RuntimeException(), 'getMessage'), false),
|
Chris@0
|
269 array('methodNotExists', array('stdClass', 'getMessage'), true),
|
Chris@0
|
270 array('methodNotExists', array(new stdClass(), 'getMessage'), true),
|
Chris@0
|
271 array('methodNotExists', array(null, 'getMessage'), true),
|
Chris@0
|
272 array('methodNotExists', array(true, 'getMessage'), true),
|
Chris@0
|
273 array('methodNotExists', array(1, 'getMessage'), true),
|
Chris@0
|
274 array('keyExists', array(array('key' => 0), 'key'), true),
|
Chris@0
|
275 array('keyExists', array(array('key' => null), 'key'), true),
|
Chris@0
|
276 array('keyExists', array(array('key' => null), 'foo'), false),
|
Chris@0
|
277 array('keyNotExists', array(array('key' => 0), 'key'), false),
|
Chris@0
|
278 array('keyNotExists', array(array('key' => null), 'key'), false),
|
Chris@0
|
279 array('keyNotExists', array(array('key' => null), 'foo'), true),
|
Chris@0
|
280 array('count', array(array(0, 1, 2), 3), true),
|
Chris@0
|
281 array('count', array(array(0, 1, 2), 2), false),
|
Chris@0
|
282 array('uuid', array('00000000-0000-0000-0000-000000000000'), true),
|
Chris@0
|
283 array('uuid', array('ff6f8cb0-c57d-21e1-9b21-0800200c9a66'), true),
|
Chris@0
|
284 array('uuid', array('ff6f8cb0-c57d-11e1-9b21-0800200c9a66'), true),
|
Chris@0
|
285 array('uuid', array('ff6f8cb0-c57d-31e1-9b21-0800200c9a66'), true),
|
Chris@0
|
286 array('uuid', array('ff6f8cb0-c57d-41e1-9b21-0800200c9a66'), true),
|
Chris@0
|
287 array('uuid', array('ff6f8cb0-c57d-51e1-9b21-0800200c9a66'), true),
|
Chris@0
|
288 array('uuid', array('FF6F8CB0-C57D-11E1-9B21-0800200C9A66'), true),
|
Chris@0
|
289 array('uuid', array('zf6f8cb0-c57d-11e1-9b21-0800200c9a66'), false),
|
Chris@0
|
290 array('uuid', array('af6f8cb0c57d11e19b210800200c9a66'), false),
|
Chris@0
|
291 array('uuid', array('ff6f8cb0-c57da-51e1-9b21-0800200c9a66'), false),
|
Chris@0
|
292 array('uuid', array('af6f8cb-c57d-11e1-9b21-0800200c9a66'), false),
|
Chris@0
|
293 array('uuid', array('3f6f8cb0-c57d-11e1-9b21-0800200c9a6'), false),
|
Chris@0
|
294 array('throws', array(function() { throw new LogicException('test'); }, 'LogicException'), true),
|
Chris@0
|
295 array('throws', array(function() { throw new LogicException('test'); }, 'IllogicException'), false),
|
Chris@0
|
296 array('throws', array(function() { throw new Exception('test'); }), true),
|
Chris@0
|
297 array('throws', array(function() { trigger_error('test'); }, 'Throwable'), true, false, 70000),
|
Chris@0
|
298 array('throws', array(function() { trigger_error('test'); }, 'Unthrowable'), false, false, 70000),
|
Chris@0
|
299 array('throws', array(function() { throw new Error(); }, 'Throwable'), true, true, 70000),
|
Chris@0
|
300 );
|
Chris@0
|
301 }
|
Chris@0
|
302
|
Chris@0
|
303 public function getMethods()
|
Chris@0
|
304 {
|
Chris@0
|
305 $methods = array();
|
Chris@0
|
306
|
Chris@0
|
307 foreach ($this->getTests() as $params) {
|
Chris@0
|
308 $methods[$params[0]] = array($params[0]);
|
Chris@0
|
309 }
|
Chris@0
|
310
|
Chris@0
|
311 return array_values($methods);
|
Chris@0
|
312 }
|
Chris@0
|
313
|
Chris@0
|
314 /**
|
Chris@0
|
315 * @dataProvider getTests
|
Chris@0
|
316 */
|
Chris@0
|
317 public function testAssert($method, $args, $success, $multibyte = false, $minVersion = null)
|
Chris@0
|
318 {
|
Chris@0
|
319 if ($minVersion && PHP_VERSION_ID < $minVersion) {
|
Chris@0
|
320 $this->markTestSkipped(sprintf('This test requires php %s or upper.', $minVersion));
|
Chris@0
|
321
|
Chris@0
|
322 return;
|
Chris@0
|
323 }
|
Chris@0
|
324 if ($multibyte && !function_exists('mb_strlen')) {
|
Chris@0
|
325 $this->markTestSkipped('The function mb_strlen() is not available');
|
Chris@0
|
326
|
Chris@0
|
327 return;
|
Chris@0
|
328 }
|
Chris@0
|
329
|
Chris@0
|
330 if (!$success) {
|
Chris@0
|
331 $this->setExpectedException('\InvalidArgumentException');
|
Chris@0
|
332 }
|
Chris@0
|
333
|
Chris@0
|
334 call_user_func_array(array('Webmozart\Assert\Assert', $method), $args);
|
Chris@0
|
335 }
|
Chris@0
|
336
|
Chris@0
|
337 /**
|
Chris@0
|
338 * @dataProvider getTests
|
Chris@0
|
339 */
|
Chris@0
|
340 public function testNullOr($method, $args, $success, $multibyte = false, $minVersion = null)
|
Chris@0
|
341 {
|
Chris@0
|
342 if ($minVersion && PHP_VERSION_ID < $minVersion) {
|
Chris@0
|
343 $this->markTestSkipped(sprintf('This test requires php %s or upper.', $minVersion));
|
Chris@0
|
344
|
Chris@0
|
345 return;
|
Chris@0
|
346 }
|
Chris@0
|
347 if ($multibyte && !function_exists('mb_strlen')) {
|
Chris@0
|
348 $this->markTestSkipped('The function mb_strlen() is not available');
|
Chris@0
|
349
|
Chris@0
|
350 return;
|
Chris@0
|
351 }
|
Chris@0
|
352
|
Chris@0
|
353 if (!$success && null !== reset($args)) {
|
Chris@0
|
354 $this->setExpectedException('\InvalidArgumentException');
|
Chris@0
|
355 }
|
Chris@0
|
356
|
Chris@0
|
357 call_user_func_array(array('Webmozart\Assert\Assert', 'nullOr'.ucfirst($method)), $args);
|
Chris@0
|
358 }
|
Chris@0
|
359
|
Chris@0
|
360 /**
|
Chris@0
|
361 * @dataProvider getMethods
|
Chris@0
|
362 */
|
Chris@0
|
363 public function testNullOrAcceptsNull($method)
|
Chris@0
|
364 {
|
Chris@0
|
365 call_user_func(array('Webmozart\Assert\Assert', 'nullOr'.ucfirst($method)), null);
|
Chris@0
|
366 }
|
Chris@0
|
367
|
Chris@0
|
368 /**
|
Chris@0
|
369 * @dataProvider getTests
|
Chris@0
|
370 */
|
Chris@0
|
371 public function testAllArray($method, $args, $success, $multibyte = false, $minVersion = null)
|
Chris@0
|
372 {
|
Chris@0
|
373 if ($minVersion && PHP_VERSION_ID < $minVersion) {
|
Chris@0
|
374 $this->markTestSkipped(sprintf('This test requires php %s or upper.', $minVersion));
|
Chris@0
|
375
|
Chris@0
|
376 return;
|
Chris@0
|
377 }
|
Chris@0
|
378 if ($multibyte && !function_exists('mb_strlen')) {
|
Chris@0
|
379 $this->markTestSkipped('The function mb_strlen() is not available');
|
Chris@0
|
380
|
Chris@0
|
381 return;
|
Chris@0
|
382 }
|
Chris@0
|
383
|
Chris@0
|
384 if (!$success) {
|
Chris@0
|
385 $this->setExpectedException('\InvalidArgumentException');
|
Chris@0
|
386 }
|
Chris@0
|
387
|
Chris@0
|
388 $arg = array_shift($args);
|
Chris@0
|
389 array_unshift($args, array($arg));
|
Chris@0
|
390
|
Chris@0
|
391 call_user_func_array(array('Webmozart\Assert\Assert', 'all'.ucfirst($method)), $args);
|
Chris@0
|
392 }
|
Chris@0
|
393
|
Chris@0
|
394 /**
|
Chris@0
|
395 * @dataProvider getTests
|
Chris@0
|
396 */
|
Chris@0
|
397 public function testAllTraversable($method, $args, $success, $multibyte = false, $minVersion = null)
|
Chris@0
|
398 {
|
Chris@0
|
399 if ($minVersion && PHP_VERSION_ID < $minVersion) {
|
Chris@0
|
400 $this->markTestSkipped(sprintf('This test requires php %s or upper.', $minVersion));
|
Chris@0
|
401
|
Chris@0
|
402 return;
|
Chris@0
|
403 }
|
Chris@0
|
404 if ($multibyte && !function_exists('mb_strlen')) {
|
Chris@0
|
405 $this->markTestSkipped('The function mb_strlen() is not available');
|
Chris@0
|
406
|
Chris@0
|
407 return;
|
Chris@0
|
408 }
|
Chris@0
|
409
|
Chris@0
|
410 if (!$success) {
|
Chris@0
|
411 $this->setExpectedException('\InvalidArgumentException');
|
Chris@0
|
412 }
|
Chris@0
|
413
|
Chris@0
|
414 $arg = array_shift($args);
|
Chris@0
|
415 array_unshift($args, new ArrayIterator(array($arg)));
|
Chris@0
|
416
|
Chris@0
|
417 call_user_func_array(array('Webmozart\Assert\Assert', 'all'.ucfirst($method)), $args);
|
Chris@0
|
418 }
|
Chris@0
|
419
|
Chris@0
|
420 public function getStringConversions()
|
Chris@0
|
421 {
|
Chris@0
|
422 return array(
|
Chris@0
|
423 array('integer', array('foobar'), 'Expected an integer. Got: string'),
|
Chris@0
|
424 array('string', array(1), 'Expected a string. Got: integer'),
|
Chris@0
|
425 array('string', array(true), 'Expected a string. Got: boolean'),
|
Chris@0
|
426 array('string', array(null), 'Expected a string. Got: NULL'),
|
Chris@0
|
427 array('string', array(array()), 'Expected a string. Got: array'),
|
Chris@0
|
428 array('string', array(new stdClass()), 'Expected a string. Got: stdClass'),
|
Chris@0
|
429 array('string', array(self::getResource()), 'Expected a string. Got: resource'),
|
Chris@0
|
430
|
Chris@0
|
431 array('eq', array('1', '2'), 'Expected a value equal to "2". Got: "1"'),
|
Chris@0
|
432 array('eq', array(1, 2), 'Expected a value equal to 2. Got: 1'),
|
Chris@0
|
433 array('eq', array(true, false), 'Expected a value equal to false. Got: true'),
|
Chris@0
|
434 array('eq', array(true, null), 'Expected a value equal to null. Got: true'),
|
Chris@0
|
435 array('eq', array(null, true), 'Expected a value equal to true. Got: null'),
|
Chris@0
|
436 array('eq', array(array(1), array(2)), 'Expected a value equal to array. Got: array'),
|
Chris@0
|
437 array('eq', array(new ArrayIterator(array()), new stdClass()), 'Expected a value equal to stdClass. Got: ArrayIterator'),
|
Chris@0
|
438 array('eq', array(1, self::getResource()), 'Expected a value equal to resource. Got: 1'),
|
Chris@0
|
439 );
|
Chris@0
|
440 }
|
Chris@0
|
441
|
Chris@0
|
442 /**
|
Chris@0
|
443 * @dataProvider getStringConversions
|
Chris@0
|
444 */
|
Chris@0
|
445 public function testConvertValuesToStrings($method, $args, $exceptionMessage)
|
Chris@0
|
446 {
|
Chris@0
|
447 $this->setExpectedException('\InvalidArgumentException', $exceptionMessage);
|
Chris@0
|
448
|
Chris@0
|
449 call_user_func_array(array('Webmozart\Assert\Assert', $method), $args);
|
Chris@0
|
450 }
|
Chris@0
|
451 }
|