/
InvocationBuilder.java
165 lines (141 loc) · 4.61 KB
/
InvocationBuilder.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
/*
* Copyright (c) 2007 Mockito contributors
* This program is made available under the terms of the MIT License.
*/
package org.mockito.internal.invocation;
import static java.util.Arrays.asList;
import static org.mockito.internal.invocation.InterceptedInvocation.NO_OP;
import java.lang.reflect.Method;
import java.util.LinkedList;
import java.util.List;
import org.mockito.Mockito;
import org.mockito.internal.debugging.LocationImpl;
import org.mockito.internal.invocation.mockref.MockReference;
import org.mockito.internal.invocation.mockref.MockStrongReference;
import org.mockito.invocation.Invocation;
import org.mockito.invocation.Location;
import org.mockitousage.IMethods;
/**
* Build an invocation.
*/
@SuppressWarnings("unchecked")
public class InvocationBuilder {
private String methodName = "simpleMethod";
private int sequenceNumber = 0;
private Object[] args = new Object[] {};
private Object mock = Mockito.mock(IMethods.class);
private Class<?> mockClass = IMethods.class;
private Method method;
private boolean verified;
private List<Class<?>> argTypes;
private Location location;
/**
* Build the invocation
* <p>
* If the method was not specified, use IMethods methods.
*
* @return invocation
*/
public Invocation toInvocation() {
if (method == null) {
if (argTypes == null) {
argTypes = new LinkedList<Class<?>>();
for (Object arg : args) {
if (arg == null) {
argTypes.add(Object.class);
} else {
argTypes.add(arg.getClass());
}
}
}
try {
method =
mockClass.getMethod(
methodName, argTypes.toArray(new Class[argTypes.size()]));
} catch (Exception e) {
throw new RuntimeException(
"builder only creates invocations of IMethods interface", e);
}
}
Invocation i =
createInvocation(
new MockStrongReference<Object>(mock, false),
new SerializableMethod(method),
args,
NO_OP,
location == null ? new LocationImpl() : location,
1);
if (verified) {
i.markVerified();
}
return i;
}
protected Invocation createInvocation(
MockReference<Object> mockRef,
MockitoMethod mockitoMethod,
Object[] arguments,
RealMethod realMethod,
Location location,
int sequenceNumber) {
return new InterceptedInvocation(
mockRef, mockitoMethod, arguments, realMethod, location, sequenceNumber);
}
public InvocationBuilder method(String methodName) {
this.methodName = methodName;
return this;
}
public InvocationBuilder seq(int sequenceNumber) {
this.sequenceNumber = sequenceNumber;
return this;
}
public InvocationBuilder args(Object... args) {
this.args = args;
return this;
}
public InvocationBuilder arg(Object o) {
this.args = new Object[] {o};
return this;
}
public InvocationBuilder mock(Object mock) {
this.mock = mock;
return this;
}
public InvocationBuilder mockClass(Class<?> mockClass) {
this.mockClass = mockClass;
this.mock = mock(mockClass);
return this;
}
public InvocationBuilder method(Method method) {
this.method = method;
return this;
}
public InvocationBuilder verified() {
this.verified = true;
return this;
}
public InvocationMatcher toInvocationMatcher() {
return new InvocationMatcher(toInvocation());
}
public InvocationBuilder simpleMethod() {
return this.method("simpleMethod");
}
public InvocationBuilder differentMethod() {
return this.method("differentMethod");
}
public InvocationBuilder argTypes(Class<?>... argTypes) {
this.argTypes = asList(argTypes);
return this;
}
public InvocationBuilder location(final String location) {
this.location =
new Location() {
public String toString() {
return location;
}
public String getSourceFile() {
return "SomeClass";
}
};
return this;
}
}