Skip to content

Instantly share code, notes, and snippets.

@rdammkoehler
Created December 1, 2010 22:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rdammkoehler/724383 to your computer and use it in GitHub Desktop.
Save rdammkoehler/724383 to your computer and use it in GitHub Desktop.
package jerseyandguice;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
import java.util.concurrent.atomic.AtomicReference;
import javax.servlet.FilterChain;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import org.jmock.Expectations;
import org.jmock.Mockery;
import com.google.inject.Injector;
import com.google.inject.servlet.GuiceFilter;
public class GuicedServletAssertion {
public static void assertProvisioningType(final Injector injector,
final Class<?> requestedType, final Class<?> expectedImplementation)
throws Exception {
applyFilterChainAssertion(new FilterChain() {
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse) {
assertTrue(requestedType
.isInstance(injector.getInstance(requestedType)));
assertTrue(expectedImplementation.isInstance(injector
.getInstance(requestedType)));
}
});
}
public static void assertInstantiablity(final Injector injector,
final Class<?> clazz) throws Exception {
applyFilterChainAssertion(new FilterChain() {
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse) {
assertNotNull(injector.getInstance(clazz));
}
});
}
public static void applyFilterChainAssertion(FilterChain filterChain)
throws Exception {
Mockery context = new Mockery();
GuiceFilter filter = new GuiceFilter();
final HttpServletRequest request = context.mock(HttpServletRequest.class);
context.checking(new Expectations() {
{
allowing(request).getAttribute(with(any(String.class)));
will(returnValue(null));
allowing(request).setAttribute(with(any(String.class)),
with(any(Class.class)));
oneOf(request).getServletPath();
}
});
filter.doFilter(request, null, filterChain);
}
public static <T> T expose(final Injector injector, final Class<?> clazz)
throws Exception {
final AtomicReference<T> ref = new AtomicReference<T>();
applyFilterChainAssertion(new FilterChain() {
@SuppressWarnings("unchecked")
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse) {
ref.set((T) injector.getInstance(clazz));
}
});
return ref.get();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment