Home | History | Annotate | Download | only in mockito
      1 /*
      2  * Copyright (c) 2016 Mockito contributors
      3  * This program is made available under the terms of the MIT License.
      4  */
      5 package org.mockito;
      6 
      7 import java.util.ArrayList;
      8 import java.util.Collection;
      9 import java.util.HashMap;
     10 import java.util.HashSet;
     11 import java.util.List;
     12 import java.util.Map;
     13 import java.util.Set;
     14 import java.util.regex.Pattern;
     15 import org.mockito.internal.matchers.Any;
     16 import org.mockito.internal.matchers.Contains;
     17 import org.mockito.internal.matchers.EndsWith;
     18 import org.mockito.internal.matchers.Equals;
     19 import org.mockito.internal.matchers.InstanceOf;
     20 import org.mockito.internal.matchers.Matches;
     21 import org.mockito.internal.matchers.NotNull;
     22 import org.mockito.internal.matchers.Null;
     23 import org.mockito.internal.matchers.Same;
     24 import org.mockito.internal.matchers.StartsWith;
     25 import org.mockito.internal.matchers.apachecommons.ReflectionEquals;
     26 import org.mockito.internal.util.Primitives;
     27 
     28 import static org.mockito.internal.progress.ThreadSafeMockingProgress.mockingProgress;
     29 import static org.mockito.internal.util.Primitives.defaultValue;
     30 
     31 /**
     32  * Allow flexible verification or stubbing. See also {@link AdditionalMatchers}.
     33  *
     34  * <p>
     35  * {@link Mockito} extends ArgumentMatchers so to get access to all matchers just import Mockito class statically.
     36  *
     37  * <pre class="code"><code class="java">
     38  * //stubbing using anyInt() argument matcher
     39  * when(mockedList.get(anyInt())).thenReturn("element");
     40  *
     41  * //following prints "element"
     42  * System.out.println(mockedList.get(999));
     43  *
     44  * //you can also verify using argument matcher
     45  * verify(mockedList).get(anyInt());
     46  * </code></pre>
     47  *
     48  * <p>
     49  * Since Mockito <code>any(Class)</code> and <code>anyInt</code> family matchers perform a type check, thus they won't
     50  * match <code>null</code> arguments. Instead use the <code>isNull</code> matcher.
     51  *
     52  * <pre class="code"><code class="java">
     53  * // stubbing using anyBoolean() argument matcher
     54  * when(mock.dryRun(anyBoolean())).thenReturn("state");
     55  *
     56  * // below the stub won't match, and won't return "state"
     57  * mock.dryRun(null);
     58  *
     59  * // either change the stub
     60  * when(mock.dryRun(isNull())).thenReturn("state");
     61  * mock.dryRun(null); // ok
     62  *
     63  * // or fix the code ;)
     64  * when(mock.dryRun(anyBoolean())).thenReturn("state");
     65  * mock.dryRun(true); // ok
     66  *
     67  * </code></pre>
     68  *
     69  * The same apply for verification.
     70  * </p>
     71  *
     72  *
     73  * Scroll down to see all methods - full list of matchers.
     74  *
     75  * <p>
     76  * <b>Warning:</b><br/>
     77  *
     78  * If you are using argument matchers, <b>all arguments</b> have to be provided by matchers.
     79  *
     80  * E.g: (example shows verification but the same applies to stubbing):
     81  * </p>
     82  *
     83  * <pre class="code"><code class="java">
     84  * verify(mock).someMethod(anyInt(), anyString(), <b>eq("third argument")</b>);
     85  * //above is correct - eq() is also an argument matcher
     86  *
     87  * verify(mock).someMethod(anyInt(), anyString(), <b>"third argument"</b>);
     88  * //above is incorrect - exception will be thrown because third argument is given without argument matcher.
     89  * </code></pre>
     90  *
     91  * <p>
     92  * Matcher methods like <code>anyObject()</code>, <code>eq()</code> <b>do not</b> return matchers.
     93  * Internally, they record a matcher on a stack and return a dummy value (usually null).
     94  * This implementation is due to static type safety imposed by java compiler.
     95  * The consequence is that you cannot use <code>anyObject()</code>, <code>eq()</code> methods outside of verified/stubbed method.
     96  * </p>
     97  *
     98  * <h1>Additional matchers</h1>
     99  * <p>
    100  * The class {@link AdditionalMatchers} offers rarely used matchers, although they can be useful, when
    101  * it is useful to combine multiple matchers or when it is useful to negate a matcher necessary.
    102  * </p>
    103  *
    104  * <h1>Custom Argument ArgumentMatchers</h1>
    105  * <p>
    106  * It is important to understand the use cases and available options for dealing with non-trivial arguments
    107  * <b>before</b> implementing custom argument matchers. This way, you can select the best possible approach
    108  * for given scenario and produce highest quality test (clean and maintainable).
    109  * Please read on in the javadoc for {@link ArgumentMatcher} to learn about approaches and see the examples.
    110  * </p>
    111  *
    112  * @see AdditionalMatchers
    113  */
    114 @SuppressWarnings("unchecked")
    115 public class ArgumentMatchers {
    116 
    117     /**
    118      * Matches <strong>anything</strong>, including nulls and varargs.
    119      *
    120      * <p>
    121      * See examples in javadoc for {@link ArgumentMatchers} class
    122      *
    123      * This is an alias of: {@link #anyObject()} and {@link #any(java.lang.Class)}
    124      * </p>
    125      *
    126      * <p>
    127      * <strong>Notes : </strong><br/>
    128      * <ul>
    129      *     <li>For primitive types use {@link #anyChar()} family or {@link #isA(Class)} or {@link #any(Class)}.</li>
    130      *     <li>Since mockito 2.1.0 {@link #any(Class)} is not anymore an alias of this method.</li>
    131      * </ul>
    132      * </p>
    133      *
    134      * @return <code>null</code>.
    135      *
    136      * @see #any(Class)
    137      * @see #anyObject()
    138      * @see #anyVararg()
    139      * @see #anyChar()
    140      * @see #anyInt()
    141      * @see #anyBoolean()
    142      * @see #anyCollectionOf(Class)
    143      */
    144     public static <T> T any() {
    145         return anyObject();
    146     }
    147 
    148     /**
    149      * Matches anything, including <code>null</code>.
    150      *
    151      * <p>
    152      * This is an alias of: {@link #any()} and {@link #any(java.lang.Class)}.
    153      * See examples in javadoc for {@link ArgumentMatchers} class.
    154      * </p>
    155      *
    156      * @return <code>null</code>.
    157      * @see #any()
    158      * @see #any(Class)
    159      * @see #notNull()
    160      * @see #notNull(Class)
    161      * @deprecated This will be removed in Mockito 3.0 (which will be java 8 only)
    162      */
    163     @Deprecated
    164     public static <T> T anyObject() {
    165         reportMatcher(Any.ANY);
    166         return null;
    167     }
    168 
    169     /**
    170      * Matches any object of given type, excluding nulls.
    171      *
    172      * <p>
    173      * This matcher will perform a type check with the given type, thus excluding values.
    174      * See examples in javadoc for {@link ArgumentMatchers} class.
    175      *
    176      * This is an alias of: {@link #isA(Class)}}
    177      * </p>
    178      *
    179      * <p>
    180      * Since Mockito 2.1.0, only allow non-null instance of <code></code>, thus <code>null</code> is not anymore a valid value.
    181      * As reference are nullable, the suggested API to <strong>match</strong> <code>null</code>
    182      * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito
    183      * 1.x.
    184      * </p>
    185      *
    186      * <p><strong>Notes : </strong><br/>
    187      * <ul>
    188      *     <li>For primitive types use {@link #anyChar()} family.</li>
    189      *     <li>Since Mockito 2.1.0 this method will perform a type check thus <code>null</code> values are not authorized.</li>
    190      *     <li>Since mockito 2.1.0 {@link #any()} and {@link #anyObject()} are not anymore aliases of this method.</li>
    191      * </ul>
    192      * </p>
    193      *
    194      * @param <T> The accepted type
    195      * @param type the class of the accepted type.
    196      * @return <code>null</code>.
    197      * @see #any()
    198      * @see #anyObject()
    199      * @see #anyVararg()
    200      * @see #isA(Class)
    201      * @see #notNull()
    202      * @see #notNull(Class)
    203      * @see #isNull()
    204      * @see #isNull(Class)
    205      */
    206     public static <T> T any(Class<T> type) {
    207         reportMatcher(new InstanceOf.VarArgAware(type, "<any " + type.getCanonicalName() + ">"));
    208         return defaultValue(type);
    209     }
    210 
    211     /**
    212      * <code>Object</code> argument that implements the given class.
    213      * <p>
    214      * See examples in javadoc for {@link ArgumentMatchers} class
    215      *
    216      * @param <T>  the accepted type.
    217      * @param type the class of the accepted type.
    218      * @return <code>null</code>.
    219      * @see #any(Class)
    220      */
    221     public static <T> T isA(Class<T> type) {
    222         reportMatcher(new InstanceOf(type));
    223         return defaultValue(type);
    224     }
    225 
    226     /**
    227      * Any vararg, meaning any number and values of arguments.
    228      *
    229      * <p>
    230      * Example:
    231      * <pre class="code"><code class="java">
    232      * //verification:
    233      * mock.foo(1, 2);
    234      * mock.foo(1, 2, 3, 4);
    235      *
    236      * verify(mock, times(2)).foo(anyVararg());
    237      *
    238      * //stubbing:
    239      * when(mock.foo(anyVararg()).thenReturn(100);
    240      *
    241      * //prints 100
    242      * System.out.println(mock.foo(1, 2));
    243      * //also prints 100
    244      * System.out.println(mock.foo(1, 2, 3, 4));
    245      * </code></pre>
    246      * </p>
    247      *
    248      * <p>
    249      * See examples in javadoc for {@link ArgumentMatchers} class.
    250      * </p>
    251      *
    252      * @return <code>null</code>.
    253      * @see #any()
    254      * @see #any(Class)
    255      * @deprecated as of 2.1.0 use {@link #any()}
    256      */
    257     @Deprecated
    258     public static <T> T anyVararg() {
    259         any();
    260         return null;
    261     }
    262 
    263     /**
    264      * Any <code>boolean</code> or <strong>non-null</strong> <code>Boolean</code>
    265      *
    266      * <p>
    267      * Since Mockito 2.1.0, only allow valued <code>Boolean</code>, thus <code>null</code> is not anymore a valid value.
    268      * As primitive wrappers are nullable, the suggested API to <strong>match</strong> <code>null</code> wrapper
    269      * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito
    270      * 1.x.
    271      * </p>
    272      *
    273      * <p>
    274      * See examples in javadoc for {@link ArgumentMatchers} class.
    275      * </p>
    276      *
    277      * @return <code>false</code>.
    278      * @see #isNull()
    279      * @see #isNull(Class)
    280      */
    281     public static boolean anyBoolean() {
    282         reportMatcher(new InstanceOf(Boolean.class, "<any boolean>"));
    283         return false;
    284     }
    285 
    286     /**
    287      * Any <code>byte</code> or <strong>non-null</strong> <code>Byte</code>.
    288      *
    289      * <p>
    290      * Since Mockito 2.1.0, only allow valued <code>Byte</code>, thus <code>null</code> is not anymore a valid value.
    291      * As primitive wrappers are nullable, the suggested API to <strong>match</strong> <code>null</code> wrapper
    292      * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito
    293      * 1.x.
    294      * </p>
    295      *
    296      * <p>
    297      * See examples in javadoc for {@link ArgumentMatchers} class.
    298      * </p>
    299      *
    300      * @return <code>0</code>.
    301      * @see #isNull()
    302      * @see #isNull(Class)
    303      */
    304     public static byte anyByte() {
    305         reportMatcher(new InstanceOf(Byte.class, "<any byte>"));
    306         return 0;
    307     }
    308 
    309     /**
    310      * Any <code>char</code> or <strong>non-null</strong> <code>Character</code>.
    311      *
    312      * <p>
    313      * Since Mockito 2.1.0, only allow valued <code>Character</code>, thus <code>null</code> is not anymore a valid value.
    314      * As primitive wrappers are nullable, the suggested API to <strong>match</strong> <code>null</code> wrapper
    315      * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito
    316      * 1.x.
    317      * </p>
    318      *
    319      * <p>
    320      * See examples in javadoc for {@link ArgumentMatchers} class.
    321      * </p>
    322      *
    323      * @return <code>0</code>.
    324      * @see #isNull()
    325      * @see #isNull(Class)
    326      */
    327     public static char anyChar() {
    328         reportMatcher(new InstanceOf(Character.class, "<any char>"));
    329         return 0;
    330     }
    331 
    332     /**
    333      * Any int or <strong>non-null</strong> <code>Integer</code>.
    334      *
    335      * <p>
    336      * Since Mockito 2.1.0, only allow valued <code>Integer</code>, thus <code>null</code> is not anymore a valid value.
    337      * As primitive wrappers are nullable, the suggested API to <strong>match</strong> <code>null</code> wrapper
    338      * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito
    339      * 1.x.
    340      * </p>
    341      *
    342      * <p>
    343      * See examples in javadoc for {@link ArgumentMatchers} class.
    344      * </p>
    345      *
    346      * @return <code>0</code>.
    347      * @see #isNull()
    348      * @see #isNull(Class)
    349      */
    350     public static int anyInt() {
    351         reportMatcher(new InstanceOf(Integer.class, "<any integer>"));
    352         return 0;
    353     }
    354 
    355     /**
    356      * Any <code>long</code> or <strong>non-null</strong> <code>Long</code>.
    357      *
    358      * <p>
    359      * Since Mockito 2.1.0, only allow valued <code>Long</code>, thus <code>null</code> is not anymore a valid value.
    360      * As primitive wrappers are nullable, the suggested API to <strong>match</strong> <code>null</code> wrapper
    361      * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito
    362      * 1.x.
    363      * </p>
    364      *
    365      * <p>
    366      * See examples in javadoc for {@link ArgumentMatchers} class.
    367      * </p>
    368      *
    369      * @return <code>0</code>.
    370      * @see #isNull()
    371      * @see #isNull(Class)
    372      */
    373     public static long anyLong() {
    374         reportMatcher(new InstanceOf(Long.class, "<any long>"));
    375         return 0;
    376     }
    377 
    378     /**
    379      * Any <code>float</code> or <strong>non-null</strong> <code>Float</code>.
    380      *
    381      * <p>
    382      * Since Mockito 2.1.0, only allow valued <code>Float</code>, thus <code>null</code> is not anymore a valid value.
    383      * As primitive wrappers are nullable, the suggested API to <strong>match</strong> <code>null</code> wrapper
    384      * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito
    385      * 1.x.
    386      * </p>
    387      *
    388      * <p>
    389      * See examples in javadoc for {@link ArgumentMatchers} class.
    390      * </p>
    391      *
    392      * @return <code>0</code>.
    393      * @see #isNull()
    394      * @see #isNull(Class)
    395      */
    396     public static float anyFloat() {
    397         reportMatcher(new InstanceOf(Float.class, "<any float>"));
    398         return 0;
    399     }
    400 
    401     /**
    402      * Any <code>double</code> or <strong>non-null</strong> <code>Double</code>.
    403      *
    404      * <p>
    405      * Since Mockito 2.1.0, only allow valued <code>Double</code>, thus <code>null</code> is not anymore a valid value.
    406      * As primitive wrappers are nullable, the suggested API to <strong>match</strong> <code>null</code> wrapper
    407      * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito
    408      * 1.x.
    409      * </p>
    410      *
    411      * <p>
    412      * See examples in javadoc for {@link ArgumentMatchers} class.
    413      * </p>
    414      *
    415      * @return <code>0</code>.
    416      * @see #isNull()
    417      * @see #isNull(Class)
    418      */
    419     public static double anyDouble() {
    420         reportMatcher(new InstanceOf(Double.class, "<any double>"));
    421         return 0;
    422     }
    423 
    424     /**
    425      * Any <code>short</code> or <strong>non-null</strong> <code>Short</code>.
    426      *
    427      * <p>
    428      * Since Mockito 2.1.0, only allow valued <code>Short</code>, thus <code>null</code> is not anymore a valid value.
    429      * As primitive wrappers are nullable, the suggested API to <strong>match</strong> <code>null</code> wrapper
    430      * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito
    431      * 1.x.
    432      * </p>
    433      *
    434      * <p>
    435      * See examples in javadoc for {@link ArgumentMatchers} class.
    436      * </p>
    437      *
    438      * @return <code>0</code>.
    439      * @see #isNull()
    440      * @see #isNull(Class)
    441      */
    442     public static short anyShort() {
    443         reportMatcher(new InstanceOf(Short.class, "<any short>"));
    444         return 0;
    445     }
    446 
    447     /**
    448      * Any <strong>non-null</strong> <code>String</code>
    449      *
    450      * <p>
    451      * Since Mockito 2.1.0, only allow non-null <code>String</code>.
    452      * As this is a nullable reference, the suggested API to <strong>match</strong> <code>null</code> wrapper
    453      * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito
    454      * 1.x.
    455      * </p>
    456      *
    457      * <p>
    458      * See examples in javadoc for {@link ArgumentMatchers} class.
    459      * </p>
    460      *
    461      * @return empty String ("")
    462      * @see #isNull()
    463      * @see #isNull(Class)
    464      */
    465     public static String anyString() {
    466         reportMatcher(new InstanceOf(String.class, "<any string>"));
    467         return "";
    468     }
    469 
    470     /**
    471      * Any <strong>non-null</strong> <code>List</code>.
    472      *
    473      * <p>
    474      * Since Mockito 2.1.0, only allow non-null <code>List</code>.
    475      * As this is a nullable reference, the suggested API to <strong>match</strong> <code>null</code> wrapper
    476      * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito
    477      * 1.x.
    478      * </p>
    479      *
    480      * <p>
    481      * See examples in javadoc for {@link ArgumentMatchers} class.
    482      * </p>
    483      *
    484      * @return empty List.
    485      * @see #anyListOf(Class)
    486      * @see #isNull()
    487      * @see #isNull(Class)
    488      */
    489     public static <T> List<T> anyList() {
    490         reportMatcher(new InstanceOf(List.class, "<any List>"));
    491         return new ArrayList<T>(0);
    492     }
    493 
    494     /**
    495      * Any <strong>non-null</strong> <code>List</code>.
    496      *
    497      * Generic friendly alias to {@link ArgumentMatchers#anyList()}. It's an alternative to
    498      * <code>&#064;SuppressWarnings("unchecked")</code> to keep code clean of compiler warnings.
    499      *
    500      * <p>
    501      * This method doesn't do type checks of the list content with the given type parameter, it is only there
    502      * to avoid casting in the code.
    503      * </p>
    504      *
    505      * <p>
    506      * Since Mockito 2.1.0, only allow non-null <code>List</code>.
    507      * As this is a nullable reference, the suggested API to <strong>match</strong> <code>null</code> wrapper
    508      * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito
    509      * 1.x.
    510      * </p>
    511      *
    512      * <p>
    513      * See examples in javadoc for {@link ArgumentMatchers} class.
    514      * </p>
    515      *
    516      * @param clazz Type owned by the list to avoid casting
    517      * @return empty List.
    518      * @see #anyList()
    519      * @see #isNull()
    520      * @see #isNull(Class)
    521      * @deprecated With Java 8 this method will be removed in Mockito 3.0. This method is only used for generic
    522      * friendliness to avoid casting, this is not anymore needed in Java 8.
    523      */
    524     public static <T> List<T> anyListOf(Class<T> clazz) {
    525         return anyList();
    526     }
    527 
    528     /**
    529      * Any <strong>non-null</strong> <code>Set</code>.
    530      *
    531      * <p>
    532      * Since Mockito 2.1.0, only allow non-null <code>Set</code>.
    533      * As this is a nullable reference, the suggested API to <strong>match</strong> <code>null</code> wrapper
    534      * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito
    535      * 1.x.
    536      * </p>
    537      *
    538      * <p>
    539      * See examples in javadoc for {@link ArgumentMatchers} class.
    540      * </p>
    541      *
    542      * @return empty Set
    543      * @see #anySetOf(Class)
    544      * @see #isNull()
    545      * @see #isNull(Class)
    546      */
    547     public static <T> Set<T> anySet() {
    548         reportMatcher(new InstanceOf(Set.class, "<any set>"));
    549         return new HashSet<T>(0);
    550     }
    551 
    552     /**
    553      * Any <strong>non-null</strong> <code>Set</code>.
    554      *
    555      * <p>
    556      * Generic friendly alias to {@link ArgumentMatchers#anySet()}.
    557      * It's an alternative to <code>&#064;SuppressWarnings("unchecked")</code> to keep code clean of compiler warnings.
    558      * </p>
    559      *
    560      * <p>
    561      * This method doesn't do type checks of the set content with the given type parameter, it is only there
    562      * to avoid casting in the code.
    563      * </p>
    564      *
    565      * <p>
    566      * Since Mockito 2.1.0, only allow non-null <code>Set</code>.
    567      * As this is a nullable reference, the suggested API to <strong>match</strong> <code>null</code> wrapper
    568      * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito
    569      * 1.x.
    570      * </p>
    571      *
    572      * <p>
    573      * See examples in javadoc for {@link ArgumentMatchers} class.
    574      * </p>
    575      *
    576      * @param clazz Type owned by the Set to avoid casting
    577      * @return empty Set
    578      * @see #anySet()
    579      * @see #isNull()
    580      * @see #isNull(Class)
    581      * @deprecated With Java 8 this method will be removed in Mockito 3.0. This method is only used for generic
    582      * friendliness to avoid casting, this is not anymore needed in Java 8.
    583      */
    584     public static <T> Set<T> anySetOf(Class<T> clazz) {
    585         return anySet();
    586     }
    587 
    588     /**
    589      * Any <strong>non-null</strong> <code>Map</code>.
    590      *
    591      * <p>
    592      * Since Mockito 2.1.0, only allow non-null <code>Map</code>.
    593      * As this is a nullable reference, the suggested API to <strong>match</strong> <code>null</code> wrapper
    594      * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito
    595      * 1.x.
    596      * </p>
    597      *
    598      * <p>
    599      * See examples in javadoc for {@link ArgumentMatchers} class.
    600      * </p>
    601      *
    602      * @return empty Map.
    603      * @see #anyMapOf(Class, Class)
    604      * @see #isNull()
    605      * @see #isNull(Class)
    606      */
    607     public static <K, V> Map<K, V> anyMap() {
    608         reportMatcher(new InstanceOf(Map.class, "<any map>"));
    609         return new HashMap<K, V>(0);
    610     }
    611 
    612     /**
    613      * Any <strong>non-null</strong> <code>Map</code>.
    614      *
    615      * <p>
    616      * Generic friendly alias to {@link ArgumentMatchers#anyMap()}.
    617      * It's an alternative to <code>&#064;SuppressWarnings("unchecked")</code> to keep code clean of compiler warnings.
    618      * </p>
    619      *
    620      * <p>
    621      * This method doesn't do type checks of the map content with the given type parameter, it is only there
    622      * to avoid casting in the code.
    623      * </p>
    624      *
    625      * <p>
    626      * Since Mockito 2.1.0, only allow non-null <code>Map</code>.
    627      * As this is a nullable reference, the suggested API to <strong>match</strong> <code>null</code> wrapper
    628      * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito
    629      * 1.x.
    630      * </p>
    631      *
    632      * <p>
    633      * See examples in javadoc for {@link ArgumentMatchers} class.
    634      * </p>
    635      *
    636      * @param keyClazz   Type of the map key to avoid casting
    637      * @param valueClazz Type of the value to avoid casting
    638      * @return empty Map.
    639      * @see #anyMap()
    640      * @see #isNull()
    641      * @see #isNull(Class)
    642      * @deprecated With Java 8 this method will be removed in Mockito 3.0. This method is only used for generic
    643      * friendliness to avoid casting, this is not anymore needed in Java 8.
    644      */
    645     public static <K, V> Map<K, V> anyMapOf(Class<K> keyClazz, Class<V> valueClazz) {
    646         return anyMap();
    647     }
    648 
    649     /**
    650      * Any <strong>non-null</strong> <code>Collection</code>.
    651      *
    652      * <p>
    653      * Since Mockito 2.1.0, only allow non-null <code>Collection</code>.
    654      * As this is a nullable reference, the suggested API to <strong>match</strong> <code>null</code>
    655      * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito
    656      * 1.x.
    657      * </p>
    658      *
    659      * <p>
    660      * See examples in javadoc for {@link ArgumentMatchers} class.
    661      * </p>
    662      *
    663      * @return empty Collection.
    664      * @see #anyCollectionOf(Class)
    665      * @see #isNull()
    666      * @see #isNull(Class)
    667      */
    668     public static <T> Collection<T> anyCollection() {
    669         reportMatcher(new InstanceOf(Collection.class, "<any collection>"));
    670         return new ArrayList<T>(0);
    671     }
    672 
    673     /**
    674      * Any <strong>non-null</strong> <code>Collection</code>.
    675      *
    676      * <p>
    677      * Generic friendly alias to {@link ArgumentMatchers#anyCollection()}.
    678      * It's an alternative to <code>&#064;SuppressWarnings("unchecked")</code> to keep code clean of compiler warnings.
    679      * </p>
    680      *
    681      * <p>
    682      * This method doesn't do type checks of the collection content with the given type parameter, it is only there
    683      * to avoid casting in the code.
    684      * </p>
    685      *
    686      * <p>
    687      * Since Mockito 2.1.0, only allow non-null <code>Collection</code>.
    688      * As this is a nullable reference, the suggested API to <strong>match</strong> <code>null</code>
    689      * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito
    690      * 1.x.
    691      * </p>
    692      *
    693      * <p>
    694      * See examples in javadoc for {@link ArgumentMatchers} class.
    695      * </p>
    696      *
    697      * @param clazz Type owned by the collection to avoid casting
    698      * @return empty Collection.
    699      * @see #anyCollection()
    700      * @see #isNull()
    701      * @see #isNull(Class)
    702      * @deprecated With Java 8 this method will be removed in Mockito 3.0. This method is only used for generic
    703      * friendliness to avoid casting, this is not anymore needed in Java 8.
    704      */
    705     public static <T> Collection<T> anyCollectionOf(Class<T> clazz) {
    706         return anyCollection();
    707     }
    708 
    709     /**
    710      * Any <strong>non-null</strong> <code>Iterable</code>.
    711      *
    712      * <p>
    713      * Since Mockito 2.1.0, only allow non-null <code>Iterable</code>.
    714      * As this is a nullable reference, the suggested API to <strong>match</strong> <code>null</code>
    715      * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito
    716      * 1.x.
    717      * </p>
    718      *
    719      * <p>
    720      * See examples in javadoc for {@link ArgumentMatchers} class.
    721      * </p>
    722      *
    723      * @return empty Iterable.
    724      * @see #anyIterableOf(Class)
    725      * @see #isNull()
    726      * @see #isNull(Class)
    727      * @since 2.1.0
    728      */
    729     public static <T> Iterable<T> anyIterable() {
    730         reportMatcher(new InstanceOf(Iterable.class, "<any iterable>"));
    731         return new ArrayList<T>(0);
    732     }
    733 
    734     /**
    735      * Any <strong>non-null</strong> <code>Iterable</code>.
    736      *
    737      * <p>
    738      * Generic friendly alias to {@link ArgumentMatchers#anyIterable()}.
    739      * It's an alternative to <code>&#064;SuppressWarnings("unchecked")</code> to keep code clean of compiler warnings.
    740      * </p>
    741      *
    742      * <p>
    743      * This method doesn't do type checks of the iterable content with the given type parameter, it is only there
    744      * to avoid casting in the code.
    745      * </p>
    746      *
    747      * <p>
    748      * Since Mockito 2.1.0, only allow non-null <code>String</code>.
    749      * As strings are nullable reference, the suggested API to <strong>match</strong> <code>null</code> wrapper
    750      * would be {@link #isNull()}. We felt this change would make tests harness much safer that it was with Mockito
    751      * 1.x.
    752      * </p>
    753      *
    754      * <p>
    755      * See examples in javadoc for {@link ArgumentMatchers} class.
    756      * </p>
    757      *
    758      * @param clazz Type owned by the collection to avoid casting
    759      * @return empty Iterable.
    760      * @see #anyIterable()
    761      * @see #isNull()
    762      * @see #isNull(Class)
    763      * @since 2.1.0
    764      * @deprecated With Java 8 this method will be removed in Mockito 3.0. This method is only used for generic
    765      * friendliness to avoid casting, this is not anymore needed in Java 8.
    766      */
    767     public static <T> Iterable<T> anyIterableOf(Class<T> clazz) {
    768         return anyIterable();
    769     }
    770 
    771 
    772 
    773     /**
    774      * <code>boolean</code> argument that is equal to the given value.
    775      *
    776      * <p>
    777      * See examples in javadoc for {@link ArgumentMatchers} class
    778      * </p>
    779      *
    780      * @param value the given value.
    781      * @return <code>0</code>.
    782      */
    783     public static boolean eq(boolean value) {
    784         reportMatcher(new Equals(value));
    785         return false;
    786     }
    787 
    788     /**
    789      * <code>byte</code> argument that is equal to the given value.
    790      *
    791      * <p>
    792      * See examples in javadoc for {@link ArgumentMatchers} class
    793      * </p>
    794      *
    795      * @param value the given value.
    796      * @return <code>0</code>.
    797      */
    798     public static byte eq(byte value) {
    799         reportMatcher(new Equals(value));
    800         return 0;
    801     }
    802 
    803     /**
    804      * <code>char</code> argument that is equal to the given value.
    805      *
    806      * <p>
    807      * See examples in javadoc for {@link ArgumentMatchers} class
    808      * </p>
    809      *
    810      * @param value the given value.
    811      * @return <code>0</code>.
    812      */
    813     public static char eq(char value) {
    814         reportMatcher(new Equals(value));
    815         return 0;
    816     }
    817 
    818     /**
    819      * <code>double</code> argument that is equal to the given value.
    820      *
    821      * <p>
    822      * See examples in javadoc for {@link ArgumentMatchers} class
    823      * </p>
    824      *
    825      * @param value the given value.
    826      * @return <code>0</code>.
    827      */
    828     public static double eq(double value) {
    829         reportMatcher(new Equals(value));
    830         return 0;
    831     }
    832 
    833     /**
    834      * <code>float</code> argument that is equal to the given value.
    835      *
    836      * <p>
    837      * See examples in javadoc for {@link ArgumentMatchers} class
    838      * </p>
    839      *
    840      * @param value the given value.
    841      * @return <code>0</code>.
    842      */
    843     public static float eq(float value) {
    844         reportMatcher(new Equals(value));
    845         return 0;
    846     }
    847 
    848     /**
    849      * <code>int</code> argument that is equal to the given value.
    850      *
    851      * <p>
    852      * See examples in javadoc for {@link ArgumentMatchers} class
    853      * </p>
    854      *
    855      * @param value the given value.
    856      * @return <code>0</code>.
    857      */
    858     public static int eq(int value) {
    859         reportMatcher(new Equals(value));
    860         return 0;
    861     }
    862 
    863     /**
    864      * <code>long</code> argument that is equal to the given value.
    865      *
    866      * <p>
    867      * See examples in javadoc for {@link ArgumentMatchers} class
    868      * </p>
    869      *
    870      * @param value the given value.
    871      * @return <code>0</code>.
    872      */
    873     public static long eq(long value) {
    874         reportMatcher(new Equals(value));
    875         return 0;
    876     }
    877 
    878     /**
    879      * <code>short</code> argument that is equal to the given value.
    880      * <p>
    881      * See examples in javadoc for {@link ArgumentMatchers} class
    882      *
    883      * @param value the given value.
    884      * @return <code>0</code>.
    885      */
    886     public static short eq(short value) {
    887         reportMatcher(new Equals(value));
    888         return 0;
    889     }
    890 
    891     /**
    892      * Object argument that is equal to the given value.
    893      *
    894      * <p>
    895      * See examples in javadoc for {@link ArgumentMatchers} class
    896      * </p>
    897      *
    898      * @param value the given value.
    899      * @return <code>null</code>.
    900      */
    901     public static <T> T eq(T value) {
    902         reportMatcher(new Equals(value));
    903         if (value == null)
    904             return null;
    905         return (T) Primitives.defaultValue(value.getClass());
    906     }
    907 
    908     /**
    909      * Object argument that is reflection-equal to the given value with support for excluding
    910      * selected fields from a class.
    911      *
    912      * <p>
    913      * This matcher can be used when equals() is not implemented on compared objects.
    914      * Matcher uses java reflection API to compare fields of wanted and actual object.
    915      * </p>
    916      *
    917      * <p>
    918      * Works similarly to <code>EqualsBuilder.reflectionEquals(this, other, excludeFields)</code> from
    919      * apache commons library.
    920      * <p>
    921      * <b>Warning</b> The equality check is shallow!
    922      * </p>
    923      *
    924      * <p>
    925      * See examples in javadoc for {@link ArgumentMatchers} class
    926      * </p>
    927      *
    928      * @param value         the given value.
    929      * @param excludeFields fields to exclude, if field does not exist it is ignored.
    930      * @return <code>null</code>.
    931      */
    932     public static <T> T refEq(T value, String... excludeFields) {
    933         reportMatcher(new ReflectionEquals(value, excludeFields));
    934         return null;
    935     }
    936 
    937     /**
    938      * Object argument that is the same as the given value.
    939      *
    940      * <p>
    941      * See examples in javadoc for {@link ArgumentMatchers} class
    942      * </p>
    943      *
    944      * @param <T>   the type of the object, it is passed through to prevent casts.
    945      * @param value the given value.
    946      * @return <code>null</code>.
    947      */
    948     public static <T> T same(T value) {
    949         reportMatcher(new Same(value));
    950         if (value == null)
    951             return null;
    952         return (T) Primitives.defaultValue(value.getClass());
    953     }
    954 
    955     /**
    956      * <code>null</code> argument.
    957      *
    958      * <p>
    959      * See examples in javadoc for {@link ArgumentMatchers} class
    960      * </p>
    961      *
    962      * @return <code>null</code>.
    963      * @see #isNull(Class)
    964      * @see #isNotNull()
    965      * @see #isNotNull(Class)
    966      */
    967     public static <T> T isNull() {
    968         reportMatcher(Null.NULL);
    969         return null;
    970     }
    971 
    972     /**
    973      * <code>null</code> argument.
    974      *
    975      * <p>
    976      * The class argument is provided to avoid casting.
    977      * </p>
    978      *
    979      * <p>
    980      * See examples in javadoc for {@link ArgumentMatchers} class
    981      * </p>
    982      *
    983      * @param clazz Type to avoid casting
    984      * @return <code>null</code>.
    985      * @see #isNull()
    986      * @see #isNotNull()
    987      * @see #isNotNull(Class)
    988      * @deprecated With Java 8 this method will be removed in Mockito 3.0. This method is only used for generic
    989      * friendliness to avoid casting, this is not anymore needed in Java 8.
    990      */
    991     public static <T> T isNull(Class<T> clazz) {
    992         return isNull();
    993     }
    994 
    995     /**
    996      * Not <code>null</code> argument.
    997      *
    998      * <p>
    999      * Alias to {@link ArgumentMatchers#isNotNull()}
   1000      * </p>
   1001      *
   1002      * <p>
   1003      * See examples in javadoc for {@link ArgumentMatchers} class
   1004      * </p>
   1005      *
   1006      * @return <code>null</code>.
   1007      */
   1008     public static <T> T notNull() {
   1009         reportMatcher(NotNull.NOT_NULL);
   1010         return null;
   1011     }
   1012 
   1013     /**
   1014      * Not <code>null</code> argument, not necessary of the given class.
   1015      *
   1016      * <p>
   1017      * The class argument is provided to avoid casting.
   1018      *
   1019      * Alias to {@link ArgumentMatchers#isNotNull(Class)}
   1020      * <p>
   1021      *
   1022      * <p>
   1023      * See examples in javadoc for {@link ArgumentMatchers} class
   1024      * </p>
   1025      *
   1026      * @param clazz Type to avoid casting
   1027      * @return <code>null</code>.
   1028      * @see #isNotNull()
   1029      * @see #isNull()
   1030      * @see #isNull(Class)
   1031      * @deprecated With Java 8 this method will be removed in Mockito 3.0. This method is only used for generic
   1032      * friendliness to avoid casting, this is not anymore needed in Java 8.
   1033      */
   1034     public static <T> T notNull(Class<T> clazz) {
   1035         return notNull();
   1036     }
   1037 
   1038     /**
   1039      * Not <code>null</code> argument.
   1040      *
   1041      * <p>
   1042      * Alias to {@link ArgumentMatchers#notNull()}
   1043      * </p>
   1044      *
   1045      * <p>
   1046      * See examples in javadoc for {@link ArgumentMatchers} class
   1047      * </p>
   1048      *
   1049      * @return <code>null</code>.
   1050      * @see #isNotNull(Class)
   1051      * @see #isNull()
   1052      * @see #isNull(Class)
   1053      */
   1054     public static <T> T isNotNull() {
   1055         return notNull();
   1056     }
   1057 
   1058     /**
   1059      * Not <code>null</code> argument, not necessary of the given class.
   1060      *
   1061      * <p>
   1062      * The class argument is provided to avoid casting.
   1063      * Alias to {@link ArgumentMatchers#notNull(Class)}
   1064      * </p>
   1065      *
   1066      * <p>
   1067      * See examples in javadoc for {@link ArgumentMatchers} class
   1068      * </p>
   1069      *
   1070      * @param clazz Type to avoid casting
   1071      * @return <code>null</code>.
   1072      * @deprecated With Java 8 this method will be removed in Mockito 3.0. This method is only used for generic
   1073      * friendliness to avoid casting, this is not anymore needed in Java 8.
   1074      */
   1075     public static <T> T isNotNull(Class<T> clazz) {
   1076         return notNull(clazz);
   1077     }
   1078 
   1079 
   1080     /**
   1081      * Argument that is either <code>null</code> or of the given type.
   1082      *
   1083      * <p>
   1084      * See examples in javadoc for {@link ArgumentMatchers} class
   1085      * </p>
   1086      *
   1087      * @param clazz Type to avoid casting
   1088      * @return <code>null</code>.
   1089      */
   1090     public static <T> T nullable(Class<T> clazz) {
   1091         AdditionalMatchers.or(isNull(), isA(clazz));
   1092         return  (T) Primitives.defaultValue(clazz);
   1093     }
   1094 
   1095     /**
   1096      * <code>String</code> argument that contains the given substring.
   1097      * <p>
   1098      * See examples in javadoc for {@link ArgumentMatchers} class
   1099      *
   1100      * @param substring the substring.
   1101      * @return empty String ("").
   1102      */
   1103     public static String contains(String substring) {
   1104         reportMatcher(new Contains(substring));
   1105         return "";
   1106     }
   1107 
   1108     /**
   1109      * <code>String</code> argument that matches the given regular expression.
   1110      * <p>
   1111      * See examples in javadoc for {@link ArgumentMatchers} class
   1112      *
   1113      * @param regex the regular expression.
   1114      * @return empty String ("").
   1115      *
   1116      * @see AdditionalMatchers#not(boolean)
   1117      */
   1118     public static String matches(String regex) {
   1119         reportMatcher(new Matches(regex));
   1120         return "";
   1121     }
   1122 
   1123     /**
   1124      * <code>Pattern</code> argument that matches the given regular expression.
   1125      * <p>
   1126      * See examples in javadoc for {@link ArgumentMatchers} class
   1127      *
   1128      * @param pattern the regular expression pattern.
   1129      * @return empty String ("").
   1130      *
   1131      * @see AdditionalMatchers#not(boolean)
   1132      */
   1133     public static String matches(Pattern pattern) {
   1134         reportMatcher(new Matches(pattern));
   1135         return "";
   1136     }
   1137 
   1138     /**
   1139      * <code>String</code> argument that ends with the given suffix.
   1140      * <p>
   1141      * See examples in javadoc for {@link ArgumentMatchers} class
   1142      *
   1143      * @param suffix the suffix.
   1144      * @return empty String ("").
   1145      */
   1146     public static String endsWith(String suffix) {
   1147         reportMatcher(new EndsWith(suffix));
   1148         return "";
   1149     }
   1150 
   1151     /**
   1152      * <code>String</code> argument that starts with the given prefix.
   1153      * <p>
   1154      * See examples in javadoc for {@link ArgumentMatchers} class
   1155      *
   1156      * @param prefix the prefix.
   1157      * @return empty String ("").
   1158      */
   1159     public static String startsWith(String prefix) {
   1160         reportMatcher(new StartsWith(prefix));
   1161         return "";
   1162     }
   1163 
   1164     /**
   1165      * Allows creating custom argument matchers.
   1166      *
   1167      * <p>
   1168      * This API has changed in 2.1.0, please read {@link ArgumentMatcher} for rationale and migration guide.
   1169      * <b>NullPointerException</b> auto-unboxing caveat is described below.
   1170      * </p>
   1171      *
   1172      * <p>
   1173      * It is important to understand the use cases and available options for dealing with non-trivial arguments
   1174      * <b>before</b> implementing custom argument matchers. This way, you can select the best possible approach
   1175      * for given scenario and produce highest quality test (clean and maintainable).
   1176      * Please read the documentation for {@link ArgumentMatcher} to learn about approaches and see the examples.
   1177      * </p>
   1178      *
   1179      * <p>
   1180      * <b>NullPointerException</b> auto-unboxing caveat.
   1181      * In rare cases when matching primitive parameter types you <b>*must*</b> use relevant intThat(), floatThat(), etc. method.
   1182      * This way you will avoid <code>NullPointerException</code> during auto-unboxing.
   1183      * Due to how java works we don't really have a clean way of detecting this scenario and protecting the user from this problem.
   1184      * Hopefully, the javadoc describes the problem and solution well.
   1185      * If you have an idea how to fix the problem, let us know via the mailing list or the issue tracker.
   1186      * </p>
   1187      *
   1188      * <p>
   1189      * See examples in javadoc for {@link ArgumentMatcher} class
   1190      * </p>
   1191      *
   1192      * @param matcher decides whether argument matches
   1193      * @return <code>null</code>.
   1194      */
   1195     public static <T> T argThat(ArgumentMatcher<T> matcher) {
   1196         reportMatcher(matcher);
   1197         return null;
   1198     }
   1199 
   1200     /**
   1201      * Allows creating custom <code>char</code> argument matchers.
   1202      *
   1203      * Note that {@link #argThat} will not work with primitive <code>char</code> matchers due to <code>NullPointerException</code> auto-unboxing caveat.
   1204      * <p>
   1205      * See examples in javadoc for {@link ArgumentMatchers} class
   1206      *
   1207      * @param matcher decides whether argument matches
   1208      * @return <code>0</code>.
   1209      */
   1210     public static char charThat(ArgumentMatcher<Character> matcher) {
   1211         reportMatcher(matcher);
   1212         return 0;
   1213     }
   1214 
   1215     /**
   1216      * Allows creating custom <code>boolean</code> argument matchers.
   1217      *
   1218      * Note that {@link #argThat} will not work with primitive <code>boolean</code> matchers due to <code>NullPointerException</code> auto-unboxing caveat.
   1219      * <p>
   1220      * See examples in javadoc for {@link ArgumentMatchers} class
   1221      *
   1222      * @param matcher decides whether argument matches
   1223      * @return <code>false</code>.
   1224      */
   1225     public static boolean booleanThat(ArgumentMatcher<Boolean> matcher) {
   1226         reportMatcher(matcher);
   1227         return false;
   1228     }
   1229 
   1230     /**
   1231      * Allows creating custom <code>byte</code> argument matchers.
   1232      *
   1233      * Note that {@link #argThat} will not work with primitive <code>byte</code> matchers due to <code>NullPointerException</code> auto-unboxing caveat.
   1234      * <p>
   1235      * See examples in javadoc for {@link ArgumentMatchers} class
   1236      *
   1237      * @param matcher decides whether argument matches
   1238      * @return <code>0</code>.
   1239      */
   1240     public static byte byteThat(ArgumentMatcher<Byte> matcher) {
   1241         reportMatcher(matcher);
   1242         return 0;
   1243     }
   1244 
   1245     /**
   1246      * Allows creating custom <code>short</code> argument matchers.
   1247      *
   1248      * Note that {@link #argThat} will not work with primitive <code>short</code> matchers due to <code>NullPointerException</code> auto-unboxing caveat.
   1249      * <p>
   1250      * See examples in javadoc for {@link ArgumentMatchers} class
   1251      *
   1252      * @param matcher decides whether argument matches
   1253      * @return <code>0</code>.
   1254      */
   1255     public static short shortThat(ArgumentMatcher<Short> matcher) {
   1256         reportMatcher(matcher);
   1257         return 0;
   1258     }
   1259 
   1260     /**
   1261      * Allows creating custom <code>int</code> argument matchers.
   1262      *
   1263      * Note that {@link #argThat} will not work with primitive <code>int</code> matchers due to <code>NullPointerException</code> auto-unboxing caveat.
   1264      * <p>
   1265      * See examples in javadoc for {@link ArgumentMatchers} class
   1266      *
   1267      * @param matcher decides whether argument matches
   1268      * @return <code>0</code>.
   1269      */
   1270     public static int intThat(ArgumentMatcher<Integer> matcher) {
   1271         reportMatcher(matcher);
   1272         return 0;
   1273     }
   1274 
   1275     /**
   1276      * Allows creating custom <code>long</code> argument matchers.
   1277      *
   1278      * Note that {@link #argThat} will not work with primitive <code>long</code> matchers due to <code>NullPointerException</code> auto-unboxing caveat.
   1279      * <p>
   1280      * See examples in javadoc for {@link ArgumentMatchers} class
   1281      *
   1282      * @param matcher decides whether argument matches
   1283      * @return <code>0</code>.
   1284      */
   1285     public static long longThat(ArgumentMatcher<Long> matcher) {
   1286         reportMatcher(matcher);
   1287         return 0;
   1288     }
   1289 
   1290     /**
   1291      * Allows creating custom <code>float</code> argument matchers.
   1292      *
   1293      * Note that {@link #argThat} will not work with primitive <code>float</code> matchers due to <code>NullPointerException</code> auto-unboxing caveat.
   1294      * <p>
   1295      * See examples in javadoc for {@link ArgumentMatchers} class
   1296      *
   1297      * @param matcher decides whether argument matches
   1298      * @return <code>0</code>.
   1299      */
   1300     public static float floatThat(ArgumentMatcher<Float> matcher) {
   1301         reportMatcher(matcher);
   1302         return 0;
   1303     }
   1304 
   1305     /**
   1306      * Allows creating custom <code>double</code> argument matchers.
   1307      *
   1308      * Note that {@link #argThat} will not work with primitive <code>double</code> matchers due to <code>NullPointerException</code> auto-unboxing caveat.
   1309      * <p>
   1310      * See examples in javadoc for {@link ArgumentMatchers} class
   1311      *
   1312      * @param matcher decides whether argument matches
   1313      * @return <code>0</code>.
   1314      */
   1315     public static double doubleThat(ArgumentMatcher<Double> matcher) {
   1316         reportMatcher(matcher);
   1317         return 0;
   1318     }
   1319 
   1320     private static void reportMatcher(ArgumentMatcher<?> matcher) {
   1321         mockingProgress().getArgumentMatcherStorage().reportMatcher(matcher);
   1322     }
   1323 }
   1324