You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by ma...@apache.org on 2009/12/27 19:01:09 UTC

svn commit: r894087 [31/46] - in /struts/xwork/trunk: ./ assembly/ assembly/src/ assembly/src/main/ assembly/src/main/assembly/ assembly/src/main/resources/ core/ core/src/ core/src/main/ core/src/main/java/ core/src/main/java/com/ core/src/main/java/c...

Added: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/MethodFilterInterceptorUtilTest.java
URL: http://svn.apache.org/viewvc/struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/MethodFilterInterceptorUtilTest.java?rev=894087&view=auto
==============================================================================
--- struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/MethodFilterInterceptorUtilTest.java (added)
+++ struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/MethodFilterInterceptorUtilTest.java Sun Dec 27 18:00:13 2009
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2002-2008 by OpenSymphony
+ * All rights reserved.
+ */
+package com.opensymphony.xwork2.interceptor;
+
+import com.opensymphony.xwork2.XWorkTestCase;
+
+import java.util.HashSet;
+
+public class MethodFilterInterceptorUtilTest extends XWorkTestCase {
+    
+    public void testApplyMethodNoWildcards() {
+        
+        HashSet<String> included= new HashSet<String>();
+        included.add("included");
+        included.add("includedAgain");
+
+        HashSet<String> excluded= new HashSet<String>();
+        excluded.add("excluded");
+        excluded.add("excludedAgain");
+        
+        // test expected behavior
+        assertFalse(MethodFilterInterceptorUtil.applyMethod(excluded, included, "excluded"));
+        assertTrue(MethodFilterInterceptorUtil.applyMethod(excluded, included, "included"));
+
+        // test precedence
+        included.add("excluded");
+        assertTrue(MethodFilterInterceptorUtil.applyMethod(excluded, included, "excluded"));
+
+    }
+
+    public void testApplyMethodWithWildcards() {
+
+        HashSet<String> included= new HashSet<String>();
+        included.add("included*");
+
+        HashSet<String> excluded= new HashSet<String>();
+        excluded.add("excluded*");
+        
+        assertTrue(MethodFilterInterceptorUtil.applyMethod(excluded, included, "includedMethod"));
+        assertFalse(MethodFilterInterceptorUtil.applyMethod(excluded, included, "excludedMethod"));
+
+        // test precedence
+        included.clear();
+        excluded.clear();
+        included.add("wildIncluded");
+        excluded.add("wild*");
+        
+        assertTrue(MethodFilterInterceptorUtil.applyMethod(excluded, included, "wildIncluded"));
+        assertFalse(MethodFilterInterceptorUtil.applyMethod(excluded, included, "wildNotIncluded"));
+
+        // test precedence
+        included.clear();
+        excluded.clear();
+        included.add("*");
+        excluded.add("excluded");
+
+        assertTrue(MethodFilterInterceptorUtil.applyMethod(excluded, included, "anyMethod"));
+
+        // test precedence
+        included.clear();
+        excluded.clear();
+        included.add("included");
+        excluded.add("*");
+
+        assertTrue(MethodFilterInterceptorUtil.applyMethod(excluded, included, "included"));
+        assertFalse(MethodFilterInterceptorUtil.applyMethod(excluded, included, "shouldBeExcluded"));
+
+    }
+
+}

Propchange: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/MethodFilterInterceptorUtilTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/MethodFilterInterceptorUtilTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/ModelDrivenInterceptorTest.java
URL: http://svn.apache.org/viewvc/struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/ModelDrivenInterceptorTest.java?rev=894087&view=auto
==============================================================================
--- struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/ModelDrivenInterceptorTest.java (added)
+++ struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/ModelDrivenInterceptorTest.java Sun Dec 27 18:00:13 2009
@@ -0,0 +1,101 @@
+/*
+ * Copyright (c) 2002-2003 by OpenSymphony
+ * All rights reserved.
+ */
+package com.opensymphony.xwork2.interceptor;
+
+import com.mockobjects.dynamic.ConstraintMatcher;
+import com.mockobjects.dynamic.Mock;
+import com.opensymphony.xwork2.*;
+import com.opensymphony.xwork2.util.ValueStack;
+
+import java.util.Date;
+
+
+/**
+ * @author $Author$
+ * @version $Revision$
+ */
+public class ModelDrivenInterceptorTest extends XWorkTestCase {
+
+    Action action;
+    Mock mockActionInvocation;
+    ModelDrivenInterceptor modelDrivenInterceptor;
+    Object model;
+    PreResultListener preResultListener;
+
+
+    public void testModelDrivenGetsPushedOntoStack() throws Exception {
+        ValueStack stack = ActionContext.getContext().getValueStack();
+        action = new ModelDrivenAction();
+        mockActionInvocation.expectAndReturn("getAction", action);
+        mockActionInvocation.expectAndReturn("getStack", stack);
+        mockActionInvocation.expectAndReturn("invoke", "foo");
+
+        modelDrivenInterceptor.intercept((ActionInvocation) mockActionInvocation.proxy());
+
+        Object topOfStack = stack.pop();
+        assertEquals("our model should be on the top of the stack", model, topOfStack);
+    }
+
+    public void testModelDrivenUpdatedAndGetsPushedOntoStack() throws Exception {
+        ValueStack stack = ActionContext.getContext().getValueStack();
+        action = new ModelDrivenAction();
+        mockActionInvocation.expectAndReturn("getAction", action);
+        mockActionInvocation.matchAndReturn("getStack", stack);
+        mockActionInvocation.expectAndReturn("invoke", "foo");
+        mockActionInvocation.expect("addPreResultListener", new ConstraintMatcher() {
+
+            public boolean matches(Object[] objects) {
+                preResultListener = (PreResultListener) objects[0];
+                return true;
+            }
+
+            public Object[] getConstraints() {
+                return new Object[0];  //To change body of implemented methods use File | Settings | File Templates.
+            }
+        });
+        modelDrivenInterceptor.setRefreshModelBeforeResult(true);
+
+        modelDrivenInterceptor.intercept((ActionInvocation) mockActionInvocation.proxy());
+        assertNotNull(preResultListener);
+        model = "this is my model";
+        preResultListener.beforeResult((ActionInvocation) mockActionInvocation.proxy(), "success");
+
+        Object topOfStack = stack.pop();
+        assertEquals("our model should be on the top of the stack", model, topOfStack);
+        assertEquals(1, stack.getRoot().size());
+    }
+
+    public void testStackNotModifedForNormalAction() throws Exception {
+        action = new ActionSupport();
+        mockActionInvocation.expectAndReturn("getAction", action);
+        mockActionInvocation.expectAndReturn("invoke", "foo");
+
+        // nothing should happen
+        modelDrivenInterceptor.intercept((ActionInvocation) mockActionInvocation.proxy());
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        mockActionInvocation = new Mock(ActionInvocation.class);
+        modelDrivenInterceptor = new ModelDrivenInterceptor();
+        model = new Date(); // any object will do
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+        mockActionInvocation.verify();
+    }
+
+
+    public class ModelDrivenAction extends ActionSupport implements ModelDriven {
+
+        public Object getModel() {
+            return model;
+        }
+
+    }
+}

Propchange: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/ModelDrivenInterceptorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/ModelDrivenInterceptorTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/ParameterFilterInterceptorTest.java
URL: http://svn.apache.org/viewvc/struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/ParameterFilterInterceptorTest.java?rev=894087&view=auto
==============================================================================
--- struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/ParameterFilterInterceptorTest.java (added)
+++ struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/ParameterFilterInterceptorTest.java Sun Dec 27 18:00:13 2009
@@ -0,0 +1,114 @@
+/*
+ * Copyright (c) 2002-2006 by OpenSymphony
+ * All rights reserved.
+ */
+package com.opensymphony.xwork2.interceptor;
+
+import com.mockobjects.dynamic.Mock;
+import com.opensymphony.xwork2.*;
+import com.opensymphony.xwork2.util.ValueStack;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Unit test for {@link ParameterFilterInterceptor}.
+ *
+ * @author Gabe
+ */
+public class ParameterFilterInterceptorTest extends XWorkTestCase {
+
+    ActionInvocation invocation;
+    ParameterFilterInterceptor interceptor;
+    Mock mockInvocation;
+    ValueStack stack;
+    Map contextMap;
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        contextMap=new HashMap();
+        stack = ActionContext.getContext().getValueStack();
+        mockInvocation = new Mock(ActionInvocation.class);
+        mockInvocation.expectAndReturn("getStack", stack);
+        mockInvocation.expectAndReturn("invoke", Action.SUCCESS);
+        mockInvocation.expectAndReturn("getInvocationContext", new ActionContext(contextMap));
+        mockInvocation.matchAndReturn("getAction", new SimpleAction());
+        invocation = (ActionInvocation) mockInvocation.proxy();
+        interceptor = new ParameterFilterInterceptor();
+        interceptor.init();
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+        interceptor.destroy();
+    }
+
+    public void testBasicBlockAll() throws Exception {
+        runFilterTest(null,null,true,new String[] {"blah", "bladeblah", "bladebladeblah"});
+        assertEquals(0, getParameterNames().size());
+    }
+    
+    public void testBasicAllowed() throws Exception {
+        runFilterTest("blah",null,true,new String[] {"blah"});
+        assertEquals(1, getParameterNames().size()); 
+    }
+    
+    public void testBasicBlocked() throws Exception {
+        runFilterTest(null,"blah",false,new String[] {"blah"});
+        assertEquals(0, getParameterNames().size()); 
+    }      
+    public void testAllSubpropertiesBlocked() throws Exception {
+        runFilterTest(null,"blah",false,new String[] {"blah.deblah", "blah.somethingelse", "blah(22)"});
+        assertEquals(0, getParameterNames().size()); 
+    }
+
+    public void testAllSubpropertiesAllowed() throws Exception {
+        runFilterTest("blah",null,true,
+                new String[] {"blah.deblah", "blah.somethingelse", "blah(22)"});
+        assertEquals(3, getParameterNames().size()); 
+    }
+    
+    public void testTreeBlocking() throws Exception {
+        runFilterTest("blah.deblah","blah,blah.deblah.deblah",false,
+                new String[] {"blah", "blah.deblah", "blah.deblah.deblah"});
+        Collection paramNames=getParameterNames();
+        assertEquals(1, paramNames.size());
+        assertEquals(paramNames.iterator().next(),"blah.deblah");
+    }
+    
+    public void testEnsureOnlyPropsBlocked() throws Exception {
+        runFilterTest(null,"blah",false,new String[] {"blahdeblah"});
+        assertEquals(1, getParameterNames().size()); 
+    }
+  
+    
+    private void runFilterTest(String allowed, String blocked, boolean defaultBlocked, String[] paramNames) throws Exception {
+        interceptor.setAllowed(allowed);
+        interceptor.setBlocked(blocked);
+        interceptor.setDefaultBlock(defaultBlocked);
+        setUpParameters(paramNames);
+        runAction();
+        
+    }
+    
+    private void setUpParameters(String [] paramNames) {
+        Map params=new HashMap();
+        for (String paramName : paramNames) {
+            params.put(paramName, "irrelevant what this is");
+
+        }
+        contextMap.put(ActionContext.PARAMETERS, params);
+    }
+    
+    private Collection getParameterNames() {
+        return ((Map)contextMap.get(ActionContext.PARAMETERS)).keySet();
+    }
+    
+    public void runAction() throws Exception  {
+        interceptor.intercept(invocation);
+    }
+    
+}

