| /* |
| * Copyright (c) 2016 Mockito contributors |
| * This program is made available under the terms of the MIT License. |
| */ |
| package org.mockito; |
| |
| import java.util.ArrayList; |
| import java.util.Collection; |
| import java.util.HashMap; |
| import java.util.HashSet; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.Set; |
| import java.util.regex.Pattern; |
| import org.mockito.internal.matchers.Any; |
| import org.mockito.internal.matchers.Contains; |
| import org.mockito.internal.matchers.EndsWith; |
| import org.mockito.internal.matchers.Equals; |
| import org.mockito.internal.matchers.InstanceOf; |
| import org.mockito.internal.matchers.Matches; |
| import org.mockito.internal.matchers.NotNull; |
| import org.mockito.internal.matchers.Null; |
| import org.mockito.internal.matchers.Same; |
| import org.mockito.internal.matchers.StartsWith; |
| import org.mockito.internal.matchers.apachecommons.ReflectionEquals; |
| import org.mockito.internal.util.Primitives; |
| |
| import static org.mockito.internal.progress.ThreadSafeMockingProgress.mockingProgress; |
| import static org.mockito.internal.util.Primitives.defaultValue; |
| |
| /** |
| * Allow flexible verification or stubbing. See also {@link AdditionalMatchers}. |
| * |
| * <p> |
| * {@link Mockito} extends ArgumentMatchers so to get access to all matchers just import Mockito class statically. |
| * |
| * <pre class="code"><code class="java"> |
| * //stubbing using anyInt() argument matcher |
| * when(mockedList.get(anyInt())).thenReturn("element"); |
| * |
| * //following prints "element" |
| * System.out.println(mockedList.get(999)); |
| * |
| * //you can also verify using argument matcher |
| * verify(mockedList).get(anyInt()); |
| * </code></pre> |
| * |
| * <p> |
| * Since Mockito <code>any(Class)</code> and <code>anyInt</code> family matchers perform a type check, thus they won't |
| * match <code>null</code> arguments. Instead use the <code>isNull</code> matcher. |
| * |
| * <pre class="code"><code class="java"> |
| * // stubbing using anyBoolean() argument matcher |
| * when(mock.dryRun(anyBoolean())).thenReturn("state"); |
| * |
| * // below the stub won't match, and won't return "state" |
| * mock.dryRun(null); |
| * |
| * // either change the stub |
| * when(mock.dryRun(isNull())).thenReturn("state"); |
| * mock.dryRun(null); // ok |
| * |
| * // or fix the code ;) |
| * when(mock.dryRun(anyBoolean())).thenReturn("state"); |
| * mock.dryRun(true); // ok |
| * |
| * </code></pre> |
| * |
| * The same apply for verification. |
| * </p> |
| * |
| * |
| * Scroll down to see all methods - full list of matchers. |
| * |
| * <p> |
| * <b>Warning:</b><br/> |
| * |
| * If you are using argument matchers, <b>all arguments</b> have to be provided by matchers. |
| * |
| * E.g: (example shows verification but the same applies to stubbing): |
| * </p> |
| * |
| * <pre class="code"><code class="java"> |
| * verify(mock).someMethod(anyInt(), anyString(), <b>eq("third argument")</b>); |
| * //above is correct - eq() is also an argument matcher |
| * |
| * verify(mock).someMethod(anyInt(), anyString(), <b>"third argument"</b>); |
| * //above is incorrect - exception will be thrown because third argument is given without argument matcher. |
| * </code></pre> |
| * |
| * <p> |
| * Matcher methods like <code>anyObject()</code>, <code>eq()</code> <b>do not</b> return matchers. |
| * Internally, they record a matcher on a stack and return a dummy value (usually null). |
| * This implementation is due to static type safety imposed by java compiler. |
| * The consequence is that you cannot use <code>anyObject()</code>, <code>eq()</code> methods outside of verified/stubbed method. |
| * </p> |
| * |
| * <h1>Additional matchers</h1> |
| * <p> |
| * The class {@link AdditionalMatchers} offers rarely used matchers, although they can be useful, when |
| * it is useful to combine multiple matchers or when it is useful to negate a matcher necessary. |
| * </p> |
| * |
| * <h1>Custom Argument ArgumentMatchers</h1> |
| * <p> |
| * It is important to understand the use cases and available options for dealing with non-trivial arguments |
| * <b>before</b> implementing custom argument matchers. This way, you can select the best possible approach |
| * for given scenario and produce highest quality test (clean and maintainable). |
| * Please read on in the javadoc for {@link ArgumentMatcher} to learn about approaches and see the examples. |
| * </p> |
| * |
| * @see AdditionalMatchers |
| */ |
| @SuppressWarnings("unchecked") |
| public class ArgumentMatchers { |
| |
| /** |
| * Matches <strong>anything</strong>, including nulls and varargs. |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * |
| * This is an alias of: {@link #anyObject()} and {@link #any(java.lang.Class)} |
| * </p> |
| * |
| * <p> |
| * <strong>Notes : </strong><br/> |
| * <ul> |
| * <li>For primitive types use {@link #anyChar()} family or {@link #isA(Class)} or {@link #any(Class)}.</li> |
| * <li>Since mockito 2.1.0 {@link #any(Class)} is not anymore an alias of this method.</li> |
| * </ul> |
| * </p> |
| * |
| * @return <code>null</code>. |
| * |
| * @see #any(Class) |
| * @see #anyObject() |
| * @see #anyVararg() |
| * @see #anyChar() |
| * @see #anyInt() |
| * @see #anyBoolean() |
| * @see #anyCollectionOf(Class) |
| */ |
| public static <T> T any() { |
| return anyObject(); |
| } |
| |
| /** |
| * Matches anything, including <code>null</code>. |
| * |
| * <p> |
| * This is an alias of: {@link #any()} and {@link #any(java.lang.Class)}. |
| * See examples in javadoc for {@link ArgumentMatchers} class. |
| * </p> |
| * |
| * @return <code>null</code>. |
| * @see #any() |
| * @see #any(Class) |
| * @see #notNull() |
| * @see #notNull(Class) |
| * @deprecated This will be removed in Mockito 3.0 (which will be java 8 only) |
| */ |
| @Deprecated |
| public static <T> T anyObject() { |
| reportMatcher(Any.ANY); |
| return null; |
| } |
| |
| /** |
| * Matches any object of given type, excluding nulls. |
| * |
| * <p> |
| * This matcher will perform a type check with the given type, thus excluding values. |
| * See examples in javadoc for {@link ArgumentMatchers} class. |
| * |
| * This is an alias of: {@link #isA(Class)}} |
| * </p> |
| * |
| * <p> |
| * Since Mockito 2.1.0, only allow non-null instance of <code></code>, thus <code>null</code> is not anymore a valid value. |
| * As reference are nullable, the suggested API to <strong>match</strong> <code>null</code> |
| * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito |
| * 1.x. |
| * </p> |
| * |
| * <p><strong>Notes : </strong><br/> |
| * <ul> |
| * <li>For primitive types use {@link #anyChar()} family.</li> |
| * <li>Since Mockito 2.1.0 this method will perform a type check thus <code>null</code> values are not authorized.</li> |
| * <li>Since mockito 2.1.0 {@link #any()} and {@link #anyObject()} are not anymore aliases of this method.</li> |
| * </ul> |
| * </p> |
| * |
| * @param <T> The accepted type |
| * @param type the class of the accepted type. |
| * @return <code>null</code>. |
| * @see #any() |
| * @see #anyObject() |
| * @see #anyVararg() |
| * @see #isA(Class) |
| * @see #notNull() |
| * @see #notNull(Class) |
| * @see #isNull() |
| * @see #isNull(Class) |
| */ |
| public static <T> T any(Class<T> type) { |
| reportMatcher(new InstanceOf.VarArgAware(type, "<any " + type.getCanonicalName() + ">")); |
| return defaultValue(type); |
| } |
| |
| /** |
| * <code>Object</code> argument that implements the given class. |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * |
| * @param <T> the accepted type. |
| * @param type the class of the accepted type. |
| * @return <code>null</code>. |
| * @see #any(Class) |
| */ |
| public static <T> T isA(Class<T> type) { |
| reportMatcher(new InstanceOf(type)); |
| return defaultValue(type); |
| } |
| |
| /** |
| * Any vararg, meaning any number and values of arguments. |
| * |
| * <p> |
| * Example: |
| * <pre class="code"><code class="java"> |
| * //verification: |
| * mock.foo(1, 2); |
| * mock.foo(1, 2, 3, 4); |
| * |
| * verify(mock, times(2)).foo(anyVararg()); |
| * |
| * //stubbing: |
| * when(mock.foo(anyVararg()).thenReturn(100); |
| * |
| * //prints 100 |
| * System.out.println(mock.foo(1, 2)); |
| * //also prints 100 |
| * System.out.println(mock.foo(1, 2, 3, 4)); |
| * </code></pre> |
| * </p> |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class. |
| * </p> |
| * |
| * @return <code>null</code>. |
| * @see #any() |
| * @see #any(Class) |
| * @deprecated as of 2.1.0 use {@link #any()} |
| */ |
| @Deprecated |
| public static <T> T anyVararg() { |
| any(); |
| return null; |
| } |
| |
| /** |
| * Any <code>boolean</code> or <strong>non-null</strong> <code>Boolean</code> |
| * |
| * <p> |
| * Since Mockito 2.1.0, only allow valued <code>Boolean</code>, thus <code>null</code> is not anymore a valid value. |
| * As primitive wrappers are nullable, the suggested API to <strong>match</strong> <code>null</code> wrapper |
| * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito |
| * 1.x. |
| * </p> |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class. |
| * </p> |
| * |
| * @return <code>false</code>. |
| * @see #isNull() |
| * @see #isNull(Class) |
| */ |
| public static boolean anyBoolean() { |
| reportMatcher(new InstanceOf(Boolean.class, "<any boolean>")); |
| return false; |
| } |
| |
| /** |
| * Any <code>byte</code> or <strong>non-null</strong> <code>Byte</code>. |
| * |
| * <p> |
| * Since Mockito 2.1.0, only allow valued <code>Byte</code>, thus <code>null</code> is not anymore a valid value. |
| * As primitive wrappers are nullable, the suggested API to <strong>match</strong> <code>null</code> wrapper |
| * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito |
| * 1.x. |
| * </p> |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class. |
| * </p> |
| * |
| * @return <code>0</code>. |
| * @see #isNull() |
| * @see #isNull(Class) |
| */ |
| public static byte anyByte() { |
| reportMatcher(new InstanceOf(Byte.class, "<any byte>")); |
| return 0; |
| } |
| |
| /** |
| * Any <code>char</code> or <strong>non-null</strong> <code>Character</code>. |
| * |
| * <p> |
| * Since Mockito 2.1.0, only allow valued <code>Character</code>, thus <code>null</code> is not anymore a valid value. |
| * As primitive wrappers are nullable, the suggested API to <strong>match</strong> <code>null</code> wrapper |
| * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito |
| * 1.x. |
| * </p> |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class. |
| * </p> |
| * |
| * @return <code>0</code>. |
| * @see #isNull() |
| * @see #isNull(Class) |
| */ |
| public static char anyChar() { |
| reportMatcher(new InstanceOf(Character.class, "<any char>")); |
| return 0; |
| } |
| |
| /** |
| * Any int or <strong>non-null</strong> <code>Integer</code>. |
| * |
| * <p> |
| * Since Mockito 2.1.0, only allow valued <code>Integer</code>, thus <code>null</code> is not anymore a valid value. |
| * As primitive wrappers are nullable, the suggested API to <strong>match</strong> <code>null</code> wrapper |
| * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito |
| * 1.x. |
| * </p> |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class. |
| * </p> |
| * |
| * @return <code>0</code>. |
| * @see #isNull() |
| * @see #isNull(Class) |
| */ |
| public static int anyInt() { |
| reportMatcher(new InstanceOf(Integer.class, "<any integer>")); |
| return 0; |
| } |
| |
| /** |
| * Any <code>long</code> or <strong>non-null</strong> <code>Long</code>. |
| * |
| * <p> |
| * Since Mockito 2.1.0, only allow valued <code>Long</code>, thus <code>null</code> is not anymore a valid value. |
| * As primitive wrappers are nullable, the suggested API to <strong>match</strong> <code>null</code> wrapper |
| * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito |
| * 1.x. |
| * </p> |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class. |
| * </p> |
| * |
| * @return <code>0</code>. |
| * @see #isNull() |
| * @see #isNull(Class) |
| */ |
| public static long anyLong() { |
| reportMatcher(new InstanceOf(Long.class, "<any long>")); |
| return 0; |
| } |
| |
| /** |
| * Any <code>float</code> or <strong>non-null</strong> <code>Float</code>. |
| * |
| * <p> |
| * Since Mockito 2.1.0, only allow valued <code>Float</code>, thus <code>null</code> is not anymore a valid value. |
| * As primitive wrappers are nullable, the suggested API to <strong>match</strong> <code>null</code> wrapper |
| * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito |
| * 1.x. |
| * </p> |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class. |
| * </p> |
| * |
| * @return <code>0</code>. |
| * @see #isNull() |
| * @see #isNull(Class) |
| */ |
| public static float anyFloat() { |
| reportMatcher(new InstanceOf(Float.class, "<any float>")); |
| return 0; |
| } |
| |
| /** |
| * Any <code>double</code> or <strong>non-null</strong> <code>Double</code>. |
| * |
| * <p> |
| * Since Mockito 2.1.0, only allow valued <code>Double</code>, thus <code>null</code> is not anymore a valid value. |
| * As primitive wrappers are nullable, the suggested API to <strong>match</strong> <code>null</code> wrapper |
| * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito |
| * 1.x. |
| * </p> |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class. |
| * </p> |
| * |
| * @return <code>0</code>. |
| * @see #isNull() |
| * @see #isNull(Class) |
| */ |
| public static double anyDouble() { |
| reportMatcher(new InstanceOf(Double.class, "<any double>")); |
| return 0; |
| } |
| |
| /** |
| * Any <code>short</code> or <strong>non-null</strong> <code>Short</code>. |
| * |
| * <p> |
| * Since Mockito 2.1.0, only allow valued <code>Short</code>, thus <code>null</code> is not anymore a valid value. |
| * As primitive wrappers are nullable, the suggested API to <strong>match</strong> <code>null</code> wrapper |
| * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito |
| * 1.x. |
| * </p> |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class. |
| * </p> |
| * |
| * @return <code>0</code>. |
| * @see #isNull() |
| * @see #isNull(Class) |
| */ |
| public static short anyShort() { |
| reportMatcher(new InstanceOf(Short.class, "<any short>")); |
| return 0; |
| } |
| |
| /** |
| * Any <strong>non-null</strong> <code>String</code> |
| * |
| * <p> |
| * Since Mockito 2.1.0, only allow non-null <code>String</code>. |
| * As this is a nullable reference, the suggested API to <strong>match</strong> <code>null</code> wrapper |
| * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito |
| * 1.x. |
| * </p> |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class. |
| * </p> |
| * |
| * @return empty String ("") |
| * @see #isNull() |
| * @see #isNull(Class) |
| */ |
| public static String anyString() { |
| reportMatcher(new InstanceOf(String.class, "<any string>")); |
| return ""; |
| } |
| |
| /** |
| * Any <strong>non-null</strong> <code>List</code>. |
| * |
| * <p> |
| * Since Mockito 2.1.0, only allow non-null <code>List</code>. |
| * As this is a nullable reference, the suggested API to <strong>match</strong> <code>null</code> wrapper |
| * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito |
| * 1.x. |
| * </p> |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class. |
| * </p> |
| * |
| * @return empty List. |
| * @see #anyListOf(Class) |
| * @see #isNull() |
| * @see #isNull(Class) |
| */ |
| public static <T> List<T> anyList() { |
| reportMatcher(new InstanceOf(List.class, "<any List>")); |
| return new ArrayList<T>(0); |
| } |
| |
| /** |
| * Any <strong>non-null</strong> <code>List</code>. |
| * |
| * Generic friendly alias to {@link ArgumentMatchers#anyList()}. It's an alternative to |
| * <code>@SuppressWarnings("unchecked")</code> to keep code clean of compiler warnings. |
| * |
| * <p> |
| * This method doesn't do type checks of the list content with the given type parameter, it is only there |
| * to avoid casting in the code. |
| * </p> |
| * |
| * <p> |
| * Since Mockito 2.1.0, only allow non-null <code>List</code>. |
| * As this is a nullable reference, the suggested API to <strong>match</strong> <code>null</code> wrapper |
| * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito |
| * 1.x. |
| * </p> |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class. |
| * </p> |
| * |
| * @param clazz Type owned by the list to avoid casting |
| * @return empty List. |
| * @see #anyList() |
| * @see #isNull() |
| * @see #isNull(Class) |
| * @deprecated With Java 8 this method will be removed in Mockito 3.0. This method is only used for generic |
| * friendliness to avoid casting, this is not anymore needed in Java 8. |
| */ |
| public static <T> List<T> anyListOf(Class<T> clazz) { |
| return anyList(); |
| } |
| |
| /** |
| * Any <strong>non-null</strong> <code>Set</code>. |
| * |
| * <p> |
| * Since Mockito 2.1.0, only allow non-null <code>Set</code>. |
| * As this is a nullable reference, the suggested API to <strong>match</strong> <code>null</code> wrapper |
| * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito |
| * 1.x. |
| * </p> |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class. |
| * </p> |
| * |
| * @return empty Set |
| * @see #anySetOf(Class) |
| * @see #isNull() |
| * @see #isNull(Class) |
| */ |
| public static <T> Set<T> anySet() { |
| reportMatcher(new InstanceOf(Set.class, "<any set>")); |
| return new HashSet<T>(0); |
| } |
| |
| /** |
| * Any <strong>non-null</strong> <code>Set</code>. |
| * |
| * <p> |
| * Generic friendly alias to {@link ArgumentMatchers#anySet()}. |
| * It's an alternative to <code>@SuppressWarnings("unchecked")</code> to keep code clean of compiler warnings. |
| * </p> |
| * |
| * <p> |
| * This method doesn't do type checks of the set content with the given type parameter, it is only there |
| * to avoid casting in the code. |
| * </p> |
| * |
| * <p> |
| * Since Mockito 2.1.0, only allow non-null <code>Set</code>. |
| * As this is a nullable reference, the suggested API to <strong>match</strong> <code>null</code> wrapper |
| * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito |
| * 1.x. |
| * </p> |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class. |
| * </p> |
| * |
| * @param clazz Type owned by the Set to avoid casting |
| * @return empty Set |
| * @see #anySet() |
| * @see #isNull() |
| * @see #isNull(Class) |
| * @deprecated With Java 8 this method will be removed in Mockito 3.0. This method is only used for generic |
| * friendliness to avoid casting, this is not anymore needed in Java 8. |
| */ |
| public static <T> Set<T> anySetOf(Class<T> clazz) { |
| return anySet(); |
| } |
| |
| /** |
| * Any <strong>non-null</strong> <code>Map</code>. |
| * |
| * <p> |
| * Since Mockito 2.1.0, only allow non-null <code>Map</code>. |
| * As this is a nullable reference, the suggested API to <strong>match</strong> <code>null</code> wrapper |
| * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito |
| * 1.x. |
| * </p> |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class. |
| * </p> |
| * |
| * @return empty Map. |
| * @see #anyMapOf(Class, Class) |
| * @see #isNull() |
| * @see #isNull(Class) |
| */ |
| public static <K, V> Map<K, V> anyMap() { |
| reportMatcher(new InstanceOf(Map.class, "<any map>")); |
| return new HashMap<K, V>(0); |
| } |
| |
| /** |
| * Any <strong>non-null</strong> <code>Map</code>. |
| * |
| * <p> |
| * Generic friendly alias to {@link ArgumentMatchers#anyMap()}. |
| * It's an alternative to <code>@SuppressWarnings("unchecked")</code> to keep code clean of compiler warnings. |
| * </p> |
| * |
| * <p> |
| * This method doesn't do type checks of the map content with the given type parameter, it is only there |
| * to avoid casting in the code. |
| * </p> |
| * |
| * <p> |
| * Since Mockito 2.1.0, only allow non-null <code>Map</code>. |
| * As this is a nullable reference, the suggested API to <strong>match</strong> <code>null</code> wrapper |
| * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito |
| * 1.x. |
| * </p> |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class. |
| * </p> |
| * |
| * @param keyClazz Type of the map key to avoid casting |
| * @param valueClazz Type of the value to avoid casting |
| * @return empty Map. |
| * @see #anyMap() |
| * @see #isNull() |
| * @see #isNull(Class) |
| * @deprecated With Java 8 this method will be removed in Mockito 3.0. This method is only used for generic |
| * friendliness to avoid casting, this is not anymore needed in Java 8. |
| */ |
| public static <K, V> Map<K, V> anyMapOf(Class<K> keyClazz, Class<V> valueClazz) { |
| return anyMap(); |
| } |
| |
| /** |
| * Any <strong>non-null</strong> <code>Collection</code>. |
| * |
| * <p> |
| * Since Mockito 2.1.0, only allow non-null <code>Collection</code>. |
| * As this is a nullable reference, the suggested API to <strong>match</strong> <code>null</code> |
| * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito |
| * 1.x. |
| * </p> |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class. |
| * </p> |
| * |
| * @return empty Collection. |
| * @see #anyCollectionOf(Class) |
| * @see #isNull() |
| * @see #isNull(Class) |
| */ |
| public static <T> Collection<T> anyCollection() { |
| reportMatcher(new InstanceOf(Collection.class, "<any collection>")); |
| return new ArrayList<T>(0); |
| } |
| |
| /** |
| * Any <strong>non-null</strong> <code>Collection</code>. |
| * |
| * <p> |
| * Generic friendly alias to {@link ArgumentMatchers#anyCollection()}. |
| * It's an alternative to <code>@SuppressWarnings("unchecked")</code> to keep code clean of compiler warnings. |
| * </p> |
| * |
| * <p> |
| * This method doesn't do type checks of the collection content with the given type parameter, it is only there |
| * to avoid casting in the code. |
| * </p> |
| * |
| * <p> |
| * Since Mockito 2.1.0, only allow non-null <code>Collection</code>. |
| * As this is a nullable reference, the suggested API to <strong>match</strong> <code>null</code> |
| * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito |
| * 1.x. |
| * </p> |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class. |
| * </p> |
| * |
| * @param clazz Type owned by the collection to avoid casting |
| * @return empty Collection. |
| * @see #anyCollection() |
| * @see #isNull() |
| * @see #isNull(Class) |
| * @deprecated With Java 8 this method will be removed in Mockito 3.0. This method is only used for generic |
| * friendliness to avoid casting, this is not anymore needed in Java 8. |
| */ |
| public static <T> Collection<T> anyCollectionOf(Class<T> clazz) { |
| return anyCollection(); |
| } |
| |
| /** |
| * Any <strong>non-null</strong> <code>Iterable</code>. |
| * |
| * <p> |
| * Since Mockito 2.1.0, only allow non-null <code>Iterable</code>. |
| * As this is a nullable reference, the suggested API to <strong>match</strong> <code>null</code> |
| * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito |
| * 1.x. |
| * </p> |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class. |
| * </p> |
| * |
| * @return empty Iterable. |
| * @see #anyIterableOf(Class) |
| * @see #isNull() |
| * @see #isNull(Class) |
| * @since 2.1.0 |
| */ |
| public static <T> Iterable<T> anyIterable() { |
| reportMatcher(new InstanceOf(Iterable.class, "<any iterable>")); |
| return new ArrayList<T>(0); |
| } |
| |
| /** |
| * Any <strong>non-null</strong> <code>Iterable</code>. |
| * |
| * <p> |
| * Generic friendly alias to {@link ArgumentMatchers#anyIterable()}. |
| * It's an alternative to <code>@SuppressWarnings("unchecked")</code> to keep code clean of compiler warnings. |
| * </p> |
| * |
| * <p> |
| * This method doesn't do type checks of the iterable content with the given type parameter, it is only there |
| * to avoid casting in the code. |
| * </p> |
| * |
| * <p> |
| * Since Mockito 2.1.0, only allow non-null <code>String</code>. |
| * As strings are nullable reference, the suggested API to <strong>match</strong> <code>null</code> wrapper |
| * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito |
| * 1.x. |
| * </p> |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class. |
| * </p> |
| * |
| * @param clazz Type owned by the collection to avoid casting |
| * @return empty Iterable. |
| * @see #anyIterable() |
| * @see #isNull() |
| * @see #isNull(Class) |
| * @since 2.1.0 |
| * @deprecated With Java 8 this method will be removed in Mockito 3.0. This method is only used for generic |
| * friendliness to avoid casting, this is not anymore needed in Java 8. |
| */ |
| public static <T> Iterable<T> anyIterableOf(Class<T> clazz) { |
| return anyIterable(); |
| } |
| |
| |
| |
| /** |
| * <code>boolean</code> argument that is equal to the given value. |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * </p> |
| * |
| * @param value the given value. |
| * @return <code>0</code>. |
| */ |
| public static boolean eq(boolean value) { |
| reportMatcher(new Equals(value)); |
| return false; |
| } |
| |
| /** |
| * <code>byte</code> argument that is equal to the given value. |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * </p> |
| * |
| * @param value the given value. |
| * @return <code>0</code>. |
| */ |
| public static byte eq(byte value) { |
| reportMatcher(new Equals(value)); |
| return 0; |
| } |
| |
| /** |
| * <code>char</code> argument that is equal to the given value. |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * </p> |
| * |
| * @param value the given value. |
| * @return <code>0</code>. |
| */ |
| public static char eq(char value) { |
| reportMatcher(new Equals(value)); |
| return 0; |
| } |
| |
| /** |
| * <code>double</code> argument that is equal to the given value. |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * </p> |
| * |
| * @param value the given value. |
| * @return <code>0</code>. |
| */ |
| public static double eq(double value) { |
| reportMatcher(new Equals(value)); |
| return 0; |
| } |
| |
| /** |
| * <code>float</code> argument that is equal to the given value. |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * </p> |
| * |
| * @param value the given value. |
| * @return <code>0</code>. |
| */ |
| public static float eq(float value) { |
| reportMatcher(new Equals(value)); |
| return 0; |
| } |
| |
| /** |
| * <code>int</code> argument that is equal to the given value. |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * </p> |
| * |
| * @param value the given value. |
| * @return <code>0</code>. |
| */ |
| public static int eq(int value) { |
| reportMatcher(new Equals(value)); |
| return 0; |
| } |
| |
| /** |
| * <code>long</code> argument that is equal to the given value. |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * </p> |
| * |
| * @param value the given value. |
| * @return <code>0</code>. |
| */ |
| public static long eq(long value) { |
| reportMatcher(new Equals(value)); |
| return 0; |
| } |
| |
| /** |
| * <code>short</code> argument that is equal to the given value. |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * |
| * @param value the given value. |
| * @return <code>0</code>. |
| */ |
| public static short eq(short value) { |
| reportMatcher(new Equals(value)); |
| return 0; |
| } |
| |
| /** |
| * Object argument that is equal to the given value. |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * </p> |
| * |
| * @param value the given value. |
| * @return <code>null</code>. |
| */ |
| public static <T> T eq(T value) { |
| reportMatcher(new Equals(value)); |
| if (value == null) |
| return null; |
| return (T) Primitives.defaultValue(value.getClass()); |
| } |
| |
| /** |
| * Object argument that is reflection-equal to the given value with support for excluding |
| * selected fields from a class. |
| * |
| * <p> |
| * This matcher can be used when equals() is not implemented on compared objects. |
| * Matcher uses java reflection API to compare fields of wanted and actual object. |
| * </p> |
| * |
| * <p> |
| * Works similarly to <code>EqualsBuilder.reflectionEquals(this, other, excludeFields)</code> from |
| * apache commons library. |
| * <p> |
| * <b>Warning</b> The equality check is shallow! |
| * </p> |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * </p> |
| * |
| * @param value the given value. |
| * @param excludeFields fields to exclude, if field does not exist it is ignored. |
| * @return <code>null</code>. |
| */ |
| public static <T> T refEq(T value, String... excludeFields) { |
| reportMatcher(new ReflectionEquals(value, excludeFields)); |
| return null; |
| } |
| |
| /** |
| * Object argument that is the same as the given value. |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * </p> |
| * |
| * @param <T> the type of the object, it is passed through to prevent casts. |
| * @param value the given value. |
| * @return <code>null</code>. |
| */ |
| public static <T> T same(T value) { |
| reportMatcher(new Same(value)); |
| if (value == null) |
| return null; |
| return (T) Primitives.defaultValue(value.getClass()); |
| } |
| |
| /** |
| * <code>null</code> argument. |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * </p> |
| * |
| * @return <code>null</code>. |
| * @see #isNull(Class) |
| * @see #isNotNull() |
| * @see #isNotNull(Class) |
| */ |
| public static <T> T isNull() { |
| reportMatcher(Null.NULL); |
| return null; |
| } |
| |
| /** |
| * <code>null</code> argument. |
| * |
| * <p> |
| * The class argument is provided to avoid casting. |
| * </p> |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * </p> |
| * |
| * @param clazz Type to avoid casting |
| * @return <code>null</code>. |
| * @see #isNull() |
| * @see #isNotNull() |
| * @see #isNotNull(Class) |
| * @deprecated With Java 8 this method will be removed in Mockito 3.0. This method is only used for generic |
| * friendliness to avoid casting, this is not anymore needed in Java 8. |
| */ |
| public static <T> T isNull(Class<T> clazz) { |
| return isNull(); |
| } |
| |
| /** |
| * Not <code>null</code> argument. |
| * |
| * <p> |
| * Alias to {@link ArgumentMatchers#isNotNull()} |
| * </p> |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * </p> |
| * |
| * @return <code>null</code>. |
| */ |
| public static <T> T notNull() { |
| reportMatcher(NotNull.NOT_NULL); |
| return null; |
| } |
| |
| /** |
| * Not <code>null</code> argument, not necessary of the given class. |
| * |
| * <p> |
| * The class argument is provided to avoid casting. |
| * |
| * Alias to {@link ArgumentMatchers#isNotNull(Class)} |
| * <p> |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * </p> |
| * |
| * @param clazz Type to avoid casting |
| * @return <code>null</code>. |
| * @see #isNotNull() |
| * @see #isNull() |
| * @see #isNull(Class) |
| * @deprecated With Java 8 this method will be removed in Mockito 3.0. This method is only used for generic |
| * friendliness to avoid casting, this is not anymore needed in Java 8. |
| */ |
| public static <T> T notNull(Class<T> clazz) { |
| return notNull(); |
| } |
| |
| /** |
| * Not <code>null</code> argument. |
| * |
| * <p> |
| * Alias to {@link ArgumentMatchers#notNull()} |
| * </p> |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * </p> |
| * |
| * @return <code>null</code>. |
| * @see #isNotNull(Class) |
| * @see #isNull() |
| * @see #isNull(Class) |
| */ |
| public static <T> T isNotNull() { |
| return notNull(); |
| } |
| |
| /** |
| * Not <code>null</code> argument, not necessary of the given class. |
| * |
| * <p> |
| * The class argument is provided to avoid casting. |
| * Alias to {@link ArgumentMatchers#notNull(Class)} |
| * </p> |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * </p> |
| * |
| * @param clazz Type to avoid casting |
| * @return <code>null</code>. |
| * @deprecated With Java 8 this method will be removed in Mockito 3.0. This method is only used for generic |
| * friendliness to avoid casting, this is not anymore needed in Java 8. |
| */ |
| public static <T> T isNotNull(Class<T> clazz) { |
| return notNull(clazz); |
| } |
| |
| |
| /** |
| * Argument that is either <code>null</code> or of the given type. |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * </p> |
| * |
| * @param clazz Type to avoid casting |
| * @return <code>null</code>. |
| */ |
| public static <T> T nullable(Class<T> clazz) { |
| AdditionalMatchers.or(isNull(), isA(clazz)); |
| return (T) Primitives.defaultValue(clazz); |
| } |
| |
| /** |
| * <code>String</code> argument that contains the given substring. |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * |
| * @param substring the substring. |
| * @return empty String (""). |
| */ |
| public static String contains(String substring) { |
| reportMatcher(new Contains(substring)); |
| return ""; |
| } |
| |
| /** |
| * <code>String</code> argument that matches the given regular expression. |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * |
| * @param regex the regular expression. |
| * @return empty String (""). |
| * |
| * @see AdditionalMatchers#not(boolean) |
| */ |
| public static String matches(String regex) { |
| reportMatcher(new Matches(regex)); |
| return ""; |
| } |
| |
| /** |
| * <code>Pattern</code> argument that matches the given regular expression. |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * |
| * @param pattern the regular expression pattern. |
| * @return empty String (""). |
| * |
| * @see AdditionalMatchers#not(boolean) |
| */ |
| public static String matches(Pattern pattern) { |
| reportMatcher(new Matches(pattern)); |
| return ""; |
| } |
| |
| /** |
| * <code>String</code> argument that ends with the given suffix. |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * |
| * @param suffix the suffix. |
| * @return empty String (""). |
| */ |
| public static String endsWith(String suffix) { |
| reportMatcher(new EndsWith(suffix)); |
| return ""; |
| } |
| |
| /** |
| * <code>String</code> argument that starts with the given prefix. |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * |
| * @param prefix the prefix. |
| * @return empty String (""). |
| */ |
| public static String startsWith(String prefix) { |
| reportMatcher(new StartsWith(prefix)); |
| return ""; |
| } |
| |
| /** |
| * Allows creating custom argument matchers. |
| * |
| * <p> |
| * This API has changed in 2.1.0, please read {@link ArgumentMatcher} for rationale and migration guide. |
| * <b>NullPointerException</b> auto-unboxing caveat is described below. |
| * </p> |
| * |
| * <p> |
| * It is important to understand the use cases and available options for dealing with non-trivial arguments |
| * <b>before</b> implementing custom argument matchers. This way, you can select the best possible approach |
| * for given scenario and produce highest quality test (clean and maintainable). |
| * Please read the documentation for {@link ArgumentMatcher} to learn about approaches and see the examples. |
| * </p> |
| * |
| * <p> |
| * <b>NullPointerException</b> auto-unboxing caveat. |
| * In rare cases when matching primitive parameter types you <b>*must*</b> use relevant intThat(), floatThat(), etc. method. |
| * This way you will avoid <code>NullPointerException</code> during auto-unboxing. |
| * Due to how java works we don't really have a clean way of detecting this scenario and protecting the user from this problem. |
| * Hopefully, the javadoc describes the problem and solution well. |
| * If you have an idea how to fix the problem, let us know via the mailing list or the issue tracker. |
| * </p> |
| * |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatcher} class |
| * </p> |
| * |
| * @param matcher decides whether argument matches |
| * @return <code>null</code>. |
| */ |
| public static <T> T argThat(ArgumentMatcher<T> matcher) { |
| reportMatcher(matcher); |
| return null; |
| } |
| |
| /** |
| * Allows creating custom <code>char</code> argument matchers. |
| * |
| * Note that {@link #argThat} will not work with primitive <code>char</code> matchers due to <code>NullPointerException</code> auto-unboxing caveat. |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * |
| * @param matcher decides whether argument matches |
| * @return <code>0</code>. |
| */ |
| public static char charThat(ArgumentMatcher<Character> matcher) { |
| reportMatcher(matcher); |
| return 0; |
| } |
| |
| /** |
| * Allows creating custom <code>boolean</code> argument matchers. |
| * |
| * Note that {@link #argThat} will not work with primitive <code>boolean</code> matchers due to <code>NullPointerException</code> auto-unboxing caveat. |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * |
| * @param matcher decides whether argument matches |
| * @return <code>false</code>. |
| */ |
| public static boolean booleanThat(ArgumentMatcher<Boolean> matcher) { |
| reportMatcher(matcher); |
| return false; |
| } |
| |
| /** |
| * Allows creating custom <code>byte</code> argument matchers. |
| * |
| * Note that {@link #argThat} will not work with primitive <code>byte</code> matchers due to <code>NullPointerException</code> auto-unboxing caveat. |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * |
| * @param matcher decides whether argument matches |
| * @return <code>0</code>. |
| */ |
| public static byte byteThat(ArgumentMatcher<Byte> matcher) { |
| reportMatcher(matcher); |
| return 0; |
| } |
| |
| /** |
| * Allows creating custom <code>short</code> argument matchers. |
| * |
| * Note that {@link #argThat} will not work with primitive <code>short</code> matchers due to <code>NullPointerException</code> auto-unboxing caveat. |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * |
| * @param matcher decides whether argument matches |
| * @return <code>0</code>. |
| */ |
| public static short shortThat(ArgumentMatcher<Short> matcher) { |
| reportMatcher(matcher); |
| return 0; |
| } |
| |
| /** |
| * Allows creating custom <code>int</code> argument matchers. |
| * |
| * Note that {@link #argThat} will not work with primitive <code>int</code> matchers due to <code>NullPointerException</code> auto-unboxing caveat. |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * |
| * @param matcher decides whether argument matches |
| * @return <code>0</code>. |
| */ |
| public static int intThat(ArgumentMatcher<Integer> matcher) { |
| reportMatcher(matcher); |
| return 0; |
| } |
| |
| /** |
| * Allows creating custom <code>long</code> argument matchers. |
| * |
| * Note that {@link #argThat} will not work with primitive <code>long</code> matchers due to <code>NullPointerException</code> auto-unboxing caveat. |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * |
| * @param matcher decides whether argument matches |
| * @return <code>0</code>. |
| */ |
| public static long longThat(ArgumentMatcher<Long> matcher) { |
| reportMatcher(matcher); |
| return 0; |
| } |
| |
| /** |
| * Allows creating custom <code>float</code> argument matchers. |
| * |
| * Note that {@link #argThat} will not work with primitive <code>float</code> matchers due to <code>NullPointerException</code> auto-unboxing caveat. |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * |
| * @param matcher decides whether argument matches |
| * @return <code>0</code>. |
| */ |
| public static float floatThat(ArgumentMatcher<Float> matcher) { |
| reportMatcher(matcher); |
| return 0; |
| } |
| |
| /** |
| * Allows creating custom <code>double</code> argument matchers. |
| * |
| * Note that {@link #argThat} will not work with primitive <code>double</code> matchers due to <code>NullPointerException</code> auto-unboxing caveat. |
| * <p> |
| * See examples in javadoc for {@link ArgumentMatchers} class |
| * |
| * @param matcher decides whether argument matches |
| * @return <code>0</code>. |
| */ |
| public static double doubleThat(ArgumentMatcher<Double> matcher) { |
| reportMatcher(matcher); |
| return 0; |
| } |
| |
| private static void reportMatcher(ArgumentMatcher<?> matcher) { |
| mockingProgress().getArgumentMatcherStorage().reportMatcher(matcher); |
| } |
| } |