1   package com.lexicalscope.fluentreflection;
2   
3   import static java.util.Collections.unmodifiableList;
4   
5   import java.util.ArrayList;
6   import java.util.List;
7   
8   import org.hamcrest.Description;
9   import org.jmock.api.Action;
10  import org.jmock.api.Invocation;
11  import org.jmock.integration.junit4.JUnit4Mockery;
12  import org.junit.rules.MethodRule;
13  import org.junit.runners.model.FrameworkMethod;
14  import org.junit.runners.model.Statement;
15  
16  import com.google.inject.TypeLiteral;
17  
18  @SuppressWarnings("deprecation") class JUnitRuleMockery extends JUnit4Mockery implements MethodRule {
19      @SuppressWarnings("unchecked") public <T> T mock(final TypeLiteral<T> typeToMock) {
20          return (T) super.mock(typeToMock.getRawType());
21      }
22  
23      @Override public Statement apply(final Statement base, final FrameworkMethod method, final Object target) {
24          return new Statement() {
25              @Override public void evaluate() throws Throwable {
26                  base.evaluate();
27                  assertIsSatisfied();
28              }
29          };
30      }
31  
32      public static <T> Action returnList(final T t) {
33          final List<T> list = new ArrayList<T>();
34          list.add(t);
35          return new Action() {
36              @Override public void describeTo(final Description description) {
37                  description.appendText("return ").appendValue(list);
38              }
39  
40              @Override public Object invoke(final Invocation arg0) throws Throwable {
41                  return unmodifiableList(list);
42              }
43          };
44      }
45  }