Propchange: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/ParameterFilterInterceptorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/ParameterFilterInterceptorTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/ParameterRemoverInterceptorTest.java
URL: http://svn.apache.org/viewvc/struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/ParameterRemoverInterceptorTest.java?rev=894087&view=auto
==============================================================================
--- struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/ParameterRemoverInterceptorTest.java (added)
+++ struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/ParameterRemoverInterceptorTest.java Sun Dec 27 18:00:13 2009
@@ -0,0 +1,116 @@
+package com.opensymphony.xwork2.interceptor;
+
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.ActionInvocation;
+import com.opensymphony.xwork2.ActionSupport;
+import junit.framework.TestCase;
+import org.easymock.MockControl;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * @author tmjee
+ * @version $Date$ $Id$
+ */
+public class ParameterRemoverInterceptorTest extends TestCase {
+
+	protected Map contextMap;
+	protected ActionContext context;
+	protected MockControl actionInvocationControl;
+	protected ActionInvocation actionInvocation;
+	
+	@Override
+    protected void setUp() throws Exception {
+		contextMap = new LinkedHashMap();
+		context = new ActionContext(contextMap);
+		
+		actionInvocationControl = MockControl.createControl(ActionInvocation.class);
+		actionInvocation = (ActionInvocation) actionInvocationControl.getMock();
+		actionInvocationControl.expectAndDefaultReturn(actionInvocation.getAction(),  new SampleAction());
+		actionInvocationControl.expectAndDefaultReturn(actionInvocation.getInvocationContext(), context);
+		actionInvocationControl.expectAndDefaultReturn(actionInvocation.invoke(), "success");
+	}
+	
+	public void testInterception1() throws Exception {
+		contextMap.put(ActionContext.PARAMETERS, new LinkedHashMap() {
+			private static final long serialVersionUID = 0L;
+			{
+				put("param1", new String[] { "paramValue1" });
+				put("param2", new String[] { "paramValue2" });
+				put("param3", new String[] { "paramValue3" });
+				put("param", new String[] { "paramValue" });
+			}
+		});
+		
+		actionInvocationControl.replay();
+		
+		ParameterRemoverInterceptor interceptor = new ParameterRemoverInterceptor();
+		interceptor.setParamNames("param1,param2");
+		interceptor.setParamValues("paramValue1,paramValue2");
+		interceptor.intercept(actionInvocation);
+		
+		Map params = (Map) contextMap.get(ActionContext.PARAMETERS);
+		assertEquals(params.size(), 2);
+		assertTrue(params.containsKey("param3"));
+		assertTrue(params.containsKey("param"));
+		assertEquals(((String[])params.get("param3"))[0], "paramValue3");
+		assertEquals(((String[])params.get("param"))[0], "paramValue");
+		
+		actionInvocationControl.verify();
+	}
+	
+	
+	public void testInterception2() throws Exception {
+		contextMap.put(ActionContext.PARAMETERS, new LinkedHashMap() {
+			private static final long serialVersionUID = 0L;
+			{
+				put("param1", new String[] { "paramValue2" });
+				put("param2", new String[] { "paramValue1" });
+			}
+		});
+		
+		actionInvocationControl.replay();
+		
+		ParameterRemoverInterceptor interceptor = new ParameterRemoverInterceptor();
+		interceptor.setParamNames("param1,param2");
+		interceptor.setParamValues("paramValue1,paramValue2");
+		interceptor.intercept(actionInvocation);
+		
+		Map params = (Map) contextMap.get(ActionContext.PARAMETERS);
+		assertEquals(params.size(), 0);
+		
+		actionInvocationControl.verify();
+	}
+	
+	
+	public void testInterception3() throws Exception {
+		contextMap.put(ActionContext.PARAMETERS, new LinkedHashMap() {
+			private static final long serialVersionUID = 0L;
+			{
+				put("param1", new String[] { "paramValueOne" });
+				put("param2", new String[] { "paramValueTwo" });
+			}
+		});
+		
+		actionInvocationControl.replay();
+		
+		ParameterRemoverInterceptor interceptor = new ParameterRemoverInterceptor();
+		interceptor.setParamNames("param1,param2");
+		interceptor.setParamValues("paramValue1,paramValue2");
+		interceptor.intercept(actionInvocation);
+		
+		Map params = (Map) contextMap.get(ActionContext.PARAMETERS);
+		assertEquals(params.size(), 2);
+		assertTrue(params.containsKey("param1"));
+		assertTrue(params.containsKey("param2"));
+		assertEquals(((String[])params.get("param1"))[0], "paramValueOne");
+		assertEquals(((String[])params.get("param2"))[0], "paramValueTwo");
+		
+		actionInvocationControl.verify();
+	}
+	
+	class SampleAction extends ActionSupport {
+		private static final long serialVersionUID = 7489487258845368260L;
+	}
+}

