Update of /cvsroot/mockobjects/mockobjects-java/src/core/com/mockobjects/dynamic In directory sc8-pr-cvs1:/tmp/cvs-serv3129/src/core/com/mockobjects/dynamic Modified Files: Tag: DynamicMockExperiment ExpectedCall.java CallSet.java Added Files: Tag: DynamicMockExperiment DefaultCallFactory.java CallFactory.java CallMatch.java Log Message: Basic implementation - adds syntactic sugar for permitAndReturn, expectAndReturn etc. - separated CallMatch from ExpectedCall Still needs Sequence, SingleCall, CallCount support --- NEW FILE: DefaultCallFactory.java --- /* * Created on 07-Apr-2003 */ package com.mockobjects.dynamic; import com.mockobjects.constraint.*; /** * @author dev */ public class DefaultCallFactory implements CallFactory { public CallMocker createReturnStub(Object result) { return new ReturnStub(result); } public CallMocker createThrowStub( Throwable exception ) { return new ThrowStub(exception); } public CallMocker createExpectedCall(CallMocker call) { return new ExpectedCall(call); } public CallMocker createCallMatch(String methodName, Constraint[] constraints, CallMocker call) { return new CallMatch( methodName, constraints, call ); } } --- NEW FILE: CallFactory.java --- /* * Created on 07-Apr-2003 */ package com.mockobjects.dynamic; import com.mockobjects.constraint.*; /** * @author dev */ public interface CallFactory { CallMocker createReturnStub( Object result ); CallMocker createThrowStub( Throwable throwable ); CallMocker createExpectedCall( CallMocker call ); CallMocker createCallMatch( String methodName, Constraint[] constraints, CallMocker call ); } --- NEW FILE: CallMatch.java --- /* * Created on 04-Apr-2003 */ package com.mockobjects.dynamic; import junit.framework.*; import com.mockobjects.constraint.*; import com.mockobjects.util.*; public class CallMatch extends Assert implements CallMocker { private String methodName; private Constraint[] constraints; private CallMocker decorated; public CallMatch( String methodName, Constraint[] constraints, CallMocker decorated ) { this.methodName = methodName; this.constraints = (Constraint[])constraints.clone(); this.decorated = decorated; } public Object call( Mock mock, String methodName, Object[] args ) throws Throwable { assertEquals( methodName + " received the wrong number of arguments", constraints.length, args.length ); for( int i = 0; i < args.length; i++ ) { if( !constraints[i].eval(args[i]) ) { throw new AssertionFailedError( AssertMo.expectedErrorMessage( methodName + " received incorrect argument " + i, AssertMo.join(constraints), AssertMo.join(args) ) ); } } return decorated.call( mock, methodName, args ); } public void verify() { decorated.verify(); } public boolean matches(String methodName, Object[] args) { if( !this.methodName.equals(methodName) ) return false; if( args.length != constraints.length ) return false; for (int i = 0; i < args.length; i++) { if( !constraints[i].eval(args[i]) ) return false; } return decorated.matches( methodName, args ); } public String getDescription() { return AssertMo.methodToString(methodName, constraints); } } Index: ExpectedCall.java =================================================================== RCS file: /cvsroot/mockobjects/mockobjects-java/src/core/com/mockobjects/dynamic/Attic/ExpectedCall.java,v retrieving revision 1.2.2.1 retrieving revision 1.2.2.2 diff -u -r1.2.2.1 -r1.2.2.2 --- ExpectedCall.java 7 Apr 2003 14:26:52 -0000 1.2.2.1 +++ ExpectedCall.java 7 Apr 2003 17:38:22 -0000 1.2.2.2 @@ -1,64 +1,39 @@ /* - * Created on 04-Apr-2003 - * + * Created on 07-Apr-2003 */ package com.mockobjects.dynamic; import junit.framework.*; -import com.mockobjects.constraint.*; -import com.mockobjects.util.*; - -public class ExpectedCall extends Assert implements CallMocker -{ - private String methodName; - private Constraint[] constraints; - private boolean wasCalled = false; +/** + * @author dev + */ +public class ExpectedCall implements CallMocker { private CallMocker decorated; + private boolean wasCalled = false; - public ExpectedCall( String methodName, Constraint[] constraints, CallMocker decorated ) { - this.methodName = methodName; - this.constraints = (Constraint[])constraints.clone(); + public ExpectedCall( CallMocker decorated ) { this.decorated = decorated; } - - public Object call( Mock mock, String methodName, Object[] args ) - throws Throwable - { - assertEquals( methodName + " received the wrong number of arguments", - constraints.length, args.length ); - - for( int i = 0; i < args.length; i++ ) { - if( !constraints[i].eval(args[i]) ) { - throw new AssertionFailedError( - AssertMo.expectedErrorMessage( methodName + " received incorrect argument " + i, - AssertMo.join(constraints), - AssertMo.join(args) ) ); - } - } - + + public String getDescription() { + return decorated.getDescription() + " [mandatory]"; + } + + public Object call(Mock mock, String methodName, Object[] args) throws Throwable { wasCalled = true; - return decorated.call( mock, methodName, args ); } - public void verify() { - if( !wasCalled ) { - throw new AssertionFailedError( methodName + " was not called" ); - } + public boolean matches(String methodName, Object[] args) { + return decorated.matches( methodName, args ); } - public boolean matches(String methodName, Object[] args) { - if( !this.methodName.equals(methodName) ) return false; - if( args.length != constraints.length ) return false; - - for (int i = 0; i < args.length; i++) { - if( !constraints[i].eval(args[i]) ) return false; + public void verify() { + if( !wasCalled ) { + throw new AssertionFailedError( decorated.getDescription() + " was expected but not called" ); } - return true; - } - - public String getDescription() { - return AssertMo.methodToString(methodName, constraints); + + decorated.verify(); } } Index: CallSet.java =================================================================== RCS file: /cvsroot/mockobjects/mockobjects-java/src/core/com/mockobjects/dynamic/Attic/CallSet.java,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -u -r1.1.2.2 -r1.1.2.3 --- CallSet.java 7 Apr 2003 14:26:53 -0000 1.1.2.2 +++ CallSet.java 7 Apr 2003 17:38:23 -0000 1.1.2.3 @@ -5,6 +5,7 @@ import java.util.*; +import com.mockobjects.constraint.*; import com.mockobjects.util.*; import junit.framework.*; @@ -13,11 +14,16 @@ * @author dev */ public class CallSet implements CallMocker { - private List expectedCalls = new ArrayList(); + private CallFactory callFactory; + - public CallSet() { + this( new DefaultCallFactory() ); + } + + public CallSet( CallFactory callFactory ) { + this.callFactory = callFactory; } public Object call(Mock mock, String methodName, Object[] args) throws Throwable { @@ -45,7 +51,7 @@ buf.append( "one of:\n" ); for( Iterator i = expectedCalls.iterator(); i.hasNext(); ) { - buf.append( ((CallMocker)i.next()).toString() ); + buf.append( ((CallMocker)i.next()).getDescription() ); buf.append( "\n" ); } @@ -61,12 +67,29 @@ } - public void expect(CallMocker call) { + public void add(CallMocker call) { expectedCalls.add(call); } - public boolean matches(String methodName, Object[] args) { - return false; + public void permitAndReturn( String methodName, Constraint[] args, Object result ) { + add( callFactory.createCallMatch( methodName, args, + callFactory.createReturnStub(result) ) ); + } + + public void permitAndThrow( String methodName, Constraint[] args, Throwable throwable ) { + add( callFactory.createCallMatch( methodName, args, + callFactory.createThrowStub(throwable) ) ); + } + + public void expectAndReturn( String methodName, Constraint[] args, Object result ) { + add( callFactory.createExpectedCall( callFactory.createCallMatch( methodName, args, callFactory.createReturnStub(result)))); } + public void expectAndThrow( String methodName, Constraint[] args, Throwable exception ) { + add( callFactory.createExpectedCall( callFactory.createCallMatch( methodName, args, callFactory.createThrowStub(exception)))); + } + + public boolean matches(String methodName, Object[] args) { + throw new Error("not implemented"); + } } |