1 package groovy.mock; 2 3 import groovy.lang.GroovyObject; 4 import groovy.lang.Closure; 5 import groovy.lang.GroovyObjectSupport; 6 7 import com.mockobjects.Verifiable; 8 import com.mockobjects.dynamic.*; 9 10 16 public class GroovyMock extends GroovyObjectSupport implements Verifiable { 17 18 private CallBag calls = new CallBag(); 19 private CallFactory callFactory = new DefaultCallFactory(); 20 private Mock mock = new Mock(I.class); 21 22 interface I { 23 } 24 25 private GroovyObject instance = new GroovyObjectSupport() { 26 public Object invokeMethod(String name, Object args) { 27 return callMethod(name, args); 28 } 29 }; 30 31 public Object invokeMethod(String name, Object args) { 32 if (name.equals("verify")) { 33 verify(); 34 } 35 else { 36 expectMethod(name, args); 37 } 38 return null; 39 } 40 41 public GroovyObject getInstance() { 42 return instance; 43 } 44 45 public static GroovyMock newInstance() { 46 return new GroovyMock(); 47 } 48 49 private void expectMethod(String name, Object args) { 50 ConstraintMatcher constraintMatcher = createMatcher(args); 51 calls.addExpect( 52 callFactory.createCallExpectation( 53 callFactory.createCallSignature(name, constraintMatcher, callFactory.createVoidStub()))); 54 } 55 56 private ConstraintMatcher createMatcher(Object args) { 57 if(args.getClass().isArray()) { 58 Object argArray[] = (Object []) args; 59 if (argArray[0] instanceof Closure) { 60 Closure closure = (Closure) argArray[0]; 61 return C.args(new ClosureConstraintMatcher(closure)); 62 } 63 } 64 return C.args(C.eq(args)); 65 } 66 67 private Object callMethod(String name, Object args) { 68 try { 69 return calls.call(mock, name, new Object [] { args }); 70 } 71 catch (Throwable throwable) { 72 throw new RuntimeException (throwable); 73 } 74 } 75 76 public void verify() { 77 calls.verify(); 78 } 79 80 } 81 | Popular Tags |