Propchange: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/ParameterRemoverInterceptorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/ParameterRemoverInterceptorTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/ParametersInterceptorTest.java
URL: http://svn.apache.org/viewvc/struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/ParametersInterceptorTest.java?rev=894087&view=auto
==============================================================================
--- struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/ParametersInterceptorTest.java (added)
+++ struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/ParametersInterceptorTest.java Sun Dec 27 18:00:13 2009
@@ -0,0 +1,469 @@
+/*
+ * Copyright (c) 2002-2006 by OpenSymphony
+ * All rights reserved.
+ */
+package com.opensymphony.xwork2.interceptor;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import ognl.PropertyAccessor;
+
+import com.opensymphony.xwork2.Action;
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.ActionProxy;
+import com.opensymphony.xwork2.ModelDrivenAction;
+import com.opensymphony.xwork2.SimpleAction;
+import com.opensymphony.xwork2.TestBean;
+import com.opensymphony.xwork2.TextProvider;
+import com.opensymphony.xwork2.XWorkTestCase;
+import com.opensymphony.xwork2.config.entities.ActionConfig;
+import com.opensymphony.xwork2.config.providers.MockConfigurationProvider;
+import com.opensymphony.xwork2.config.providers.XmlConfigurationProvider;
+import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
+import com.opensymphony.xwork2.mock.MockActionInvocation;
+import com.opensymphony.xwork2.ognl.OgnlValueStack;
+import com.opensymphony.xwork2.ognl.OgnlValueStackFactory;
+import com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor;
+import com.opensymphony.xwork2.util.CompoundRoot;
+import com.opensymphony.xwork2.util.ValueStack;
+import com.opensymphony.xwork2.util.ValueStackFactory;
+
+
+/**
+ * Unit test for {@link ParametersInterceptor}.
+ *
+ * @author Jason Carreira
+ */
+public class ParametersInterceptorTest extends XWorkTestCase {
+
+    public void testParameterNameAware() {
+        ParametersInterceptor pi = new ParametersInterceptor();
+        container.inject(pi);
+        final Map actual = new HashMap();
+        pi.setValueStackFactory(createValueStackFactory(actual));
+        ValueStack stack = createStubValueStack(actual);
+        final Map expected = new HashMap() {
+            {
+                put("fooKey", "fooValue");
+                put("barKey", "barValue");
+            }
+        };
+        Object a = new ParameterNameAware() {
+            public boolean acceptableParameterName(String parameterName) {
+                return expected.containsKey(parameterName);
+            }
+        };
+        Map parameters = new HashMap() {
+            {
+                put("fooKey", "fooValue");
+                put("barKey", "barValue");
+                put("error", "error");
+            }
+        };
+        pi.setParameters(a, stack, parameters);
+        assertEquals(expected, actual);
+    }
+
+    public void testDoesNotAllowMethodInvocations() throws Exception {
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("@java.lang.System@exit(1).dummy", "dumb value");
+
+        HashMap<String, Object> extraContext = new HashMap<String, Object>();
+        extraContext.put(ActionContext.PARAMETERS, params);
+
+        ActionProxy proxy = actionProxyFactory.createActionProxy("", MockConfigurationProvider.MODEL_DRIVEN_PARAM_TEST, extraContext);
+        assertEquals(Action.SUCCESS, proxy.execute());
+
+        ModelDrivenAction action = (ModelDrivenAction) proxy.getAction();
+        TestBean model = (TestBean) action.getModel();
+
+        String property = System.getProperty("xwork.security.test");
+        assertNull(property);
+    }
+
+    public void testModelDrivenParameters() throws Exception {
+        Map<String, Object> params = new HashMap<String, Object>();
+        final String fooVal = "com.opensymphony.xwork2.interceptor.ParametersInterceptorTest.foo";
+        params.put("foo", fooVal);
+
+        final String nameVal = "com.opensymphony.xwork2.interceptor.ParametersInterceptorTest.name";
+        params.put("name", nameVal);
+        params.put("count", "15");
+
+        HashMap<String, Object> extraContext = new HashMap<String, Object>();
+        extraContext.put(ActionContext.PARAMETERS, params);
+
+        ActionProxy proxy = actionProxyFactory.createActionProxy("", MockConfigurationProvider.MODEL_DRIVEN_PARAM_TEST, extraContext);
+        assertEquals(Action.SUCCESS, proxy.execute());
+
+        ModelDrivenAction action = (ModelDrivenAction) proxy.getAction();
+        TestBean model = (TestBean) action.getModel();
+        assertEquals(nameVal, model.getName());
+        assertEquals(15, model.getCount());
+        assertEquals(fooVal, action.getFoo());
+    }
+
+    public void testParametersDoesNotAffectSession() throws Exception {
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("blah", "This is blah");
+        params.put("#session.foo", "Foo");
+        params.put("\u0023session[\'user\']", "0wn3d");
+        params.put("\\u0023session[\'user\']", "0wn3d");
+        params.put("\u0023session.user2", "0wn3d");
+        params.put("\\u0023session.user2", "0wn3d");
+        params.put("('\u0023'%20%2b%20'session[\'user3\']')(unused)", "0wn3d");
+        params.put("('\\u0023' + 'session[\\'user4\\']')(unused)", "0wn3d");
+        params.put("('\u0023'%2b'session[\'user5\']')(unused)", "0wn3d");
+        params.put("('\\u0023'%2b'session[\'user5\']')(unused)", "0wn3d");
+
+        HashMap<String, Object> extraContext = new HashMap<String, Object>();
+        extraContext.put(ActionContext.PARAMETERS, params);
+
+        ActionProxy proxy = actionProxyFactory.createActionProxy("", MockConfigurationProvider.PARAM_INTERCEPTOR_ACTION_NAME, extraContext);
+        ValueStack stack = proxy.getInvocation().getStack();
+        HashMap<String, Object> session = new HashMap<String, Object>();
+        stack.getContext().put("session", session);
+        proxy.execute();
+        assertEquals("This is blah", ((SimpleAction) proxy.getAction()).getBlah());
+        assertNull(session.get("foo"));
+        assertNull(session.get("user"));
+        assertNull(session.get("user2"));
+        assertNull(session.get("user3"));
+        assertNull(session.get("user4"));
+        assertNull(session.get("user5"));
+    }
+
+    public void testParameters() throws Exception {
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("blah", "This is blah");
+
+        HashMap<String, Object> extraContext = new HashMap<String, Object>();
+        extraContext.put(ActionContext.PARAMETERS, params);
+
+        ActionProxy proxy = actionProxyFactory.createActionProxy("", MockConfigurationProvider.PARAM_INTERCEPTOR_ACTION_NAME, extraContext);
+        proxy.execute();
+        assertEquals("This is blah", ((SimpleAction) proxy.getAction()).getBlah());
+    }
+
+     public void testParametersWithSpacesInTheName() throws Exception {
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("theProtectedMap['p0 p1']", "test1");
+        params.put("theProtectedMap['p0p1 ']", "test2");
+        params.put("theProtectedMap[' p0p1 ']", "test3");
+        params.put("theProtectedMap[' p0 p1 ']", "test4");
+
+        HashMap<String, Object> extraContext = new HashMap<String, Object>();
+        extraContext.put(ActionContext.PARAMETERS, params);
+
+        ActionProxy proxy = actionProxyFactory.createActionProxy("", MockConfigurationProvider.PARAM_INTERCEPTOR_ACTION_NAME, extraContext);
+        proxy.execute();
+        Map<String, String> existingMap =  ((SimpleAction) proxy.getAction()).getTheProtectedMap();
+        assertEquals(4, existingMap.size());
+        assertEquals("test1", existingMap.get("p0 p1"));
+        assertEquals("test2", existingMap.get("p0p1 "));
+        assertEquals("test3", existingMap.get(" p0p1 "));
+        assertEquals("test4", existingMap.get(" p0 p1 "));
+    }
+
+    public void testExcludedTrickyParameters() throws Exception {
+        Map<String, Object> params = new HashMap<String, Object>() {
+            {
+                put("blah", "This is blah");
+                put("name", "try_1");
+                put("(name)", "try_2");
+                put("['name']", "try_3");
+                put("['na' + 'me']", "try_4");
+                put("{name}[0]", "try_5");
+                put("(new string{'name'})[0]", "try_6");
+                put("#{key: 'name'}.key", "try_7");
+
+            }
+        };
+
+        HashMap<String, Object> extraContext = new HashMap<String, Object>();
+        extraContext.put(ActionContext.PARAMETERS, params);
+
+        ActionProxy proxy = actionProxyFactory.createActionProxy("", MockConfigurationProvider.PARAM_INTERCEPTOR_ACTION_NAME, extraContext);
+
+        ActionConfig config = configuration.getRuntimeConfiguration().getActionConfig("", MockConfigurationProvider.PARAM_INTERCEPTOR_ACTION_NAME);
+        ParametersInterceptor pi =(ParametersInterceptor) config.getInterceptors().get(0).getInterceptor();
+        pi.setExcludeParams("name");
+
+        proxy.execute();
+
+        SimpleAction action = (SimpleAction) proxy.getAction();
+        assertNull(action.getName());
+        assertEquals("This is blah", (action).getBlah());
+    }
+
+    public void testAcceptedTrickyParameters() throws Exception {
+        Map<String, Object> params = new HashMap<String, Object>() {
+            {
+                put("blah", "This is blah");
+                put("baz", "123");
+                put("name", "try_1");
+                put("(name)", "try_2");
+                put("['name']", "try_3");
+                put("['na' + 'me']", "try_4");
+                put("{name}[0]", "try_5");
+                put("(new string{'name'})[0]", "try_6");
+                put("#{key: 'name'}.key", "try_7");
+            }
+        };
+
+        HashMap<String, Object> extraContext = new HashMap<String, Object>();
+        extraContext.put(ActionContext.PARAMETERS, params);
+
+        ActionProxy proxy = actionProxyFactory.createActionProxy("", MockConfigurationProvider.PARAM_INTERCEPTOR_ACTION_NAME, extraContext);
+
+        ActionConfig config = configuration.getRuntimeConfiguration().getActionConfig("", MockConfigurationProvider.PARAM_INTERCEPTOR_ACTION_NAME);
+        ParametersInterceptor pi =(ParametersInterceptor) config.getInterceptors().get(0).getInterceptor();
+        pi.setAcceptParamNames("blah, baz");
+
+        proxy.execute();
+
+        SimpleAction action = (SimpleAction) proxy.getAction();
+        assertNull(action.getName());
+        assertEquals("This is blah", (action).getBlah());
+        assertEquals(123, action.getBaz());
+    }
+
+
+    public void testParametersNotAccessPrivateVariables() throws Exception {
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("protectedMap.foo", "This is blah");
+        params.put("theProtectedMap.boo", "This is blah");
+
+        HashMap<String, Object> extraContext = new HashMap<String, Object>();
+        extraContext.put(ActionContext.PARAMETERS, params);
+
+        ActionProxy proxy = actionProxyFactory.createActionProxy("", MockConfigurationProvider.PARAM_INTERCEPTOR_ACTION_NAME, extraContext);
+        proxy.execute();
+        SimpleAction action = (SimpleAction) proxy.getAction();
+        assertEquals(1, action.getTheProtectedMap().size());
+        assertNotNull(action.getTheProtectedMap().get("boo"));
+        assertNull(action.getTheProtectedMap().get("foo"));
+    }
+
+    public void testParametersNotAccessProtectedMethods() throws Exception {
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("theSemiProtectedMap.foo", "This is blah");
+        params.put("theProtectedMap.boo", "This is blah");
+
+        HashMap<String, Object> extraContext = new HashMap<String, Object>();
+        extraContext.put(ActionContext.PARAMETERS, params);
+
+        ActionProxy proxy = actionProxyFactory.createActionProxy("", MockConfigurationProvider.PARAM_INTERCEPTOR_ACTION_NAME, extraContext);
+        proxy.execute();
+        SimpleAction action = (SimpleAction) proxy.getAction();
+        assertEquals(1, action.getTheProtectedMap().size());
+        assertNotNull(action.getTheProtectedMap().get("boo"));
+        assertNull(action.getTheProtectedMap().get("foo"));
+    }
+
+    public void testParametersOverwriteField() throws Exception {
+        Map<String, Object> params = new LinkedHashMap<String, Object>();
+        params.put("existingMap.boo", "This is blah");
+
+        HashMap<String, Object> extraContext = new HashMap<String, Object>();
+        extraContext.put(ActionContext.PARAMETERS, params);
+
+        ActionProxy proxy = actionProxyFactory.createActionProxy("", MockConfigurationProvider.PARAM_INTERCEPTOR_ACTION_NAME, extraContext);
+        proxy.execute();
+        SimpleAction action = (SimpleAction) proxy.getAction();
+        assertEquals(1, action.getTheExistingMap().size());
+        assertNotNull(action.getTheExistingMap().get("boo"));
+        assertNull(action.getTheExistingMap().get("existingKey"));
+    }
+
+    public void testNonexistentParametersGetLoggedInDevMode() throws Exception {
+        loadConfigurationProviders(new XmlConfigurationProvider("xwork-test-beans.xml"),
+                new MockConfigurationProvider(Collections.singletonMap("devMode", "true")));
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("not_a_property", "There is no action property named like this");
+
+        HashMap<String, Object> extraContext = new HashMap<String, Object>();
+        extraContext.put(ActionContext.PARAMETERS, params);
+        ParametersInterceptor.setDevMode("true");
+
+        ActionConfig config = configuration.getRuntimeConfiguration().getActionConfig("", MockConfigurationProvider.PARAM_INTERCEPTOR_ACTION_NAME);
+        container.inject(config.getInterceptors().get(0).getInterceptor());
+        ActionProxy proxy = actionProxyFactory.createActionProxy("", MockConfigurationProvider.PARAM_INTERCEPTOR_ACTION_NAME, extraContext);
+        proxy.execute();
+        final String actionMessage = "" + ((SimpleAction) proxy.getAction()).getActionMessages().toArray()[0];
+        assertTrue(actionMessage.contains("Error setting expression 'not_a_property' with value 'There is no action property named like this'"));
+    }
+
+    public void testNonexistentParametersAreIgnoredInProductionMode() throws Exception {
+        loadConfigurationProviders(new XmlConfigurationProvider("xwork-test-beans.xml"),
+                new MockConfigurationProvider(Collections.singletonMap("devMode", "false")));
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("not_a_property", "There is no action property named like this");
+
+        HashMap<String, Object> extraContext = new HashMap<String, Object>();
+        extraContext.put(ActionContext.PARAMETERS, params);
+
+        ActionConfig config = configuration.getRuntimeConfiguration().getActionConfig("", MockConfigurationProvider.PARAM_INTERCEPTOR_ACTION_NAME);
+        container.inject(config.getInterceptors().get(0).getInterceptor());
+        ActionProxy proxy = actionProxyFactory.createActionProxy("", MockConfigurationProvider.PARAM_INTERCEPTOR_ACTION_NAME, extraContext);
+        proxy.execute();
+        assertTrue(((SimpleAction) proxy.getAction()).getActionMessages().isEmpty());
+    }
+
+    public void testNoParametersAction() throws Exception {
+        ParametersInterceptor interceptor = new ParametersInterceptor();
+        interceptor.init();
+
+        MockActionInvocation mai = new MockActionInvocation();
+        Action action = new NoParametersAction();
+        mai.setAction(action);
+
+        interceptor.doIntercept(mai);
+        interceptor.destroy();
+    }
+
+    public void testNoOrdered() throws Exception {
+        ParametersInterceptor pi = new ParametersInterceptor();
+        container.inject(pi);
+        final Map<String, Object> actual = new LinkedHashMap<String, Object>();
+        pi.setValueStackFactory(createValueStackFactory(actual));
+        ValueStack stack = createStubValueStack(actual);
+
+        Map<String, Object> parameters = new HashMap<String, Object>();
+        parameters.put("user.address.city", "London");
+        parameters.put("user.name", "Superman");
+
+        Action action = new SimpleAction();
+        pi.setParameters(action, stack, parameters);
+
+        assertEquals("ordered should be false by default", false, pi.isOrdered());
+        assertEquals(2, actual.size());
+        assertEquals("London", actual.get("user.address.city"));
+        assertEquals("Superman", actual.get("user.name"));
+
+        // is not ordered
+        List<Object> values = new ArrayList<Object>(actual.values());
+        assertEquals("London", values.get(0));
+        assertEquals("Superman", values.get(1));
+    }
+
+    public void testOrdered() throws Exception {
+        ParametersInterceptor pi = new ParametersInterceptor();
+        pi.setOrdered(true);
+        container.inject(pi);
+        final Map<String, Object> actual = new LinkedHashMap<String, Object>();
+        pi.setValueStackFactory(createValueStackFactory(actual));
+        ValueStack stack = createStubValueStack(actual);
+
+        Map<String, Object> parameters = new HashMap<String, Object>();
+        parameters.put("user.address.city", "London");
+        parameters.put("user.name", "Superman");
+
+        Action action = new SimpleAction();
+        pi.setParameters(action, stack, parameters);
+
+        assertEquals(true, pi.isOrdered());
+        assertEquals(2, actual.size());
+        assertEquals("London", actual.get("user.address.city"));
+        assertEquals("Superman", actual.get("user.name"));
+
+        // should be ordered so user.name should be first
+        List<Object> values = new ArrayList<Object>(actual.values());
+        assertEquals("Superman", values.get(0));
+        assertEquals("London", values.get(1));
+    }
+
+    public void testSetOrdered() throws Exception {
+        ParametersInterceptor pi = new ParametersInterceptor();
+        container.inject(pi);
+        assertEquals("ordered should be false by default", false, pi.isOrdered());
+        pi.setOrdered(true);
+        assertEquals(true, pi.isOrdered());
+    }
+
+    public void testExcludedParametersAreIgnored() throws Exception {
+        ParametersInterceptor pi = new ParametersInterceptor();
+        container.inject(pi);
+        pi.setExcludeParams("dojo\\..*");
+        final Map actual = new HashMap();
+        pi.setValueStackFactory(createValueStackFactory(actual));
+        ValueStack stack = createStubValueStack(actual);
+        container.inject(stack);
+
+        final Map<String, Object> expected = new HashMap<String, Object>() {
+            {
+                put("fooKey", "fooValue");
+            }
+        };
+
+        Map<String, Object> parameters = new HashMap<String, Object>() {
+            {
+                put("dojo.test", "dojoValue");
+                put("fooKey", "fooValue");
+            }
+        };
+        pi.setParameters(new NoParametersAction(), stack, parameters);
+        assertEquals(expected, actual);
+    }
+
+    private ValueStackFactory createValueStackFactory(final Map<String, Object> context) {
+        OgnlValueStackFactory factory = new OgnlValueStackFactory() {
+            @Override
+            public ValueStack createValueStack(ValueStack stack) {
+                return createStubValueStack(context);
+            }
+        };
+        container.inject(factory);
+        return factory;
+    }
+
+    private ValueStack createStubValueStack(final Map<String, Object> actual) {
+        ValueStack stack = new OgnlValueStack(
+                container.getInstance(XWorkConverter.class),
+                (CompoundRootAccessor)container.getInstance(PropertyAccessor.class, CompoundRoot.class.getName()),
+                container.getInstance(TextProvider.class, "system"), true) {
+            @Override
+            public void setValue(String expr, Object value) {
+                actual.put(expr, value);
+            }
+        };
+        container.inject(stack);
+        return stack;
+    }
+
+    /*
+    public void testIndexedParameters() throws Exception {
+        Map params = new HashMap();
+        params.put("indexedProp[33]", "This is blah");
+
+        HashMap extraContext = new HashMap();
+        extraContext.put(ActionContext.PARAMETERS, params);
+
+        ActionProxy proxy = actionProxyFactory.createActionProxy("", MockConfigurationProvider.PARAM_INTERCEPTOR_ACTION_NAME, extraContext);
+        proxy.execute();
+        assertEquals("This is blah", ((SimpleAction) proxy.getAction()).getIndexedProp(33));
+    }
+    */
+
+
+    private class NoParametersAction implements Action, NoParameters {
+
+        public String execute() throws Exception {
+            return SUCCESS;
+        }
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        loadConfigurationProviders(new XmlConfigurationProvider("xwork-test-beans.xml"), new MockConfigurationProvider());
+
+        ActionConfig config = configuration.getRuntimeConfiguration().getActionConfig("", MockConfigurationProvider.PARAM_INTERCEPTOR_ACTION_NAME);
+        container.inject(config.getInterceptors().get(0).getInterceptor());
+    }
+}

