BaseStubbing.java revision e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7
1/*
2 * Copyright (c) 2007 Mockito contributors
3 * This program is made available under the terms of the MIT License.
4 */
5package org.mockito.internal.stubbing;
6
7import org.mockito.internal.stubbing.answers.CallsRealMethods;
8import org.mockito.internal.stubbing.answers.Returns;
9import org.mockito.internal.stubbing.answers.ThrowsException;
10import org.mockito.internal.stubbing.answers.ThrowsExceptionClass;
11import org.mockito.stubbing.DeprecatedOngoingStubbing;
12import org.mockito.stubbing.OngoingStubbing;
13
14public abstract class BaseStubbing<T> implements OngoingStubbing<T>, DeprecatedOngoingStubbing<T> {
15    public OngoingStubbing<T> thenReturn(T value) {
16        return thenAnswer(new Returns(value));
17    }
18
19    public OngoingStubbing<T> thenReturn(T value, T... values) {
20        OngoingStubbing<T> stubbing = thenReturn(value);
21        if (values == null) {
22            return stubbing.thenReturn(null);
23        }
24        for (T v: values) {
25            stubbing = stubbing.thenReturn(v);
26        }
27        return stubbing;
28    }
29
30    private OngoingStubbing<T> thenThrow(Throwable throwable) {
31        return thenAnswer(new ThrowsException(throwable));
32    }
33
34    public OngoingStubbing<T> thenThrow(Throwable... throwables) {
35        if (throwables == null) {
36            thenThrow((Throwable) null);
37        }
38        OngoingStubbing<T> stubbing = null;
39        for (Throwable t: throwables) {
40            if (stubbing == null) {
41                stubbing = thenThrow(t);
42            } else {
43                stubbing = stubbing.thenThrow(t);
44            }
45        }
46        return stubbing;
47    }
48
49    private OngoingStubbing<T> thenThrow(Class<? extends Throwable> throwableClass) {
50        return thenAnswer(new ThrowsExceptionClass(throwableClass));
51    }
52
53    public OngoingStubbing<T> thenThrow(Class<? extends Throwable>... throwableClasses) {
54        if (throwableClasses == null) {
55            thenThrow((Throwable) null);
56        }
57        OngoingStubbing<T> stubbing = null;
58        for (Class<? extends Throwable> t: throwableClasses) {
59            if (stubbing == null) {
60                stubbing = thenThrow(t);
61            } else {
62                stubbing = stubbing.thenThrow(t);
63            }
64        }
65        return stubbing;
66    }
67
68    public OngoingStubbing<T> thenCallRealMethod() {
69        return thenAnswer(new CallsRealMethods());
70    }
71
72    public DeprecatedOngoingStubbing<T> toReturn(T value) {
73        return toAnswer(new Returns(value));
74    }
75
76    public DeprecatedOngoingStubbing<T> toThrow(Throwable throwable) {
77        return toAnswer(new ThrowsException(throwable));
78    }
79}
80