package org.junit.tests.experimental.theories.extendingwithstubs; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class MethodCall { private final Method method; private final Object[] args; public MethodCall(Method method, Object... args) { this.method = method; this.args = args; } @Override public boolean equals(Object obj) { MethodCall call = (MethodCall) obj; return call.method.equals(method) && Arrays.deepEquals(call.args, args); } @Override public int hashCode() { return 1; } public Class<?> getReturnType() { return method.getReturnType(); } @Override public String toString() { return String.format("%s(%s)", method.getName(), argListString()); } private String argListString() { if (args == null) { return null; } return argList().toString().substring(1, argList().toString().length() - 1); } private List<Object> argList() { ArrayList<Object> list = new ArrayList<Object>(); for (Object arg : args) { list.add(new StringableObject(arg)); } return list; } public Object stringableObject(Object arg) { return new StringableObject(arg).stringableObject(); } }