Propchange: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/ParametersInterceptorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/ParametersInterceptorTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/PreResultListenerTest.java
URL: http://svn.apache.org/viewvc/struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/PreResultListenerTest.java?rev=894087&view=auto
==============================================================================
--- struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/PreResultListenerTest.java (added)
+++ struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/PreResultListenerTest.java Sun Dec 27 18:00:13 2009
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2002-2003 by OpenSymphony
+ * All rights reserved.
+ */
+package com.opensymphony.xwork2.interceptor;
+
+import com.mockobjects.dynamic.C;
+import com.mockobjects.dynamic.Mock;
+import com.opensymphony.xwork2.*;
+import com.opensymphony.xwork2.config.Configuration;
+import com.opensymphony.xwork2.config.ConfigurationException;
+import com.opensymphony.xwork2.config.ConfigurationProvider;
+import com.opensymphony.xwork2.config.entities.ActionConfig;
+import com.opensymphony.xwork2.config.entities.PackageConfig;
+import com.opensymphony.xwork2.inject.ContainerBuilder;
+import com.opensymphony.xwork2.util.location.LocatableProperties;
+
+import java.util.HashMap;
+
+
+/**
+ * PreResultListenerTest
+ *
+ * @author Jason Carreira
+ *         Date: Nov 13, 2003 11:16:43 PM
+ */
+public class PreResultListenerTest extends XWorkTestCase {
+
+    private int count = 1;
+
+
+    public void testPreResultListenersAreCalled() throws Exception {
+        ActionProxy proxy = actionProxyFactory.createActionProxy("package", "action", new HashMap(), false, true);
+        ActionInvocation invocation = proxy.getInvocation();
+        Mock preResultListenerMock1 = new Mock(PreResultListener.class);
+        preResultListenerMock1.expect("beforeResult", C.args(C.eq(invocation), C.eq(Action.SUCCESS)));
+        invocation.addPreResultListener((PreResultListener) preResultListenerMock1.proxy());
+        proxy.execute();
+        preResultListenerMock1.verify();
+    }
+
+    public void testPreResultListenersAreCalledInOrder() throws Exception {
+        ActionProxy proxy = actionProxyFactory.createActionProxy("package", "action", new HashMap(), false, true);
+        ActionInvocation invocation = proxy.getInvocation();
+        CountPreResultListener listener1 = new CountPreResultListener();
+        CountPreResultListener listener2 = new CountPreResultListener();
+        invocation.addPreResultListener(listener1);
+        invocation.addPreResultListener(listener2);
+        proxy.execute();
+        assertNotNull(listener1.getMyOrder());
+        assertNotNull(listener2.getMyOrder());
+        assertEquals(listener1.getMyOrder().intValue() + 1, listener2.getMyOrder().intValue());
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        loadConfigurationProviders(new ConfigurationProvider() {
+            Configuration configuration;
+            public void destroy() {
+            }
+            
+            public void init(Configuration config) {
+                this.configuration = config;
+            }
+
+            public void loadPackages() {
+                PackageConfig packageConfig = new PackageConfig.Builder("package")
+                        .addActionConfig("action", new ActionConfig.Builder("package", "action", SimpleFooAction.class.getName()).build())
+                        .build();
+                configuration.addPackageConfig("package", packageConfig);
+            }
+
+            /**
+             * Tells whether the ConfigurationProvider should reload its configuration
+             *
+             * @return
+             */
+            public boolean needsReload() {
+                return false;
+            }
+
+            public void register(ContainerBuilder builder, LocatableProperties props) throws ConfigurationException {
+                builder.factory(ActionProxyFactory.class, DefaultActionProxyFactory.class);
+                builder.factory(ObjectFactory.class);
+                
+            }
+        });
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+
+    private class CountPreResultListener implements PreResultListener {
+        private Integer myOrder = null;
+
+        public Integer getMyOrder() {
+            return myOrder;
+        }
+
+        public void beforeResult(ActionInvocation invocation, String resultCode) {
+            myOrder = new Integer(count++);
+        }
+    }
+}

Propchange: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/PreResultListenerTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/PreResultListenerTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/PrefixMethodInvocationUtilTest.java
URL: http://svn.apache.org/viewvc/struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/PrefixMethodInvocationUtilTest.java?rev=894087&view=auto
==============================================================================
--- struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/PrefixMethodInvocationUtilTest.java (added)
+++ struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/PrefixMethodInvocationUtilTest.java Sun Dec 27 18:00:13 2009
@@ -0,0 +1,281 @@
+/*
+ * Copyright (c) 2002-2006 by OpenSymphony
+ * All rights reserved.
+ */
+package com.opensymphony.xwork2.interceptor;
+
+import com.opensymphony.xwork2.ActionInvocation;
+import com.opensymphony.xwork2.ActionProxy;
+import junit.framework.TestCase;
+import org.easymock.MockControl;
+
+import java.lang.reflect.Method;
+
+/**
+ * Test case for PrefixMethodInovcationUtil.
+ * 
+ * @author tm_jee
+ * @version $Date$ $Id$
+ */
+public class PrefixMethodInvocationUtilTest extends TestCase {
+
+	// === capitalizeMethodName ===
+	public void testCapitalizeMethodName() throws Exception {
+		assertEquals("SomeMethod", 
+				PrefixMethodInvocationUtil.capitalizeMethodName("someMethod"));
+		assertEquals("AnotherMethod", 
+				PrefixMethodInvocationUtil.capitalizeMethodName("anotherMethod"));
+	}
+	
+	// === getPrefixMethod ===
+	public void testGetPrefixMethod1() throws Exception {
+		Object action = new PrefixMethodInvocationUtilTest.Action1();
+		Method m = PrefixMethodInvocationUtil.getPrefixedMethod(
+				new String[] { "prepare", "prepareDo" }, "save", action);
+		assertNotNull(m);
+		assertEquals(m.getName(), "prepareSave");
+	}
+	
+	public void testGetPrefixMethod2() throws Exception {
+		Object action = new PrefixMethodInvocationUtilTest.Action1();
+		Method m = PrefixMethodInvocationUtil.getPrefixedMethod(
+				new String[] { "prepare", "prepareDo" }, "submit", action);
+		assertNotNull(m);
+		assertEquals(m.getName(), "prepareSubmit");
+	}
+	
+	public void testGetPrefixMethod3() throws Exception {
+		Object action = new PrefixMethodInvocationUtilTest.Action1();
+		Method m = PrefixMethodInvocationUtil.getPrefixedMethod(
+				new String[] { "prepare", "prepareDo" }, "cancel", action);
+		assertNotNull(m);
+		assertEquals(m.getName(), "prepareDoCancel");
+	}
+	
+	public void testGetPrefixMethod4() throws Exception {
+		Object action = new PrefixMethodInvocationUtilTest.Action1();
+		Method m = PrefixMethodInvocationUtil.getPrefixedMethod(
+				new String[] { "prepare", "prepareDo" }, "noSuchMethod", action);
+		assertNull(m);
+	}
+	
+	public void testGetPrefixMethod5() throws Exception {
+		Object action = new PrefixMethodInvocationUtilTest.Action1();
+		Method m = PrefixMethodInvocationUtil.getPrefixedMethod(
+				new String[] { "noSuchPrefix", "noSuchPrefixDo" }, "save", action);
+		assertNull(m);
+	}
+	
+	
+	// === invokePrefixMethod === 
+	public void testInvokePrefixMethod1() throws Exception {
+		PrefixMethodInvocationUtilTest.Action1 action = new PrefixMethodInvocationUtilTest.Action1();
+		
+		// ActionProxy
+		MockControl controlActionProxy = MockControl.createControl(ActionProxy.class);
+		ActionProxy mockActionProxy = (ActionProxy) controlActionProxy.getMock();		
+		mockActionProxy.getMethod();
+		controlActionProxy.setReturnValue("save");
+		
+		
+		// ActionInvocation
+		MockControl controlActionInvocation = MockControl.createControl(ActionInvocation.class);
+		ActionInvocation mockActionInvocation = (ActionInvocation) controlActionInvocation.getMock();
+		mockActionInvocation.getAction();
+		controlActionInvocation.setReturnValue(action);
+		mockActionInvocation.getProxy();
+		controlActionInvocation.setReturnValue(mockActionProxy);
+		
+		controlActionProxy.replay();
+		controlActionInvocation.replay();
+		
+		
+		PrefixMethodInvocationUtil.invokePrefixMethod(
+				mockActionInvocation, 
+				new String[] { "prepare", "prepareDo" });
+		
+		controlActionProxy.verify();
+		controlActionInvocation.verify();
+		
+		assertTrue(action.prepareSaveInvoked);
+		assertFalse(action.prepareDoSaveInvoked);
+		assertFalse(action.prepareSubmitInvoked);
+		assertFalse(action.prepareDoCancelInvoked);
+	}
+	
+	public void testInvokePrefixMethod2() throws Exception {
+		PrefixMethodInvocationUtilTest.Action1 action = new PrefixMethodInvocationUtilTest.Action1();
+		
+		// ActionProxy
+		MockControl controlActionProxy = MockControl.createControl(ActionProxy.class);
+		ActionProxy mockActionProxy = (ActionProxy) controlActionProxy.getMock();		
+		mockActionProxy.getMethod();
+		controlActionProxy.setReturnValue("submit");
+		
+		
+		// ActionInvocation
+		MockControl controlActionInvocation = MockControl.createControl(ActionInvocation.class);
+		ActionInvocation mockActionInvocation = (ActionInvocation) controlActionInvocation.getMock();
+		mockActionInvocation.getAction();
+		controlActionInvocation.setReturnValue(action);
+		mockActionInvocation.getProxy();
+		controlActionInvocation.setReturnValue(mockActionProxy);
+		
+		controlActionProxy.replay();
+		controlActionInvocation.replay();
+		
+		
+		PrefixMethodInvocationUtil.invokePrefixMethod(
+				mockActionInvocation, 
+				new String[] { "prepare", "prepareDo" });
+		
+		controlActionProxy.verify();
+		controlActionInvocation.verify();
+		
+		assertFalse(action.prepareSaveInvoked);
+		assertFalse(action.prepareDoSaveInvoked);
+		assertTrue(action.prepareSubmitInvoked);
+		assertFalse(action.prepareDoCancelInvoked);
+	}
+	
+	public void testInvokePrefixMethod3() throws Exception {
+		PrefixMethodInvocationUtilTest.Action1 action = new PrefixMethodInvocationUtilTest.Action1();
+		
+		// ActionProxy
+		MockControl controlActionProxy = MockControl.createControl(ActionProxy.class);
+		ActionProxy mockActionProxy = (ActionProxy) controlActionProxy.getMock();		
+		mockActionProxy.getMethod();
+		controlActionProxy.setReturnValue("cancel");
+		
+		
+		// ActionInvocation
+		MockControl controlActionInvocation = MockControl.createControl(ActionInvocation.class);
+		ActionInvocation mockActionInvocation = (ActionInvocation) controlActionInvocation.getMock();
+		mockActionInvocation.getAction();
+		controlActionInvocation.setReturnValue(action);
+		mockActionInvocation.getProxy();
+		controlActionInvocation.setReturnValue(mockActionProxy);
+		
+		controlActionProxy.replay();
+		controlActionInvocation.replay();
+		
+		
+		PrefixMethodInvocationUtil.invokePrefixMethod(
+				mockActionInvocation, 
+				new String[] { "prepare", "prepareDo" });
+		
+		controlActionProxy.verify();
+		controlActionInvocation.verify();
+		
+		assertFalse(action.prepareSaveInvoked);
+		assertFalse(action.prepareDoSaveInvoked);
+		assertFalse(action.prepareSubmitInvoked);
+		assertTrue(action.prepareDoCancelInvoked);
+	}
+		
+	public void testInvokePrefixMethod4() throws Exception {
+		PrefixMethodInvocationUtilTest.Action1 action = new PrefixMethodInvocationUtilTest.Action1();
+		
+		// ActionProxy
+		MockControl controlActionProxy = MockControl.createControl(ActionProxy.class);
+		ActionProxy mockActionProxy = (ActionProxy) controlActionProxy.getMock();		
+		mockActionProxy.getMethod();
+		controlActionProxy.setReturnValue("noSuchMethod");
+		
+		
+		// ActionInvocation
+		MockControl controlActionInvocation = MockControl.createControl(ActionInvocation.class);
+		ActionInvocation mockActionInvocation = (ActionInvocation) controlActionInvocation.getMock();
+		mockActionInvocation.getAction();
+		controlActionInvocation.setReturnValue(action);
+		mockActionInvocation.getProxy();
+		controlActionInvocation.setReturnValue(mockActionProxy);
+		
+		controlActionProxy.replay();
+		controlActionInvocation.replay();
+		
+		
+		PrefixMethodInvocationUtil.invokePrefixMethod(
+				mockActionInvocation, 
+				new String[] { "prepare", "prepareDo" });
+		
+		controlActionProxy.verify();
+		controlActionInvocation.verify();
+		
+		assertFalse(action.prepareSaveInvoked);
+		assertFalse(action.prepareDoSaveInvoked);
+		assertFalse(action.prepareSubmitInvoked);
+		assertFalse(action.prepareDoCancelInvoked);
+	}
+		
+	public void testInvokePrefixMethod5() throws Exception {
+		PrefixMethodInvocationUtilTest.Action1 action = new PrefixMethodInvocationUtilTest.Action1();
+		
+		// ActionProxy
+		MockControl controlActionProxy = MockControl.createControl(ActionProxy.class);
+		ActionProxy mockActionProxy = (ActionProxy) controlActionProxy.getMock();		
+		mockActionProxy.getMethod();
+		controlActionProxy.setReturnValue("save");
+		
+		
+		// ActionInvocation
+		MockControl controlActionInvocation = MockControl.createControl(ActionInvocation.class);
+		ActionInvocation mockActionInvocation = (ActionInvocation) controlActionInvocation.getMock();
+		mockActionInvocation.getAction();
+		controlActionInvocation.setReturnValue(action);
+		mockActionInvocation.getProxy();
+		controlActionInvocation.setReturnValue(mockActionProxy);
+		
+		controlActionProxy.replay();
+		controlActionInvocation.replay();
+		
+		
+		PrefixMethodInvocationUtil.invokePrefixMethod(
+				mockActionInvocation, 
+				new String[] { "noSuchPrefix", "noSuchPrefixDo" });
+		
+		controlActionProxy.verify();
+		controlActionInvocation.verify();
+		
+		assertFalse(action.prepareSaveInvoked);
+		assertFalse(action.prepareDoSaveInvoked);
+		assertFalse(action.prepareSubmitInvoked);
+		assertFalse(action.prepareDoCancelInvoked);
+	}
+	
+	
+	
+	
+	/**
+	 * Just a simple object for testing method invocation on its methods.
+	 * 
+	 * @author tm_jee
+	 * @version $Date$ $Id$
+	 */
+	public static class Action1 {
+		
+		boolean prepareSaveInvoked = false;
+		boolean prepareDoSaveInvoked = false;
+		boolean prepareSubmitInvoked = false;
+		boolean prepareDoCancelInvoked = false;
+		
+		
+		// save
+		public void prepareSave() {
+			prepareSaveInvoked = true;
+		}
+		public void prepareDoSave() {
+			prepareDoSaveInvoked = true;
+		}
+		
+		// submit
+		public void prepareSubmit() {
+			prepareSubmitInvoked = true;
+		}
+		
+		// cancel
+		public void prepareDoCancel() {
+			prepareDoCancelInvoked = true;
+		}
+	}
+}

Propchange: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/PrefixMethodInvocationUtilTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/PrefixMethodInvocationUtilTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/PrepareInterceptorTest.java
URL: http://svn.apache.org/viewvc/struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/PrepareInterceptorTest.java?rev=894087&view=auto
==============================================================================
--- struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/PrepareInterceptorTest.java (added)
+++ struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/PrepareInterceptorTest.java Sun Dec 27 18:00:13 2009
@@ -0,0 +1,165 @@
+/*
+ * Copyright (c) 2002-2007 by OpenSymphony
+ * All rights reserved.
+*/
+package com.opensymphony.xwork2.interceptor;
+
+import com.mockobjects.dynamic.Mock;
+import com.opensymphony.xwork2.*;
+import com.opensymphony.xwork2.mock.MockActionInvocation;
+import com.opensymphony.xwork2.mock.MockActionProxy;
+import junit.framework.TestCase;
+import org.easymock.MockControl;
+
+/**
+ * Unit test for PrepareInterceptor.
+ *
+ * @author Claus Ibsen
+ * @author tm_jee
+ */
+public class PrepareInterceptorTest extends TestCase {
+
+    private Mock mock;
+    private PrepareInterceptor interceptor;
+
+    public void testPrepareCalledDefault() throws Exception {
+        MockActionInvocation mai = new MockActionInvocation();
+        MockActionProxy mockActionProxy = new MockActionProxy();
+        mockActionProxy.setMethod("execute");
+        mai.setProxy(mockActionProxy);
+        mai.setAction(mock.proxy());
+        mock.expect("prepare");
+
+        interceptor.intercept(mai);
+    }
+
+    public void testPrepareCalledFalse() throws Exception {
+        MockActionInvocation mai = new MockActionInvocation();
+        MockActionProxy mockActionProxy = new MockActionProxy();
+        mockActionProxy.setMethod("execute");
+        mai.setProxy(mockActionProxy);
+        mai.setAction(mock.proxy());
+
+        interceptor.setAlwaysInvokePrepare("false");
+        interceptor.intercept(mai);
+    }
+
+    public void testPrepareCalledTrue() throws Exception {
+        MockActionInvocation mai = new MockActionInvocation();
+        MockActionProxy mockActionProxy = new MockActionProxy();
+        mockActionProxy.setMethod("execute");
+        mai.setProxy(mockActionProxy);
+        mai.setAction(mock.proxy());
+        mock.expect("prepare");
+
+        interceptor.setAlwaysInvokePrepare("true");
+        interceptor.intercept(mai);
+    }
+
+    public void testNoPrepareCalled() throws Exception {
+        MockActionInvocation mai = new MockActionInvocation();
+        mai.setAction(new SimpleFooAction());
+
+        interceptor.doIntercept(mai);
+    }
+    
+    public void testPrefixInvocation1() throws Exception {
+    	
+    	MockControl controlAction = MockControl.createControl(ActionInterface.class);
+    	ActionInterface mockAction = (ActionInterface) controlAction.getMock();
+    	mockAction.prepareSubmit();
+    	controlAction.setVoidCallable(1);
+    	mockAction.prepare();
+    	controlAction.setVoidCallable(1);
+    	
+    	MockControl controlActionProxy = MockControl.createControl(ActionProxy.class);
+    	ActionProxy mockActionProxy = (ActionProxy) controlActionProxy.getMock();
+    	mockActionProxy.getMethod();
+    	controlActionProxy.setDefaultReturnValue("submit");
+    	
+    	
+    	MockControl controlActionInvocation = MockControl.createControl(ActionInvocation.class);
+    	ActionInvocation mockActionInvocation = (ActionInvocation) controlActionInvocation.getMock();
+    	mockActionInvocation.getAction();
+    	controlActionInvocation.setDefaultReturnValue(mockAction);
+    	mockActionInvocation.invoke();
+    	controlActionInvocation.setDefaultReturnValue("okok");
+    	mockActionInvocation.getProxy();
+    	controlActionInvocation.setDefaultReturnValue(mockActionProxy);
+    	
+    	
+    	controlAction.replay();
+    	controlActionProxy.replay();
+    	controlActionInvocation.replay();
+    	
+    	PrepareInterceptor interceptor = new PrepareInterceptor();
+    	String result = interceptor.intercept(mockActionInvocation);
+    	
+    	assertEquals("okok", result);
+    	
+    	controlAction.verify();
+    	controlActionProxy.verify();
+    	controlActionInvocation.verify();
+    }
+    
+    public void testPrefixInvocation2() throws Exception {
+    	
+    	MockControl controlAction = MockControl.createControl(ActionInterface.class);
+    	ActionInterface mockAction = (ActionInterface) controlAction.getMock();
+    	mockAction.prepare();
+    	controlAction.setVoidCallable(1);
+    	
+    	MockControl controlActionProxy = MockControl.createControl(ActionProxy.class);
+    	ActionProxy mockActionProxy = (ActionProxy) controlActionProxy.getMock();
+    	mockActionProxy.getMethod();
+    	controlActionProxy.setDefaultReturnValue("save");
+    	
+    	
+    	MockControl controlActionInvocation = MockControl.createControl(ActionInvocation.class);
+    	ActionInvocation mockActionInvocation = (ActionInvocation) controlActionInvocation.getMock();
+    	mockActionInvocation.getAction();
+    	controlActionInvocation.setDefaultReturnValue(mockAction);
+    	mockActionInvocation.invoke();
+    	controlActionInvocation.setDefaultReturnValue("okok");
+    	mockActionInvocation.getProxy();
+    	controlActionInvocation.setDefaultReturnValue(mockActionProxy);
+    	
+    	
+    	controlAction.replay();
+    	controlActionProxy.replay();
+    	controlActionInvocation.replay();
+    	
+    	PrepareInterceptor interceptor = new PrepareInterceptor();
+    	String result = interceptor.intercept(mockActionInvocation);
+    	
+    	assertEquals("okok", result);
+    	
+    	controlAction.verify();
+    	controlActionProxy.verify();
+    	controlActionInvocation.verify();
+    }
+    
+
+    @Override
+    protected void setUp() throws Exception {
+        mock = new Mock(Preparable.class);
+        interceptor = new PrepareInterceptor();
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        mock.verify();
+    }
+
+    
+    /**
+     * Simple interface to test prefix action invocation 
+     * eg. prepareSubmit(), prepareSave() etc.
+     *
+     * @author tm_jee
+     */
+    public interface ActionInterface extends Action, Preparable {
+    	void prepareSubmit();
+    }
+
+}

Propchange: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/PrepareInterceptorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/PrepareInterceptorTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/ScopedModelDrivenInterceptorTest.java
URL: http://svn.apache.org/viewvc/struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/ScopedModelDrivenInterceptorTest.java?rev=894087&view=auto
==============================================================================
--- struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/ScopedModelDrivenInterceptorTest.java (added)
+++ struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/ScopedModelDrivenInterceptorTest.java Sun Dec 27 18:00:13 2009
@@ -0,0 +1,223 @@
+/*
+ * Copyright (c) 2002-2007 by OpenSymphony
+ * All rights reserved.
+ */
+package com.opensymphony.xwork2.interceptor;
+
+import com.opensymphony.xwork2.*;
+import com.opensymphony.xwork2.config.entities.ActionConfig;
+import com.opensymphony.xwork2.mock.MockActionInvocation;
+import com.opensymphony.xwork2.mock.MockActionProxy;
+import com.opensymphony.xwork2.test.Equidae;
+import com.opensymphony.xwork2.test.User;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class ScopedModelDrivenInterceptorTest extends XWorkTestCase {
+
+    protected ScopedModelDrivenInterceptor inter = null;
+    
+    /**
+     * Set up instance variables required by this test case.
+     */
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        inter = new ScopedModelDrivenInterceptor();
+        inter.setObjectFactory(new ProxyObjectFactory());
+    }
+
+    public void testResolveModel() throws Exception {
+        ActionContext ctx = ActionContext.getContext();
+        ctx.setSession(new HashMap());
+        
+        ObjectFactory factory = ObjectFactory.getObjectFactory();
+        Object obj = inter.resolveModel(factory, ctx, "java.lang.String", "request", "foo");
+        assertNotNull(obj);
+        assertTrue(obj instanceof String);
+        assertTrue(obj == ctx.get("foo"));
+
+        obj = inter.resolveModel(factory, ctx, "java.lang.String", "session", "foo");
+        assertNotNull(obj);
+        assertTrue(obj instanceof String);
+        assertTrue(obj == ctx.getSession().get("foo"));
+
+        obj = inter.resolveModel(factory, ctx, "java.lang.String", "session", "foo");
+        assertNotNull(obj);
+        assertTrue(obj instanceof String);
+        assertTrue(obj == ctx.getSession().get("foo"));
+    }
+
+    public void testScopedModelDrivenAction() throws Exception {
+        inter.setScope("request");
+
+        ScopedModelDriven action = new MyUserScopedModelDrivenAction();
+        MockActionInvocation mai = new MockActionInvocation();
+        MockActionProxy map = new MockActionProxy();
+        ActionConfig ac = new ActionConfig.Builder("", "", "").build();
+        map.setConfig(ac);
+        mai.setAction(action);
+        mai.setProxy(map);
+
+        inter.intercept(mai);
+        inter.destroy();
+
+        assertNotNull(action.getModel());
+        assertNotNull(action.getScopeKey());
+        assertEquals("com.opensymphony.xwork2.test.User", action.getScopeKey());
+
+        Object model = ActionContext.getContext().get(action.getScopeKey());
+        assertNotNull(model);
+        assertTrue("Model should be an User object", model instanceof User);
+    }
+
+    public void testScopedModelDrivenActionWithSetClassName() throws Exception {
+        inter.setScope("request");
+        inter.setClassName("com.opensymphony.xwork2.test.Equidae");
+        inter.setName("queen");
+
+        ScopedModelDriven action = new MyEquidaeScopedModelDrivenAction();
+        MockActionInvocation mai = new MockActionInvocation();
+        MockActionProxy map = new MockActionProxy();
+        ActionConfig ac = new ActionConfig.Builder("", "", "").build();
+        map.setConfig(ac);
+        mai.setAction(action);
+        mai.setProxy(map);
+
+        inter.intercept(mai);
+        inter.destroy();
+
+        assertNotNull(action.getModel());
+        assertNotNull(action.getScopeKey());
+        assertEquals("queen", action.getScopeKey());
+
+        Object model = ActionContext.getContext().get(action.getScopeKey());
+        assertNotNull(model);
+        assertTrue("Model should be an Equidae object", model instanceof Equidae);
+    }
+
+    public void testModelOnSession() throws Exception {
+        inter.setScope("session");
+        inter.setName("king");
+
+        User user = new User();
+        user.setName("King George");
+        Map session = new HashMap();
+        ActionContext.getContext().setSession(session);
+        ActionContext.getContext().getSession().put("king", user);
+
+        ScopedModelDriven action = new MyUserScopedModelDrivenAction();
+        MockActionInvocation mai = new MockActionInvocation();
+        MockActionProxy map = new MockActionProxy();
+        ActionConfig ac = new ActionConfig.Builder("", "", "").build();
+        map.setConfig(ac);
+        mai.setAction(action);
+        mai.setProxy(map);
+
+        inter.intercept(mai);
+        inter.destroy();
+
+        assertNotNull(action.getModel());
+        assertNotNull(action.getScopeKey());
+        assertEquals("king", action.getScopeKey());
+
+        Object model = ActionContext.getContext().getSession().get(action.getScopeKey());
+        assertNotNull(model);
+        assertTrue("Model should be an User object", model instanceof User);
+        assertEquals("King George", ((User) model).getName());
+    }
+
+    public void testModelAlreadySetOnAction() throws Exception {
+        inter.setScope("request");
+        inter.setName("king");
+
+        User user = new User();
+        user.setName("King George");
+
+        ScopedModelDriven action = new MyUserScopedModelDrivenAction();
+        action.setModel(user);
+        MockActionInvocation mai = new MockActionInvocation();
+        MockActionProxy map = new MockActionProxy();
+        ActionConfig ac = new ActionConfig.Builder("", "", "").build();
+        map.setConfig(ac);
+        mai.setAction(action);
+        mai.setProxy(map);
+
+        inter.intercept(mai);
+        inter.destroy();
+
+        assertNotNull(action.getModel());
+        assertNull(action.getScopeKey()); // no scope key as nothing happended
+    }
+
+    public void testNoScopedModelAction() throws Exception {
+        Action action = new SimpleAction();
+        MockActionInvocation mai = new MockActionInvocation();
+        MockActionProxy map = new MockActionProxy();
+        ActionConfig ac = new ActionConfig.Builder("", "", "").build();
+        map.setConfig(ac);
+        mai.setAction(action);
+        mai.setProxy(map);
+
+        inter.intercept(mai);
+        inter.destroy();
+        // nothing happends
+    }
+
+    private class MyUserScopedModelDrivenAction implements ScopedModelDriven, Action {
+
+        private String key;
+        private User model;
+
+        public void setModel(Object model) {
+            this.model = (User) model;
+        }
+
+        public void setScopeKey(String key) {
+            this.key = key;
+        }
+
+        public String getScopeKey() {
+            return key;
+        }
+
+        public User getModel() {
+            return model;
+        }
+
+        public String execute() throws Exception {
+            return SUCCESS;
+        }
+
+    }
+
+    private class MyEquidaeScopedModelDrivenAction implements ScopedModelDriven, Action {
+
+        private String key;
+        private Equidae model;
+
+        public void setModel(Object model) {
+            this.model = (Equidae) model;
+        }
+
+        public void setScopeKey(String key) {
+            this.key = key;
+        }
+
+        public String getScopeKey() {
+            return key;
+        }
+
+        public Equidae getModel() {
+            return model;
+        }
+
+        public String execute() throws Exception {
+            return SUCCESS;
+        }
+
+    }
+
+}
+

