1 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 ; 25 import javax.servlet.FilterChain ; 26 import javax.servlet.ServletException ; 27 import javax.servlet.ServletRequest ; 28 import javax.servlet.ServletResponse ; 29 import javax.servlet.http.HttpServletRequest ; 30 import javax.servlet.http.HttpSession ; 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 42 public class ServletTest extends TestCase { 43 44 public void testNewRequestObject() 45 throws CreationException, IOException , ServletException { 46 final Injector injector = createInjector(); 47 48 GuiceFilter filter = new GuiceFilter(); 49 50 final HttpServletRequest request = createMock(HttpServletRequest .class); 51 52 String 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 filterChain = new FilterChain () { 58 public void doFilter(ServletRequest servletRequest, 59 ServletResponse 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 , ServletException { 76 final Injector injector = createInjector(); 77 78 GuiceFilter filter = new GuiceFilter(); 79 80 final HttpServletRequest request = createMock(HttpServletRequest .class); 81 82 final InRequest inRequest = new InRequest(); 83 String 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 filterChain = new FilterChain () { 88 public void doFilter(ServletRequest servletRequest, 89 ServletResponse 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 , ServletException { 107 final Injector injector = createInjector(); 108 109 GuiceFilter filter = new GuiceFilter(); 110 111 final HttpServletRequest request = createMock(HttpServletRequest .class); 112 final HttpSession session = createMock(HttpSession .class); 113 114 String 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 filterChain = new FilterChain () { 122 public void doFilter(ServletRequest servletRequest, 123 ServletResponse 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 , ServletException { 140 final Injector injector = createInjector(); 141 142 GuiceFilter filter = new GuiceFilter(); 143 144 final HttpServletRequest request = createMock(HttpServletRequest .class); 145 final HttpSession session = createMock(HttpSession .class); 146 147 String 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 filterChain = new FilterChain () { 155 public void doFilter(ServletRequest servletRequest, 156 ServletResponse 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 |