1e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson/*
2e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Copyright (c) 2007 Mockito contributors
3e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * This program is made available under the terms of the MIT License.
4e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */
5e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
6e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpackage org.mockito.verification;
7e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
8e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.Mockito;
9e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
10e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson/**
11e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * VerificationWithTimeout is a {@link VerificationMode} that allows combining existing verification modes with 'timeout'. E.g:
12e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *
13e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <pre class="code"><code class="java">
14e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * verify(mock, timeout(100).times(5)).foo();
15e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *
16e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * verify(mock, timeout(100).never()).bar();
17e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *
18e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * verify(mock, timeout(200).atLeastOnce()).baz();
19e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * </code></pre>
20e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *
21e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p>
22e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * See examples in javadoc for {@link Mockito#verify(Object, VerificationMode)}
23e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */
24e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpublic interface VerificationWithTimeout extends VerificationMode {
25e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
26e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    /**
27e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * Allows verifying exact number of invocations within given timeout
28e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * <pre class="code"><code class="java">
29e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     *   verify(mock, timeout(100).times(2)).someMethod("some arg");
30e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * </code></pre>
31e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     *
32e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * See examples in javadoc for {@link Mockito} class
33e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     *
34e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * @param wantedNumberOfInvocations wanted number of invocations
35e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     *
36e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * @return verification mode
37e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     */
38e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public VerificationMode times(int wantedNumberOfInvocations);
39e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
40e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    /**
41e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * Alias to times(0), see {@link #times(int)}
42e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * <p>
43e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * Verifies that interaction did not happen within given timeout. E.g:
44e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * <pre class="code"><code class="java">
45e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     *   verify(mock, timeout(100).never()).someMethod();
46e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * </code></pre>
47e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     *
48e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * <p>
49e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * If you want to verify there were NO interactions with the mock
50e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * check out {@link Mockito#verifyNoMoreInteractions(Object...)}
51e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * <p>
52e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * See examples in javadoc for {@link Mockito} class
53e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     *
54e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * @return verification mode
55e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     */
56e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public VerificationMode never();
57e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
58e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    /**
59e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * Allows at-least-once verification withing given timeout. E.g:
60e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * <pre class="code"><code class="java">
61e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     *   verify(mock, timeout(100).atLeastOnce()).someMethod("some arg");
62e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * </code></pre>
63e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * Alias to atLeast(1)
64e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * <p>
65e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * See examples in javadoc for {@link Mockito} class
66e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     *
67e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * @return verification mode
68e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     */
69e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public VerificationMode atLeastOnce();
70e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
71e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    /**
72e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * Allows at-least-x verification withing given timeout. E.g:
73e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * <pre class="code"><code class="java">
74e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     *   verify(mock, timeout(100).atLeast(3)).someMethod("some arg");
75e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * </code></pre>
76e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     *
77e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * See examples in javadoc for {@link Mockito} class
78e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     *
79e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * @param minNumberOfInvocations minimum number of invocations
80e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     *
81e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * @return verification mode
82e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     */
83e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public VerificationMode atLeast(int minNumberOfInvocations);
84e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
85e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    /**
86e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * @deprecated
87e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     *
88e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * <b>Deprecated</b>
89e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * validation with timeout combined with atMost simply does not make sense...
90e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * The test would have passed immediately in the concurrent environment
91e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * <p>
92e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * To avoid compilation erros upon upgrade the method is deprecated and it throws a "friendly reminder" exception.
93e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * <p>
94e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * In future release we will remove timeout(x).atMost(y) from the API.
95e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * <p>
96e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * Do you want to find out more? See <a href="http://code.google.com/p/mockito/issues/detail?id=235">issue 235</a>
97e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     *
98e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * @return verification mode
99e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     */
100e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    @Deprecated
101e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public VerificationMode atMost(int maxNumberOfInvocations);
102e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
103e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    /**
104e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * Allows checking if given method was the only one invoked. E.g:
105e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * <pre class="code"><code class="java">
106e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     *   verify(mock, only()).someMethod();
107e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     *   //above is a shorthand for following 2 lines of code:
108e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     *   verify(mock).someMethod();
109e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     *   verifyNoMoreInvocations(mock);
110e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * </code></pre>
111e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     *
112e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * <p>
113e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * See also {@link Mockito#verifyNoMoreInteractions(Object...)}
114e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * <p>
115e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * See examples in javadoc for {@link Mockito} class
116e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     *
117e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * @return verification mode
118e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     */
119e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public VerificationMode only();
120e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson}