Blob Blame History Raw
diff -Nru jmock-2.5.1/src/org/jmock/Expectations.java jmock-2.5.1-gil/src/org/jmock/Expectations.java
--- jmock-2.5.1/src/org/jmock/Expectations.java	2008-07-03 13:52:29.000000000 +0200
+++ jmock-2.5.1-gil/src/org/jmock/Expectations.java	2012-11-02 13:58:47.805563931 +0100
@@ -184,39 +184,48 @@
     }
     
     public boolean with(boolean value) {
-        return with(equalTo(value));
+        addParameterMatcher(equal(value));
+        return false;
     }
     
     public byte with(byte value) {
-        return with(equalTo(value));
+        addParameterMatcher(equal(value));
+        return 0;
     }
     
     public short with(short value) {
-        return with(equalTo(value));
+        addParameterMatcher(equal(value));
+        return 0;
     }
     
     public char with(char value) {
-        return with(equalTo(value));
+        addParameterMatcher(equal(value));
+        return 0;
     }
     
     public int with(int value) {
-        return with(equalTo(value));
+        addParameterMatcher(equal(value));
+        return 0;
     }
     
     public long with(long value) {
-        return with(equalTo(value));
+        addParameterMatcher(equal(value));
+        return 0;
     }
     
     public float with(float value) {
-        return with(equalTo(value));
+        addParameterMatcher(equal(value));
+        return 0;
     }
     
     public double with(double value) {
-        return with(equalTo(value));
+        addParameterMatcher(equal(value));
+        return 0;
     }
     
     public <T> T with(T value) {
-        return with(equalTo(value));
+        addParameterMatcher(equal(value));
+        return value;
     }
     
     public void will(Action action) {
diff -Nru jmock-2.5.1/src/org/jmock/internal/InvocationExpectationBuilder.java jmock-2.5.1-gil/src/org/jmock/internal/InvocationExpectationBuilder.java
--- jmock-2.5.1/src/org/jmock/internal/InvocationExpectationBuilder.java	2008-06-23 10:56:29.000000000 +0200
+++ jmock-2.5.1-gil/src/org/jmock/internal/InvocationExpectationBuilder.java	2012-11-02 13:58:47.808563779 +0100
@@ -10,10 +10,9 @@
 import org.jmock.api.Action;
 import org.jmock.api.Expectation;
 import org.jmock.api.Invocation;
-import org.jmock.internal.matcher.MethodMatcher;
 import org.jmock.internal.matcher.MethodNameMatcher;
 import org.jmock.internal.matcher.MockObjectMatcher;
-import org.jmock.internal.matcher.ParametersMatcher;
+import org.jmock.internal.matcher.AllParametersMatcher;
 import org.jmock.syntax.MethodClause;
 import org.jmock.syntax.ParametersClause;
 import org.jmock.syntax.ReceiverClause;
@@ -83,14 +82,14 @@
     }
     
     public void createExpectationFrom(Invocation invocation) {
-        expectation.setMethodMatcher(new MethodMatcher(invocation.getInvokedMethod()));
+        expectation.setMethod(invocation.getInvokedMethod());
         
         if (capturedParameterMatchers.isEmpty()) {
-            expectation.setParametersMatcher(new ParametersMatcher(invocation.getParametersAsArray()));
+            expectation.setParametersMatcher(new AllParametersMatcher(invocation.getParametersAsArray()));
         }
         else {
             checkParameterMatcherCount(invocation);
-            expectation.setParametersMatcher(new ParametersMatcher(capturedParameterMatchers));
+            expectation.setParametersMatcher(new AllParametersMatcher(capturedParameterMatchers));
         }
     }
     
