Author: tmjee
Date: Sat Sep 16 06:57:43 2006
New Revision: 446876

URL: http://svn.apache.org/viewvc?view=rev&rev=446876
Log:
WW-1448
  -  SessionAware Session map clear() method not functioning correctly


Modified:
    
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/SessionMap.java
    
struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/SessionMapTest.java

Modified: 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/SessionMap.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/SessionMap.java?view=diff&rev=446876&r1=446875&r2=446876
==============================================================================
--- 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/SessionMap.java
 (original)
+++ 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/SessionMap.java
 Sat Sep 16 06:57:43 2006
@@ -19,6 +19,7 @@
 
 import java.io.Serializable;
 import java.util.AbstractMap;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.HashSet;
@@ -84,14 +85,13 @@
         }
 
         synchronized (session) {
-            if (entries != null ) {
-                for ( Iterator iter = entries.iterator(); iter.hasNext(); ) {
-                    Object key = iter.next();
-                    session.removeAttribute(key.toString());
-                }
-                entries = null;
+               Enumeration<String> attributeNamesEnum = 
session.getAttributeNames();
+            String[] attributeNames = 
Collections.<String>list(attributeNamesEnum).toArray(new String[0]);
+            for (int a=0; a< attributeNames.length; a++) {
+               session.removeAttribute(attributeNames[a]);
             }
         }
+        
     }
 
     /**

Modified: 
struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/SessionMapTest.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/SessionMapTest.java?view=diff&rev=446876&r1=446875&r2=446876
==============================================================================
--- 
struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/SessionMapTest.java
 (original)
+++ 
struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/SessionMapTest.java
 Sat Sep 16 06:57:43 2006
@@ -17,7 +17,12 @@
  */
 package org.apache.struts2.dispatcher;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Enumeration;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import javax.servlet.http.HttpServletRequest;
@@ -28,6 +33,7 @@
 import com.mockobjects.constraint.Constraint;
 import com.mockobjects.constraint.IsAnything;
 import com.mockobjects.constraint.IsEqual;
+import com.mockobjects.dynamic.ConstraintMatcher;
 import com.mockobjects.dynamic.Mock;
 
 
@@ -40,8 +46,34 @@
 
 
     public void testClearInvalidatesTheSession() throws Exception {
+       List<String> attributeNames = new ArrayList<String>();
+       attributeNames.add("test");
+       attributeNames.add("anotherTest");
+       Enumeration attributeNamesEnum = 
Collections.enumeration(attributeNames);
+       
         MockSessionMap sessionMap = new MockSessionMap((HttpServletRequest) 
requestMock.proxy());
+        sessionMock.expect("setAttribute", 
+                       new Constraint[] {
+                               new IsEqual("test"), new IsEqual("test value")
+                       });
+        sessionMock.expect("setAttribute", 
+                       new Constraint[] {
+                               new IsEqual("anotherTest"), new 
IsEqual("another test value")
+                       });
+        sessionMock.expectAndReturn("getAttributeNames", attributeNamesEnum);
+        sessionMock.expect("removeAttribute", 
+                       new Constraint[]{
+                               new IsEqual("test")
+                       });
+        sessionMock.expect("removeAttribute", 
+                       new Constraint[]{
+                               new IsEqual("anotherTest")
+                       });
+        sessionMap.put("test", "test value");
+        sessionMap.put("anotherTest", "another test value");
         sessionMap.clear();
+        assertNull(sessionMap.get("test"));
+        assertNull(sessionMap.get("anotherTest"));
         sessionMock.verify();
     }
 
@@ -149,6 +181,11 @@
             map.put(key, value); //put the value into our map after putting it 
in the superclass map to avoid polluting the get call.
 
             return originalValue;
+        }
+        
+        public void clear() {
+               super.clear();
+               map.clear();
         }
     }
 }


Reply via email to