Revision: 1550
Author:   isaac.q.shum
Date:     Mon May 23 15:08:31 2011
Log: Make the @RequestParameteters Map derive its values from the existing ServletRequest binding. This makes it easier to construct a seedMap for use with ServletScopes (one only needs to seed the request and response to override the
map as well).
http://code.google.com/p/google-guice/source/detail?r=1550

Modified:
/trunk/extensions/servlet/src/com/google/inject/servlet/InternalServletModule.java
 /trunk/extensions/servlet/test/com/google/inject/servlet/ServletTest.java

=======================================
--- /trunk/extensions/servlet/src/com/google/inject/servlet/InternalServletModule.java Mon Jul 5 19:06:36 2010 +++ /trunk/extensions/servlet/src/com/google/inject/servlet/InternalServletModule.java Mon May 23 15:08:31 2011
@@ -15,12 +15,17 @@
  */
 package com.google.inject.servlet;

+import static com.google.inject.servlet.ServletScopes.REQUEST;
+import static com.google.inject.servlet.ServletScopes.SESSION;
+
 import com.google.inject.AbstractModule;
 import com.google.inject.Provider;
 import com.google.inject.Provides;
 import com.google.inject.Singleton;
+
 import java.util.Map;
 import java.util.logging.Logger;
+
 import javax.servlet.ServletContext;
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
@@ -28,9 +33,6 @@
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;

-import static com.google.inject.servlet.ServletScopes.REQUEST;
-import static com.google.inject.servlet.ServletScopes.SESSION;
-
 /**
  * This is a left-factoring of all ServletModules installed in the system.
* In other words, this module contains the bindings common to all ServletModules,
@@ -103,9 +105,10 @@
     return GuiceFilter.getRequest().getSession();
   }

-  @SuppressWarnings({"unchecked"})
- @Provides @RequestScoped @RequestParameters Map<String, String[]> provideRequestParameters() {
-    return GuiceFilter.getRequest().getParameterMap();
+  @SuppressWarnings("unchecked") // defined by getParameterMap()
+ @Provides @RequestScoped @RequestParameters Map<String, String[]> provideRequestParameters(
+      ServletRequest req) {
+    return req.getParameterMap();
   }

   @Override
=======================================
--- /trunk/extensions/servlet/test/com/google/inject/servlet/ServletTest.java Sat Jul 3 08:51:31 2010 +++ /trunk/extensions/servlet/test/com/google/inject/servlet/ServletTest.java Mon May 23 15:08:31 2011
@@ -16,46 +16,57 @@

 package com.google.inject.servlet;

-import com.google.inject.AbstractModule;
 import static com.google.inject.Asserts.reserialize;
+import static com.google.inject.servlet.ServletScopes.NullObject;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.eq;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.isA;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.verify;
+
+import com.google.inject.AbstractModule;
 import com.google.inject.BindingAnnotation;
 import com.google.inject.CreationException;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Key;
 import com.google.inject.internal.util.Maps;
-import static com.google.inject.servlet.ServletScopes.NullObject;
+import com.google.inject.servlet.RequestParameters;
 import com.google.inject.util.Providers;
+
+import junit.framework.TestCase;
+
 import java.io.IOException;
 import java.io.Serializable;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.PARAMETER;
 import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
 import java.lang.annotation.Target;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
 import java.util.Map;
+
 import javax.servlet.FilterChain;
 import javax.servlet.ServletException;
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
-import junit.framework.TestCase;
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.eq;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.isA;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.verify;

 /**
  * @author [email protected] (Bob Lee)
  */
 public class ServletTest extends TestCase {
+ private static final Key<HttpServletRequest> HTTP_REQ_KEY = Key.get(HttpServletRequest.class); + private static final Key<HttpServletResponse> HTTP_RESP_KEY = Key.get(HttpServletResponse.class);
+  private static final Key<Map<String, String[]>> REQ_PARAMS_KEY
+      = new Key<Map<String, String[]>>(RequestParameters.class) {};
+
private static final Key<InRequest> IN_REQUEST_KEY = Key.get(InRequest.class); private static final Key<InRequest> IN_REQUEST_NULL_KEY = Key.get(InRequest.class, Null.class); private static final Key<InSession> IN_SESSION_KEY = Key.get(InSession.class);
@@ -66,6 +77,52 @@
     //we need to clear the reference to the pipeline every test =(
     GuiceFilter.reset();
   }
