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