1 |
| |
2 |
| |
3 |
| |
4 |
| |
5 |
| package org.easymock.internal; |
6 |
| |
7 |
| import java.lang.reflect.Method; |
8 |
| |
9 |
| import org.easymock.ArgumentsMatcher; |
10 |
| |
11 |
| public class MethodCall { |
12 |
| private final Method method; |
13 |
| |
14 |
| private final Object[] arguments; |
15 |
| |
16 |
1180
| public MethodCall(Method method, Object[] args) {
|
17 |
1180
| this.method = method;
|
18 |
1180
| this.arguments = expandVarArgs(method.isVarArgs(), args);
|
19 |
| } |
20 |
| |
21 |
1180
| private static Object[] expandVarArgs(final boolean isVarArgs,
|
22 |
| final Object[] args) { |
23 |
1180
| if (!isVarArgs || isVarArgs && args[args.length - 1] != null && !args[args.length - 1].getClass().isArray()) {
|
24 |
1140
| return args;
|
25 |
| } |
26 |
40
| Object[] varArgs = ArrayMatcher
|
27 |
| .createObjectArray(args[args.length - 1]); |
28 |
40
| final int nonVarArgsCount = args.length - 1;
|
29 |
40
| final int varArgsCount = varArgs.length;
|
30 |
40
| Object[] newArgs = new Object[nonVarArgsCount + varArgsCount];
|
31 |
40
| System.arraycopy(args, 0, newArgs, 0, nonVarArgsCount);
|
32 |
40
| System.arraycopy(varArgs, 0, newArgs, nonVarArgsCount, varArgsCount);
|
33 |
40
| return newArgs;
|
34 |
| } |
35 |
| |
36 |
1042
| public Method getMethod() {
|
37 |
1042
| return method;
|
38 |
| } |
39 |
| |
40 |
477
| public Object[] getArguments() {
|
41 |
477
| return arguments;
|
42 |
| } |
43 |
| |
44 |
97
| public boolean equals(Object o) {
|
45 |
97
| if (o == null || !o.getClass().equals(this.getClass()))
|
46 |
2
| return false;
|
47 |
| |
48 |
95
| MethodCall other = (MethodCall) o;
|
49 |
95
| return this.method.equals(other.method)
|
50 |
| && this.equalArguments(other.arguments); |
51 |
| } |
52 |
| |
53 |
2
| public int hashCode() {
|
54 |
2
| throw new UnsupportedOperationException("hashCode() is not implemented");
|
55 |
| } |
56 |
| |
57 |
83
| private boolean equalArguments(Object[] arguments) {
|
58 |
83
| if (this.arguments == null && arguments == null) {
|
59 |
7
| return true;
|
60 |
| } |
61 |
| |
62 |
76
| if (this.arguments.length != arguments.length) {
|
63 |
11
| return false;
|
64 |
| } |
65 |
65
| for (int i = 0; i < this.arguments.length; i++) {
|
66 |
66
| Object myArgument = this.arguments[i];
|
67 |
66
| Object otherArgument = arguments[i];
|
68 |
66
| if (method.getParameterTypes()[i].isPrimitive()) {
|
69 |
43
| if (!myArgument.equals(otherArgument)) {
|
70 |
24
| return false;
|
71 |
| } |
72 |
| } else { |
73 |
23
| if (myArgument != otherArgument) {
|
74 |
21
| return false;
|
75 |
| } |
76 |
| } |
77 |
| } |
78 |
20
| return true;
|
79 |
| } |
80 |
| |
81 |
397
| public boolean matches(MethodCall actual, ArgumentsMatcher matcher) {
|
82 |
397
| return this.method.equals(actual.method)
|
83 |
| && matcher.matches(this.arguments, actual.arguments); |
84 |
| } |
85 |
| |
86 |
157
| public String toString(ArgumentsMatcher matcher) {
|
87 |
157
| return method.getName() + "(" + matcher.toString(arguments) + ")";
|
88 |
| } |
89 |
| } |