You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by cr...@apache.org on 2006/05/08 16:56:00 UTC

svn commit: r405065 - in /struts/shale/trunk/test-framework/src/java/org/apache/shale/test: base/AbstractJsfTestCase.java mock/MockHttpServletRequest.java mock/MockHttpSession.java mock/MockServletContext.java

Author: craigmcc
Date: Mon May  8 07:55:58 2006
New Revision: 405065

URL: http://svn.apache.org/viewcvs?rev=405065&view=rev
Log:
Support attribute added/removed/replaced event firing on the mock
ServletContext, HttpServletRequest, and HttpSession classes.

PR: SHALE-174

Modified:
    struts/shale/trunk/test-framework/src/java/org/apache/shale/test/base/AbstractJsfTestCase.java
    struts/shale/trunk/test-framework/src/java/org/apache/shale/test/mock/MockHttpServletRequest.java
    struts/shale/trunk/test-framework/src/java/org/apache/shale/test/mock/MockHttpSession.java
    struts/shale/trunk/test-framework/src/java/org/apache/shale/test/mock/MockServletContext.java

Modified: struts/shale/trunk/test-framework/src/java/org/apache/shale/test/base/AbstractJsfTestCase.java
URL: http://svn.apache.org/viewcvs/struts/shale/trunk/test-framework/src/java/org/apache/shale/test/base/AbstractJsfTestCase.java?rev=405065&r1=405064&r2=405065&view=diff
==============================================================================
--- struts/shale/trunk/test-framework/src/java/org/apache/shale/test/base/AbstractJsfTestCase.java (original)
+++ struts/shale/trunk/test-framework/src/java/org/apache/shale/test/base/AbstractJsfTestCase.java Mon May  8 07:55:58 2006
@@ -98,7 +98,9 @@
         servletContext = new MockServletContext();
         config = new MockServletConfig(servletContext);
         session = new MockHttpSession();
+        session.setServletContext(servletContext);
         request = new MockHttpServletRequest(session);
+        request.setServletContext(servletContext);
         response = new MockHttpServletResponse();
         
         // Set up JSF API Objects

Modified: struts/shale/trunk/test-framework/src/java/org/apache/shale/test/mock/MockHttpServletRequest.java
URL: http://svn.apache.org/viewcvs/struts/shale/trunk/test-framework/src/java/org/apache/shale/test/mock/MockHttpServletRequest.java?rev=405065&r1=405064&r2=405065&view=diff
==============================================================================
--- struts/shale/trunk/test-framework/src/java/org/apache/shale/test/mock/MockHttpServletRequest.java (original)
+++ struts/shale/trunk/test-framework/src/java/org/apache/shale/test/mock/MockHttpServletRequest.java Mon May  8 07:55:58 2006
@@ -32,7 +32,10 @@
 import java.util.Vector;
 
 import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletContext;
 import javax.servlet.ServletInputStream;
+import javax.servlet.ServletRequestAttributeEvent;
+import javax.servlet.ServletRequestAttributeListener;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
@@ -89,6 +92,15 @@
     // ----------------------------------------------------- Mock Object Methods
 
 
+    /**
+     * <p>Add a new listener instance that should be notified about
+     * attribute changes.</p>
+     */
+    public void addAttributeListener(ServletRequestAttributeListener listener) {
+        attributeListeners.add(listener);
+    }
+
+
     public void addDateHeader(String name, long value) {
 
         headers.add(name + ": " + formatDate(value));
@@ -126,6 +138,13 @@
     }
 
 
+    public ServletContext getServletContext() {
+
+        return this.servletContext;
+
+    }
+
+
     public void setHttpSession(HttpSession session) {
 
         this.session = session;
@@ -151,6 +170,13 @@
     }
 
 
