• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.google.inject.servlet;
2 
3 import static org.easymock.EasyMock.createMock;
4 
5 import com.google.inject.Guice;
6 import com.google.inject.Scopes;
7 import com.google.inject.Singleton;
8 import javax.servlet.FilterConfig;
9 import javax.servlet.ServletException;
10 import javax.servlet.http.HttpServlet;
11 import junit.framework.TestCase;
12 
13 /**
14  * Ensures that an error is thrown if a Servlet or Filter is bound under any scope other than
15  * singleton, explicitly.
16  *
17  * @author dhanji@gmail.com
18  */
19 public class InvalidScopeBindingTest extends TestCase {
20 
21   @Override
tearDown()22   protected void tearDown() throws Exception {
23     GuiceFilter.reset();
24   }
25 
testServletInNonSingletonScopeThrowsServletException()26   public final void testServletInNonSingletonScopeThrowsServletException() {
27     GuiceFilter guiceFilter = new GuiceFilter();
28 
29     Guice.createInjector(
30         new ServletModule() {
31           @Override
32           protected void configureServlets() {
33             serve("/*").with(MyNonSingletonServlet.class);
34           }
35         });
36 
37     ServletException se = null;
38     try {
39       guiceFilter.init(createMock(FilterConfig.class));
40     } catch (ServletException e) {
41       se = e;
42     } finally {
43       assertNotNull("Servlet exception was not thrown with wrong scope binding", se);
44     }
45   }
46 
testFilterInNonSingletonScopeThrowsServletException()47   public final void testFilterInNonSingletonScopeThrowsServletException() {
48     GuiceFilter guiceFilter = new GuiceFilter();
49 
50     Guice.createInjector(
51         new ServletModule() {
52           @Override
53           protected void configureServlets() {
54             filter("/*").through(MyNonSingletonFilter.class);
55           }
56         });
57 
58     ServletException se = null;
59     try {
60       guiceFilter.init(createMock(FilterConfig.class));
61     } catch (ServletException e) {
62       se = e;
63     } finally {
64       assertNotNull("Servlet exception was not thrown with wrong scope binding", se);
65     }
66   }
67 
testHappyCaseFilter()68   public final void testHappyCaseFilter() {
69     GuiceFilter guiceFilter = new GuiceFilter();
70 
71     Guice.createInjector(
72         new ServletModule() {
73           @Override
74           protected void configureServlets() {
75             // Annotated scoping variant.
76             filter("/*").through(MySingletonFilter.class);
77 
78             // Explicit scoping variant.
79             bind(DummyFilterImpl.class).in(Scopes.SINGLETON);
80             filter("/*").through(DummyFilterImpl.class);
81           }
82         });
83 
84     ServletException se = null;
85     try {
86       guiceFilter.init(createMock(FilterConfig.class));
87     } catch (ServletException e) {
88       se = e;
89     } finally {
90       assertNull("Servlet exception was thrown with correct scope binding", se);
91     }
92   }
93 
94   @RequestScoped
95   public static class MyNonSingletonServlet extends HttpServlet {}
96 
97   @SessionScoped
98   public static class MyNonSingletonFilter extends DummyFilterImpl {}
99 
100   @Singleton
101   public static class MySingletonFilter extends DummyFilterImpl {}
102 }
103