namespace Webmozart\Assert;
+use ArrayAccess;
use BadMethodCallException;
-use InvalidArgumentException;
-use Traversable;
+use Closure;
+use Countable;
use Exception;
+use InvalidArgumentException;
use Throwable;
-use Closure;
+use Traversable;
/**
* Efficient assertions to validate the input/output of your methods.
* @method static void nullOrIsCallable($value, $message = '')
* @method static void nullOrIsArray($value, $message = '')
* @method static void nullOrIsTraversable($value, $message = '')
+ * @method static void nullOrIsArrayAccessible($value, $message = '')
+ * @method static void nullOrIsCountable($value, $message = '')
* @method static void nullOrIsInstanceOf($value, $class, $message = '')
* @method static void nullOrNotInstanceOf($value, $class, $message = '')
+ * @method static void nullOrIsInstanceOfAny($value, $classes, $message = '')
* @method static void nullOrIsEmpty($value, $message = '')
* @method static void nullOrNotEmpty($value, $message = '')
* @method static void nullOrTrue($value, $message = '')
* @method static void nullOrRange($value, $min, $max, $message = '')
* @method static void nullOrOneOf($value, $values, $message = '')
* @method static void nullOrContains($value, $subString, $message = '')
+ * @method static void nullOrNotContains($value, $subString, $message = '')
+ * @method static void nullOrNotWhitespaceOnly($value, $message = '')
* @method static void nullOrStartsWith($value, $prefix, $message = '')
* @method static void nullOrStartsWithLetter($value, $message = '')
* @method static void nullOrEndsWith($value, $suffix, $message = '')
* @method static void nullOrKeyExists($value, $key, $message = '')
* @method static void nullOrKeyNotExists($value, $key, $message = '')
* @method static void nullOrCount($value, $key, $message = '')
+ * @method static void nullOrMinCount($value, $min, $message = '')
+ * @method static void nullOrMaxCount($value, $max, $message = '')
+ * @method static void nullCountBetween($value, $min, $max, $message = '')
* @method static void nullOrUuid($values, $message = '')
* @method static void allString($values, $message = '')
* @method static void allStringNotEmpty($values, $message = '')
* @method static void allIsCallable($values, $message = '')
* @method static void allIsArray($values, $message = '')
* @method static void allIsTraversable($values, $message = '')
+ * @method static void allIsArrayAccessible($values, $message = '')
+ * @method static void allIsCountable($values, $message = '')
* @method static void allIsInstanceOf($values, $class, $message = '')
* @method static void allNotInstanceOf($values, $class, $message = '')
+ * @method static void allIsInstanceOfAny($values, $classes, $message = '')
* @method static void allNull($values, $message = '')
* @method static void allNotNull($values, $message = '')
* @method static void allIsEmpty($values, $message = '')
* @method static void allRange($values, $min, $max, $message = '')
* @method static void allOneOf($values, $values, $message = '')
* @method static void allContains($values, $subString, $message = '')
+ * @method static void allNotContains($values, $subString, $message = '')
+ * @method static void allNotWhitespaceOnly($values, $message = '')
* @method static void allStartsWith($values, $prefix, $message = '')
* @method static void allStartsWithLetter($values, $message = '')
* @method static void allEndsWith($values, $suffix, $message = '')
* @method static void allKeyExists($values, $key, $message = '')
* @method static void allKeyNotExists($values, $key, $message = '')
* @method static void allCount($values, $key, $message = '')
+ * @method static void allMinCount($values, $min, $message = '')
+ * @method static void allMaxCount($values, $max, $message = '')
+ * @method static void allCountBetween($values, $min, $max, $message = '')
* @method static void allUuid($values, $message = '')
*
* @since 1.0
public static function stringNotEmpty($value, $message = '')
{
static::string($value, $message);
- static::notEmpty($value, $message);
+ static::notEq($value, '', $message);
}
public static function integer($value, $message = '')
}
}
+ public static function natural($value, $message = '')
+ {
+ if (!is_int($value) || $value < 0) {
+ static::reportInvalidArgument(sprintf(
+ $message ?: 'Expected a non-negative integer. Got %s',
+ static::valueToString($value)
+ ));
+ }
+ }
+
public static function boolean($value, $message = '')
{
if (!is_bool($value)) {
public static function isTraversable($value, $message = '')
{
+ @trigger_error(
+ sprintf(
+ 'The "%s" assertion is deprecated. You should stop using it, as it will soon be removed in 2.0 version. Use "isIterable" or "isInstanceOf" instead.',
+ __METHOD__
+ ),
+ E_USER_DEPRECATED
+ );
+
if (!is_array($value) && !($value instanceof Traversable)) {
static::reportInvalidArgument(sprintf(
$message ?: 'Expected a traversable. Got: %s',
}
}
+ public static function isArrayAccessible($value, $message = '')
+ {
+ if (!is_array($value) && !($value instanceof ArrayAccess)) {
+ static::reportInvalidArgument(sprintf(
+ $message ?: 'Expected an array accessible. Got: %s',
+ static::typeToString($value)
+ ));
+ }
+ }
+
+ public static function isCountable($value, $message = '')
+ {
+ if (!is_array($value) && !($value instanceof Countable)) {
+ static::reportInvalidArgument(sprintf(
+ $message ?: 'Expected a countable. Got: %s',
+ static::typeToString($value)
+ ));
+ }
+ }
+
+ public static function isIterable($value, $message = '')
+ {
+ if (!is_array($value) && !($value instanceof Traversable)) {
+ static::reportInvalidArgument(sprintf(
+ $message ?: 'Expected an iterable. Got: %s',
+ static::typeToString($value)
+ ));
+ }
+ }
+
public static function isInstanceOf($value, $class, $message = '')
{
if (!($value instanceof $class)) {
}
}
+ public static function isInstanceOfAny($value, array $classes, $message = '')
+ {
+ foreach ($classes as $class) {
+ if ($value instanceof $class) {
+ return;
+ }
+ }
+
+ static::reportInvalidArgument(sprintf(
+ $message ?: 'Expected an instance of any of %2$s. Got: %s',
+ static::typeToString($value),
+ implode(', ', array_map(array('static', 'valueToString'), $classes))
+ ));
+ }
+
public static function isEmpty($value, $message = '')
{
if (!empty($value)) {
}
}
+ public static function notContains($value, $subString, $message = '')
+ {
+ if (false !== strpos($value, $subString)) {
+ static::reportInvalidArgument(sprintf(
+ $message ?: '%2$s was not expected to be contained in a value. Got: %s',
+ static::valueToString($value),
+ static::valueToString($subString)
+ ));
+ }
+ }
+
+ public static function notWhitespaceOnly($value, $message = '')
+ {
+ if (preg_match('/^\s*$/', $value)) {
+ static::reportInvalidArgument(sprintf(
+ $message ?: 'Expected a non-whitespace string. Got: %s',
+ static::valueToString($value)
+ ));
+ }
+ }
+
public static function startsWith($value, $prefix, $message = '')
{
if (0 !== strpos($value, $prefix)) {
);
}
+ public static function minCount($array, $min, $message = '')
+ {
+ if (count($array) < $min) {
+ static::reportInvalidArgument(sprintf(
+ $message ?: 'Expected an array to contain at least %2$d elements. Got: %d',
+ count($array),
+ $min
+ ));
+ }
+ }
+
+ public static function maxCount($array, $max, $message = '')
+ {
+ if (count($array) > $max) {
+ static::reportInvalidArgument(sprintf(
+ $message ?: 'Expected an array to contain at most %2$d elements. Got: %d',
+ count($array),
+ $max
+ ));
+ }
+ }
+
+ public static function countBetween($array, $min, $max, $message = '')
+ {
+ $count = count($array);
+
+ if ($count < $min || $count > $max) {
+ static::reportInvalidArgument(sprintf(
+ $message ?: 'Expected an array to contain between %2$d and %3$d elements. Got: %d',
+ $count,
+ $min,
+ $max
+ ));
+ }
+ }
+
public static function uuid($value, $message = '')
{
$value = str_replace(array('urn:', 'uuid:', '{', '}'), '', $value);
static::string($class);
$actual = 'none';
+
try {
$expression();
} catch (Exception $e) {
}
if ('all' === substr($name, 0, 3)) {
- static::isTraversable($arguments[0]);
+ static::isIterable($arguments[0]);
$method = lcfirst(substr($name, 3));
$args = $arguments;