/* | |
* Copyright 2001-2009 OFFIS, Tammo Freese | |
* | |
* Licensed under the Apache License, Version 2.0 (the "License"); | |
* you may not use this file except in compliance with the License. | |
* You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, software | |
* distributed under the License is distributed on an "AS IS" BASIS, | |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
* See the License for the specific language governing permissions and | |
* limitations under the License. | |
*/ | |
package org.easymock; | |
import java.io.Serializable; | |
import org.easymock.internal.ArgumentToString; | |
/** | |
* A convenience implementation of {@link ArgumentsMatcher}. A subclass that | |
* does not redefine any method will behave like | |
* {@link MockControl#EQUALS_MATCHER}. | |
* | |
* @deprecated Since EasyMock 2.0, <code>ArgumentsMatcher</code>s are only supported | |
* for the legacy <code>MockControl</code>. For mock objects generated by the methods | |
* on <code>EasyMock</code>, there are per-argument matchers available. For more | |
* information, see the EasyMock documentation. | |
*/ | |
@Deprecated | |
public abstract class AbstractMatcher implements ArgumentsMatcher, Serializable { | |
private static final long serialVersionUID = -5463061331694985383L; | |
/** | |
* Checks whether an expected argument matches an actual argument; the method | |
* is used by | |
* {@link AbstractMatcher#matches(Object[], Object[])}. The arguments | |
* provided to this method are always not <code>null</code>. | |
* | |
* @param expected | |
* the expected argument. | |
* @param actual | |
* the actual argument. | |
* @return true if the arguments match, false otherwise. | |
*/ | |
protected boolean argumentMatches(Object expected, Object actual) { | |
return expected.equals(actual); | |
} | |
/** | |
* Converts an argument to a String, used by | |
* {@link AbstractMatcher#toString(Object[])}. | |
* | |
* @param argument | |
* the argument to convert to a String. | |
* @return a <code>String</code> representation of the argument. | |
*/ | |
protected String argumentToString(Object argument) { | |
StringBuffer result = new StringBuffer(); | |
ArgumentToString.appendArgument(argument, result); | |
return result.toString(); | |
} | |
/** | |
* Checks whether an expected argument array matches an actual argument array. | |
* This convenience implementation uses | |
* <code>argumentMatches(Object, Object)</code> to check whether arguments | |
* pairs match. If all the arguments match, true is returned, otherwise | |
* false. In two cases, <code>argumentMatches(Object, Object)</code> is | |
* not called: If both argument arrays are null, they match; if one and only | |
* one is null, they do not match. | |
* | |
* @param expected | |
* the expected arguments. | |
* @param actual | |
* the actual arguments. | |
* @return true if the arguments match, false otherwise. | |
*/ | |
public boolean matches(Object[] expected, Object[] actual) { | |
if (expected == actual) { | |
return true; | |
} | |
if (expected == null || actual == null) { | |
return false; | |
} | |
if (expected.length != actual.length) { | |
return false; | |
} | |
for (int i = 0; i < expected.length; i++) { | |
Object expectedObject = expected[i]; | |
Object actualObject = actual[i]; | |
if (expectedObject == null && actualObject == null) { | |
continue; | |
} | |
if (expectedObject == null && actualObject != null) { | |
return false; | |
} | |
if (expectedObject != null && actualObject == null) { | |
return false; | |
} | |
if (!argumentMatches(expectedObject, actualObject)) { | |
return false; | |
} | |
} | |
return true; | |
} | |
/** | |
* Returns a string representation of the matcher. This convenience | |
* implementation calls {@link AbstractMatcher#argumentToString(Object)} | |
* for every argument in the given array and returns the string representations | |
* of the arguments separated by commas. | |
* | |
* @param arguments | |
* the arguments to be used in the string representation. | |
* @return a string representation of the matcher. | |
*/ | |
public String toString(Object[] arguments) { | |
if (arguments == null) | |
arguments = new Object[0]; | |
StringBuilder result = new StringBuilder(); | |
for (int i = 0; i < arguments.length; i++) { | |
if (i > 0) { | |
result.append(", "); | |
} | |
result.append(argumentToString(arguments[i])); | |
} | |
return result.toString(); | |
} | |
} |