You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2014/08/28 02:56:09 UTC
[1/3] git commit: Add a short sleep,
not sure why this is suddenly necessary
Repository: tapestry-5
Updated Branches:
refs/heads/master 54b524e7d -> 194849cd1
Add a short sleep, not sure why this is suddenly necessary
Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/b51a5d68
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/b51a5d68
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/b51a5d68
Branch: refs/heads/master
Commit: b51a5d6880ef0209b2a48495807bb7445ffa7658
Parents: 54b524e
Author: Howard M. Lewis Ship <hl...@apache.org>
Authored: Wed Aug 27 17:04:25 2014 -0700
Committer: Howard M. Lewis Ship <hl...@apache.org>
Committed: Wed Aug 27 17:04:25 2014 -0700
----------------------------------------------------------------------
.../integration/app1/ZoneRefreshTest.java | 35 ++++++++++----------
1 file changed, 18 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/b51a5d68/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/ZoneRefreshTest.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/ZoneRefreshTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/ZoneRefreshTest.java
index 3c116f0..d29d271 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/ZoneRefreshTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/ZoneRefreshTest.java
@@ -47,23 +47,24 @@ public class ZoneRefreshTest extends App1TestCase
@Test
public void test_if_zone_with_context_works() throws Exception
{
- openBaseURL();
- clickAndWait("link=Zone Refresh With Context");
-
- // assert that counter value didn't changed
- assertText("zone", "false");
- Thread.sleep(2000l);
- assertText("zone", "false");
-
- // increment counter
- click("link=Add");
- waitForAjaxRequestsToComplete();
-
- // assert that counter value didn't changed
- Thread.sleep(2000l);
- assertText("zone", "true");
- Thread.sleep(2000l);
- assertText("zone", "true");
+ openBaseURL();
+ clickAndWait("link=Zone Refresh With Context");
+
+ // assert that counter value didn't changed
+ assertText("zone", "false");
+ Thread.sleep(2000l);
+ assertText("zone", "false");
+
+ // increment counter
+ click("link=Add");
+ Thread.sleep(250l);
+ waitForAjaxRequestsToComplete();
+
+ // assert that counter value didn't changed
+ Thread.sleep(2000l);
+ assertText("zone", "true");
+ Thread.sleep(2000l);
+ assertText("zone", "true");
}
private void checkZoneValues(String zone, int times) throws Exception
[3/3] git commit: TAP5-633: Allow page classes to have a "Page"
suffix that is not included in the URL
Posted by hl...@apache.org.
TAP5-633: Allow page classes to have a "Page" suffix that is not included in the URL
Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/194849cd
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/194849cd
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/194849cd
Branch: refs/heads/master
Commit: 194849cd183c57fe49a97da791e3bd73dbf8e046
Parents: 624abbe
Author: Howard M. Lewis Ship <hl...@apache.org>
Authored: Wed Aug 27 17:56:05 2014 -0700
Committer: Howard M. Lewis Ship <hl...@apache.org>
Committed: Wed Aug 27 17:56:05 2014 -0700
----------------------------------------------------------------------
54_RELEASE_NOTES.md | 11 ++++
.../internal/ComponentOverrideImpl.java | 45 +++++--------
.../services/ComponentClassResolverImpl.java | 68 ++++++++++++++------
.../services/templates/PageTemplateLocator.java | 18 ++----
.../tapestry5/modules/TapestryModule.java | 2 +-
.../tapestry5/services/ComponentOverride.java | 12 +---
.../ComponentClassResolverImplTest.groovy | 25 +++----
.../templates/PageTemplateLocatorTest.groovy | 58 +++++++++++------
.../app3/AdditionalIntegrationTests.java | 17 -----
9 files changed, 140 insertions(+), 116 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/194849cd/54_RELEASE_NOTES.md
----------------------------------------------------------------------
diff --git a/54_RELEASE_NOTES.md b/54_RELEASE_NOTES.md
index 75222f0..93d0646 100644
--- a/54_RELEASE_NOTES.md
+++ b/54_RELEASE_NOTES.md
@@ -180,6 +180,17 @@ resurface in the future as a CSS expression, but is currently not supported.
The default exception report page has been modified to display a list of threads.
+## Page Suffix for Page Names
+
+It is now possible to use "page" as a suffix on a page name. The "page" suffix is stripped off of the logical page
+name; thus for AccountsPage.java, the logical page name will be "Accounts", and this name (in lower case)
+will be used inside generated URLs. However, "AccountsPage" will also be recognized in URLs or in code. The
+component template should always be named after the Java class itself, here "AccountsPage.tml".
+
+This name stripping, combined with stripping out package names as prefixes and suffixes, can be somewhat hard to
+reason about. Tapestry has always logged a listing of all these aliases at startup; in rare cases, you may
+see conflicts or undesirable page names, and you should rename your classes to suit.
+
## ExceptionReporter Service
A new service, `ExceptionReporter`, will now create a text file on the file system for each runtime request processing exception.
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/194849cd/tapestry-core/src/main/java/org/apache/tapestry5/internal/ComponentOverrideImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/ComponentOverrideImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/ComponentOverrideImpl.java
index e9ab678..93a5e87 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/ComponentOverrideImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/ComponentOverrideImpl.java
@@ -1,5 +1,3 @@
-// Copyright 2014 The Apache Software Foundation
-//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
@@ -11,73 +9,64 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
-package org.apache.tapestry5.internal;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
+package org.apache.tapestry5.internal;
-import org.apache.tapestry5.ioc.util.CaseInsensitiveMap;
import org.apache.tapestry5.services.ComponentOverride;
import org.slf4j.Logger;
+import java.util.*;
+
public class ComponentOverrideImpl implements ComponentOverride
{
- final Logger logger;
- final private Map<Class, Class> replacements;
- final private Map<String, Class> nameToClass;
+ private final Map<String, Class> nameToClass;
@SuppressWarnings("rawtypes")
public ComponentOverrideImpl(Map<Class, Class> contributions, Logger logger)
{
- this.logger = logger;
- this.replacements = Collections.unmodifiableMap(contributions);
+ Map<Class, Class> replacements = Collections.unmodifiableMap(contributions);
Map<String, Class> nameToClass = new HashMap<String, Class>();
int maxLength = 0;
- for (Class<?> clasz : contributions.keySet())
+ for (Class<?> clazz : contributions.keySet())
{
- final String name = clasz.getName();
- if (name.length() > maxLength) {
+ final String name = clazz.getName();
+ if (name.length() > maxLength)
+ {
maxLength = name.length();
}
- nameToClass.put(name, contributions.get(clasz));
+ nameToClass.put(name, contributions.get(clazz));
}
this.nameToClass = Collections.unmodifiableMap(nameToClass);
-
+
if (replacements.size() > 0 && logger.isInfoEnabled())
{
-
StringBuilder builder = new StringBuilder(1000);
final String format = "%" + maxLength + "s: %s\n";
builder.append("Component replacements (including components, pages and mixins):\n");
List<String> names = new ArrayList<String>(nameToClass.keySet());
Collections.sort(names);
-
- for (String name : names) {
+
+ for (String name : names)
+ {
builder.append(String.format(format, name, nameToClass.get(name).getName()));
}
-
+
logger.info(builder.toString());
-
}
}
@Override
- public Map<Class, Class> getReplacements()
+ public boolean hasReplacements()
{
- return replacements;
+ return !nameToClass.isEmpty();
}
@Override
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/194849cd/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentClassResolverImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentClassResolverImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentClassResolverImpl.java
index 4d29a3e..7f8c666 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentClassResolverImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentClassResolverImpl.java
@@ -68,6 +68,15 @@ public class ComponentClassResolverImpl implements ComponentClassResolver, Inval
private final Collection<LibraryMapping> libraryMappings;
+ private final Pattern endsWithPagePattern = Pattern.compile(".*/?\\w+page$", Pattern.CASE_INSENSITIVE);
+
+ private boolean endsWithPage(String name)
+ {
+ // Don't treat a name that's just "page" as a suffix to strip off.
+
+ return endsWithPagePattern.matcher(name).matches();
+ }
+
private class Data
{
@@ -112,58 +121,75 @@ public class ComponentClassResolverImpl implements ComponentClassResolver, Inval
private void rebuild(String pathPrefix, String rootPackage)
{
- fillNameToClassNameMap(pathPrefix, rootPackage, InternalConstants.PAGES_SUBPACKAGE, pageToClassName, pageToClassNames);
- fillNameToClassNameMap(pathPrefix, rootPackage, InternalConstants.COMPONENTS_SUBPACKAGE, componentToClassName, componentToClassNames);
- fillNameToClassNameMap(pathPrefix, rootPackage, InternalConstants.MIXINS_SUBPACKAGE, mixinToClassName, mixinToClassNames);
+ fill(pathPrefix, rootPackage, InternalConstants.PAGES_SUBPACKAGE, pageToClassName, pageToClassNames);
+ fill(pathPrefix, rootPackage, InternalConstants.COMPONENTS_SUBPACKAGE, componentToClassName, componentToClassNames);
+ fill(pathPrefix, rootPackage, InternalConstants.MIXINS_SUBPACKAGE, mixinToClassName, mixinToClassNames);
}
- private void fillNameToClassNameMap(String pathPrefix, String rootPackage, String subPackage,
- Map<String, String> logicalNameToClassName,
- Map<String, Set<String>> nameToClassNames)
+ private void fill(String pathPrefix, String rootPackage, String subPackage,
+ Map<String, String> logicalNameToClassName,
+ Map<String, Set<String>> nameToClassNames)
{
String searchPackage = rootPackage + "." + subPackage;
boolean isPage = subPackage.equals(InternalConstants.PAGES_SUBPACKAGE);
Collection<String> classNames = classNameLocator.locateClassNames(searchPackage);
+ Set<String> aliases = CollectionFactory.newSet();
+
int startPos = searchPackage.length() + 1;
for (String className : classNames)
{
+ aliases.clear();
+
String logicalName = toLogicalName(className, pathPrefix, startPos, true);
String unstrippedName = toLogicalName(className, pathPrefix, startPos, false);
+ aliases.add(logicalName);
+ aliases.add(unstrippedName);
+
if (isPage)
{
+ if (endsWithPage(logicalName))
+ {
+ logicalName = logicalName.substring(0, logicalName.length() - 4);
+ aliases.add(logicalName);
+ }
+
int lastSlashx = logicalName.lastIndexOf("/");
String lastTerm = lastSlashx < 0 ? logicalName : logicalName.substring(lastSlashx + 1);
- if (lastTerm.equalsIgnoreCase("index") || lastTerm.equalsIgnoreCase(startPageName))
+ if (lastTerm.equalsIgnoreCase("index"))
{
String reducedName = lastSlashx < 0 ? "" : logicalName.substring(0, lastSlashx);
// Make the super-stripped name another alias to the class.
// TAP5-1444: Everything else but a start page has precedence
- if (!(lastTerm.equalsIgnoreCase(startPageName) && logicalNameToClassName.containsKey(reducedName)))
- {
- logicalNameToClassName.put(reducedName, className);
- pageNameToCanonicalPageName.put(reducedName, logicalName);
- addNameMapping(nameToClassNames, reducedName, className);
- }
+
+ aliases.add(reducedName);
+ }
+
+ if (logicalName.equals(startPageName))
+ {
+ aliases.add("");
}
pageClassNameToLogicalName.put(className, logicalName);
- pageNameToCanonicalPageName.put(logicalName, logicalName);
- pageNameToCanonicalPageName.put(unstrippedName, logicalName);
}
- logicalNameToClassName.put(logicalName, className);
- logicalNameToClassName.put(unstrippedName, className);
+ for (String alias : aliases)
+ {
+ logicalNameToClassName.put(alias, className);
+ addNameMapping(nameToClassNames, alias, className);
- addNameMapping(nameToClassNames, logicalName, className);
- addNameMapping(nameToClassNames, unstrippedName, className);
+ if (isPage)
+ {
+ pageNameToCanonicalPageName.put(alias, logicalName);
+ }
+ }
}
}
@@ -204,11 +230,15 @@ public class ComponentClassResolverImpl implements ComponentClassResolver, Inval
sep = "/";
if (stripTerms)
+ {
logicalName = stripTerm(term, logicalName);
+ }
}
if (logicalName.equals(""))
+ {
logicalName = unstripped;
+ }
builder.append(sep);
builder.append(logicalName);
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/194849cd/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/templates/PageTemplateLocator.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/templates/PageTemplateLocator.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/templates/PageTemplateLocator.java
index 77ee6f5..6f4d427 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/templates/PageTemplateLocator.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/templates/PageTemplateLocator.java
@@ -1,5 +1,3 @@
-// Copyright 2010, 2011 The Apache Software Foundation
-//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
@@ -55,19 +53,15 @@ public class PageTemplateLocator implements ComponentTemplateLocator
String logicalName = resolver.resolvePageClassNameToPageName(className);
- int slashx = logicalName.lastIndexOf('/');
-
- if (slashx > 0)
- {
- // However, the logical name isn't quite what we want. It may have been somewhat
- // trimmed.
+ String simpleClassName = InternalUtils.lastTerm(className);
- String simpleClassName = InternalUtils.lastTerm(className);
+ int slashx = logicalName.lastIndexOf('/');
- logicalName = logicalName.substring(0, slashx + 1) + simpleClassName;
- }
+ // Using the simple class name always accounts for the case where a "page" suffix was stripped off to form
+ // the logical page name (and several other cases where the name was simplified in some way).
+ String baseName = slashx < 0 ? simpleClassName : logicalName.substring(0, slashx + 1) + simpleClassName;
- String path = prefix + logicalName + "." + TapestryConstants.TEMPLATE_EXTENSION;
+ String path = prefix + baseName + "." + TapestryConstants.TEMPLATE_EXTENSION;
return contextRoot.forFile(path).forLocale(locale);
}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/194849cd/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java b/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
index 92b06d5..e3902de 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
@@ -2691,7 +2691,7 @@ public final class TapestryModule
final ComponentOverride componentReplacer) throws NoSuchMethodException, SecurityException
{
- if (componentReplacer.getReplacements().size() > 0)
+ if (componentReplacer.hasReplacements())
{
MethodAdvice advice = new MethodAdvice()
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/194849cd/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentOverride.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentOverride.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentOverride.java
index 1219b15..cbbbf98 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentOverride.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentOverride.java
@@ -1,5 +1,3 @@
-// Copyright 2014 The Apache Software Foundation
-//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
@@ -14,9 +12,6 @@
package org.apache.tapestry5.services;
-import java.util.Map;
-
-import org.apache.tapestry5.ioc.MethodAdviceReceiver;
import org.apache.tapestry5.ioc.annotations.UsesMappedConfiguration;
/**
@@ -28,18 +23,17 @@ import org.apache.tapestry5.ioc.annotations.UsesMappedConfiguration;
* replaced, the value is the replacement.
*
* @since 5.4
- * @see ComponentClassResolver.
+ * @see org.apache.tapestry5.services.ComponentClassResolver.
*/
@UsesMappedConfiguration(key = Class.class, value = Class.class)
public interface ComponentOverride
{
/**
- * Returns an immutable map of replacements. Internal use only.
+ * Returns true if the service configuration is non-empty.
*
- * @return a {@link Map}.
*/
- Map<Class, Class> getReplacements();
+ boolean hasReplacements();
/**
* Returns the replacement for a class given its name.
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/194849cd/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/ComponentClassResolverImplTest.groovy
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/ComponentClassResolverImplTest.groovy b/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/ComponentClassResolverImplTest.groovy
index 9b7d4a2..78b016e 100644
--- a/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/ComponentClassResolverImplTest.groovy
+++ b/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/ComponentClassResolverImplTest.groovy
@@ -8,7 +8,6 @@ import org.apache.tapestry5.services.ComponentClassResolver
import org.apache.tapestry5.services.LibraryMapping
import org.easymock.EasyMock
import org.slf4j.Logger
-import org.slf4j.LoggerFactory
import org.testng.annotations.Test
import static org.easymock.EasyMock.isA
@@ -80,7 +79,7 @@ class ComponentClassResolverImplTest extends InternalBaseTestCase {
List<String> pageNames = resolver.getPageNames()
- assertListsEquals(pageNames, "SimplePage", "nested/Index", "nested/Other", "nested/Page")
+ assertListsEquals(pageNames, "Simple", "nested/Index", "nested/Other", "nested/Page")
verify()
}
@@ -119,7 +118,8 @@ class ComponentClassResolverImplTest extends InternalBaseTestCase {
ComponentClassResolver resolver = create(logger, locator, [])
- assertEquals(resolver.canonicalizePageName("simplepage"), "SimplePage")
+ assertEquals(resolver.canonicalizePageName("simplepage"), "Simple")
+ assertEquals(resolver.canonicalizePageName("simple"), "Simple")
verify()
}
@@ -135,12 +135,13 @@ class ComponentClassResolverImplTest extends InternalBaseTestCase {
replay()
- ComponentClassResolver resolver = new ComponentClassResolverImpl(logger, locator, "HomePage",
+ ComponentClassResolver resolver = new ComponentClassResolverImpl(logger, locator, "Home",
APP_ROOT_PACKAGE_MAPPINGS)
- assertEquals(resolver.canonicalizePageName("HomePage"), "HomePage")
- assertEquals(resolver.canonicalizePageName(""), "HomePage")
- assertTrue(resolver.isPageName("HomePage"))
+ assertEquals(resolver.canonicalizePageName("Home"), "Home")
+ assertEquals(resolver.canonicalizePageName("HomePage"), "Home")
+ assertEquals(resolver.canonicalizePageName(""), "Home")
+ assertTrue(resolver.isPageName("Home"))
verify()
}
@@ -156,11 +157,11 @@ class ComponentClassResolverImplTest extends InternalBaseTestCase {
replay()
- ComponentClassResolver resolver = new ComponentClassResolverImpl(logger, locator, "HomePage",
+ ComponentClassResolver resolver = new ComponentClassResolverImpl(logger, locator, "Home",
APP_ROOT_PACKAGE_MAPPINGS)
- assertEquals(resolver.canonicalizePageName("sub/HomePage"), "sub/HomePage")
- assertEquals(resolver.canonicalizePageName("sub"), "sub/HomePage")
+ assertEquals(resolver.canonicalizePageName("sub/HomePage"), "sub/Home")
+ assertEquals(resolver.canonicalizePageName("sub/home"), "sub/Home")
assertTrue(resolver.isPageName("sub/HomePage"))
verify()
@@ -390,7 +391,7 @@ class ComponentClassResolverImplTest extends InternalBaseTestCase {
ComponentClassResolver resolver = create(logger, locator, [])
- assertEquals(resolver.resolvePageClassNameToPageName(className), "SimplePage")
+ assertEquals(resolver.resolvePageClassNameToPageName(className), "Simple")
verify()
}
@@ -468,7 +469,7 @@ class ComponentClassResolverImplTest extends InternalBaseTestCase {
ComponentClassResolver resolver = create(logger, locator, new LibraryMapping(CORE_PREFIX, CORE_ROOT_PACKAGE))
- assertEquals(resolver.resolvePageClassNameToPageName(className), "core/MyCorePage")
+ assertEquals(resolver.resolvePageClassNameToPageName(className), "core/MyCore")
verify()
}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/194849cd/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/templates/PageTemplateLocatorTest.groovy
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/templates/PageTemplateLocatorTest.groovy b/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/templates/PageTemplateLocatorTest.groovy
index d376466..16ee7a3 100644
--- a/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/templates/PageTemplateLocatorTest.groovy
+++ b/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/templates/PageTemplateLocatorTest.groovy
@@ -1,5 +1,3 @@
-// Copyright 2010, 2011 The Apache Software Foundation
-//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
@@ -12,15 +10,13 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package org.apache.tapestry5.internal.services.templates;
-
-import java.util.Locale
+package org.apache.tapestry5.internal.services.templates
import org.apache.tapestry5.internal.test.InternalBaseTestCase
import org.testng.annotations.Test
-class PageTemplateLocatorTest extends InternalBaseTestCase
-{
+class PageTemplateLocatorTest extends InternalBaseTestCase {
+
void execute(root, resolver, closure) {
replay()
@@ -38,9 +34,9 @@ class PageTemplateLocatorTest extends InternalBaseTestCase
expect(model.page).andReturn(false)
- execute (root, resolver) {
+ execute(root, resolver) {
- assert it.locateTemplate (model, Locale.FRENCH) == null
+ assert it.locateTemplate(model, Locale.FRENCH) == null
}
}
@@ -63,7 +59,7 @@ class PageTemplateLocatorTest extends InternalBaseTestCase
train_forFile(root, "Foo.tml", withExtension)
train_forLocale(withExtension, locale, forLocale)
- execute (root, resolver) {
+ execute(root, resolver) {
assertSame it.locateTemplate(model, locale), forLocale
}
@@ -88,14 +84,40 @@ class PageTemplateLocatorTest extends InternalBaseTestCase
expect(model.page).andReturn(true)
train_getComponentClassName(model, className)
- train_resolvePageClassNameToPageName (resolver, className, "foo/Create")
+ train_resolvePageClassNameToPageName(resolver, className, "foo/Create")
train_forFile(root, "foo/CreateFoo.tml", withExtension)
train_forLocale(withExtension, locale, forLocale)
- execute (root, resolver){
+ execute(root, resolver) {
- assertSame it.locateTemplate (model, locale), forLocale
+ assertSame it.locateTemplate(model, locale), forLocale
+ }
+ }
+
+ @Test
+ void uses_class_name_when_different_than_logical_name() {
+
+ def model = mockComponentModel()
+ def root = mockResource()
+ def withExtension = mockResource()
+ def forLocale = mockResource()
+ def resolver = mockComponentClassResolver()
+
+ def locale = Locale.FRENCH
+ def className = "myapp.pages.foo.CreateFooPage"
+
+ expect(model.page).andReturn(true)
+
+ train_getComponentClassName(model, className)
+ train_resolvePageClassNameToPageName(resolver, className, "foo/CreatePage")
+
+ train_forFile(root, "foo/CreateFooPage.tml", withExtension)
+ train_forLocale(withExtension, locale, forLocale)
+
+ execute(root, resolver) {
+
+ assertSame it.locateTemplate(model, locale), forLocale
}
}
@@ -105,18 +127,18 @@ class PageTemplateLocatorTest extends InternalBaseTestCase
def root = mockResource()
def withExtension = mockResource()
def resolver = mockComponentClassResolver()
- def locale= Locale.GERMAN;
+ def locale = Locale.GERMAN;
def className = "myapp.pages.bar.Baz"
- expect (model.page).andReturn(true)
+ expect(model.page).andReturn(true)
- train_getComponentClassName (model, className)
- train_resolvePageClassNameToPageName (resolver, className, "bar/Baz")
+ train_getComponentClassName(model, className)
+ train_resolvePageClassNameToPageName(resolver, className, "bar/Baz")
train_forFile(root, "bar/Baz.tml", withExtension)
train_forLocale(withExtension, locale, null)
- execute (root, resolver) {
+ execute(root, resolver) {
assertNull it.locateTemplate(model, locale)
}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/194849cd/tapestry-core/src/test/java/org/apache/tapestry5/integration/app3/AdditionalIntegrationTests.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app3/AdditionalIntegrationTests.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app3/AdditionalIntegrationTests.java
index f94eff0..2b8a7e2 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app3/AdditionalIntegrationTests.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app3/AdditionalIntegrationTests.java
@@ -1,5 +1,3 @@
-// Copyright 2007, 2008, 2011, 2014 The Apache Software Foundation
-//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
@@ -75,21 +73,6 @@ public class AdditionalIntegrationTests extends TapestryCoreTestCase
// Fuckin Selenium
// assertAttribute("//a[2]/@href", "login");
}
-
- public void ajax_server_side_exception()
- {
- openLinks("Console demo");
-
- assertTextPresent("Demonstrates Tapestry console");
-
- click("link=Failure on the server side");
-
- // Wait for the console to appear
-
- waitForCSSSelectedElementToAppear(".t-console div.t-err");
-
- assertTextPresent("Communication with the server failed: Server-side exception.");
- }
// TAP5-1611
@Test
[2/3] git commit: Include thread name in logging output
Posted by hl...@apache.org.
Include thread name in logging output
Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/624abbec
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/624abbec
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/624abbec
Branch: refs/heads/master
Commit: 624abbecdf8340005668f2fd560c5c266f2a4287
Parents: b51a5d6
Author: Howard M. Lewis Ship <hl...@apache.org>
Authored: Wed Aug 27 17:55:11 2014 -0700
Committer: Howard M. Lewis Ship <hl...@apache.org>
Committed: Wed Aug 27 17:55:11 2014 -0700
----------------------------------------------------------------------
tapestry-core/src/test/resources/log4j.properties | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/624abbec/tapestry-core/src/test/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/resources/log4j.properties b/tapestry-core/src/test/resources/log4j.properties
index 37d6290..7090fd4 100644
--- a/tapestry-core/src/test/resources/log4j.properties
+++ b/tapestry-core/src/test/resources/log4j.properties
@@ -5,7 +5,7 @@ log4j.appender.A1=org.apache.log4j.ConsoleAppender
# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
-log4j.appender.A1.layout.ConversionPattern=[%p] %c{1} %m%n
+log4j.appender.A1.layout.ConversionPattern=%t [%p] %c{1} %m%n
log4j.category.org.apache.tapestry5.integration.app2=debug
[3/3] git commit: TAP5-633: Allow page classes to have a "Page"
suffix that is not included in the URL
Posted by hl...@apache.org.
TAP5-633: Allow page classes to have a "Page" suffix that is not included in the URL
Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/194849cd
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/194849cd
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/194849cd
Branch: refs/heads/master
Commit: 194849cd183c57fe49a97da791e3bd73dbf8e046
Parents: 624abbe
Author: Howard M. Lewis Ship <hl...@apache.org>
Authored: Wed Aug 27 17:56:05 2014 -0700
Committer: Howard M. Lewis Ship <hl...@apache.org>
Committed: Wed Aug 27 17:56:05 2014 -0700
----------------------------------------------------------------------
54_RELEASE_NOTES.md | 11 ++++
.../internal/ComponentOverrideImpl.java | 45 +++++--------
.../services/ComponentClassResolverImpl.java | 68 ++++++++++++++------
.../services/templates/PageTemplateLocator.java | 18 ++----
.../tapestry5/modules/TapestryModule.java | 2 +-
.../tapestry5/services/ComponentOverride.java | 12 +---
.../ComponentClassResolverImplTest.groovy | 25 +++----
.../templates/PageTemplateLocatorTest.groovy | 58 +++++++++++------
.../app3/AdditionalIntegrationTests.java | 17 -----
9 files changed, 140 insertions(+), 116 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/194849cd/54_RELEASE_NOTES.md
----------------------------------------------------------------------
diff --git a/54_RELEASE_NOTES.md b/54_RELEASE_NOTES.md
index 75222f0..93d0646 100644
--- a/54_RELEASE_NOTES.md
+++ b/54_RELEASE_NOTES.md
@@ -180,6 +180,17 @@ resurface in the future as a CSS expression, but is currently not supported.
The default exception report page has been modified to display a list of threads.
+## Page Suffix for Page Names
+
+It is now possible to use "page" as a suffix on a page name. The "page" suffix is stripped off of the logical page
+name; thus for AccountsPage.java, the logical page name will be "Accounts", and this name (in lower case)
+will be used inside generated URLs. However, "AccountsPage" will also be recognized in URLs or in code. The
+component template should always be named after the Java class itself, here "AccountsPage.tml".
+
+This name stripping, combined with stripping out package names as prefixes and suffixes, can be somewhat hard to
+reason about. Tapestry has always logged a listing of all these aliases at startup; in rare cases, you may
+see conflicts or undesirable page names, and you should rename your classes to suit.
+
## ExceptionReporter Service
A new service, `ExceptionReporter`, will now create a text file on the file system for each runtime request processing exception.
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/194849cd/tapestry-core/src/main/java/org/apache/tapestry5/internal/ComponentOverrideImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/ComponentOverrideImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/ComponentOverrideImpl.java
index e9ab678..93a5e87 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/ComponentOverrideImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/ComponentOverrideImpl.java
@@ -1,5 +1,3 @@
-// Copyright 2014 The Apache Software Foundation
-//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
@@ -11,73 +9,64 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
-package org.apache.tapestry5.internal;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
+package org.apache.tapestry5.internal;
-import org.apache.tapestry5.ioc.util.CaseInsensitiveMap;
import org.apache.tapestry5.services.ComponentOverride;
import org.slf4j.Logger;
+import java.util.*;
+
public class ComponentOverrideImpl implements ComponentOverride
{
- final Logger logger;
- final private Map<Class, Class> replacements;
- final private Map<String, Class> nameToClass;
+ private final Map<String, Class> nameToClass;
@SuppressWarnings("rawtypes")
public ComponentOverrideImpl(Map<Class, Class> contributions, Logger logger)
{
- this.logger = logger;
- this.replacements = Collections.unmodifiableMap(contributions);
+ Map<Class, Class> replacements = Collections.unmodifiableMap(contributions);
Map<String, Class> nameToClass = new HashMap<String, Class>();
int maxLength = 0;
- for (Class<?> clasz : contributions.keySet())
+ for (Class<?> clazz : contributions.keySet())
{
- final String name = clasz.getName();
- if (name.length() > maxLength) {
+ final String name = clazz.getName();
+ if (name.length() > maxLength)
+ {
maxLength = name.length();
}
- nameToClass.put(name, contributions.get(clasz));
+ nameToClass.put(name, contributions.get(clazz));
}
this.nameToClass = Collections.unmodifiableMap(nameToClass);
-
+
if (replacements.size() > 0 && logger.isInfoEnabled())
{
-
StringBuilder builder = new StringBuilder(1000);
final String format = "%" + maxLength + "s: %s\n";
builder.append("Component replacements (including components, pages and mixins):\n");
List<String> names = new ArrayList<String>(nameToClass.keySet());
Collections.sort(names);
-
- for (String name : names) {
+
+ for (String name : names)
+ {
builder.append(String.format(format, name, nameToClass.get(name).getName()));
}
-
+
logger.info(builder.toString());
-
}
}
@Override
- public Map<Class, Class> getReplacements()
+ public boolean hasReplacements()
{
- return replacements;
+ return !nameToClass.isEmpty();
}
@Override
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/194849cd/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentClassResolverImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentClassResolverImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentClassResolverImpl.java
index 4d29a3e..7f8c666 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentClassResolverImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentClassResolverImpl.java
@@ -68,6 +68,15 @@ public class ComponentClassResolverImpl implements ComponentClassResolver, Inval
private final Collection<LibraryMapping> libraryMappings;
+ private final Pattern endsWithPagePattern = Pattern.compile(".*/?\\w+page$", Pattern.CASE_INSENSITIVE);
+
+ private boolean endsWithPage(String name)
+ {
+ // Don't treat a name that's just "page" as a suffix to strip off.
+
+ return endsWithPagePattern.matcher(name).matches();
+ }
+
private class Data
{
@@ -112,58 +121,75 @@ public class ComponentClassResolverImpl implements ComponentClassResolver, Inval
private void rebuild(String pathPrefix, String rootPackage)
{
- fillNameToClassNameMap(pathPrefix, rootPackage, InternalConstants.PAGES_SUBPACKAGE, pageToClassName, pageToClassNames);
- fillNameToClassNameMap(pathPrefix, rootPackage, InternalConstants.COMPONENTS_SUBPACKAGE, componentToClassName, componentToClassNames);
- fillNameToClassNameMap(pathPrefix, rootPackage, InternalConstants.MIXINS_SUBPACKAGE, mixinToClassName, mixinToClassNames);
+ fill(pathPrefix, rootPackage, InternalConstants.PAGES_SUBPACKAGE, pageToClassName, pageToClassNames);
+ fill(pathPrefix, rootPackage, InternalConstants.COMPONENTS_SUBPACKAGE, componentToClassName, componentToClassNames);
+ fill(pathPrefix, rootPackage, InternalConstants.MIXINS_SUBPACKAGE, mixinToClassName, mixinToClassNames);
}
- private void fillNameToClassNameMap(String pathPrefix, String rootPackage, String subPackage,
- Map<String, String> logicalNameToClassName,
- Map<String, Set<String>> nameToClassNames)
+ private void fill(String pathPrefix, String rootPackage, String subPackage,
+ Map<String, String> logicalNameToClassName,
+ Map<String, Set<String>> nameToClassNames)
{
String searchPackage = rootPackage + "." + subPackage;
boolean isPage = subPackage.equals(InternalConstants.PAGES_SUBPACKAGE);
Collection<String> classNames = classNameLocator.locateClassNames(searchPackage);
+ Set<String> aliases = CollectionFactory.newSet();
+
int startPos = searchPackage.length() + 1;
for (String className : classNames)
{
+ aliases.clear();
+
String logicalName = toLogicalName(className, pathPrefix, startPos, true);
String unstrippedName = toLogicalName(className, pathPrefix, startPos, false);
+ aliases.add(logicalName);
+ aliases.add(unstrippedName);
+
if (isPage)
{
+ if (endsWithPage(logicalName))
+ {
+ logicalName = logicalName.substring(0, logicalName.length() - 4);
+ aliases.add(logicalName);
+ }
+
int lastSlashx = logicalName.lastIndexOf("/");
String lastTerm = lastSlashx < 0 ? logicalName : logicalName.substring(lastSlashx + 1);
- if (lastTerm.equalsIgnoreCase("index") || lastTerm.equalsIgnoreCase(startPageName))
+ if (lastTerm.equalsIgnoreCase("index"))
{
String reducedName = lastSlashx < 0 ? "" : logicalName.substring(0, lastSlashx);
// Make the super-stripped name another alias to the class.
// TAP5-1444: Everything else but a start page has precedence
- if (!(lastTerm.equalsIgnoreCase(startPageName) && logicalNameToClassName.containsKey(reducedName)))
- {
- logicalNameToClassName.put(reducedName, className);
- pageNameToCanonicalPageName.put(reducedName, logicalName);
- addNameMapping(nameToClassNames, reducedName, className);
- }
+
+ aliases.add(reducedName);
+ }
+
+ if (logicalName.equals(startPageName))
+ {
+ aliases.add("");
}
pageClassNameToLogicalName.put(className, logicalName);
- pageNameToCanonicalPageName.put(logicalName, logicalName);
- pageNameToCanonicalPageName.put(unstrippedName, logicalName);
}
- logicalNameToClassName.put(logicalName, className);
- logicalNameToClassName.put(unstrippedName, className);
+ for (String alias : aliases)
+ {
+ logicalNameToClassName.put(alias, className);
+ addNameMapping(nameToClassNames, alias, className);
- addNameMapping(nameToClassNames, logicalName, className);
- addNameMapping(nameToClassNames, unstrippedName, className);
+ if (isPage)
+ {
+ pageNameToCanonicalPageName.put(alias, logicalName);
+ }
+ }
}
}
@@ -204,11 +230,15 @@ public class ComponentClassResolverImpl implements ComponentClassResolver, Inval
sep = "/";
if (stripTerms)
+ {
logicalName = stripTerm(term, logicalName);
+ }
}
if (logicalName.equals(""))
+ {
logicalName = unstripped;
+ }
builder.append(sep);
builder.append(logicalName);
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/194849cd/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/templates/PageTemplateLocator.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/templates/PageTemplateLocator.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/templates/PageTemplateLocator.java
index 77ee6f5..6f4d427 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/templates/PageTemplateLocator.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/templates/PageTemplateLocator.java
@@ -1,5 +1,3 @@
-// Copyright 2010, 2011 The Apache Software Foundation
-//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
@@ -55,19 +53,15 @@ public class PageTemplateLocator implements ComponentTemplateLocator
String logicalName = resolver.resolvePageClassNameToPageName(className);
- int slashx = logicalName.lastIndexOf('/');
-
- if (slashx > 0)
- {
- // However, the logical name isn't quite what we want. It may have been somewhat
- // trimmed.
+ String simpleClassName = InternalUtils.lastTerm(className);
- String simpleClassName = InternalUtils.lastTerm(className);
+ int slashx = logicalName.lastIndexOf('/');
- logicalName = logicalName.substring(0, slashx + 1) + simpleClassName;
- }
+ // Using the simple class name always accounts for the case where a "page" suffix was stripped off to form
+ // the logical page name (and several other cases where the name was simplified in some way).
+ String baseName = slashx < 0 ? simpleClassName : logicalName.substring(0, slashx + 1) + simpleClassName;
- String path = prefix + logicalName + "." + TapestryConstants.TEMPLATE_EXTENSION;
+ String path = prefix + baseName + "." + TapestryConstants.TEMPLATE_EXTENSION;
return contextRoot.forFile(path).forLocale(locale);
}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/194849cd/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java b/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
index 92b06d5..e3902de 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
@@ -2691,7 +2691,7 @@ public final class TapestryModule
final ComponentOverride componentReplacer) throws NoSuchMethodException, SecurityException
{
- if (componentReplacer.getReplacements().size() > 0)
+ if (componentReplacer.hasReplacements())
{
MethodAdvice advice = new MethodAdvice()
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/194849cd/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentOverride.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentOverride.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentOverride.java
index 1219b15..cbbbf98 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentOverride.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentOverride.java
@@ -1,5 +1,3 @@
-// Copyright 2014 The Apache Software Foundation
-//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
@@ -14,9 +12,6 @@
package org.apache.tapestry5.services;
-import java.util.Map;
-
-import org.apache.tapestry5.ioc.MethodAdviceReceiver;
import org.apache.tapestry5.ioc.annotations.UsesMappedConfiguration;
/**
@@ -28,18 +23,17 @@ import org.apache.tapestry5.ioc.annotations.UsesMappedConfiguration;
* replaced, the value is the replacement.
*
* @since 5.4
- * @see ComponentClassResolver.
+ * @see org.apache.tapestry5.services.ComponentClassResolver.
*/
@UsesMappedConfiguration(key = Class.class, value = Class.class)
public interface ComponentOverride
{
/**
- * Returns an immutable map of replacements. Internal use only.
+ * Returns true if the service configuration is non-empty.
*
- * @return a {@link Map}.
*/
- Map<Class, Class> getReplacements();
+ boolean hasReplacements();
/**
* Returns the replacement for a class given its name.
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/194849cd/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/ComponentClassResolverImplTest.groovy
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/ComponentClassResolverImplTest.groovy b/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/ComponentClassResolverImplTest.groovy
index 9b7d4a2..78b016e 100644
--- a/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/ComponentClassResolverImplTest.groovy
+++ b/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/ComponentClassResolverImplTest.groovy
@@ -8,7 +8,6 @@ import org.apache.tapestry5.services.ComponentClassResolver
import org.apache.tapestry5.services.LibraryMapping
import org.easymock.EasyMock
import org.slf4j.Logger
-import org.slf4j.LoggerFactory
import org.testng.annotations.Test
import static org.easymock.EasyMock.isA
@@ -80,7 +79,7 @@ class ComponentClassResolverImplTest extends InternalBaseTestCase {
List<String> pageNames = resolver.getPageNames()
- assertListsEquals(pageNames, "SimplePage", "nested/Index", "nested/Other", "nested/Page")
+ assertListsEquals(pageNames, "Simple", "nested/Index", "nested/Other", "nested/Page")
verify()
}
@@ -119,7 +118,8 @@ class ComponentClassResolverImplTest extends InternalBaseTestCase {
ComponentClassResolver resolver = create(logger, locator, [])
- assertEquals(resolver.canonicalizePageName("simplepage"), "SimplePage")
+ assertEquals(resolver.canonicalizePageName("simplepage"), "Simple")
+ assertEquals(resolver.canonicalizePageName("simple"), "Simple")
verify()
}
@@ -135,12 +135,13 @@ class ComponentClassResolverImplTest extends InternalBaseTestCase {
replay()
- ComponentClassResolver resolver = new ComponentClassResolverImpl(logger, locator, "HomePage",
+ ComponentClassResolver resolver = new ComponentClassResolverImpl(logger, locator, "Home",
APP_ROOT_PACKAGE_MAPPINGS)
- assertEquals(resolver.canonicalizePageName("HomePage"), "HomePage")
- assertEquals(resolver.canonicalizePageName(""), "HomePage")
- assertTrue(resolver.isPageName("HomePage"))
+ assertEquals(resolver.canonicalizePageName("Home"), "Home")
+ assertEquals(resolver.canonicalizePageName("HomePage"), "Home")
+ assertEquals(resolver.canonicalizePageName(""), "Home")
+ assertTrue(resolver.isPageName("Home"))
verify()
}
@@ -156,11 +157,11 @@ class ComponentClassResolverImplTest extends InternalBaseTestCase {
replay()
- ComponentClassResolver resolver = new ComponentClassResolverImpl(logger, locator, "HomePage",
+ ComponentClassResolver resolver = new ComponentClassResolverImpl(logger, locator, "Home",
APP_ROOT_PACKAGE_MAPPINGS)
- assertEquals(resolver.canonicalizePageName("sub/HomePage"), "sub/HomePage")
- assertEquals(resolver.canonicalizePageName("sub"), "sub/HomePage")
+ assertEquals(resolver.canonicalizePageName("sub/HomePage"), "sub/Home")
+ assertEquals(resolver.canonicalizePageName("sub/home"), "sub/Home")
assertTrue(resolver.isPageName("sub/HomePage"))
verify()
@@ -390,7 +391,7 @@ class ComponentClassResolverImplTest extends InternalBaseTestCase {
ComponentClassResolver resolver = create(logger, locator, [])
- assertEquals(resolver.resolvePageClassNameToPageName(className), "SimplePage")
+ assertEquals(resolver.resolvePageClassNameToPageName(className), "Simple")
verify()
}
@@ -468,7 +469,7 @@ class ComponentClassResolverImplTest extends InternalBaseTestCase {
ComponentClassResolver resolver = create(logger, locator, new LibraryMapping(CORE_PREFIX, CORE_ROOT_PACKAGE))
- assertEquals(resolver.resolvePageClassNameToPageName(className), "core/MyCorePage")
+ assertEquals(resolver.resolvePageClassNameToPageName(className), "core/MyCore")
verify()
}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/194849cd/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/templates/PageTemplateLocatorTest.groovy
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/templates/PageTemplateLocatorTest.groovy b/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/templates/PageTemplateLocatorTest.groovy
index d376466..16ee7a3 100644
--- a/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/templates/PageTemplateLocatorTest.groovy
+++ b/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/templates/PageTemplateLocatorTest.groovy
@@ -1,5 +1,3 @@
-// Copyright 2010, 2011 The Apache Software Foundation
-//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
@@ -12,15 +10,13 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package org.apache.tapestry5.internal.services.templates;
-
-import java.util.Locale
+package org.apache.tapestry5.internal.services.templates
import org.apache.tapestry5.internal.test.InternalBaseTestCase
import org.testng.annotations.Test
-class PageTemplateLocatorTest extends InternalBaseTestCase
-{
+class PageTemplateLocatorTest extends InternalBaseTestCase {
+
void execute(root, resolver, closure) {
replay()
@@ -38,9 +34,9 @@ class PageTemplateLocatorTest extends InternalBaseTestCase
expect(model.page).andReturn(false)
- execute (root, resolver) {
+ execute(root, resolver) {
- assert it.locateTemplate (model, Locale.FRENCH) == null
+ assert it.locateTemplate(model, Locale.FRENCH) == null
}
}
@@ -63,7 +59,7 @@ class PageTemplateLocatorTest extends InternalBaseTestCase
train_forFile(root, "Foo.tml", withExtension)
train_forLocale(withExtension, locale, forLocale)
- execute (root, resolver) {
+ execute(root, resolver) {
assertSame it.locateTemplate(model, locale), forLocale
}
@@ -88,14 +84,40 @@ class PageTemplateLocatorTest extends InternalBaseTestCase
expect(model.page).andReturn(true)
train_getComponentClassName(model, className)
- train_resolvePageClassNameToPageName (resolver, className, "foo/Create")
+ train_resolvePageClassNameToPageName(resolver, className, "foo/Create")
train_forFile(root, "foo/CreateFoo.tml", withExtension)
train_forLocale(withExtension, locale, forLocale)
- execute (root, resolver){
+ execute(root, resolver) {
- assertSame it.locateTemplate (model, locale), forLocale
+ assertSame it.locateTemplate(model, locale), forLocale
+ }
+ }
+
+ @Test
+ void uses_class_name_when_different_than_logical_name() {
+
+ def model = mockComponentModel()
+ def root = mockResource()
+ def withExtension = mockResource()
+ def forLocale = mockResource()
+ def resolver = mockComponentClassResolver()
+
+ def locale = Locale.FRENCH
+ def className = "myapp.pages.foo.CreateFooPage"
+
+ expect(model.page).andReturn(true)
+
+ train_getComponentClassName(model, className)
+ train_resolvePageClassNameToPageName(resolver, className, "foo/CreatePage")
+
+ train_forFile(root, "foo/CreateFooPage.tml", withExtension)
+ train_forLocale(withExtension, locale, forLocale)
+
+ execute(root, resolver) {
+
+ assertSame it.locateTemplate(model, locale), forLocale
}
}
@@ -105,18 +127,18 @@ class PageTemplateLocatorTest extends InternalBaseTestCase
def root = mockResource()
def withExtension = mockResource()
def resolver = mockComponentClassResolver()
- def locale= Locale.GERMAN;
+ def locale = Locale.GERMAN;
def className = "myapp.pages.bar.Baz"
- expect (model.page).andReturn(true)
+ expect(model.page).andReturn(true)
- train_getComponentClassName (model, className)
- train_resolvePageClassNameToPageName (resolver, className, "bar/Baz")
+ train_getComponentClassName(model, className)
+ train_resolvePageClassNameToPageName(resolver, className, "bar/Baz")
train_forFile(root, "bar/Baz.tml", withExtension)
train_forLocale(withExtension, locale, null)
- execute (root, resolver) {
+ execute(root, resolver) {
assertNull it.locateTemplate(model, locale)
}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/194849cd/tapestry-core/src/test/java/org/apache/tapestry5/integration/app3/AdditionalIntegrationTests.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app3/AdditionalIntegrationTests.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app3/AdditionalIntegrationTests.java
index f94eff0..2b8a7e2 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app3/AdditionalIntegrationTests.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app3/AdditionalIntegrationTests.java
@@ -1,5 +1,3 @@
-// Copyright 2007, 2008, 2011, 2014 The Apache Software Foundation
-//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
@@ -75,21 +73,6 @@ public class AdditionalIntegrationTests extends TapestryCoreTestCase
// Fuckin Selenium
// assertAttribute("//a[2]/@href", "login");
}
-
- public void ajax_server_side_exception()
- {
- openLinks("Console demo");
-
- assertTextPresent("Demonstrates Tapestry console");
-
- click("link=Failure on the server side");
-
- // Wait for the console to appear
-
- waitForCSSSelectedElementToAppear(".t-console div.t-err");
-
- assertTextPresent("Communication with the server failed: Server-side exception.");
- }
// TAP5-1611
@Test
[2/3] git commit: Include thread name in logging output
Posted by hl...@apache.org.
Include thread name in logging output
Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/624abbec
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/624abbec
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/624abbec
Branch: refs/heads/master
Commit: 624abbecdf8340005668f2fd560c5c266f2a4287
Parents: b51a5d6
Author: Howard M. Lewis Ship <hl...@apache.org>
Authored: Wed Aug 27 17:55:11 2014 -0700
Committer: Howard M. Lewis Ship <hl...@apache.org>
Committed: Wed Aug 27 17:55:11 2014 -0700
----------------------------------------------------------------------
tapestry-core/src/test/resources/log4j.properties | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/624abbec/tapestry-core/src/test/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/resources/log4j.properties b/tapestry-core/src/test/resources/log4j.properties
index 37d6290..7090fd4 100644
--- a/tapestry-core/src/test/resources/log4j.properties
+++ b/tapestry-core/src/test/resources/log4j.properties
@@ -5,7 +5,7 @@ log4j.appender.A1=org.apache.log4j.ConsoleAppender
# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
-log4j.appender.A1.layout.ConversionPattern=[%p] %c{1} %m%n
+log4j.appender.A1.layout.ConversionPattern=%t [%p] %c{1} %m%n
log4j.category.org.apache.tapestry5.integration.app2=debug