Propchange: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/ScopedModelDrivenInterceptorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/ScopedModelDrivenInterceptorTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/StaticParametersInterceptorTest.java
URL: http://svn.apache.org/viewvc/struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/StaticParametersInterceptorTest.java?rev=894087&view=auto
==============================================================================
--- struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/StaticParametersInterceptorTest.java (added)
+++ struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/StaticParametersInterceptorTest.java Sun Dec 27 18:00:13 2009
@@ -0,0 +1,198 @@
+/*
+ * Copyright (c) 2002-2006 by OpenSymphony
+ * All rights reserved.
+ */
+package com.opensymphony.xwork2.interceptor;
+
+import com.mockobjects.dynamic.Mock;
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.SimpleFooAction;
+import com.opensymphony.xwork2.XWorkTestCase;
+import com.opensymphony.xwork2.config.entities.ActionConfig;
+import com.opensymphony.xwork2.config.entities.Parameterizable;
+import com.opensymphony.xwork2.mock.MockActionInvocation;
+import com.opensymphony.xwork2.mock.MockActionProxy;
+
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ * Unit test of {@link StaticParametersInterceptor}.
+ *
+ * @author Claus Ibsen
+ */
+public class StaticParametersInterceptorTest extends XWorkTestCase {
+
+    private StaticParametersInterceptor interceptor;
+
+    public void testParameterizable() throws Exception {
+        Mock mock = new Mock(Parameterizable.class);
+
+        MockActionInvocation mai = new MockActionInvocation();
+        MockActionProxy map = new MockActionProxy();
+        ActionConfig ac = new ActionConfig.Builder("", "", "").build();
+
+        Map params = ac.getParams();
+
+        map.setConfig(ac);
+        mai.setProxy(map);
+        mai.setAction(mock.proxy());
+        mock.expect("setParams", params);
+
+        interceptor.intercept(mai);
+        mock.verify();
+    }
+
+    public void testWithOneParameters() throws Exception {
+        MockActionInvocation mai = new MockActionInvocation();
+        MockActionProxy map = new MockActionProxy();
+        ActionConfig ac = new ActionConfig.Builder("", "", "")
+                .addParam("top.name", "Santa")
+                .build();
+
+        map.setConfig(ac);
+        mai.setProxy(map);
+        mai.setAction(new SimpleFooAction());
+
+        User user = new User();
+        ActionContext.getContext().getValueStack().push(user);
+        int before = ActionContext.getContext().getValueStack().size();
+        interceptor.intercept(mai);
+
+        assertEquals(before, ActionContext.getContext().getValueStack().size());
+        assertEquals("Santa", user.getName());
+    }
+
+    public void testWithOneParametersParse() throws Exception {
+        MockActionInvocation mai = new MockActionInvocation();
+        MockActionProxy map = new MockActionProxy();
+        ActionConfig ac = new ActionConfig.Builder("", "", "")
+                .addParam("top.name", "${top.hero}")
+                .build();
+        map.setConfig(ac);
+        mai.setProxy(map);
+        mai.setAction(new SimpleFooAction());
+
+        User user = new User();
+        ActionContext.getContext().getValueStack().push(user);
+        int before = ActionContext.getContext().getValueStack().size();
+        interceptor.setParse("true");
+        interceptor.intercept(mai);
+
+        assertEquals(before, ActionContext.getContext().getValueStack().size());
+        assertEquals("Superman", user.getName());
+    }
+
+    public void testWithOneParametersNoParse() throws Exception {
+        MockActionInvocation mai = new MockActionInvocation();
+        MockActionProxy map = new MockActionProxy();
+        ActionConfig ac = new ActionConfig.Builder("", "", "")
+                .addParam("top.name", "${top.hero}")
+                .build();
+        map.setConfig(ac);
+        mai.setProxy(map);
+        mai.setAction(new SimpleFooAction());
+
+        User user = new User();
+        ActionContext.getContext().getValueStack().push(user);
+        int before = ActionContext.getContext().getValueStack().size();
+        interceptor.setParse("false");
+        interceptor.intercept(mai);
+
+        assertEquals(before, ActionContext.getContext().getValueStack().size());
+        assertEquals("${top.hero}", user.getName());
+    }
+
+     public void testNoMerge() throws Exception {
+        MockActionInvocation mai = new MockActionInvocation();
+        MockActionProxy map = new MockActionProxy();
+        ActionConfig ac = new ActionConfig.Builder("", "", "")
+                .addParam("top.name", "${top.hero}")
+                .build();
+        map.setConfig(ac);
+        mai.setProxy(map);
+        mai.setAction(new SimpleFooAction());
+
+        User user = new User();
+        ActionContext.getContext().getValueStack().push(user);
+        ActionContext.getContext().setParameters(new HashMap<String, Object>()); 
+        int before = ActionContext.getContext().getValueStack().size();
+        interceptor.setMerge("false");
+        interceptor.intercept(mai);
+
+        assertEquals(before, ActionContext.getContext().getValueStack().size());
+        assertEquals("${top.hero}", user.getName());
+        assertEquals(0, ActionContext.getContext().getParameters().size()); 
+    }
+
+    public void testFewParametersParse() throws Exception {
+        MockActionInvocation mai = new MockActionInvocation();
+        MockActionProxy map = new MockActionProxy();
+        ActionConfig ac = new ActionConfig.Builder("", "", "")
+                .addParam("top.age", "${top.myAge}")
+                .addParam("top.email", "${top.myEmail}")
+                .build();
+        map.setConfig(ac);
+        mai.setProxy(map);
+        mai.setAction(new SimpleFooAction());
+
+        User user = new User();
+        ActionContext.getContext().getValueStack().push(user);
+        int before = ActionContext.getContext().getValueStack().size();
+        interceptor.setParse("true");
+        interceptor.intercept(mai);
+
+        assertEquals(before, ActionContext.getContext().getValueStack().size());
+        assertEquals(user.getMyAge(), user.age);
+        assertEquals(user.getMyEmail(), user.email);
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        interceptor = new StaticParametersInterceptor();
+        interceptor.init();
+        container.inject(interceptor);
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+        interceptor.destroy();
+    }
+
+    private class User {
+        private String name;
+        private int age;
+        private String email;
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public int getMyAge() {
+            return 33;
+        }
+
+        public void setAge(int age) {
+            this.age = age;
+        }
+
+        public String getMyEmail() {
+            return "lukasz dot lenart at gmail dot com";
+        }
+
+        public void setEmail(String email) {
+            this.email = email;
+        }
+
+        public String getHero() {
+            return "Superman";
+        }
+    }
+
+}

