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();
+
+    }
 }


Reply via email to