KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > google > inject > servlet > ServletTest


1 /**
2  * Copyright (C) 2006 Google Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16
17 package com.google.inject.servlet;
18
19 import com.google.inject.AbstractModule;
20 import com.google.inject.CreationException;
21 import com.google.inject.Guice;
22 import com.google.inject.Injector;
23 import com.google.inject.Key;
24 import java.io.IOException JavaDoc;
25 import javax.servlet.FilterChain JavaDoc;
26 import javax.servlet.ServletException JavaDoc;
27 import javax.servlet.ServletRequest JavaDoc;
28 import javax.servlet.ServletResponse JavaDoc;
29 import javax.servlet.http.HttpServletRequest JavaDoc;
30 import javax.servlet.http.HttpSession JavaDoc;
31 import junit.framework.TestCase;
32 import static org.easymock.EasyMock.createMock;
33 import static org.easymock.EasyMock.eq;
34 import static org.easymock.EasyMock.expect;
35 import static org.easymock.EasyMock.isA;
36 import static org.easymock.EasyMock.replay;
37 import static org.easymock.EasyMock.verify;
38
39 /**
40  * @author crazybob@google.com (Bob Lee)
41  */

42 public class ServletTest extends TestCase {
43
44   public void testNewRequestObject()
45       throws CreationException, IOException JavaDoc, ServletException JavaDoc {
46     final Injector injector = createInjector();
47
48     GuiceFilter filter = new GuiceFilter();
49
50     final HttpServletRequest JavaDoc request = createMock(HttpServletRequest JavaDoc.class);
51
52     String JavaDoc name = Key.get(InRequest.class).toString();
53     expect(request.getAttribute(name)).andReturn(null);
54     request.setAttribute(eq(name), isA(InRequest.class));
55
56     final boolean[] invoked = new boolean[1];
57     FilterChain JavaDoc filterChain = new FilterChain JavaDoc() {
58       public void doFilter(ServletRequest JavaDoc servletRequest,
59           ServletResponse JavaDoc servletResponse) {
60         invoked[0] = true;
61         assertSame(request, servletRequest);
62         assertNotNull(injector.getInstance(InRequest.class));
63       }
64     };
65
66     replay(request);
67
68     filter.doFilter(request, null, filterChain);
69
70     verify(request);
71     assertTrue(invoked[0]);
72   }
73
74   public void testExistingRequestObject()
75       throws CreationException, IOException JavaDoc, ServletException JavaDoc {
76     final Injector injector = createInjector();
77
78     GuiceFilter filter = new GuiceFilter();
79
80     final HttpServletRequest JavaDoc request = createMock(HttpServletRequest JavaDoc.class);
81
82     final InRequest inRequest = new InRequest();
83     String JavaDoc name = Key.get(InRequest.class).toString();
84     expect(request.getAttribute(name)).andReturn(inRequest).times(2);
85
86     final boolean[] invoked = new boolean[1];
87     FilterChain JavaDoc filterChain = new FilterChain JavaDoc() {
88       public void doFilter(ServletRequest JavaDoc servletRequest,
89           ServletResponse JavaDoc servletResponse) {
90         invoked[0] = true;
91         assertSame(request, servletRequest);
92         assertSame(inRequest, injector.getInstance(InRequest.class));
93         assertSame(inRequest, injector.getInstance(InRequest.class));
94       }
95     };
96
97     replay(request);
98
99     filter.doFilter(request, null, filterChain);
100
101     verify(request);
102     assertTrue(invoked[0]);
103   }
104
105   public void testNewSessionObject()
106       throws CreationException, IOException JavaDoc, ServletException JavaDoc {
107     final Injector injector = createInjector();
108
109     GuiceFilter filter = new GuiceFilter();
110
111     final HttpServletRequest JavaDoc request = createMock(HttpServletRequest JavaDoc.class);
112     final HttpSession JavaDoc session = createMock(HttpSession JavaDoc.class);
113
114     String JavaDoc name = Key.get(InSession.class).toString();
115
116     expect(request.getSession()).andReturn(session);
117     expect(session.getAttribute(name)).andReturn(null);
118     session.setAttribute(eq(name), isA(InSession.class));
119
120     final boolean[] invoked = new boolean[1];
121     FilterChain JavaDoc filterChain = new FilterChain JavaDoc() {
122       public void doFilter(ServletRequest JavaDoc servletRequest,
123           ServletResponse JavaDoc servletResponse) {
124         invoked[0] = true;
125         assertSame(request, servletRequest);
126         assertNotNull(injector.getInstance(InSession.class));
127       }
128     };
129
130     replay(request, session);
131
132     filter.doFilter(request, null, filterChain);
133
134     verify(request, session);
135     assertTrue(invoked[0]);
136   }
137
138   public void testExistingSessionObject()
139       throws CreationException, IOException JavaDoc, ServletException JavaDoc {
140     final Injector injector = createInjector();
141
142     GuiceFilter filter = new GuiceFilter();
143
144     final HttpServletRequest JavaDoc request = createMock(HttpServletRequest JavaDoc.class);
145     final HttpSession JavaDoc session = createMock(HttpSession JavaDoc.class);
146
147     String JavaDoc name = Key.get(InSession.class).toString();
148
149     final InSession inSession = new InSession();
150     expect(request.getSession()).andReturn(session).times(2);
151     expect(session.getAttribute(name)).andReturn(inSession).times(2);
152
153     final boolean[] invoked = new boolean[1];
154     FilterChain JavaDoc filterChain = new FilterChain JavaDoc() {
155       public void doFilter(ServletRequest JavaDoc servletRequest,
156           ServletResponse JavaDoc servletResponse) {
157         invoked[0] = true;
158         assertSame(request, servletRequest);
159
160         assertSame(inSession, injector.getInstance(InSession.class));
161         assertSame(inSession, injector.getInstance(InSession.class));
162       }
163     };
164
165     replay(request, session);
166
167     filter.doFilter(request, null, filterChain);
168
169     verify(request, session);
170     assertTrue(invoked[0]);
171   }
172
173   private Injector createInjector() throws CreationException {
174     return Guice.createInjector(new AbstractModule() {
175       protected void configure() {
176         install(new ServletModule());
177         bind(InSession.class);
178         bind(InRequest.class);
179       }
180     });
181   }
182
183   @SessionScoped
184   static class InSession {}
185
186   @RequestScoped
187   static class InRequest {}
188 }
189
Popular Tags