Propchange: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/StaticParametersInterceptorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/StaticParametersInterceptorTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/TimerInterceptorTest.java
URL: http://svn.apache.org/viewvc/struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/TimerInterceptorTest.java?rev=894087&view=auto
==============================================================================
--- struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/TimerInterceptorTest.java (added)
+++ struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/TimerInterceptorTest.java Sun Dec 27 18:00:13 2009
@@ -0,0 +1,158 @@
+/*
+ * Copyright (c) 2002-2006 by OpenSymphony
+ * All rights reserved.
+ */
+package com.opensymphony.xwork2.interceptor;
+
+import com.opensymphony.xwork2.SimpleFooAction;
+import com.opensymphony.xwork2.XWorkTestCase;
+import com.opensymphony.xwork2.mock.MockActionInvocation;
+import com.opensymphony.xwork2.mock.MockActionProxy;
+import com.opensymphony.xwork2.util.logging.Logger;
+
+/**
+ * Unit test for {@link TimerInterceptor}.
+ *
+ * @author Claus Ibsen
+ */
+public class TimerInterceptorTest extends XWorkTestCase {
+
+    private MyTimerInterceptor interceptor;
+    private MockActionInvocation mai;
+    private MockActionProxy ap;
+
+
+    public void testTimerInterceptor() throws Exception {
+        TimerInterceptor real = new TimerInterceptor();
+        real.init();
+        real.intercept(mai);
+        real.destroy();
+    }
+
+    public void testInvalidLogLevel() throws Exception {
+        TimerInterceptor real = new TimerInterceptor();
+        real.setLogLevel("xxxx");
+        real.init();
+        try {
+            real.intercept(mai);
+            fail("Should not have reached this point.");
+        } catch (IllegalArgumentException e) {
+        	// success
+        }
+    }
+
+    public void testDefault() throws Exception {
+        interceptor.intercept(mai);
+        assertTrue(interceptor.message.startsWith("Executed action [myApp/myAction!execute] took "));
+        assertSame(interceptor.logger, TimerInterceptor.LOG);
+    }
+
+    public void testNoNamespace() throws Exception {
+        ap.setNamespace(null);
+        interceptor.intercept(mai);
+        assertTrue(interceptor.message.startsWith("Executed action [myAction!execute] took "));
+        assertSame(interceptor.logger, TimerInterceptor.LOG);
+    }
+
+    public void testInputMethod() throws Exception {
+        ap.setMethod("input");
+        interceptor.intercept(mai);
+        assertTrue(interceptor.message.startsWith("Executed action [myApp/myAction!input] took "));
+        assertSame(interceptor.logger, TimerInterceptor.LOG);
+    }
+
+    public void testTraceLevel() throws Exception {
+        interceptor.setLogLevel("trace");
+        interceptor.intercept(mai);
+        assertNull(interceptor.message); // no default logging at trace level
+        assertEquals("trace", interceptor.getLogLevel());
+    }
+
+    public void testDebugLevel() throws Exception {
+        interceptor.setLogLevel("debug");
+        interceptor.intercept(mai);
+        assertNull(interceptor.message); // no default logging at debug level
+    }
+
+    public void testInfoLevel() throws Exception {
+        interceptor.setLogLevel("info");
+        interceptor.intercept(mai);
+        assertTrue(interceptor.message.startsWith("Executed action [myApp/myAction!execute] took "));
+        assertSame(interceptor.logger, TimerInterceptor.LOG);
+    }
+
+    public void testWarnLevel() throws Exception {
+        interceptor.setLogLevel("warn");
+        interceptor.intercept(mai);
+        assertTrue(interceptor.message.startsWith("Executed action [myApp/myAction!execute] took "));
+        assertSame(interceptor.logger, TimerInterceptor.LOG);
+    }
+
+    public void testErrorLevel() throws Exception {
+        interceptor.setLogLevel("error");
+        interceptor.intercept(mai);
+        assertTrue(interceptor.message.startsWith("Executed action [myApp/myAction!execute] took "));
+        assertSame(interceptor.logger, TimerInterceptor.LOG);
+    }
+
+    public void testFatalLevel() throws Exception {
+        interceptor.setLogLevel("fatal");
+        interceptor.intercept(mai);
+        assertTrue(interceptor.message.startsWith("Executed action [myApp/myAction!execute] took "));
+        assertSame(interceptor.logger, TimerInterceptor.LOG);
+    }
+
+    public void testLogCategory() throws Exception {
+        interceptor.setLogCategory("com.mycompany.myapp.actiontiming");
+        interceptor.intercept(mai);
+        assertTrue(interceptor.message.startsWith("Executed action [myApp/myAction!execute] took "));
+        assertNotSame(interceptor.logger, TimerInterceptor.LOG);
+    }
+
+    public void testLogCategoryLevel() throws Exception {
+        interceptor.setLogCategory("com.mycompany.myapp.actiontiming");
+        interceptor.setLogLevel("error");
+        interceptor.intercept(mai);
+        assertTrue(interceptor.message.startsWith("Executed action [myApp/myAction!execute] took "));
+        assertNotSame(interceptor.logger, TimerInterceptor.LOG);
+        assertEquals("com.mycompany.myapp.actiontiming", interceptor.getLogCategory());
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        interceptor = new MyTimerInterceptor();
+        interceptor.init();
+
+        mai = new MockActionInvocation();
+        ap = new MockActionProxy();
+        ap.setActionName("myAction");
+        ap.setNamespace("myApp");
+        ap.setMethod("execute");
+        mai.setAction(new SimpleFooAction());
+        mai.setProxy(ap);
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+        interceptor.destroy();
+        ap = null;
+        mai = null;
+    }
+
+    private class MyTimerInterceptor extends TimerInterceptor {
+
+        private Logger logger;
+        private String message;
+
+        @Override
+        protected void doLog(Logger logger, String message) {
+            super.doLog(logger, message);
+
+            this.logger = logger;
+            this.message = message;
+        }
+    }
+
+}

Propchange: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/TimerInterceptorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: struts/xwork/trunk/core/src/test/java/com/opensymphony/xwork2/interceptor/TimerInterceptorTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL