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 }