|
|
|
|
@@ -1,5 +1,5 @@
|
|
|
|
|
/*
|
|
|
|
|
* Copyright 2002-2016 the original author or authors.
|
|
|
|
|
* Copyright 2002-2017 the original author or authors.
|
|
|
|
|
*
|
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
|
* you may not use this file except in compliance with the License.
|
|
|
|
|
@@ -48,20 +48,20 @@ import java.util.Map;
|
|
|
|
|
*
|
|
|
|
|
* @author Keith Donald
|
|
|
|
|
* @author Juergen Hoeller
|
|
|
|
|
* @author Sam Brannen
|
|
|
|
|
* @author Colin Sampaleanu
|
|
|
|
|
* @author Rob Harrop
|
|
|
|
|
* @author Sam Brannen
|
|
|
|
|
* @since 1.1.2
|
|
|
|
|
*/
|
|
|
|
|
public abstract class Assert {
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Assert a boolean expression, throwing {@code IllegalArgumentException}
|
|
|
|
|
* if the test result is {@code false}.
|
|
|
|
|
* Assert a boolean expression, throwing an {@code IllegalArgumentException}
|
|
|
|
|
* if the expression evaluates to {@code false}.
|
|
|
|
|
* <pre class="code">Assert.isTrue(i > 0, "The value must be greater than zero");</pre>
|
|
|
|
|
* @param expression a boolean expression
|
|
|
|
|
* @param message the exception message to use if the assertion fails
|
|
|
|
|
* @throws IllegalArgumentException if expression is {@code false}
|
|
|
|
|
* @throws IllegalArgumentException if {@code expression} is {@code false}
|
|
|
|
|
*/
|
|
|
|
|
public static void isTrue(boolean expression, String message) {
|
|
|
|
|
if (!expression) {
|
|
|
|
|
@@ -70,18 +70,15 @@ public abstract class Assert {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Assert a boolean expression, throwing {@code IllegalArgumentException}
|
|
|
|
|
* if the test result is {@code false}.
|
|
|
|
|
* <pre class="code">Assert.isTrue(i > 0);</pre>
|
|
|
|
|
* @param expression a boolean expression
|
|
|
|
|
* @throws IllegalArgumentException if expression is {@code false}
|
|
|
|
|
* @deprecated as of 4.3.7, in favor of {@link #isTrue(boolean, String)}
|
|
|
|
|
*/
|
|
|
|
|
@Deprecated
|
|
|
|
|
public static void isTrue(boolean expression) {
|
|
|
|
|
isTrue(expression, "[Assertion failed] - this expression must be true");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Assert that an object is {@code null} .
|
|
|
|
|
* Assert that an object is {@code null}.
|
|
|
|
|
* <pre class="code">Assert.isNull(value, "The value must be null");</pre>
|
|
|
|
|
* @param object the object to check
|
|
|
|
|
* @param message the exception message to use if the assertion fails
|
|
|
|
|
@@ -94,17 +91,15 @@ public abstract class Assert {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Assert that an object is {@code null} .
|
|
|
|
|
* <pre class="code">Assert.isNull(value);</pre>
|
|
|
|
|
* @param object the object to check
|
|
|
|
|
* @throws IllegalArgumentException if the object is not {@code null}
|
|
|
|
|
* @deprecated as of 4.3.7, in favor of {@link #isNull(Object, String)}
|
|
|
|
|
*/
|
|
|
|
|
@Deprecated
|
|
|
|
|
public static void isNull(Object object) {
|
|
|
|
|
isNull(object, "[Assertion failed] - the object argument must be null");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Assert that an object is not {@code null} .
|
|
|
|
|
* Assert that an object is not {@code null}.
|
|
|
|
|
* <pre class="code">Assert.notNull(clazz, "The class must not be null");</pre>
|
|
|
|
|
* @param object the object to check
|
|
|
|
|
* @param message the exception message to use if the assertion fails
|
|
|
|
|
@@ -117,11 +112,9 @@ public abstract class Assert {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Assert that an object is not {@code null} .
|
|
|
|
|
* <pre class="code">Assert.notNull(clazz);</pre>
|
|
|
|
|
* @param object the object to check
|
|
|
|
|
* @throws IllegalArgumentException if the object is {@code null}
|
|
|
|
|
* @deprecated as of 4.3.7, in favor of {@link #notNull(Object, String)}
|
|
|
|
|
*/
|
|
|
|
|
@Deprecated
|
|
|
|
|
public static void notNull(Object object) {
|
|
|
|
|
notNull(object, "[Assertion failed] - this argument is required; it must not be null");
|
|
|
|
|
}
|
|
|
|
|
@@ -142,20 +135,16 @@ public abstract class Assert {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Assert that the given String is not empty; that is,
|
|
|
|
|
* it must not be {@code null} and not the empty String.
|
|
|
|
|
* <pre class="code">Assert.hasLength(name);</pre>
|
|
|
|
|
* @param text the String to check
|
|
|
|
|
* @see StringUtils#hasLength
|
|
|
|
|
* @throws IllegalArgumentException if the text is empty
|
|
|
|
|
* @deprecated as of 4.3.7, in favor of {@link #hasLength(String, String)}
|
|
|
|
|
*/
|
|
|
|
|
@Deprecated
|
|
|
|
|
public static void hasLength(String text) {
|
|
|
|
|
hasLength(text,
|
|
|
|
|
"[Assertion failed] - this String argument must have length; it must not be null or empty");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Assert that the given String has valid text content; that is, it must not
|
|
|
|
|
* Assert that the given String contains valid text content; that is, it must not
|
|
|
|
|
* be {@code null} and must contain at least one non-whitespace character.
|
|
|
|
|
* <pre class="code">Assert.hasText(name, "'name' must not be empty");</pre>
|
|
|
|
|
* @param text the String to check
|
|
|
|
|
@@ -170,13 +159,9 @@ public abstract class Assert {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Assert that the given String has valid text content; that is, it must not
|
|
|
|
|
* be {@code null} and must contain at least one non-whitespace character.
|
|
|
|
|
* <pre class="code">Assert.hasText(name, "'name' must not be empty");</pre>
|
|
|
|
|
* @param text the String to check
|
|
|
|
|
* @see StringUtils#hasText
|
|
|
|
|
* @throws IllegalArgumentException if the text does not contain valid text content
|
|
|
|
|
* @deprecated as of 4.3.7, in favor of {@link #hasText(String, String)}
|
|
|
|
|
*/
|
|
|
|
|
@Deprecated
|
|
|
|
|
public static void hasText(String text) {
|
|
|
|
|
hasText(text,
|
|
|
|
|
"[Assertion failed] - this String argument must have text; it must not be null, empty, or blank");
|
|
|
|
|
@@ -198,24 +183,21 @@ public abstract class Assert {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Assert that the given text does not contain the given substring.
|
|
|
|
|
* <pre class="code">Assert.doesNotContain(name, "rod");</pre>
|
|
|
|
|
* @param textToSearch the text to search
|
|
|
|
|
* @param substring the substring to find within the text
|
|
|
|
|
* @throws IllegalArgumentException if the text contains the substring
|
|
|
|
|
* @deprecated as of 4.3.7, in favor of {@link #doesNotContain(String, String, String)}
|
|
|
|
|
*/
|
|
|
|
|
@Deprecated
|
|
|
|
|
public static void doesNotContain(String textToSearch, String substring) {
|
|
|
|
|
doesNotContain(textToSearch, substring,
|
|
|
|
|
"[Assertion failed] - this String argument must not contain the substring [" + substring + "]");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Assert that an array has elements; that is, it must not be
|
|
|
|
|
* {@code null} and must have at least one element.
|
|
|
|
|
* <pre class="code">Assert.notEmpty(array, "The array must have elements");</pre>
|
|
|
|
|
* Assert that an array contains elements; that is, it must not be
|
|
|
|
|
* {@code null} and must contain at least one element.
|
|
|
|
|
* <pre class="code">Assert.notEmpty(array, "The array must contain elements");</pre>
|
|
|
|
|
* @param array the array to check
|
|
|
|
|
* @param message the exception message to use if the assertion fails
|
|
|
|
|
* @throws IllegalArgumentException if the object array is {@code null} or has no elements
|
|
|
|
|
* @throws IllegalArgumentException if the object array is {@code null} or contains no elements
|
|
|
|
|
*/
|
|
|
|
|
public static void notEmpty(Object[] array, String message) {
|
|
|
|
|
if (ObjectUtils.isEmpty(array)) {
|
|
|
|
|
@@ -224,20 +206,17 @@ public abstract class Assert {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Assert that an array has elements; that is, it must not be
|
|
|
|
|
* {@code null} and must have at least one element.
|
|
|
|
|
* <pre class="code">Assert.notEmpty(array);</pre>
|
|
|
|
|
* @param array the array to check
|
|
|
|
|
* @throws IllegalArgumentException if the object array is {@code null} or has no elements
|
|
|
|
|
* @deprecated as of 4.3.7, in favor of {@link #notEmpty(Object[], String)}
|
|
|
|
|
*/
|
|
|
|
|
@Deprecated
|
|
|
|
|
public static void notEmpty(Object[] array) {
|
|
|
|
|
notEmpty(array, "[Assertion failed] - this array must not be empty: it must contain at least 1 element");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Assert that an array has no null elements.
|
|
|
|
|
* Note: Does not complain if the array is empty!
|
|
|
|
|
* <pre class="code">Assert.noNullElements(array, "The array must have non-null elements");</pre>
|
|
|
|
|
* Assert that an array contains no {@code null} elements.
|
|
|
|
|
* <p>Note: Does not complain if the array is empty!
|
|
|
|
|
* <pre class="code">Assert.noNullElements(array, "The array must contain non-null elements");</pre>
|
|
|
|
|
* @param array the array to check
|
|
|
|
|
* @param message the exception message to use if the assertion fails
|
|
|
|
|
* @throws IllegalArgumentException if the object array contains a {@code null} element
|
|
|
|
|
@@ -253,23 +232,21 @@ public abstract class Assert {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Assert that an array has no null elements.
|
|
|
|
|
* Note: Does not complain if the array is empty!
|
|
|
|
|
* <pre class="code">Assert.noNullElements(array);</pre>
|
|
|
|
|
* @param array the array to check
|
|
|
|
|
* @throws IllegalArgumentException if the object array contains a {@code null} element
|
|
|
|
|
* @deprecated as of 4.3.7, in favor of {@link #noNullElements(Object[], String)}
|
|
|
|
|
*/
|
|
|
|
|
@Deprecated
|
|
|
|
|
public static void noNullElements(Object[] array) {
|
|
|
|
|
noNullElements(array, "[Assertion failed] - this array must not contain any null elements");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Assert that a collection has elements; that is, it must not be
|
|
|
|
|
* {@code null} and must have at least one element.
|
|
|
|
|
* <pre class="code">Assert.notEmpty(collection, "Collection must have elements");</pre>
|
|
|
|
|
* Assert that a collection contains elements; that is, it must not be
|
|
|
|
|
* {@code null} and must contain at least one element.
|
|
|
|
|
* <pre class="code">Assert.notEmpty(collection, "Collection must contain elements");</pre>
|
|
|
|
|
* @param collection the collection to check
|
|
|
|
|
* @param message the exception message to use if the assertion fails
|
|
|
|
|
* @throws IllegalArgumentException if the collection is {@code null} or has no elements
|
|
|
|
|
* @throws IllegalArgumentException if the collection is {@code null} or
|
|
|
|
|
* contains no elements
|
|
|
|
|
*/
|
|
|
|
|
public static void notEmpty(Collection<?> collection, String message) {
|
|
|
|
|
if (CollectionUtils.isEmpty(collection)) {
|
|
|
|
|
@@ -278,24 +255,21 @@ public abstract class Assert {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Assert that a collection has elements; that is, it must not be
|
|
|
|
|
* {@code null} and must have at least one element.
|
|
|
|
|
* <pre class="code">Assert.notEmpty(collection, "Collection must have elements");</pre>
|
|
|
|
|
* @param collection the collection to check
|
|
|
|
|
* @throws IllegalArgumentException if the collection is {@code null} or has no elements
|
|
|
|
|
* @deprecated as of 4.3.7, in favor of {@link #notEmpty(Collection, String)}
|
|
|
|
|
*/
|
|
|
|
|
@Deprecated
|
|
|
|
|
public static void notEmpty(Collection<?> collection) {
|
|
|
|
|
notEmpty(collection,
|
|
|
|
|
"[Assertion failed] - this collection must not be empty: it must contain at least 1 element");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Assert that a Map has entries; that is, it must not be {@code null}
|
|
|
|
|
* and must have at least one entry.
|
|
|
|
|
* <pre class="code">Assert.notEmpty(map, "Map must have entries");</pre>
|
|
|
|
|
* Assert that a Map contains entries; that is, it must not be {@code null}
|
|
|
|
|
* and must contain at least one entry.
|
|
|
|
|
* <pre class="code">Assert.notEmpty(map, "Map must contain entries");</pre>
|
|
|
|
|
* @param map the map to check
|
|
|
|
|
* @param message the exception message to use if the assertion fails
|
|
|
|
|
* @throws IllegalArgumentException if the map is {@code null} or has no entries
|
|
|
|
|
* @throws IllegalArgumentException if the map is {@code null} or contains no entries
|
|
|
|
|
*/
|
|
|
|
|
public static void notEmpty(Map<?, ?> map, String message) {
|
|
|
|
|
if (CollectionUtils.isEmpty(map)) {
|
|
|
|
|
@@ -304,26 +278,31 @@ public abstract class Assert {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Assert that a Map has entries; that is, it must not be {@code null}
|
|
|
|
|
* and must have at least one entry.
|
|
|
|
|
* <pre class="code">Assert.notEmpty(map);</pre>
|
|
|
|
|
* @param map the map to check
|
|
|
|
|
* @throws IllegalArgumentException if the map is {@code null} or has no entries
|
|
|
|
|
* @deprecated as of 4.3.7, in favor of {@link #notEmpty(Map, String)}
|
|
|
|
|
*/
|
|
|
|
|
@Deprecated
|
|
|
|
|
public static void notEmpty(Map<?, ?> map) {
|
|
|
|
|
notEmpty(map, "[Assertion failed] - this map must not be empty; it must contain at least one entry");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Assert that the provided object is an instance of the provided class.
|
|
|
|
|
* <pre class="code">Assert.instanceOf(Foo.class, foo);</pre>
|
|
|
|
|
* @param clazz the required class
|
|
|
|
|
* <pre class="code">Assert.instanceOf(Foo.class, foo, "Processing Foo:");</pre>
|
|
|
|
|
* @param type the type to check against
|
|
|
|
|
* @param obj the object to check
|
|
|
|
|
* @throws IllegalArgumentException if the object is not an instance of clazz
|
|
|
|
|
* @param message a message which will be prepended to the message generated
|
|
|
|
|
* by this method in order to provide further context. It should normally end
|
|
|
|
|
* in ":" or "." so that the generated message looks OK when appended to it.
|
|
|
|
|
* @throws IllegalArgumentException if the object is not an instance of type
|
|
|
|
|
* @see Class#isInstance
|
|
|
|
|
*/
|
|
|
|
|
public static void isInstanceOf(Class<?> clazz, Object obj) {
|
|
|
|
|
isInstanceOf(clazz, obj, "");
|
|
|
|
|
public static void isInstanceOf(Class<?> type, Object obj, String message) {
|
|
|
|
|
notNull(type, "Type to check against must not be null");
|
|
|
|
|
if (!type.isInstance(obj)) {
|
|
|
|
|
String className = (obj != null ? obj.getClass().getName() : "null");
|
|
|
|
|
throw new IllegalArgumentException(StringUtils.hasLength(message) ? message + ": " + className :
|
|
|
|
|
"Object of class [" + className + "] must be an instance of " + type);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@@ -331,20 +310,28 @@ public abstract class Assert {
|
|
|
|
|
* <pre class="code">Assert.instanceOf(Foo.class, foo);</pre>
|
|
|
|
|
* @param type the type to check against
|
|
|
|
|
* @param obj the object to check
|
|
|
|
|
* @param message a message which will be prepended to the message produced by
|
|
|
|
|
* the function itself, and which may be used to provide context. It should
|
|
|
|
|
* normally end in ":" or "." so that the generated message looks OK when
|
|
|
|
|
* appended to it.
|
|
|
|
|
* @throws IllegalArgumentException if the object is not an instance of clazz
|
|
|
|
|
* @throws IllegalArgumentException if the object is not an instance of type
|
|
|
|
|
* @see Class#isInstance
|
|
|
|
|
*/
|
|
|
|
|
public static void isInstanceOf(Class<?> type, Object obj, String message) {
|
|
|
|
|
notNull(type, "Type to check against must not be null");
|
|
|
|
|
if (!type.isInstance(obj)) {
|
|
|
|
|
throw new IllegalArgumentException(
|
|
|
|
|
(StringUtils.hasLength(message) ? message + " " : "") +
|
|
|
|
|
"Object of class [" + (obj != null ? obj.getClass().getName() : "null") +
|
|
|
|
|
"] must be an instance of " + type);
|
|
|
|
|
public static void isInstanceOf(Class<?> type, Object obj) {
|
|
|
|
|
isInstanceOf(type, obj, "");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Assert that {@code superType.isAssignableFrom(subType)} is {@code true}.
|
|
|
|
|
* <pre class="code">Assert.isAssignable(Number.class, myClass);</pre>
|
|
|
|
|
* @param superType the super type to check against
|
|
|
|
|
* @param subType the sub type to check
|
|
|
|
|
* @param message a message which will be prepended to the message generated
|
|
|
|
|
* by this method in order to provide further context. It should normally end
|
|
|
|
|
* in ":" or "." so that the generated message looks OK when appended to it.
|
|
|
|
|
* @throws IllegalArgumentException if the classes are not assignable
|
|
|
|
|
*/
|
|
|
|
|
public static void isAssignable(Class<?> superType, Class<?> subType, String message) {
|
|
|
|
|
notNull(superType, "Super type to check against must not be null");
|
|
|
|
|
if (subType == null || !superType.isAssignableFrom(subType)) {
|
|
|
|
|
throw new IllegalArgumentException(StringUtils.hasLength(message) ? message + ": " + subType :
|
|
|
|
|
subType + " is not assignable to " + superType);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -360,32 +347,14 @@ public abstract class Assert {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Assert that {@code superType.isAssignableFrom(subType)} is {@code true}.
|
|
|
|
|
* <pre class="code">Assert.isAssignable(Number.class, myClass);</pre>
|
|
|
|
|
* @param superType the super type to check against
|
|
|
|
|
* @param subType the sub type to check
|
|
|
|
|
* @param message a message which will be prepended to the message produced by
|
|
|
|
|
* the function itself, and which may be used to provide context. It should
|
|
|
|
|
* normally end in ":" or "." so that the generated message looks OK when
|
|
|
|
|
* appended to it.
|
|
|
|
|
* @throws IllegalArgumentException if the classes are not assignable
|
|
|
|
|
*/
|
|
|
|
|
public static void isAssignable(Class<?> superType, Class<?> subType, String message) {
|
|
|
|
|
notNull(superType, "Type to check against must not be null");
|
|
|
|
|
if (subType == null || !superType.isAssignableFrom(subType)) {
|
|
|
|
|
throw new IllegalArgumentException((StringUtils.hasLength(message) ? message + " " : "") +
|
|
|
|
|
subType + " is not assignable to " + superType);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Assert a boolean expression, throwing {@code IllegalStateException}
|
|
|
|
|
* if the test result is {@code false}. Call isTrue if you wish to
|
|
|
|
|
* throw IllegalArgumentException on an assertion failure.
|
|
|
|
|
* Assert a boolean expression, throwing an {@code IllegalStateException}
|
|
|
|
|
* if the expression evaluates to {@code false}.
|
|
|
|
|
* <p>Call {@link #isTrue} if you wish to throw an {@code IllegalArgumentException}
|
|
|
|
|
* on an assertion failure.
|
|
|
|
|
* <pre class="code">Assert.state(id == null, "The id property must not already be initialized");</pre>
|
|
|
|
|
* @param expression a boolean expression
|
|
|
|
|
* @param message the exception message to use if the assertion fails
|
|
|
|
|
* @throws IllegalStateException if expression is {@code false}
|
|
|
|
|
* @throws IllegalStateException if {@code expression} is {@code false}
|
|
|
|
|
*/
|
|
|
|
|
public static void state(boolean expression, String message) {
|
|
|
|
|
if (!expression) {
|
|
|
|
|
@@ -394,14 +363,9 @@ public abstract class Assert {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Assert a boolean expression, throwing {@link IllegalStateException}
|
|
|
|
|
* if the test result is {@code false}.
|
|
|
|
|
* <p>Call {@link #isTrue(boolean)} if you wish to
|
|
|
|
|
* throw {@link IllegalArgumentException} on an assertion failure.
|
|
|
|
|
* <pre class="code">Assert.state(id == null);</pre>
|
|
|
|
|
* @param expression a boolean expression
|
|
|
|
|
* @throws IllegalStateException if the supplied expression is {@code false}
|
|
|
|
|
* @deprecated as of 4.3.7, in favor of {@link #state(boolean, String)}
|
|
|
|
|
*/
|
|
|
|
|
@Deprecated
|
|
|
|
|
public static void state(boolean expression) {
|
|
|
|
|
state(expression, "[Assertion failed] - this state invariant must be true");
|
|
|
|
|
}
|
|
|
|
|
|