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


Reply via email to