blob: bf07b88228847407cce2ac485a545fab6db64319 [file] [log] [blame]
package com.google.inject.servlet;
import com.google.inject.Guice;
import com.google.inject.Singleton;
import com.google.inject.Scopes;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import junit.framework.TestCase;
import static org.easymock.EasyMock.createMock;
/**
* Ensures that an error is thrown if a Servlet or Filter is bound
* under any scope other than singleton, explicitly.
*
* @author dhanji@gmail.com
*/
public class InvalidScopeBindingTest extends TestCase {
@Override
protected void tearDown() throws Exception {
GuiceFilter.reset();
}
public final void testServletInNonSingletonScopeThrowsServletException(){
GuiceFilter guiceFilter = new GuiceFilter();
Guice.createInjector(new ServletModule() {
@Override
protected void configureServlets() {
serve("/*").with(MyNonSingletonServlet.class);
}
});
ServletException se = null;
try {
guiceFilter.init(createMock(FilterConfig.class));
} catch (ServletException e) {
se = e;
} finally {
assertNotNull("Servlet exception was not thrown with wrong scope binding", se);
}
}
public final void testFilterInNonSingletonScopeThrowsServletException(){
GuiceFilter guiceFilter = new GuiceFilter();
Guice.createInjector(new ServletModule() {
@Override
protected void configureServlets() {
filter("/*").through(MyNonSingletonFilter.class);
}
});
ServletException se = null;
try {
guiceFilter.init(createMock(FilterConfig.class));
} catch (ServletException e) {
se = e;
} finally {
assertNotNull("Servlet exception was not thrown with wrong scope binding", se);
}
}
public final void testHappyCaseFilter(){
GuiceFilter guiceFilter = new GuiceFilter();
Guice.createInjector(new ServletModule() {
@Override
protected void configureServlets() {
// Annotated scoping variant.
filter("/*").through(MySingletonFilter.class);
// Explicit scoping variant.
bind(DummyFilterImpl.class).in(Scopes.SINGLETON);
filter("/*").through(DummyFilterImpl.class);
}
});
ServletException se = null;
try {
guiceFilter.init(createMock(FilterConfig.class));
} catch (ServletException e) {
se = e;
} finally {
assertNull("Servlet exception was thrown with correct scope binding", se);
}
}
@RequestScoped
public static class MyNonSingletonServlet extends HttpServlet { }
@SessionScoped
public static class MyNonSingletonFilter extends DummyFilterImpl { }
@Singleton
public static class MySingletonFilter extends DummyFilterImpl { }
}