View Javadoc

    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  /***
    11   *
    12   * @author Joe Walnes
    13   * @author Chris Stevenson
    14   * @version $Revision: 1.1 $
    15   */
    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 instanceof Closure) {
    58              Closure closure = (Closure) args;
    59              return C.args(new ClosureConstraintMatcher(closure));
    60          }
    61          else {
    62              return C.args(C.eq(args));
    63          }
    64      }
    65
    66      private Object callMethod(String name, Object args) {
    67          try {
    68              return calls.call(mock, name, new Object[] { args });
    69          }
    70          catch (Throwable throwable) {
    71              throw new RuntimeException(throwable);
    72          }
    73      }
    74
    75      public void verify() {
    76          calls.verify();
    77      }
    78
    79  }