+    public void setServletContext(ServletContext servletContext) {
+
+        this.servletContext = servletContext;
+
+    }
+
+
     public void setUserPrincipal(Principal principal) {
 
         this.principal = principal;
@@ -161,6 +187,7 @@
     // ------------------------------------------------------ Instance Variables
 
 
+    private List attributeListeners = new ArrayList();
     private HashMap attributes = new HashMap();
     private String contextPath = null;
     private List headers = new ArrayList();
@@ -169,6 +196,7 @@
     private String pathInfo = null;
     private Principal principal = null;
     private String queryString = null;
+    private ServletContext servletContext = null;
     private String servletPath = null;
     private HttpSession session = null;
 
@@ -608,17 +636,30 @@
 
     public void removeAttribute(String name) {
 
-        attributes.remove(name);
+        if (attributes.containsKey(name)) {
+            Object value = attributes.remove(name);
+            fireAttributeRemoved(name, value);
+        }
 
     }
 
 
     public void setAttribute(String name, Object value) {
 
+        if (name == null) {
+            throw new IllegalArgumentException("Attribute name cannot be null");
+        }
         if (value == null) {
-            attributes.remove(name);
+            removeAttribute(name);
+            return;
+        }
+        if (attributes.containsKey(name)) {
+            Object oldValue = attributes.get(name);
+            attributes.put(name, value);
+            fireAttributeReplaced(name, oldValue);
         } else {
             attributes.put(name, value);
+            fireAttributeAdded(name, value);
         }
 
     }
@@ -631,7 +672,52 @@
     }
 
 
-    // --------------------------------------------------------- Support Methods
+    // --------------------------------------------------------- Private Methods
+
+
+    private void fireAttributeAdded(String key, Object value) {
+        if (attributeListeners.size() < 1) {
+            return;
+        }
+        ServletRequestAttributeEvent event =
+                new ServletRequestAttributeEvent(getServletContext(), this, key, value);
+        Iterator listeners = attributeListeners.iterator();
+        while (listeners.hasNext()) {
+            ServletRequestAttributeListener listener =
+                    (ServletRequestAttributeListener) listeners.next();
+            listener.attributeAdded(event);
+        }
+    }
+
+
+    private void fireAttributeRemoved(String key, Object value) {
+        if (attributeListeners.size() < 1) {
+            return;
+        }
+        ServletRequestAttributeEvent event =
+                new ServletRequestAttributeEvent(getServletContext(), this, key, value);
+        Iterator listeners = attributeListeners.iterator();
+        while (listeners.hasNext()) {
+            ServletRequestAttributeListener listener =
+                    (ServletRequestAttributeListener) listeners.next();
+            listener.attributeRemoved(event);
+        }
+    }
+
+
+    private void fireAttributeReplaced(String key, Object value) {
+        if (attributeListeners.size() < 1) {
+            return;
+        }
+        ServletRequestAttributeEvent event =
+                new ServletRequestAttributeEvent(getServletContext(), this, key, value);
+        Iterator listeners = attributeListeners.iterator();
+        while (listeners.hasNext()) {
+            ServletRequestAttributeListener listener =
+                    (ServletRequestAttributeListener) listeners.next();
+            listener.attributeAdded(event);
+        }
+    }
 
 
     /**

Modified: struts/shale/trunk/test-framework/src/java/org/apache/shale/test/mock/MockHttpSession.java
URL: http://svn.apache.org/viewcvs/struts/shale/trunk/test-framework/src/java/org/apache/shale/test/mock/MockHttpSession.java?rev=405065&r1=405064&r2=405065&view=diff
==============================================================================
--- struts/shale/trunk/test-framework/src/java/org/apache/shale/test/mock/MockHttpSession.java (original)
+++ struts/shale/trunk/test-framework/src/java/org/apache/shale/test/mock/MockHttpSession.java Mon May  8 07:55:58 2006
@@ -16,11 +16,16 @@
 
 package org.apache.shale.test.mock;
 
+import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
 
 import javax.servlet.ServletContext;
 import javax.servlet.http.HttpSession;
+import javax.servlet.http.HttpSessionAttributeListener;
+import javax.servlet.http.HttpSessionBindingEvent;
 import javax.servlet.http.HttpSessionContext;
 
 /**
@@ -53,6 +58,22 @@
     // ----------------------------------------------------- Mock Object Methods
 
 
+    /**
+     * <p>Add a new listener instance that should be notified about
+     * attribute changes.</p>
+     */
+    public void addAttributeListener(HttpSessionAttributeListener listener) {
+        attributeListeners.add(listener);
+    }
+
+
+    public ServletContext getServletContext() {
+
+        return this.servletContext;
+
+    }
+
+
     public void setServletContext(ServletContext servletContext) {
 
         this.servletContext = servletContext;
@@ -63,6 +84,7 @@
     // ------------------------------------------------------ Instance Variables
 
 
+    private List attributeListeners = new ArrayList();
     private HashMap attributes = new HashMap();
     private String id = "123";
     private ServletContext servletContext = null;
@@ -121,13 +143,6 @@
     }
 
 
