|
EasyMock example source code file (Invocation.java)
The EasyMock Invocation.java source code
/*
* Copyright (c) 2001-2007 OFFIS, Tammo Freese.
* This program is made available under the terms of the MIT License.
*/
package org.easymock.internal;
import static java.lang.Character.*;
import java.lang.reflect.Method;
import org.easymock.ArgumentsMatcher;
import org.easymock.internal.matchers.ArrayEquals;
public class Invocation {
private final Object mock;
private final Method method;
private final Object[] arguments;
public Invocation(Object mock, Method method, Object[] args) {
this.mock = mock;
this.method = method;
this.arguments = expandVarArgs(method.isVarArgs(), args);
}
private static Object[] expandVarArgs(final boolean isVarArgs,
final Object[] args) {
if (!isVarArgs || isVarArgs && args[args.length - 1] != null
&& !args[args.length - 1].getClass().isArray()) {
return args == null ? new Object[0] : args;
}
Object[] varArgs = ArrayEquals.createObjectArray(args[args.length - 1]);
final int nonVarArgsCount = args.length - 1;
final int varArgsCount = varArgs.length;
Object[] newArgs = new Object[nonVarArgsCount + varArgsCount];
System.arraycopy(args, 0, newArgs, 0, nonVarArgsCount);
System.arraycopy(varArgs, 0, newArgs, nonVarArgsCount, varArgsCount);
return newArgs;
}
public Object getMock() {
return mock;
}
public Method getMethod() {
return method;
}
public Object[] getArguments() {
return arguments;
}
public boolean equals(Object o) {
if (o == null || !o.getClass().equals(this.getClass()))
return false;
Invocation other = (Invocation) o;
return this.mock.equals(other.mock) && this.method.equals(other.method)
&& this.equalArguments(other.arguments);
}
public int hashCode() {
throw new UnsupportedOperationException("hashCode() is not implemented");
}
private boolean equalArguments(Object[] arguments) {
if (this.arguments.length != arguments.length) {
return false;
}
for (int i = 0; i < this.arguments.length; i++) {
Object myArgument = this.arguments[i];
Object otherArgument = arguments[i];
if (isPrimitiveParameter(i)) {
if (!myArgument.equals(otherArgument)) {
return false;
}
} else {
if (myArgument != otherArgument) {
return false;
}
}
}
return true;
}
private boolean isPrimitiveParameter(int parameterPosition) {
Class<?>[] parameterTypes = method.getParameterTypes();
if (method.isVarArgs()) {
parameterPosition = Math.min(parameterPosition,
parameterTypes.length - 1);
}
return parameterTypes[parameterPosition].isPrimitive();
}
public boolean matches(Invocation actual, ArgumentsMatcher matcher) {
return this.mock.equals(actual.mock)
&& this.method.equals(actual.method)
&& matcher.matches(this.arguments, actual.arguments);
}
public String toString(ArgumentsMatcher matcher) {
return getMockAndMethodName() + "(" + matcher.toString(arguments) + ")";
}
public String getMockAndMethodName() {
String mockName = mock.toString();
String methodName = method.getName();
if (toStringIsDefined(mock) && isJavaIdentifier(mockName)) {
return mockName + "." + methodName;
} else {
return methodName;
}
}
private boolean toStringIsDefined(Object o) {
try {
o.getClass().getDeclaredMethod("toString", (Class[]) null)
.getModifiers();
return true;
} catch (SecurityException ignored) {
// ///CLOVER:OFF
return false;
// ///CLOVER:ON
} catch (NoSuchMethodException shouldNeverHappen) {
// ///CLOVER:OFF
throw new RuntimeException("The toString() method could not be found!");
// ///CLOVER:ON
}
}
public static boolean isJavaIdentifier(String mockName) {
if (mockName.length() == 0 || mockName.indexOf(' ') > -1
|| !Character.isJavaIdentifierStart(mockName.charAt(0))) {
return false;
}
for (char c : mockName.substring(1).toCharArray()) {
if (!isJavaIdentifierPart(c)) {
return false;
}
}
return true;
}
}
Other EasyMock examples (source code examples)Here is a short list of links related to this EasyMock Invocation.java source code file: |
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.