147d431f63a66505a645f282416659a9758a91f1cBrett Chabot/* 247d431f63a66505a645f282416659a9758a91f1cBrett Chabot * Copyright 2001-2009 OFFIS, Tammo Freese 347d431f63a66505a645f282416659a9758a91f1cBrett Chabot * 447d431f63a66505a645f282416659a9758a91f1cBrett Chabot * Licensed under the Apache License, Version 2.0 (the "License"); 547d431f63a66505a645f282416659a9758a91f1cBrett Chabot * you may not use this file except in compliance with the License. 647d431f63a66505a645f282416659a9758a91f1cBrett Chabot * You may obtain a copy of the License at 747d431f63a66505a645f282416659a9758a91f1cBrett Chabot * 847d431f63a66505a645f282416659a9758a91f1cBrett Chabot * http://www.apache.org/licenses/LICENSE-2.0 947d431f63a66505a645f282416659a9758a91f1cBrett Chabot * 1047d431f63a66505a645f282416659a9758a91f1cBrett Chabot * Unless required by applicable law or agreed to in writing, software 1147d431f63a66505a645f282416659a9758a91f1cBrett Chabot * distributed under the License is distributed on an "AS IS" BASIS, 1247d431f63a66505a645f282416659a9758a91f1cBrett Chabot * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1347d431f63a66505a645f282416659a9758a91f1cBrett Chabot * See the License for the specific language governing permissions and 1447d431f63a66505a645f282416659a9758a91f1cBrett Chabot * limitations under the License. 1547d431f63a66505a645f282416659a9758a91f1cBrett Chabot */ 1647d431f63a66505a645f282416659a9758a91f1cBrett Chabotpackage org.easymock; 1747d431f63a66505a645f282416659a9758a91f1cBrett Chabot 1847d431f63a66505a645f282416659a9758a91f1cBrett Chabotimport java.io.Serializable; 1947d431f63a66505a645f282416659a9758a91f1cBrett Chabot 2047d431f63a66505a645f282416659a9758a91f1cBrett Chabotimport org.easymock.internal.ArgumentToString; 2147d431f63a66505a645f282416659a9758a91f1cBrett Chabot 2247d431f63a66505a645f282416659a9758a91f1cBrett Chabot/** 2347d431f63a66505a645f282416659a9758a91f1cBrett Chabot * A convenience implementation of {@link ArgumentsMatcher}. A subclass that 2447d431f63a66505a645f282416659a9758a91f1cBrett Chabot * does not redefine any method will behave like 2547d431f63a66505a645f282416659a9758a91f1cBrett Chabot * {@link MockControl#EQUALS_MATCHER}. 2647d431f63a66505a645f282416659a9758a91f1cBrett Chabot * 2747d431f63a66505a645f282416659a9758a91f1cBrett Chabot * @deprecated Since EasyMock 2.0, <code>ArgumentsMatcher</code>s are only supported 2847d431f63a66505a645f282416659a9758a91f1cBrett Chabot * for the legacy <code>MockControl</code>. For mock objects generated by the methods 2947d431f63a66505a645f282416659a9758a91f1cBrett Chabot * on <code>EasyMock</code>, there are per-argument matchers available. For more 3047d431f63a66505a645f282416659a9758a91f1cBrett Chabot * information, see the EasyMock documentation. 3147d431f63a66505a645f282416659a9758a91f1cBrett Chabot */ 3247d431f63a66505a645f282416659a9758a91f1cBrett Chabot@Deprecated 3347d431f63a66505a645f282416659a9758a91f1cBrett Chabotpublic abstract class AbstractMatcher implements ArgumentsMatcher, Serializable { 3447d431f63a66505a645f282416659a9758a91f1cBrett Chabot 3547d431f63a66505a645f282416659a9758a91f1cBrett Chabot private static final long serialVersionUID = -5463061331694985383L; 3647d431f63a66505a645f282416659a9758a91f1cBrett Chabot 3747d431f63a66505a645f282416659a9758a91f1cBrett Chabot /** 3847d431f63a66505a645f282416659a9758a91f1cBrett Chabot * Checks whether an expected argument matches an actual argument; the method 3947d431f63a66505a645f282416659a9758a91f1cBrett Chabot * is used by 4047d431f63a66505a645f282416659a9758a91f1cBrett Chabot * {@link AbstractMatcher#matches(Object[], Object[])}. The arguments 4147d431f63a66505a645f282416659a9758a91f1cBrett Chabot * provided to this method are always not <code>null</code>. 4247d431f63a66505a645f282416659a9758a91f1cBrett Chabot * 4347d431f63a66505a645f282416659a9758a91f1cBrett Chabot * @param expected 4447d431f63a66505a645f282416659a9758a91f1cBrett Chabot * the expected argument. 4547d431f63a66505a645f282416659a9758a91f1cBrett Chabot * @param actual 4647d431f63a66505a645f282416659a9758a91f1cBrett Chabot * the actual argument. 4747d431f63a66505a645f282416659a9758a91f1cBrett Chabot * @return true if the arguments match, false otherwise. 4847d431f63a66505a645f282416659a9758a91f1cBrett Chabot */ 4947d431f63a66505a645f282416659a9758a91f1cBrett Chabot protected boolean argumentMatches(Object expected, Object actual) { 5047d431f63a66505a645f282416659a9758a91f1cBrett Chabot return expected.equals(actual); 5147d431f63a66505a645f282416659a9758a91f1cBrett Chabot } 5247d431f63a66505a645f282416659a9758a91f1cBrett Chabot 5347d431f63a66505a645f282416659a9758a91f1cBrett Chabot /** 5447d431f63a66505a645f282416659a9758a91f1cBrett Chabot * Converts an argument to a String, used by 5547d431f63a66505a645f282416659a9758a91f1cBrett Chabot * {@link AbstractMatcher#toString(Object[])}. 5647d431f63a66505a645f282416659a9758a91f1cBrett Chabot * 5747d431f63a66505a645f282416659a9758a91f1cBrett Chabot * @param argument 5847d431f63a66505a645f282416659a9758a91f1cBrett Chabot * the argument to convert to a String. 5947d431f63a66505a645f282416659a9758a91f1cBrett Chabot * @return a <code>String</code> representation of the argument. 6047d431f63a66505a645f282416659a9758a91f1cBrett Chabot */ 6147d431f63a66505a645f282416659a9758a91f1cBrett Chabot protected String argumentToString(Object argument) { 6247d431f63a66505a645f282416659a9758a91f1cBrett Chabot StringBuffer result = new StringBuffer(); 6347d431f63a66505a645f282416659a9758a91f1cBrett Chabot ArgumentToString.appendArgument(argument, result); 6447d431f63a66505a645f282416659a9758a91f1cBrett Chabot return result.toString(); 6547d431f63a66505a645f282416659a9758a91f1cBrett Chabot } 6647d431f63a66505a645f282416659a9758a91f1cBrett Chabot 6747d431f63a66505a645f282416659a9758a91f1cBrett Chabot /** 6847d431f63a66505a645f282416659a9758a91f1cBrett Chabot * Checks whether an expected argument array matches an actual argument array. 6947d431f63a66505a645f282416659a9758a91f1cBrett Chabot * This convenience implementation uses 7047d431f63a66505a645f282416659a9758a91f1cBrett Chabot * <code>argumentMatches(Object, Object)</code> to check whether arguments 7147d431f63a66505a645f282416659a9758a91f1cBrett Chabot * pairs match. If all the arguments match, true is returned, otherwise 7247d431f63a66505a645f282416659a9758a91f1cBrett Chabot * false. In two cases, <code>argumentMatches(Object, Object)</code> is 7347d431f63a66505a645f282416659a9758a91f1cBrett Chabot * not called: If both argument arrays are null, they match; if one and only 7447d431f63a66505a645f282416659a9758a91f1cBrett Chabot * one is null, they do not match. 7547d431f63a66505a645f282416659a9758a91f1cBrett Chabot * 7647d431f63a66505a645f282416659a9758a91f1cBrett Chabot * @param expected 7747d431f63a66505a645f282416659a9758a91f1cBrett Chabot * the expected arguments. 7847d431f63a66505a645f282416659a9758a91f1cBrett Chabot * @param actual 7947d431f63a66505a645f282416659a9758a91f1cBrett Chabot * the actual arguments. 8047d431f63a66505a645f282416659a9758a91f1cBrett Chabot * @return true if the arguments match, false otherwise. 8147d431f63a66505a645f282416659a9758a91f1cBrett Chabot */ 8247d431f63a66505a645f282416659a9758a91f1cBrett Chabot public boolean matches(Object[] expected, Object[] actual) { 8347d431f63a66505a645f282416659a9758a91f1cBrett Chabot if (expected == actual) { 8447d431f63a66505a645f282416659a9758a91f1cBrett Chabot return true; 8547d431f63a66505a645f282416659a9758a91f1cBrett Chabot } 8647d431f63a66505a645f282416659a9758a91f1cBrett Chabot if (expected == null || actual == null) { 8747d431f63a66505a645f282416659a9758a91f1cBrett Chabot return false; 8847d431f63a66505a645f282416659a9758a91f1cBrett Chabot } 8947d431f63a66505a645f282416659a9758a91f1cBrett Chabot if (expected.length != actual.length) { 9047d431f63a66505a645f282416659a9758a91f1cBrett Chabot return false; 9147d431f63a66505a645f282416659a9758a91f1cBrett Chabot } 9247d431f63a66505a645f282416659a9758a91f1cBrett Chabot for (int i = 0; i < expected.length; i++) { 9347d431f63a66505a645f282416659a9758a91f1cBrett Chabot Object expectedObject = expected[i]; 9447d431f63a66505a645f282416659a9758a91f1cBrett Chabot Object actualObject = actual[i]; 9547d431f63a66505a645f282416659a9758a91f1cBrett Chabot 9647d431f63a66505a645f282416659a9758a91f1cBrett Chabot if (expectedObject == null && actualObject == null) { 9747d431f63a66505a645f282416659a9758a91f1cBrett Chabot continue; 9847d431f63a66505a645f282416659a9758a91f1cBrett Chabot } 9947d431f63a66505a645f282416659a9758a91f1cBrett Chabot 10047d431f63a66505a645f282416659a9758a91f1cBrett Chabot if (expectedObject == null && actualObject != null) { 10147d431f63a66505a645f282416659a9758a91f1cBrett Chabot return false; 10247d431f63a66505a645f282416659a9758a91f1cBrett Chabot } 10347d431f63a66505a645f282416659a9758a91f1cBrett Chabot 10447d431f63a66505a645f282416659a9758a91f1cBrett Chabot if (expectedObject != null && actualObject == null) { 10547d431f63a66505a645f282416659a9758a91f1cBrett Chabot return false; 10647d431f63a66505a645f282416659a9758a91f1cBrett Chabot } 10747d431f63a66505a645f282416659a9758a91f1cBrett Chabot 10847d431f63a66505a645f282416659a9758a91f1cBrett Chabot if (!argumentMatches(expectedObject, actualObject)) { 10947d431f63a66505a645f282416659a9758a91f1cBrett Chabot return false; 11047d431f63a66505a645f282416659a9758a91f1cBrett Chabot } 11147d431f63a66505a645f282416659a9758a91f1cBrett Chabot } 11247d431f63a66505a645f282416659a9758a91f1cBrett Chabot return true; 11347d431f63a66505a645f282416659a9758a91f1cBrett Chabot } 11447d431f63a66505a645f282416659a9758a91f1cBrett Chabot 11547d431f63a66505a645f282416659a9758a91f1cBrett Chabot /** 11647d431f63a66505a645f282416659a9758a91f1cBrett Chabot * Returns a string representation of the matcher. This convenience 11747d431f63a66505a645f282416659a9758a91f1cBrett Chabot * implementation calls {@link AbstractMatcher#argumentToString(Object)} 11847d431f63a66505a645f282416659a9758a91f1cBrett Chabot * for every argument in the given array and returns the string representations 11947d431f63a66505a645f282416659a9758a91f1cBrett Chabot * of the arguments separated by commas. 12047d431f63a66505a645f282416659a9758a91f1cBrett Chabot * 12147d431f63a66505a645f282416659a9758a91f1cBrett Chabot * @param arguments 12247d431f63a66505a645f282416659a9758a91f1cBrett Chabot * the arguments to be used in the string representation. 12347d431f63a66505a645f282416659a9758a91f1cBrett Chabot * @return a string representation of the matcher. 12447d431f63a66505a645f282416659a9758a91f1cBrett Chabot */ 12547d431f63a66505a645f282416659a9758a91f1cBrett Chabot public String toString(Object[] arguments) { 12647d431f63a66505a645f282416659a9758a91f1cBrett Chabot if (arguments == null) 12747d431f63a66505a645f282416659a9758a91f1cBrett Chabot arguments = new Object[0]; 12847d431f63a66505a645f282416659a9758a91f1cBrett Chabot 12947d431f63a66505a645f282416659a9758a91f1cBrett Chabot StringBuilder result = new StringBuilder(); 13047d431f63a66505a645f282416659a9758a91f1cBrett Chabot 13147d431f63a66505a645f282416659a9758a91f1cBrett Chabot for (int i = 0; i < arguments.length; i++) { 13247d431f63a66505a645f282416659a9758a91f1cBrett Chabot if (i > 0) { 13347d431f63a66505a645f282416659a9758a91f1cBrett Chabot result.append(", "); 13447d431f63a66505a645f282416659a9758a91f1cBrett Chabot } 13547d431f63a66505a645f282416659a9758a91f1cBrett Chabot result.append(argumentToString(arguments[i])); 13647d431f63a66505a645f282416659a9758a91f1cBrett Chabot } 13747d431f63a66505a645f282416659a9758a91f1cBrett Chabot return result.toString(); 13847d431f63a66505a645f282416659a9758a91f1cBrett Chabot } 13947d431f63a66505a645f282416659a9758a91f1cBrett Chabot} 140