-    public ServletContext getServletContext() {
-
-        return this.servletContext;
-
-    }
-
-
     public HttpSessionContext getSessionContext() {
 
         throw new UnsupportedOperationException();
@@ -172,7 +187,10 @@
 
     public void removeAttribute(String name) {
 
-        attributes.remove(name);
+        if (attributes.containsKey(name)) {
+            Object value = attributes.remove(name);
+            fireAttributeRemoved(name, value);
+        }
 
     }
 
@@ -186,10 +204,20 @@
 
     public void setAttribute(String name, Object value) {
 
+        if (name == null) {
+            throw new IllegalArgumentException("Attribute name cannot be null");
+        }
         if (value == null) {
-            attributes.remove(name);
+            removeAttribute(name);
+            return;
+        }
+        if (attributes.containsKey(name)) {
+            Object oldValue = attributes.get(name);
+            attributes.put(name, value);
+            fireAttributeReplaced(name, oldValue);
         } else {
             attributes.put(name, value);
+            fireAttributeAdded(name, value);
         }
 
     }
@@ -199,6 +227,54 @@
 
         throw new UnsupportedOperationException();
 
+    }
+
+
+    // --------------------------------------------------------- Support Methods
+
+
+    private void fireAttributeAdded(String key, Object value) {
+        if (attributeListeners.size() < 1) {
+            return;
+        }
+        HttpSessionBindingEvent event =
+                new HttpSessionBindingEvent(this, key, value);
+        Iterator listeners = attributeListeners.iterator();
+        while (listeners.hasNext()) {
+            HttpSessionAttributeListener listener =
+                    (HttpSessionAttributeListener) listeners.next();
+            listener.attributeAdded(event);
+        }
+    }
+
+
+    private void fireAttributeRemoved(String key, Object value) {
+        if (attributeListeners.size() < 1) {
+            return;
+        }
+        HttpSessionBindingEvent event =
+                new HttpSessionBindingEvent(this, key, value);
+        Iterator listeners = attributeListeners.iterator();
+        while (listeners.hasNext()) {
+            HttpSessionAttributeListener listener =
+                    (HttpSessionAttributeListener) listeners.next();
+            listener.attributeRemoved(event);
+        }
+    }
+
+
+    private void fireAttributeReplaced(String key, Object value) {
+        if (attributeListeners.size() < 1) {
+            return;
+        }
+        HttpSessionBindingEvent event =
+                new HttpSessionBindingEvent(this, key, value);
+        Iterator listeners = attributeListeners.iterator();
+        while (listeners.hasNext()) {
+            HttpSessionAttributeListener listener =
+                    (HttpSessionAttributeListener) listeners.next();
+            listener.attributeAdded(event);
+        }
     }
 
 

