1/*
2 * Copyright (c) 2007 Mockito contributors
3 * This program is made available under the terms of the MIT License.
4 */
5package org.mockito.verification;
6
7import org.mockito.exceptions.Reporter;
8import org.mockito.exceptions.misusing.FriendlyReminderException;
9import org.mockito.internal.verification.VerificationModeFactory;
10import org.mockito.internal.verification.VerificationWithTimeoutImpl;
11import org.mockito.internal.verification.api.VerificationData;
12
13/**
14 * See the javadoc for {@link VerificationWithTimeout}
15 * <p>
16 * Typically, you won't use this class explicitly. Instead use timeout() method on Mockito class.
17 * See javadoc for {@link VerificationWithTimeout}
18 */
19public class Timeout implements VerificationWithTimeout {
20
21    VerificationWithTimeoutImpl impl;
22
23    /**
24     * See the javadoc for {@link VerificationWithTimeout}
25     * <p>
26     * Typically, you won't use this class explicitly. Instead use timeout() method on Mockito class.
27     * See javadoc for {@link VerificationWithTimeout}
28     */
29    public Timeout(int millis, VerificationMode delegate) {
30        this(10, millis, delegate);
31    }
32
33    /**
34     * See the javadoc for {@link VerificationWithTimeout}
35     */
36    Timeout(int treshhold, int millis, VerificationMode delegate) {
37        this.impl = new VerificationWithTimeoutImpl(treshhold, millis, delegate);
38    }
39
40    /**
41     * See the javadoc for {@link VerificationWithTimeout}
42     */
43    public void verify(VerificationData data) {
44        impl.verify(data);
45    }
46
47    /**
48     * See the javadoc for {@link VerificationWithTimeout}
49     */
50    public VerificationMode atLeast(int minNumberOfInvocations) {
51        return new Timeout(impl.getTreshhold(), impl.getTimeout(), VerificationModeFactory.atLeast(minNumberOfInvocations));
52    }
53
54    /**
55     * See the javadoc for {@link VerificationWithTimeout}
56     */
57    public VerificationMode atLeastOnce() {
58        return new Timeout(impl.getTreshhold(), impl.getTimeout(), VerificationModeFactory.atLeastOnce());
59    }
60
61    /**
62     * See the javadoc for {@link VerificationWithTimeout}
63     */
64    public VerificationMode atMost(int maxNumberOfInvocations) {
65        new Reporter().atMostShouldNotBeUsedWithTimeout();
66        return null;
67    }
68
69    /**
70     * See the javadoc for {@link VerificationWithTimeout}
71     */
72    public VerificationMode never() {
73        return new Timeout(impl.getTreshhold(), impl.getTimeout(), VerificationModeFactory.times(0));
74    }
75
76    /**
77     * See the javadoc for {@link VerificationWithTimeout}
78     */
79    public VerificationMode only() {
80        return new Timeout(impl.getTreshhold(), impl.getTimeout(), VerificationModeFactory.only());
81    }
82
83    /**
84     * See the javadoc for {@link VerificationWithTimeout}
85     */
86    public VerificationMode times(int wantedNumberOfInvocations) {
87        return new Timeout(impl.getTreshhold(), impl.getTimeout(), VerificationModeFactory.times(wantedNumberOfInvocations));
88    }
89}