You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by ul...@apache.org on 2011/02/16 09:33:25 UTC

svn commit: r1071170 - in /tapestry/tapestry5/trunk/tapestry-core/src: main/java/org/apache/tapestry5/internal/services/ComponentClassResolverImpl.java test/java/org/apache/tapestry5/internal/services/ComponentClassResolverImplTest.java

Author: uli
Date: Wed Feb 16 08:33:24 2011
New Revision: 1071170

URL: http://svn.apache.org/viewvc?rev=1071170&view=rev
Log:
TAP5-1444: Index pages in subfolders should have precedence over start pages

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

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentClassResolverImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentClassResolverImpl.java?rev=1071170&r1=1071169&r2=1071170&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentClassResolverImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentClassResolverImpl.java Wed Feb 16 08:33:24 2011
@@ -322,9 +322,13 @@ public class ComponentClassResolverImpl 
                     String reducedName = lastSlashx < 0 ? "" : logicalName.substring(0, lastSlashx);
 
                     // Make the super-stripped name another alias to the class.
-
-                    logicalNameToClassName.put(reducedName, name);
-                    pageNameToCanonicalPageName.put(reducedName, logicalName);
+                    // TAP5-1444: Everything else but a start page has precedence
+                    
+                    if (!(lastTerm.equalsIgnoreCase(startPageName) && logicalNameToClassName.containsKey(reducedName)))
+                    {
+                        logicalNameToClassName.put(reducedName, name);
+                        pageNameToCanonicalPageName.put(reducedName, logicalName);
+                    }
                 }
 
                 pageClassNameToLogicalName.put(name, logicalName);

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentClassResolverImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentClassResolverImplTest.java?rev=1071170&r1=1071169&r2=1071170&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentClassResolverImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentClassResolverImplTest.java Wed Feb 16 08:33:24 2011
@@ -183,6 +183,66 @@ public class ComponentClassResolverImplT
 
         verify();
     }
+    
+    @Test
+    public void start_page_in_subfolder()
+    {
+        ComponentInstantiatorSource source = mockComponentInstantiatorSource();
+        ClassNameLocator locator = newClassNameLocator();
+        Logger logger = compliantLogger();
+
+        train_for_app_packages(source);
+
+        String className = APP_ROOT_PACKAGE + ".pages.sub.HomePage";
+
+        train_locateComponentClassNames(locator, APP_ROOT_PACKAGE + ".pages", className);
+
+        replay();
+
+        List<LibraryMapping> mappings = Arrays.asList();
+
+        ComponentClassResolver resolver = new ComponentClassResolverImpl(logger, source, locator, APP_ROOT_PACKAGE,
+                "HomePage", mappings);
+
+        assertEquals(resolver.canonicalizePageName("sub/HomePage"), "sub/HomePage");
+        assertEquals(resolver.canonicalizePageName("sub"), "sub/HomePage");
+        assertTrue(resolver.isPageName("sub/HomePage"));
+
+        verify();
+    }
+    
+    /**
+     * TAP5-1444
+     */
+    @Test
+    public void index_page_precedence()
+    {
+        ComponentInstantiatorSource source = mockComponentInstantiatorSource();
+        ClassNameLocator locator = newClassNameLocator();
+        Logger logger = compliantLogger();
+
+        train_for_app_packages(source);
+
+        String[] classNames = { APP_ROOT_PACKAGE + ".pages.sub.HomePage", APP_ROOT_PACKAGE + ".pages.sub.SubIndex" };
+
+        train_locateComponentClassNames(locator, APP_ROOT_PACKAGE + ".pages", classNames);
+
+        replay();
+        
+        List<LibraryMapping> mappings = Arrays.asList();
+
+        ComponentClassResolver resolver = new ComponentClassResolverImpl(logger, source, locator, APP_ROOT_PACKAGE,
+                "HomePage", mappings);
+
+        assertTrue(resolver.isPageName("sub/HomePage"));
+        assertTrue(resolver.isPageName("sub/subIndex"));
+        assertEquals(resolver.resolvePageNameToClassName("sub/HomePage"), APP_ROOT_PACKAGE + ".pages.sub.HomePage");
+        assertEquals(resolver.resolvePageNameToClassName("sub/SubIndex"), APP_ROOT_PACKAGE + ".pages.sub.SubIndex");
+        assertEquals(resolver.resolvePageNameToClassName("sub/Index"), APP_ROOT_PACKAGE + ".pages.sub.SubIndex");
+        assertEquals(resolver.resolvePageNameToClassName("sub"), APP_ROOT_PACKAGE + ".pages.sub.SubIndex");
+
+        verify();
+    }
 
     @Test
     public void page_name_in_subfolder()
@@ -902,4 +962,26 @@ public class ComponentClassResolverImplT
         }
 
     }
+    
+    @Test
+    public void ignore_start_page_outside_root()
+    {
+        ComponentInstantiatorSource source = mockComponentInstantiatorSource();
+        ClassNameLocator locator = newClassNameLocator();
+        Logger logger = compliantLogger();
+
+        train_for_app_packages(source);
+
+        String[] classNames = new String[] { APP_ROOT_PACKAGE + ".pages.exam.ExamIndex", APP_ROOT_PACKAGE + ".pages.exam.StartExam" };
+
+        train_locateComponentClassNames(locator, APP_ROOT_PACKAGE + ".pages", classNames);
+
+        replay();
+
+        ComponentClassResolver resolver = create(logger, source, locator);
+
+        assertEquals(resolver.resolvePageNameToClassName("exam"), classNames[0]);
+
+        verify();
+    }
 }