Modified: struts/shale/trunk/test-framework/src/java/org/apache/shale/test/mock/MockServletContext.java
URL: http://svn.apache.org/viewcvs/struts/shale/trunk/test-framework/src/java/org/apache/shale/test/mock/MockServletContext.java?rev=405065&r1=405064&r2=405065&view=diff
==============================================================================
--- struts/shale/trunk/test-framework/src/java/org/apache/shale/test/mock/MockServletContext.java (original)
+++ struts/shale/trunk/test-framework/src/java/org/apache/shale/test/mock/MockServletContext.java Mon May  8 07:55:58 2006
@@ -21,14 +21,19 @@
 import java.io.InputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.HashSet;
 import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
 import java.util.Set;
 
 import javax.servlet.RequestDispatcher;
 import javax.servlet.Servlet;
 import javax.servlet.ServletContext;
+import javax.servlet.ServletContextAttributeEvent;
+import javax.servlet.ServletContextAttributeListener;
 import javax.servlet.ServletException;
 
 
@@ -53,6 +58,15 @@
 
 
     /**
+     * <p>Add a new listener instance that should be notified about
+     * attribute changes.</p>
+     */
+    public void addAttributeListener(ServletContextAttributeListener listener) {
+        attributeListeners.add(listener);
+    }
+
+
+    /**
      * <p>Add a context initialization parameter to the set of
      * parameters recognized by this instance.</p>
      */
@@ -88,6 +102,7 @@
     // ------------------------------------------------------ Instance Variables
 
 
+    private List attributeListeners = new ArrayList();
     private Hashtable attributes = new Hashtable();
     private File documentRoot = null;
     private Hashtable mimeTypes = new Hashtable();
@@ -329,15 +344,80 @@
 
     public void removeAttribute(String name) {
 
-        attributes.remove(name);
+        if (attributes.containsKey(name)) {
+            Object value = attributes.remove(name);
+            fireAttributeRemoved(name, value);
+        }
 
     }
 
 
     public void setAttribute(String name, Object value) {
 
-        attributes.put(name, value);
+        if (name == null) {
+            throw new IllegalArgumentException("Attribute name cannot be null");
+        }
+        if (value == null) {
+            removeAttribute(name);
+            return;
+        }
+        if (attributes.containsKey(name)) {
+            Object oldValue = attributes.get(name);
+            attributes.put(name, value);
+            fireAttributeReplaced(name, oldValue);
+        } else {
+            attributes.put(name, value);
+            fireAttributeAdded(name, value);
+        }
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
 
+
+    private void fireAttributeAdded(String key, Object value) {
+        if (attributeListeners.size() < 1) {
+            return;
+        }
+        ServletContextAttributeEvent event =
+                new ServletContextAttributeEvent(this, key, value);
+        Iterator listeners = attributeListeners.iterator();
+        while (listeners.hasNext()) {
+            ServletContextAttributeListener listener =
+                    (ServletContextAttributeListener) listeners.next();
+            listener.attributeAdded(event);
+        }
+    }
+
+
+    private void fireAttributeRemoved(String key, Object value) {
+        if (attributeListeners.size() < 1) {
+            return;
+        }
+        ServletContextAttributeEvent event =
+                new ServletContextAttributeEvent(this, key, value);
+        Iterator listeners = attributeListeners.iterator();
+        while (listeners.hasNext()) {
+            ServletContextAttributeListener listener =
+                    (ServletContextAttributeListener) listeners.next();
+            listener.attributeRemoved(event);
+        }
+    }
+
+
+    private void fireAttributeReplaced(String key, Object value) {
+        if (attributeListeners.size() < 1) {
+            return;
+        }
+        ServletContextAttributeEvent event =
+                new ServletContextAttributeEvent(this, key, value);
+        Iterator listeners = attributeListeners.iterator();
+        while (listeners.hasNext()) {
+            ServletContextAttributeListener listener =
+                    (ServletContextAttributeListener) listeners.next();
+            listener.attributeAdded(event);
+        }
     }