From: Steve F. <sm...@us...> - 2003-10-29 22:11:39
|
Update of /cvsroot/mockobjects/mockobjects-java/src/core/com/mockobjects/dynamic In directory sc8-pr-cvs1:/tmp/cvs-serv8912/src/core/com/mockobjects/dynamic Modified Files: Mock.java C.java CoreMock.java MethodExpectation.java InvocationMatcher.java InvocationMocker.java Stub.java InvokableFactory.java Removed Files: CallOnceStub.java Log Message: Added support for state to InvocationMatchers Added CallOnceMatcher Removed CallOnceStub Moved matchers into separate package Index: Mock.java =================================================================== RCS file: /cvsroot/mockobjects/mockobjects-java/src/core/com/mockobjects/dynamic/Mock.java,v retrieving revision 1.43 retrieving revision 1.44 diff -u -r1.43 -r1.44 --- Mock.java 15 Oct 2003 08:20:54 -0000 1.43 +++ Mock.java 29 Oct 2003 22:11:35 -0000 1.44 @@ -2,6 +2,7 @@ import com.mockobjects.Verifiable; import com.mockobjects.constraint.Constraint; +import com.mockobjects.dynamic.matchers.*; public class Mock implements Verifiable { private InvokableFactory invokableFactory; @@ -31,7 +32,7 @@ if (constraintArg instanceof Constraint[]) { // to support possible legacy usage of new Contraint[] {...} - return new InvocationMatcher.Arguments((Constraint[])constraintArg); + return new ArgumentsMatcher((Constraint[])constraintArg); } else if (constraintArg instanceof Constraint) { // to support usage of C.lt(5) type constraints return C.args((Constraint)constraintArg); Index: C.java =================================================================== RCS file: /cvsroot/mockobjects/mockobjects-java/src/core/com/mockobjects/dynamic/C.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- C.java 14 Oct 2003 20:26:03 -0000 1.7 +++ C.java 29 Oct 2003 22:11:35 -0000 1.8 @@ -5,6 +5,7 @@ package com.mockobjects.dynamic; import com.mockobjects.constraint.*; +import com.mockobjects.dynamic.matchers.*; /** Convenient factory functions and constants for building predicates. @@ -20,12 +21,12 @@ public static final Constraint IS_NOT_ZERO = not(IS_ZERO); public static final InvocationMatcher NO_ARGS = - new InvocationMatcher() { - public boolean matches(Invocation invocation) { return invocation.getParameterValues().isEmpty();} + new StatelessInvocationMatcher() { + public boolean matches(Invocation invocation) { return invocation.getParameterValues().isEmpty();} }; public static final InvocationMatcher ANY_ARGS = - new InvocationMatcher() { + new StatelessInvocationMatcher() { public boolean matches(Invocation invocation) { return true;} }; @@ -119,19 +120,19 @@ } public static InvocationMatcher args(Constraint p) { - return new InvocationMatcher.Arguments(new Constraint[]{p}); + return new ArgumentsMatcher(new Constraint[]{p}); } public static InvocationMatcher args(Constraint p1, Constraint p2) { - return new InvocationMatcher.Arguments(new Constraint[]{p1, p2}); + return new ArgumentsMatcher(new Constraint[]{p1, p2}); } public static InvocationMatcher args(Constraint p1, Constraint p2, Constraint p3) { - return new InvocationMatcher.Arguments(new Constraint[]{p1, p2, p3}); + return new ArgumentsMatcher(new Constraint[]{p1, p2, p3}); } public static InvocationMatcher args(Constraint p1, Constraint p2, Constraint p3, Constraint p4) { - return new InvocationMatcher.Arguments(new Constraint[]{p1, p2, p3, p4}); + return new ArgumentsMatcher(new Constraint[]{p1, p2, p3, p4}); } public static InvocationMatcher anyArgs( int argCount) { @@ -140,6 +141,6 @@ constraints[i] = new IsAnything(); } - return new InvocationMatcher.Arguments(constraints); + return new ArgumentsMatcher(constraints); } } Index: CoreMock.java =================================================================== RCS file: /cvsroot/mockobjects/mockobjects-java/src/core/com/mockobjects/dynamic/CoreMock.java,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- CoreMock.java 14 Oct 2003 20:26:03 -0000 1.13 +++ CoreMock.java 29 Oct 2003 22:11:35 -0000 1.14 @@ -24,10 +24,10 @@ } public Object invoke(Object proxy, Method method, Object[] args) - throws Throwable { + throws Throwable + { + Invocation invocation = new Invocation(method, args); try { - Invocation invocation = new Invocation(method, args); - if (invocation.isCheckingEqualityOnProxy()) { return new Boolean(args[0] == this.proxy); } else if (invocation.isMockNameGetter()) { @@ -36,7 +36,9 @@ return invocationDispatcher.dispatch(invocation); } } catch (AssertionFailedError ex) { - throw new AssertionFailedError(name + ": " + ex.getMessage()); + DynamicMockError error = new DynamicMockError(invocation, name + ": " + ex.getMessage()); + error.fillInStackTrace(); + throw error; } } Index: MethodExpectation.java =================================================================== RCS file: /cvsroot/mockobjects/mockobjects-java/src/core/com/mockobjects/dynamic/MethodExpectation.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- MethodExpectation.java 17 Oct 2003 23:05:01 -0000 1.8 +++ MethodExpectation.java 29 Oct 2003 22:11:35 -0000 1.9 @@ -5,13 +5,9 @@ package com.mockobjects.dynamic; public class MethodExpectation { - private InvocationMocker mocker; + private InvocationMocker mocker; //TODO in progress public MethodExpectation(InvocationMocker mocker) { this.mocker = mocker; - } - - public void Void() { - mocker.addStub(new VoidStub()); } } Index: InvocationMatcher.java =================================================================== RCS file: /cvsroot/mockobjects/mockobjects-java/src/core/com/mockobjects/dynamic/InvocationMatcher.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- InvocationMatcher.java 14 Oct 2003 20:26:03 -0000 1.3 +++ InvocationMatcher.java 29 Oct 2003 22:11:35 -0000 1.4 @@ -3,69 +3,12 @@ */ package com.mockobjects.dynamic; -import java.util.List; +import com.mockobjects.Verifiable; -import com.mockobjects.constraint.Constraint; -import com.mockobjects.constraint.IsEqual; - -public interface InvocationMatcher { +public interface InvocationMatcher + extends Verifiable +{ boolean matches(Invocation invocation); - - - public class MethodName implements InvocationMatcher { - private Constraint constraint; - - public MethodName(Constraint constraint) { - this.constraint = constraint; - } - public MethodName(String methodName) { - this(new IsEqual(methodName)); - } - public boolean matches(Invocation invocation) { - return constraint.eval(invocation.getMethodName()); - } - } - - public class Arguments - implements InvocationMatcher - { - private Constraint[] constraints; - - public Arguments(Constraint[] constraints) { - Arguments.this.constraints = constraints; - } - - public boolean matches(Invocation invocation) { - return constraints.length == invocation.getParameterValues().size() - && matchesValues(invocation.getParameterValues()); - } - - private boolean matchesValues(List list) { - for (int i = 0; i < constraints.length; ++i) { - if (!constraints[i].eval(list.get(i))) { - return false; - } - } - return true; - } - - public Constraint[] getConstraints() { - return constraints; - } - - public String toString() { - StringBuffer result = new StringBuffer(); - result.append("ArgumentMatcher: "); - for (int i = 0; i < constraints.length; ++i) { - result.append(constraints[i]).append(", "); - } - return result.toString(); - } - - public boolean equals(Object other) { - return other != null && toString().equals(other.toString()); - } - } - + void invoked(Invocation invocation); } Index: InvocationMocker.java =================================================================== RCS file: /cvsroot/mockobjects/mockobjects-java/src/core/com/mockobjects/dynamic/InvocationMocker.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- InvocationMocker.java 17 Oct 2003 23:05:01 -0000 1.6 +++ InvocationMocker.java 29 Oct 2003 22:11:35 -0000 1.7 @@ -3,27 +3,40 @@ */ package com.mockobjects.dynamic; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import com.mockobjects.dynamic.matchers.MethodNameMatcher; + public class InvocationMocker implements Invokable { - private InvocationMatcher[] matchers; + private List matchers = new ArrayList(); private Stub stub; - + public InvocationMocker(String methodName, InvocationMatcher arguments, Stub stub) { - this(new InvocationMatcher[] {new InvocationMatcher.MethodName(methodName), arguments}, - stub); + this(stub); + addMatcher(new MethodNameMatcher(methodName)); + addMatcher(arguments); } public InvocationMocker(InvocationMatcher[] matchers, Stub stub) { - this.matchers = matchers; + this(stub); + for( int i = 0; i < matchers.length; i++ ) addMatcher( matchers[i] ); + } + + public InvocationMocker(Stub stub) { this.stub = stub; } + public String getDescription() { return null; // TODO } public boolean matches(Invocation invocation) { - for (int i = 0; i < matchers.length; ++i) { - if (! matchers[i].matches(invocation)) { + Iterator i = matchers.iterator(); + while( i.hasNext() ) { + if( !((InvocationMatcher)i.next()).matches(invocation) ) { return false; } } @@ -31,14 +44,22 @@ } public Object invoke(Invocation invocation) throws Throwable { + Iterator i = matchers.iterator(); + while( i.hasNext() ) { + ((InvocationMatcher)i.next()).invoked(invocation); + } return stub.invoke(invocation); } public void verify() { - stub.verify(); + Iterator i = matchers.iterator(); + while( i.hasNext() ) { + ((InvocationMatcher)i.next()).verify(); + } } - public void addStub(Stub stub) { - // TODO + public InvocationMocker addMatcher(InvocationMatcher matcher) { + matchers.add(matcher); + return this; } } Index: Stub.java =================================================================== RCS file: /cvsroot/mockobjects/mockobjects-java/src/core/com/mockobjects/dynamic/Stub.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- Stub.java 8 Oct 2003 23:47:14 -0000 1.6 +++ Stub.java 29 Oct 2003 22:11:35 -0000 1.7 @@ -4,13 +4,12 @@ */ package com.mockobjects.dynamic; -import com.mockobjects.Verifiable; /** * An object that stubs the behaviour of a method invocation on behalf of an * {@link Invokable} object. */ -public interface Stub extends Verifiable +public interface Stub { /** * Processes the invocation. Index: InvokableFactory.java =================================================================== RCS file: /cvsroot/mockobjects/mockobjects-java/src/core/com/mockobjects/dynamic/InvokableFactory.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- InvokableFactory.java 15 Oct 2003 08:20:54 -0000 1.8 +++ InvokableFactory.java 29 Oct 2003 22:11:35 -0000 1.9 @@ -1,25 +1,32 @@ package com.mockobjects.dynamic; +import com.mockobjects.dynamic.matchers.CallOnceMatcher; + public class InvokableFactory { public Invokable createReturnStub(String methodName, InvocationMatcher arguments, Object result) { return new InvocationMocker(methodName, arguments, new ReturnStub(result)); } public Invokable createReturnExpectation(String methodName, InvocationMatcher arguments, Object result) { - return new InvocationMocker(methodName, arguments, new CallOnceStub(new ReturnStub(result))); + return callOnce(new InvocationMocker(methodName, arguments, new ReturnStub(result))); } public Invokable createThrowableStub(String methodName, InvocationMatcher arguments, Throwable throwable) { return new InvocationMocker(methodName, arguments, new ThrowStub(throwable)); } public Invokable createThrowableExpectation(String methodName, InvocationMatcher arguments, Throwable throwable) { - return new InvocationMocker(methodName, arguments,new CallOnceStub(new ThrowStub(throwable))); + return callOnce(new InvocationMocker(methodName, arguments, new ThrowStub(throwable))); } public Invokable createVoidStub(String methodName, InvocationMatcher arguments) { return new InvocationMocker(methodName, arguments, new VoidStub()); } + public Invokable createVoidExpectation(String methodName, InvocationMatcher arguments) { - return new InvocationMocker(methodName, arguments, new CallOnceStub(new VoidStub())); + return callOnce(new InvocationMocker(methodName, arguments, new VoidStub())); + } + + private Invokable callOnce(InvocationMocker mocker) { + return mocker.addMatcher(new CallOnceMatcher()); } } --- CallOnceStub.java DELETED --- |