123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452 |
- <?php
- /*
- * This file is part of the webmozart/assert package.
- *
- * (c) Bernhard Schussek <bschussek@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Webmozart\Assert\Tests;
- use ArrayIterator;
- use Exception;
- use Error;
- use LogicException;
- use PHPUnit_Framework_TestCase;
- use RuntimeException;
- use stdClass;
- use Webmozart\Assert\Assert;
- /**
- * @since 1.0
- *
- * @author Bernhard Schussek <bschussek@gmail.com>
- */
- class AssertTest extends PHPUnit_Framework_TestCase
- {
- private static $resource;
- public static function getResource()
- {
- if (!static::$resource) {
- static::$resource = fopen(__FILE__, 'r');
- }
- return static::$resource;
- }
- public static function tearDownAfterClass()
- {
- @fclose(self::$resource);
- }
- public function getTests()
- {
- $resource = self::getResource();
- return array(
- array('string', array('value'), true),
- array('string', array(''), true),
- array('string', array(1234), false),
- array('stringNotEmpty', array('value'), true),
- array('stringNotEmpty', array(''), false),
- array('stringNotEmpty', array(1234), false),
- array('integer', array(123), true),
- array('integer', array('123'), false),
- array('integer', array(1.0), false),
- array('integer', array(1.23), false),
- array('integerish', array(1.0), true),
- array('integerish', array(1.23), false),
- array('integerish', array(123), true),
- array('integerish', array('123'), true),
- array('float', array(1.0), true),
- array('float', array(1.23), true),
- array('float', array(123), false),
- array('float', array('123'), false),
- array('numeric', array(1.0), true),
- array('numeric', array(1.23), true),
- array('numeric', array(123), true),
- array('numeric', array('123'), true),
- array('numeric', array('foo'), false),
- array('boolean', array(true), true),
- array('boolean', array(false), true),
- array('boolean', array(1), false),
- array('boolean', array('1'), false),
- array('scalar', array('1'), true),
- array('scalar', array(123), true),
- array('scalar', array(true), true),
- array('scalar', array(null), false),
- array('scalar', array(array()), false),
- array('scalar', array(new stdClass()), false),
- array('object', array(new stdClass()), true),
- array('object', array(new RuntimeException()), true),
- array('object', array(null), false),
- array('object', array(true), false),
- array('object', array(1), false),
- array('object', array(array()), false),
- array('resource', array($resource), true),
- array('resource', array($resource, 'stream'), true),
- array('resource', array($resource, 'other'), false),
- array('resource', array(1), false),
- array('isCallable', array('strlen'), true),
- array('isCallable', array(array($this, 'getTests')), true),
- array('isCallable', array(function () {}), true),
- array('isCallable', array(1234), false),
- array('isCallable', array('foobar'), false),
- array('isArray', array(array()), true),
- array('isArray', array(array(1, 2, 3)), true),
- array('isArray', array(new ArrayIterator(array())), false),
- array('isArray', array(123), false),
- array('isArray', array(new stdClass()), false),
- array('isTraversable', array(array()), true),
- array('isTraversable', array(array(1, 2, 3)), true),
- array('isTraversable', array(new ArrayIterator(array())), true),
- array('isTraversable', array(123), false),
- array('isTraversable', array(new stdClass()), false),
- array('isInstanceOf', array(new stdClass(), 'stdClass'), true),
- array('isInstanceOf', array(new Exception(), 'stdClass'), false),
- array('isInstanceOf', array(123, 'stdClass'), false),
- array('isInstanceOf', array(array(), 'stdClass'), false),
- array('notInstanceOf', array(new stdClass(), 'stdClass'), false),
- array('notInstanceOf', array(new Exception(), 'stdClass'), true),
- array('notInstanceOf', array(123, 'stdClass'), true),
- array('notInstanceOf', array(array(), 'stdClass'), true),
- array('true', array(true), true),
- array('true', array(false), false),
- array('true', array(1), false),
- array('true', array(null), false),
- array('false', array(false), true),
- array('false', array(true), false),
- array('false', array(1), false),
- array('false', array(0), false),
- array('false', array(null), false),
- array('null', array(null), true),
- array('null', array(false), false),
- array('null', array(0), false),
- array('notNull', array(false), true),
- array('notNull', array(0), true),
- array('notNull', array(null), false),
- array('isEmpty', array(null), true),
- array('isEmpty', array(false), true),
- array('isEmpty', array(0), true),
- array('isEmpty', array(''), true),
- array('isEmpty', array(1), false),
- array('isEmpty', array('a'), false),
- array('notEmpty', array(1), true),
- array('notEmpty', array('a'), true),
- array('notEmpty', array(null), false),
- array('notEmpty', array(false), false),
- array('notEmpty', array(0), false),
- array('notEmpty', array(''), false),
- array('eq', array(1, 1), true),
- array('eq', array(1, '1'), true),
- array('eq', array(1, true), true),
- array('eq', array(1, 0), false),
- array('notEq', array(1, 0), true),
- array('notEq', array(1, 1), false),
- array('notEq', array(1, '1'), false),
- array('notEq', array(1, true), false),
- array('same', array(1, 1), true),
- array('same', array(1, '1'), false),
- array('same', array(1, true), false),
- array('same', array(1, 0), false),
- array('notSame', array(1, 0), true),
- array('notSame', array(1, 1), false),
- array('notSame', array(1, '1'), true),
- array('notSame', array(1, true), true),
- array('greaterThan', array(1, 0), true),
- array('greaterThan', array(0, 0), false),
- array('greaterThanEq', array(2, 1), true),
- array('greaterThanEq', array(1, 1), true),
- array('greaterThanEq', array(0, 1), false),
- array('lessThan', array(0, 1), true),
- array('lessThan', array(1, 1), false),
- array('lessThanEq', array(0, 1), true),
- array('lessThanEq', array(1, 1), true),
- array('lessThanEq', array(2, 1), false),
- array('range', array(1, 1, 2), true),
- array('range', array(2, 1, 2), true),
- array('range', array(0, 1, 2), false),
- array('range', array(3, 1, 2), false),
- array('oneOf', array(1, array(1, 2, 3)), true),
- array('oneOf', array(1, array('1', '2', '3')), false),
- array('contains', array('abcd', 'ab'), true),
- array('contains', array('abcd', 'bc'), true),
- array('contains', array('abcd', 'cd'), true),
- array('contains', array('abcd', 'de'), false),
- array('contains', array('', 'de'), false),
- array('startsWith', array('abcd', 'ab'), true),
- array('startsWith', array('abcd', 'bc'), false),
- array('startsWith', array('', 'bc'), false),
- array('startsWithLetter', array('abcd'), true),
- array('startsWithLetter', array('1abcd'), false),
- array('startsWithLetter', array(''), false),
- array('endsWith', array('abcd', 'cd'), true),
- array('endsWith', array('abcd', 'bc'), false),
- array('endsWith', array('', 'bc'), false),
- array('regex', array('abcd', '~^ab~'), true),
- array('regex', array('abcd', '~^bc~'), false),
- array('regex', array('', '~^bc~'), false),
- array('alpha', array('abcd'), true),
- array('alpha', array('ab1cd'), false),
- array('alpha', array(''), false),
- array('digits', array('1234'), true),
- array('digits', array('12a34'), false),
- array('digits', array(''), false),
- array('alnum', array('ab12'), true),
- array('alnum', array('ab12$'), false),
- array('alnum', array(''), false),
- array('lower', array('abcd'), true),
- array('lower', array('abCd'), false),
- array('lower', array('ab_d'), false),
- array('lower', array(''), false),
- array('upper', array('ABCD'), true),
- array('upper', array('ABcD'), false),
- array('upper', array('AB_D'), false),
- array('upper', array(''), false),
- array('length', array('abcd', 4), true),
- array('length', array('abc', 4), false),
- array('length', array('abcde', 4), false),
- array('length', array('äbcd', 4), true, true),
- array('length', array('äbc', 4), false, true),
- array('length', array('äbcde', 4), false, true),
- array('minLength', array('abcd', 4), true),
- array('minLength', array('abcde', 4), true),
- array('minLength', array('abc', 4), false),
- array('minLength', array('äbcd', 4), true, true),
- array('minLength', array('äbcde', 4), true, true),
- array('minLength', array('äbc', 4), false, true),
- array('maxLength', array('abcd', 4), true),
- array('maxLength', array('abc', 4), true),
- array('maxLength', array('abcde', 4), false),
- array('maxLength', array('äbcd', 4), true, true),
- array('maxLength', array('äbc', 4), true, true),
- array('maxLength', array('äbcde', 4), false, true),
- array('lengthBetween', array('abcd', 3, 5), true),
- array('lengthBetween', array('abc', 3, 5), true),
- array('lengthBetween', array('abcde', 3, 5), true),
- array('lengthBetween', array('ab', 3, 5), false),
- array('lengthBetween', array('abcdef', 3, 5), false),
- array('lengthBetween', array('äbcd', 3, 5), true, true),
- array('lengthBetween', array('äbc', 3, 5), true, true),
- array('lengthBetween', array('äbcde', 3, 5), true, true),
- array('lengthBetween', array('äb', 3, 5), false, true),
- array('lengthBetween', array('äbcdef', 3, 5), false, true),
- array('fileExists', array(__FILE__), true),
- array('fileExists', array(__DIR__), true),
- array('fileExists', array(__DIR__.'/foobar'), false),
- array('file', array(__FILE__), true),
- array('file', array(__DIR__), false),
- array('file', array(__DIR__.'/foobar'), false),
- array('directory', array(__DIR__), true),
- array('directory', array(__FILE__), false),
- array('directory', array(__DIR__.'/foobar'), false),
- // no tests for readable()/writable() for now
- array('classExists', array(__CLASS__), true),
- array('classExists', array(__NAMESPACE__.'\Foobar'), false),
- array('subclassOf', array(__CLASS__, 'PHPUnit_Framework_TestCase'), true),
- array('subclassOf', array(__CLASS__, 'stdClass'), false),
- array('implementsInterface', array('ArrayIterator', 'Traversable'), true),
- array('implementsInterface', array(__CLASS__, 'Traversable'), false),
- array('propertyExists', array((object) array('property' => 0), 'property'), true),
- array('propertyExists', array((object) array('property' => null), 'property'), true),
- array('propertyExists', array((object) array('property' => null), 'foo'), false),
- array('propertyNotExists', array((object) array('property' => 0), 'property'), false),
- array('propertyNotExists', array((object) array('property' => null), 'property'), false),
- array('propertyNotExists', array((object) array('property' => null), 'foo'), true),
- array('methodExists', array('RuntimeException', 'getMessage'), true),
- array('methodExists', array(new RuntimeException(), 'getMessage'), true),
- array('methodExists', array('stdClass', 'getMessage'), false),
- array('methodExists', array(new stdClass(), 'getMessage'), false),
- array('methodExists', array(null, 'getMessage'), false),
- array('methodExists', array(true, 'getMessage'), false),
- array('methodExists', array(1, 'getMessage'), false),
- array('methodNotExists', array('RuntimeException', 'getMessage'), false),
- array('methodNotExists', array(new RuntimeException(), 'getMessage'), false),
- array('methodNotExists', array('stdClass', 'getMessage'), true),
- array('methodNotExists', array(new stdClass(), 'getMessage'), true),
- array('methodNotExists', array(null, 'getMessage'), true),
- array('methodNotExists', array(true, 'getMessage'), true),
- array('methodNotExists', array(1, 'getMessage'), true),
- array('keyExists', array(array('key' => 0), 'key'), true),
- array('keyExists', array(array('key' => null), 'key'), true),
- array('keyExists', array(array('key' => null), 'foo'), false),
- array('keyNotExists', array(array('key' => 0), 'key'), false),
- array('keyNotExists', array(array('key' => null), 'key'), false),
- array('keyNotExists', array(array('key' => null), 'foo'), true),
- array('count', array(array(0, 1, 2), 3), true),
- array('count', array(array(0, 1, 2), 2), false),
- array('uuid', array('00000000-0000-0000-0000-000000000000'), true),
- array('uuid', array('ff6f8cb0-c57d-21e1-9b21-0800200c9a66'), true),
- array('uuid', array('ff6f8cb0-c57d-11e1-9b21-0800200c9a66'), true),
- array('uuid', array('ff6f8cb0-c57d-31e1-9b21-0800200c9a66'), true),
- array('uuid', array('ff6f8cb0-c57d-41e1-9b21-0800200c9a66'), true),
- array('uuid', array('ff6f8cb0-c57d-51e1-9b21-0800200c9a66'), true),
- array('uuid', array('FF6F8CB0-C57D-11E1-9B21-0800200C9A66'), true),
- array('uuid', array('zf6f8cb0-c57d-11e1-9b21-0800200c9a66'), false),
- array('uuid', array('af6f8cb0c57d11e19b210800200c9a66'), false),
- array('uuid', array('ff6f8cb0-c57da-51e1-9b21-0800200c9a66'), false),
- array('uuid', array('af6f8cb-c57d-11e1-9b21-0800200c9a66'), false),
- array('uuid', array('3f6f8cb0-c57d-11e1-9b21-0800200c9a6'), false),
- array('throws', array(function() { throw new LogicException('test'); }, 'LogicException'), true),
- array('throws', array(function() { throw new LogicException('test'); }, 'IllogicException'), false),
- array('throws', array(function() { throw new Exception('test'); }), true),
- array('throws', array(function() { trigger_error('test'); }, 'Throwable'), true, false, 70000),
- array('throws', array(function() { trigger_error('test'); }, 'Unthrowable'), false, false, 70000),
- array('throws', array(function() { throw new Error(); }, 'Throwable'), true, true, 70000),
- );
- }
- public function getMethods()
- {
- $methods = array();
- foreach ($this->getTests() as $params) {
- $methods[$params[0]] = array($params[0]);
- }
- return array_values($methods);
- }
- /**
- * @dataProvider getTests
- */
- public function testAssert($method, $args, $success, $multibyte = false, $minVersion = null)
- {
- if ($minVersion && PHP_VERSION_ID < $minVersion) {
- $this->markTestSkipped(sprintf('This test requires php %s or upper.', $minVersion));
- return;
- }
- if ($multibyte && !function_exists('mb_strlen')) {
- $this->markTestSkipped('The function mb_strlen() is not available');
- return;
- }
- if (!$success) {
- $this->setExpectedException('\InvalidArgumentException');
- }
- call_user_func_array(array('Webmozart\Assert\Assert', $method), $args);
- }
- /**
- * @dataProvider getTests
- */
- public function testNullOr($method, $args, $success, $multibyte = false, $minVersion = null)
- {
- if ($minVersion && PHP_VERSION_ID < $minVersion) {
- $this->markTestSkipped(sprintf('This test requires php %s or upper.', $minVersion));
- return;
- }
- if ($multibyte && !function_exists('mb_strlen')) {
- $this->markTestSkipped('The function mb_strlen() is not available');
- return;
- }
- if (!$success && null !== reset($args)) {
- $this->setExpectedException('\InvalidArgumentException');
- }
- call_user_func_array(array('Webmozart\Assert\Assert', 'nullOr'.ucfirst($method)), $args);
- }
- /**
- * @dataProvider getMethods
- */
- public function testNullOrAcceptsNull($method)
- {
- call_user_func(array('Webmozart\Assert\Assert', 'nullOr'.ucfirst($method)), null);
- }
- /**
- * @dataProvider getTests
- */
- public function testAllArray($method, $args, $success, $multibyte = false, $minVersion = null)
- {
- if ($minVersion && PHP_VERSION_ID < $minVersion) {
- $this->markTestSkipped(sprintf('This test requires php %s or upper.', $minVersion));
- return;
- }
- if ($multibyte && !function_exists('mb_strlen')) {
- $this->markTestSkipped('The function mb_strlen() is not available');
- return;
- }
- if (!$success) {
- $this->setExpectedException('\InvalidArgumentException');
- }
- $arg = array_shift($args);
- array_unshift($args, array($arg));
- call_user_func_array(array('Webmozart\Assert\Assert', 'all'.ucfirst($method)), $args);
- }
- /**
- * @dataProvider getTests
- */
- public function testAllTraversable($method, $args, $success, $multibyte = false, $minVersion = null)
- {
- if ($minVersion && PHP_VERSION_ID < $minVersion) {
- $this->markTestSkipped(sprintf('This test requires php %s or upper.', $minVersion));
- return;
- }
- if ($multibyte && !function_exists('mb_strlen')) {
- $this->markTestSkipped('The function mb_strlen() is not available');
- return;
- }
- if (!$success) {
- $this->setExpectedException('\InvalidArgumentException');
- }
- $arg = array_shift($args);
- array_unshift($args, new ArrayIterator(array($arg)));
- call_user_func_array(array('Webmozart\Assert\Assert', 'all'.ucfirst($method)), $args);
- }
- public function getStringConversions()
- {
- return array(
- array('integer', array('foobar'), 'Expected an integer. Got: string'),
- array('string', array(1), 'Expected a string. Got: integer'),
- array('string', array(true), 'Expected a string. Got: boolean'),
- array('string', array(null), 'Expected a string. Got: NULL'),
- array('string', array(array()), 'Expected a string. Got: array'),
- array('string', array(new stdClass()), 'Expected a string. Got: stdClass'),
- array('string', array(self::getResource()), 'Expected a string. Got: resource'),
- array('eq', array('1', '2'), 'Expected a value equal to "2". Got: "1"'),
- array('eq', array(1, 2), 'Expected a value equal to 2. Got: 1'),
- array('eq', array(true, false), 'Expected a value equal to false. Got: true'),
- array('eq', array(true, null), 'Expected a value equal to null. Got: true'),
- array('eq', array(null, true), 'Expected a value equal to true. Got: null'),
- array('eq', array(array(1), array(2)), 'Expected a value equal to array. Got: array'),
- array('eq', array(new ArrayIterator(array()), new stdClass()), 'Expected a value equal to stdClass. Got: ArrayIterator'),
- array('eq', array(1, self::getResource()), 'Expected a value equal to resource. Got: 1'),
- );
- }
- /**
- * @dataProvider getStringConversions
- */
- public function testConvertValuesToStrings($method, $args, $exceptionMessage)
- {
- $this->setExpectedException('\InvalidArgumentException', $exceptionMessage);
- call_user_func_array(array('Webmozart\Assert\Assert', $method), $args);
- }
- }
|