@@ -130,7 +129,7 @@
     }
     
     public void with(Matcher<?>... parameterMatchers) {
-        expectation.setParametersMatcher(new ParametersMatcher(Arrays.asList(parameterMatchers)));
+        expectation.setParametersMatcher(new AllParametersMatcher(Arrays.asList(parameterMatchers)));
     }
     
     public void withNoArguments() {
diff -Nru jmock-2.5.1/src/org/jmock/internal/InvocationExpectation.java jmock-2.5.1-gil/src/org/jmock/internal/InvocationExpectation.java
--- jmock-2.5.1/src/org/jmock/internal/InvocationExpectation.java	2007-12-28 00:26:14.000000000 +0100
+++ jmock-2.5.1-gil/src/org/jmock/internal/InvocationExpectation.java	2012-11-02 13:58:47.807563829 +0100
@@ -10,6 +10,7 @@
 import org.jmock.api.Action;
 import org.jmock.api.Expectation;
 import org.jmock.api.Invocation;
+import org.jmock.internal.matcher.MethodMatcher;
 import org.jmock.lib.action.VoidAction;
 
 /** 
@@ -19,10 +20,11 @@
  * @author smgf
  */
 public class InvocationExpectation implements Expectation {
+    private static ParametersMatcher ANY_PARAMETERS = new AnyParametersMatcher();
     private Cardinality cardinality = Cardinality.ALLOWING;
 	private Matcher<?> objectMatcher = IsAnything.anything();
-	private Matcher<Method> methodMatcher = IsAnything.anything("<any method>");
-	private Matcher<Object[]> parametersMatcher = IsAnything.anything("(<any parameters>)");
+	private Matcher<? super Method> methodMatcher = IsAnything.anything("<any method>");
+	private ParametersMatcher parametersMatcher = ANY_PARAMETERS;
     private Action action = new VoidAction();
     private List<OrderingConstraint> orderingConstraints = new ArrayList<OrderingConstraint>();
     private List<SideEffect> sideEffects = new ArrayList<SideEffect>();
@@ -36,12 +38,16 @@
 	public void setObjectMatcher(Matcher<?> objectMatcher) {
 		this.objectMatcher = objectMatcher;
 	}
+
+	public void setMethod(Method method) {
+	    this.methodMatcher = new MethodMatcher(method);
+	}
 	
-	public void setMethodMatcher(Matcher<Method> methodMatcher) {
-		this.methodMatcher = methodMatcher;
+	public void setMethodMatcher(Matcher<? super Method> matcher) {
+		this.methodMatcher = matcher;
 	}
 	
-	public void setParametersMatcher(Matcher<Object[]> parametersMatcher) {
+	public void setParametersMatcher(ParametersMatcher parametersMatcher) {
 		this.parametersMatcher = parametersMatcher;
 	}
 
@@ -121,4 +127,14 @@
             sideEffect.perform();
         }
     }
+
+    private static class AnyParametersMatcher extends IsAnything<Object[]> implements ParametersMatcher {
+        public AnyParametersMatcher() {
+            super("(<any parameters>)");
+        }
+
+        public boolean isCompatibleWith(Object[] parameters) {
+            return true;
+        }
+    };
 }
diff -Nru jmock-2.5.1/src/org/jmock/internal/matcher/AllParametersMatcher.java jmock-2.5.1-gil/src/org/jmock/internal/matcher/AllParametersMatcher.java
--- jmock-2.5.1/src/org/jmock/internal/matcher/AllParametersMatcher.java	1970-01-01 01:00:00.000000000 +0100
+++ jmock-2.5.1-gil/src/org/jmock/internal/matcher/AllParametersMatcher.java	2012-11-02 13:58:47.809563730 +0100
@@ -0,0 +1,80 @@
+package org.jmock.internal.matcher;
+
+import static java.util.Arrays.asList;
+
+import java.util.List;
+
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+import org.hamcrest.TypeSafeDiagnosingMatcher;
+import org.hamcrest.core.IsEqual;
+import org.jmock.internal.ParametersMatcher;
+
+public class AllParametersMatcher extends TypeSafeDiagnosingMatcher<Object[]>  implements ParametersMatcher {
+    private final Matcher<Object>[] elementMatchers;
+
+    public AllParametersMatcher(Object[] expectedValues) {
+        this.elementMatchers =  equalMatchersFor(expectedValues);
+    }
+
+    @SuppressWarnings("unchecked")
+    public AllParametersMatcher(List<Matcher<?>> parameterMatchers) {
+        this.elementMatchers = parameterMatchers.toArray(new Matcher[0]);
+    }
+
+    public boolean isCompatibleWith(Object[] parameters) {
+        return elementMatchers.length == parameters.length;
+    }
+
+    @Override
+    public boolean matchesSafely(Object[] parameters, Description mismatch) {
+        return matchesNumberOfParameters(parameters, mismatch)
+            && matchesParameters(parameters, mismatch);
+    }
+
+    private boolean matchesNumberOfParameters(Object[] parameters, Description mismatch) {
+        if (elementMatchers.length != parameters.length) {
+            mismatch.appendText("wrong number of parameters: ")
+                    .appendValue(parameters);
+            return false;
+        }
+        return true;
+    }
+
+    private boolean matchesParameters(Object[] parameters, Description mismatch) {
+        boolean result = true;
+        for (int i = 0; i < parameters.length; i++) {
+            result &= matchesParameter(parameters[i], elementMatchers[i], mismatch, i);
+        }
+        return result;
+    }
+
+    private boolean matchesParameter(final Object value, final Matcher<Object> matcher, Description mismatch, int index) {
+        mismatch.appendText("\n      parameter " + index + " ");
+        final boolean parameterMatches = matcher.matches(value);
+        if (parameterMatches) {
+            mismatch.appendText("matched: ").appendDescriptionOf(matcher);
+        } else {
+            mismatch.appendText("did not match: ")
+                .appendDescriptionOf(matcher)
+                .appendText(", because ");
+            matcher.describeMismatch(value, mismatch);
+        }
+        return parameterMatches;
+    }
+
+    public void describeTo(Description description) {
+        description.appendList("(", ", ",")", asList(elementMatchers));
+    }
+
+    @SuppressWarnings("unchecked")
+    private static Matcher<Object>[] equalMatchersFor(Object[] expectedValues) {
+        Matcher<Object>[] matchers = new Matcher[expectedValues.length];
+        for (int i = 0; i < expectedValues.length; i++) {
+            matchers[i] = new IsEqual<Object>(expectedValues[i]);
+        }
+        return matchers;
+    }
+
+}
+
diff -Nru jmock-2.5.1/src/org/jmock/internal/ParametersMatcher.java jmock-2.5.1-gil/src/org/jmock/internal/ParametersMatcher.java
--- jmock-2.5.1/src/org/jmock/internal/ParametersMatcher.java	1970-01-01 01:00:00.000000000 +0100
+++ jmock-2.5.1-gil/src/org/jmock/internal/ParametersMatcher.java	2012-11-02 13:58:47.809563730 +0100
@@ -0,0 +1,12 @@
+package org.jmock.internal;
+
+import org.hamcrest.Matcher;
+
+public interface ParametersMatcher extends Matcher<Object[]> {
+    /**
+     * Is this matcher likely to be relevant to the given parameters?
+     * @param parameters The parameters to be matched
+     * @return true iff the parameters may be relevant.
+     */
+    boolean isCompatibleWith(Object[] parameters);
+}
diff -Nru jmock-2.5.1/test/org/jmock/test/acceptance/HamcrestTypeSafetyAcceptanceTests.java jmock-2.5.1-gil/test/org/jmock/test/acceptance/HamcrestTypeSafetyAcceptanceTests.java
--- jmock-2.5.1/test/org/jmock/test/acceptance/HamcrestTypeSafetyAcceptanceTests.java	2007-02-06 17:20:50.000000000 +0100
+++ jmock-2.5.1-gil/test/org/jmock/test/acceptance/HamcrestTypeSafetyAcceptanceTests.java	2012-11-02 13:58:47.809563730 +0100
@@ -1,7 +1,7 @@
 package org.jmock.test.acceptance;
 
-import static org.hamcrest.number.OrderingComparisons.greaterThan;
-import static org.hamcrest.text.StringStartsWith.startsWith;
+import static org.hamcrest.CoreMatchers.startsWith;
+import static org.hamcrest.number.OrderingComparison.greaterThan;
 
 import java.lang.reflect.Method;
 
diff -Nru jmock-2.5.1/test/org/jmock/test/unit/internal/InvocationExpectationTests.java jmock-2.5.1-gil/test/org/jmock/test/unit/internal/InvocationExpectationTests.java
--- jmock-2.5.1/test/org/jmock/test/unit/internal/InvocationExpectationTests.java	2007-06-23 10:48:36.000000000 +0200
+++ jmock-2.5.1-gil/test/org/jmock/test/unit/internal/InvocationExpectationTests.java	2012-11-02 13:58:47.811563631 +0100
@@ -16,6 +16,7 @@
 import org.jmock.internal.InvocationExpectation;
 import org.jmock.internal.OrderingConstraint;
 import org.jmock.internal.SideEffect;
+import org.jmock.internal.matcher.AllParametersMatcher;
 import org.jmock.lib.action.ReturnValueAction;
 import org.jmock.test.unit.support.AssertThat;
 import org.jmock.test.unit.support.MethodFactory;
@@ -72,7 +73,7 @@
 		Object[] differentArgCount = {1,2,3};
 		Object[] noArgs = null;
 		
-		expectation.setParametersMatcher(equalTo(args));
+		expectation.setParametersMatcher(new AllParametersMatcher(args));
 		
 		assertTrue("should match", expectation.matches(new Invocation(targetObject, method, args)));
 		assertTrue("should not match", !expectation.matches(new Invocation(targetObject, method, differentArgs)));