You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2011/10/24 21:16:42 UTC

svn commit: r1188311 - in /tapestry/tapestry5/trunk/tapestry-core/src: main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java test/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImplTest.java

Author: hlship
Date: Mon Oct 24 19:16:42 2011
New Revision: 1188311

URL: http://svn.apache.org/viewvc?rev=1188311&view=rev
Log:
TAP5-821: Compnent event URLs for page in a library whose name contains the dash character will not be recognized by ComponentEventLinkEncoder

Modified:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImplTest.java

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java?rev=1188311&r1=1188310&r2=1188311&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java Mon Oct 24 19:16:42 2011
@@ -104,7 +104,7 @@ public class ComponentEventLinkEncoderIm
 
                 "^/" + // The leading slash is recognized but skipped
                         applicationFolderPattern + // The folder containing the application (TAP5-743)
-                        "(((\\w+)/)*(\\w+))" + // A series of folder names leading up to the page name, forming
+                        "(((\\w(?:\\w|-)*)/)*(\\w+))" + // A series of folder names (which allow dashes) leading up to the page name, forming
                         // the logical page name (may include the locale name)
                         "(\\.(\\w+(\\.\\w+)*))?" + // The first dot separates the page name from the nested
                         // component id

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImplTest.java?rev=1188311&r1=1188310&r2=1188311&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImplTest.java Mon Oct 24 19:16:42 2011
@@ -18,6 +18,7 @@ import org.apache.tapestry5.Link;
 import org.apache.tapestry5.MetaDataConstants;
 import org.apache.tapestry5.TapestryConstants;
 import org.apache.tapestry5.internal.EmptyEventContext;
+import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
 import org.apache.tapestry5.ioc.services.TypeCoercer;
 import org.apache.tapestry5.services.*;
@@ -410,4 +411,41 @@ public class ComponentEventLinkEncoderIm
 
         verify();
     }
+
+    @Test
+    public void page_name_includes_dash_in_component_event_request()
+    {
+        ComponentClassResolver resolver = mockComponentClassResolver();
+        Request request = mockRequest();
+        LocalizationSetter ls = mockLocalizationSetter();
+        MetaDataLocator metaDataLocator = neverWhitelistProtected();
+
+        train_getParameter(request, InternalConstants.PAGE_CONTEXT_NAME, null);
+        train_getParameter(request, InternalConstants.CONTAINER_PAGE_NAME, null);
+        train_getLocale(request, Locale.ENGLISH);
+
+        ls.setNonPeristentLocaleFromLocaleName("en");
+
+        String path = "/foo-bar/baz.biff";
+        train_getPath(request, path);
+
+        train_setLocaleFromLocaleName(ls, "foo-bar", false);
+
+        train_isPageName(resolver, "foo-bar/baz", true);
+
+        train_canonicalizePageName(resolver, "foo-bar/baz", "foo-bar/Baz");
+
+        replay();
+
+        ComponentEventLinkEncoderImpl linkEncoder = new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls,
+                request, null, null, null, null, true, "", metaDataLocator, null);
+
+        ComponentEventRequestParameters parameters = linkEncoder.decodeComponentEventRequest(request);
+
+        assertEquals(parameters.getActivePageName(), "foo-bar/Baz");
+        assertEquals(parameters.getNestedComponentId(), "biff");
+
+        verify();
+
+    }
 }