summaryrefslogtreecommitdiff
path: root/src/org/easymock/AbstractMatcher.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/easymock/AbstractMatcher.java')
-rw-r--r--src/org/easymock/AbstractMatcher.java139
1 files changed, 139 insertions, 0 deletions
diff --git a/src/org/easymock/AbstractMatcher.java b/src/org/easymock/AbstractMatcher.java
new file mode 100644
index 0000000..49c6da2
--- /dev/null
+++ b/src/org/easymock/AbstractMatcher.java
@@ -0,0 +1,139 @@
+/*
+ * 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();
+ }
+}