package com.lexicalscope.fluentreflection; import static java.util.Collections.unmodifiableList; import java.util.ArrayList; import java.util.List; import org.hamcrest.Description; import org.jmock.api.Action; import org.jmock.api.Invocation; import org.jmock.integration.junit4.JUnit4Mockery; import org.junit.rules.MethodRule; import org.junit.runners.model.FrameworkMethod; import org.junit.runners.model.Statement; import com.google.inject.TypeLiteral; @SuppressWarnings("deprecation") class JUnitRuleMockery extends JUnit4Mockery implements MethodRule { @SuppressWarnings("unchecked") public <T> T mock(final TypeLiteral<T> typeToMock) { return (T) super.mock(typeToMock.getRawType()); } @Override public Statement apply(final Statement base, final FrameworkMethod method, final Object target) { return new Statement() { @Override public void evaluate() throws Throwable { base.evaluate(); assertIsSatisfied(); } }; } public static <T> Action returnList(final T t) { final List<T> list = new ArrayList<T>(); list.add(t); return new Action() { @Override public void describeTo(final Description description) { description.appendText("return ").appendValue(list); } @Override public Object invoke(final Invocation arg0) throws Throwable { return unmodifiableList(list); } }; } }