Revision: 1332
          http://stripes.svn.sourceforge.net/stripes/?rev=1332&view=rev
Author:   bengunter
Date:     2010-11-12 05:29:00 +0000 (Fri, 12 Nov 2010)

Log Message:
-----------
Fixed STS-777. Parameters were getting messed up when MockRoundTrip constructor 
was passed an ActionBean class with clean URL instead of a string path.

Modified Paths:
--------------
    branches/1.5.x/stripes/src/net/sourceforge/stripes/mock/MockRoundtrip.java

Added Paths:
-----------
    
branches/1.5.x/tests/src/net/sourceforge/stripes/mock/TestMockRoundtrip2.java

Modified: 
branches/1.5.x/stripes/src/net/sourceforge/stripes/mock/MockRoundtrip.java
===================================================================
--- branches/1.5.x/stripes/src/net/sourceforge/stripes/mock/MockRoundtrip.java  
2010-11-11 22:03:55 UTC (rev 1331)
+++ branches/1.5.x/stripes/src/net/sourceforge/stripes/mock/MockRoundtrip.java  
2010-11-12 05:29:00 UTC (rev 1332)
@@ -23,8 +23,11 @@
 import javax.servlet.Filter;
 
 import net.sourceforge.stripes.action.ActionBean;
+import net.sourceforge.stripes.controller.ActionResolver;
+import net.sourceforge.stripes.controller.AnnotatedClassActionResolver;
 import net.sourceforge.stripes.controller.StripesConstants;
 import net.sourceforge.stripes.controller.StripesFilter;
+import net.sourceforge.stripes.controller.UrlBindingFactory;
 import net.sourceforge.stripes.util.CryptoUtil;
 import net.sourceforge.stripes.validation.ValidationErrors;
 
@@ -90,7 +93,7 @@
     public MockRoundtrip(MockServletContext context,
                          Class<? extends ActionBean> beanType,
                          MockHttpSession session) {
-        this(context, getUrlBinding(beanType, context), session);
+        this(context, getUrlBindingStub(beanType, context), session);
     }
 
     /**
@@ -341,20 +344,43 @@
         return this.response.getRedirectUrl();
     }
 
-    /**
-     * A helper method that fetches the UrlBinding of a class in the manner it 
would
-     * be interpreted by the current context configuration.
-     */
-    private static String getUrlBinding(Class<? extends ActionBean> clazz,
-                                        MockServletContext context) {
-        List<Filter> filters = context.getFilters();
-        for (Filter filter : filters) {
+    /** Find and return the {...@link AnnotatedClassActionResolver} for the 
given context. */
+    private static AnnotatedClassActionResolver 
getActionResolver(MockServletContext context) {
+        for (Filter filter : context.getFilters()) {
             if (filter instanceof StripesFilter) {
-                return ((StripesFilter) filter).getInstanceConfiguration()
-                        .getActionResolver().getUrlBinding(clazz);
+                ActionResolver resolver = ((StripesFilter) 
filter).getInstanceConfiguration()
+                        .getActionResolver();
+                if (resolver instanceof AnnotatedClassActionResolver) {
+                    return (AnnotatedClassActionResolver) resolver;
+                }
             }
         }
 
         return null;
     }
+
+    /** Find and return the {...@link UrlBindingFactory} for the given 
context. */
+    private static UrlBindingFactory getUrlBindingFactory(MockServletContext 
context) {
+        ActionResolver resolver = getActionResolver(context);
+        if (resolver instanceof AnnotatedClassActionResolver) {
+            return ((AnnotatedClassActionResolver) 
resolver).getUrlBindingFactory();
+        }
+
+        return null;
+    }
+
+    /**
+     * A helper method that fetches the UrlBinding of a class in the manner it 
would be interpreted
+     * by the current context configuration.
+     */
+    private static String getUrlBinding(Class<? extends ActionBean> clazz,
+            MockServletContext context) {
+        return getActionResolver(context).getUrlBinding(clazz);
+    }
+
+    /** Get the URL binding for an {...@link ActionBean} class up to the first 
parameter. */
+    private static String getUrlBindingStub(Class<? extends ActionBean> clazz,
+            MockServletContext context) {
+        return 
getUrlBindingFactory(context).getBindingPrototype(clazz).getPath();
+    }
 }

Added: 
branches/1.5.x/tests/src/net/sourceforge/stripes/mock/TestMockRoundtrip2.java
===================================================================
--- 
branches/1.5.x/tests/src/net/sourceforge/stripes/mock/TestMockRoundtrip2.java   
                            (rev 0)
+++ 
branches/1.5.x/tests/src/net/sourceforge/stripes/mock/TestMockRoundtrip2.java   
    2010-11-12 05:29:00 UTC (rev 1332)
@@ -0,0 +1,68 @@
+package net.sourceforge.stripes.mock;
+
+import static net.sourceforge.stripes.StripesTestFixture.getServletContext;
+import static org.testng.Assert.assertEquals;
+import net.sourceforge.stripes.action.ActionBean;
+import net.sourceforge.stripes.action.ActionBeanContext;
+import net.sourceforge.stripes.action.DefaultHandler;
+import net.sourceforge.stripes.action.Resolution;
+import net.sourceforge.stripes.action.UrlBinding;
+
+import org.testng.annotations.Test;
+
+/**
+ * Submitted by Nathan Maves and Remi Vankeisbelck to test a specific failure 
in
+ * {...@link MockRoundtrip}. Unit test behavior differed when using an 
{...@link ActionBean} class to
+ * construct the {...@link MockRoundtrip} and when using a string.
+ * 
+ * @author Nathan Maves, Remi Vankeisbelck
+ */
+...@urlbinding("/foo/{id}/{$event}")
+public class TestMockRoundtrip2 implements ActionBean {
+    ActionBeanContext context;
+    Integer id;
+
+    @DefaultHandler
+    public Resolution bar() {
+        return null;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public void setContext(ActionBeanContext context) {
+        this.context = context;
+    }
+
+    public ActionBeanContext getContext() {
+        return this.context;
+    }
+
+    private final static Integer REF_ID = 2;
+
+    @Test
+    public void testUsingBeanClass() throws Exception {
+        executeTest(new MockRoundtrip(getServletContext(), getClass()));
+    }
+
+    @Test
+    public void testUsingUrlWithEventSpecified() throws Exception {
+        executeTest(new MockRoundtrip(getServletContext(), "/foo/" + REF_ID + 
"/bar"));
+    }
+
+    @Test
+    public void testUsingUrlWithoutEventSpecified() throws Exception {
+        executeTest(new MockRoundtrip(getServletContext(), "/foo/" + REF_ID));
+    }
+
+    private void executeTest(MockRoundtrip trip) throws Exception {
+        trip.setParameter("id", REF_ID.toString());
+        trip.execute();
+        assertEquals(trip.getActionBean(getClass()).getId(), REF_ID);
+    }
+}
\ No newline at end of file


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Centralized Desktop Delivery: Dell and VMware Reference Architecture
Simplifying enterprise desktop deployment and management using
Dell EqualLogic storage and VMware View: A highly scalable, end-to-end
client virtualization framework. Read more!
http://p.sf.net/sfu/dell-eql-dev2dev
_______________________________________________
Stripes-development mailing list
Stripes-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/stripes-development

Reply via email to