+
+  public void testRequestAndResponseBindings() throws Exception {
+    final Injector injector = createInjector();
+ final HttpServletRequest request = createMock(HttpServletRequest.class); + final HttpServletResponse response = createMock(HttpServletResponse.class);
+    final Map<String, String[]> params = Maps.newHashMap();
+    String httpReqKey = HTTP_REQ_KEY.toString();
+    expect(request.getAttribute(httpReqKey)).andReturn(null);
+    request.setAttribute(httpReqKey, request);
+    expect(request.getAttribute(httpReqKey)).andReturn(request).anyTimes();
+
+    String httpRespKey = HTTP_RESP_KEY.toString();
+    expect(request.getAttribute(httpRespKey)).andReturn(null);
+    request.setAttribute(httpRespKey, response);
+ expect(request.getAttribute(httpRespKey)).andReturn(response).anyTimes();
+
+    String reqParamsKey = REQ_PARAMS_KEY.toString();
+    expect(request.getAttribute(reqParamsKey)).andReturn(null);
+    expect(request.getParameterMap()).andStubReturn(params);
+    request.setAttribute(reqParamsKey, params);
+ expect(request.getAttribute(reqParamsKey)).andReturn(params).anyTimes();
+    replay(request, response);
+
+    final boolean[] invoked = new boolean[1];
+    GuiceFilter filter = new GuiceFilter();
+    FilterChain filterChain = new FilterChain() {
+      @Override public void doFilter(ServletRequest servletRequest,
+          ServletResponse servletResponse) {
+        invoked[0] = true;
+        assertSame(request, servletRequest);
+        assertSame(request, injector.getInstance(ServletRequest.class));
+        assertSame(request, injector.getInstance(HTTP_REQ_KEY));
+
+        assertSame(response, servletResponse);
+        assertSame(response, injector.getInstance(ServletResponse.class));
+        assertSame(response, injector.getInstance(HTTP_RESP_KEY));
+
+        assertSame(params, servletRequest.getParameterMap());
+        assertSame(params, injector.getInstance(REQ_PARAMS_KEY));
+      }
+    };
+    filter.doFilter(request, response, filterChain);
+
+    assertTrue(invoked[0]);
+    verify(request, response);
+  }

   public void testNewRequestObject()
       throws CreationException, IOException, ServletException {
@@ -88,7 +145,6 @@
       public void doFilter(ServletRequest servletRequest,
           ServletResponse servletResponse) {
         invoked[0] = true;
-//        assertSame(request, servletRequest);
         assertNotNull(injector.getInstance(InRequest.class));
         assertNull(injector.getInstance(IN_REQUEST_NULL_KEY));
       }
@@ -163,7 +219,6 @@
       public void doFilter(ServletRequest servletRequest,
           ServletResponse servletResponse) {
         invoked[0] = true;
-//        assertSame(request, servletRequest);
         assertNotNull(injector.getInstance(InSession.class));
         assertNull(injector.getInstance(IN_SESSION_NULL_KEY));
       }
@@ -200,7 +255,6 @@
       public void doFilter(ServletRequest servletRequest,
           ServletResponse servletResponse) {
         invoked[0] = true;
-//        assertSame(request, servletRequest);

         assertSame(inSession, injector.getInstance(InSession.class));
         assertSame(inSession, injector.getInstance(InSession.class));

--
You received this message because you are subscribed to the Google Groups 
"google-guice-dev" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-guice-dev?hl=en.

Reply via email to