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