blob: 79342ce296a0bc01648b5df5855397fa5773229b [file] [log] [blame]
package com.google.inject.servlet;
import static org.easymock.EasyMock.createMock;
import com.google.inject.Guice;
import com.google.inject.Scopes;
import com.google.inject.Singleton;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import junit.framework.TestCase;
/**
* 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 {}
}