Author: hlship
Date: Mon Apr 19 13:50:39 2010
New Revision: 935569
URL: http://svn.apache.org/viewvc?rev=935569&view=rev
Log:
Forbid slashes from library mapping virtual folders or classpath asset alias
folders (now, approximately, the same thing)
Added:
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/services/LibraryMappingTest.java
(with props)
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClasspathAssetAliasManagerImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/LibraryMapping.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ClasspathAssetAliasManagerImplTest.java
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClasspathAssetAliasManagerImpl.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClasspathAssetAliasManagerImpl.java?rev=935569&r1=935568&r2=935569&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClasspathAssetAliasManagerImpl.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClasspathAssetAliasManagerImpl.java
Mon Apr 19 13:50:39 2010
@@ -46,9 +46,6 @@ public class ClasspathAssetAliasManagerI
/**
* Configuration is a map of aliases (short names) to complete names. Keys
and values should end with a slash, but
* one will be provided as necessary, so don't both.
- *
- * @param assetPathConstructor
- * TODO
*/
public ClasspathAssetAliasManagerImpl(AssetPathConstructor
assetPathConstructor,
@@ -59,6 +56,12 @@ public class ClasspathAssetAliasManagerI
for (Map.Entry<String, String> e : configuration.entrySet())
{
String alias = withOutSlash(e.getKey());
+
+ if (alias.contains("/"))
+ throw new RuntimeException(String.format(
+ "Virtual folder names (for component libraries) may no
longer contain slashes as of Tapestry 5.2. "
+ + "You must change the
ComponentClassAsssetAliasManager contribution for '%s'.", alias));
+
String path = withOutSlash(e.getValue());
aliasToPathPrefix.put(alias, path);
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/LibraryMapping.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/LibraryMapping.java?rev=935569&r1=935568&r2=935569&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/LibraryMapping.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/LibraryMapping.java
Mon Apr 19 13:50:39 2010
@@ -14,11 +14,12 @@
package org.apache.tapestry5.services;
+import org.apache.tapestry5.ioc.internal.util.Defense;
+
/**
* Used to configure the {...@link ComponentClassResolver}, to allow it to map
prefixes to library root packages (the
- * application namespace is a special case of this). In each case, a prefix on
the path is mapped to a package. Prefixes
- * should start and end with characters, such as "corelib". It is allowed for
a prefix to contain a slash, though it is not
- * recommended.
+ * application namespace is a special case of this). In each case, a prefix on
the path is mapped to a package. Starting
+ * with Tapestry 5.2, the path prefix may not contain a slash character.
* <p/>
* The root package name should have a number of sub-packages:
* <dl>
@@ -40,6 +41,13 @@ public final class LibraryMapping
public LibraryMapping(String pathPrefix, String rootPackage)
{
+ Defense.notBlank(pathPrefix, "pathPrefix");
+ Defense.notBlank(rootPackage, "rootPackage");
+
+ if (pathPrefix.contains("/"))
+ throw new RuntimeException(
+ "LibraryMapping path prefixes may no longer contain
slashes (as of Tapestry 5.2).");
+
this.pathPrefix = pathPrefix;
this.rootPackage = rootPackage;
}
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ClasspathAssetAliasManagerImplTest.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ClasspathAssetAliasManagerImplTest.java?rev=935569&r1=935568&r2=935569&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ClasspathAssetAliasManagerImplTest.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ClasspathAssetAliasManagerImplTest.java
Mon Apr 19 13:50:39 2010
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007, 2009 The Apache Software Foundation
+// Copyright 2006, 2007, 2009, 2010 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.
@@ -34,14 +34,32 @@ public class ClasspathAssetAliasManagerI
{
Map<String, String> configuration = CollectionFactory.newMap();
- configuration.put("tapestry/4.0", "org/apache/tapestry5/");
- configuration.put("tapestry-internal/3.0",
"org/apache/tapestry5/internal/");
- configuration.put("mylib/2.0/", "com/example/mylib/");
+ configuration.put("tapestry", "org/apache/tapestry5/");
+ configuration.put("tapestry-internal",
"org/apache/tapestry5/internal/");
+ configuration.put("mylib/", "com/example/mylib/");
return configuration;
}
@Test
+ public void slash_not_allowed_as_alias()
+ {
+ Map<String, String> configuration = CollectionFactory.newMap();
+
+ configuration.put("old/style", "com/myco/old/style/library");
+
+ try
+ {
+ new ClasspathAssetAliasManagerImpl(null, configuration);
+ unreachable();
+ }
+ catch (RuntimeException ex)
+ {
+ assertMessageContains(ex, "change the
ComponentClassAsssetAliasManager contribution for 'old/style'.");
+ }
+ }
+
+ @Test
public void get_mappings()
{
// Notice how all the trailing slashes (which are tolerated but not
wanted)
@@ -49,9 +67,9 @@ public class ClasspathAssetAliasManagerI
Map<String, String> expected =
CollectionFactory.newCaseInsensitiveMap();
- expected.put("tapestry/4.0", "org/apache/tapestry5");
- expected.put("tapestry-internal/3.0", "org/apache/tapestry5/internal");
- expected.put("mylib/2.0", "com/example/mylib");
+ expected.put("tapestry", "org/apache/tapestry5");
+ expected.put("tapestry-internal", "org/apache/tapestry5/internal");
+ expected.put("mylib", "com/example/mylib");
ClasspathAssetAliasManager manager = new
ClasspathAssetAliasManagerImpl(null, configuration());
@@ -100,10 +118,10 @@ public class ClasspathAssetAliasManagerI
{
return new Object[][]
{
- { "com/example/mylib/Foo.bar", "mylib/2.0/Foo.bar" },
- { "com/example/mylib/nested/Foo.bar", "mylib/2.0/nested/Foo.bar" },
- { "org/apache/tapestry5/internal/Foo.bar",
"tapestry-internal/3.0/Foo.bar" },
- { "org/apache/tapestry5/Foo.bar", "tapestry/4.0/Foo.bar" }, };
+ { "com/example/mylib/Foo.bar", "mylib/Foo.bar" },
+ { "com/example/mylib/nested/Foo.bar", "mylib/nested/Foo.bar" },
+ { "org/apache/tapestry5/internal/Foo.bar", "tapestry-internal/Foo.bar"
},
+ { "org/apache/tapestry5/Foo.bar", "tapestry/Foo.bar" }, };
}
@Test(dataProvider = "to_resource_path_data")
Added:
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/services/LibraryMappingTest.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/services/LibraryMappingTest.java?rev=935569&view=auto
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/services/LibraryMappingTest.java
(added)
+++
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/services/LibraryMappingTest.java
Mon Apr 19 13:50:39 2010
@@ -0,0 +1,46 @@
+// Copyright 2010 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
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// 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.services;
+
+import org.apache.tapestry5.ioc.test.TestBase;
+import org.testng.annotations.Test;
+
+public class LibraryMappingTest extends TestBase
+{
+ @Test
+ public void valid_mapping()
+ {
+ LibraryMapping lm = new LibraryMapping("folder", "root.package");
+
+ assertEquals(lm.getPathPrefix(), "folder");
+ assertEquals(lm.getRootPackage(), "root.package");
+
+ assertEquals(lm.toString(), "LibraryMapping[folder, root.package]");
+ }
+
+ @Test
+ public void invalid_mapping()
+ {
+ try
+ {
+ new LibraryMapping("lib/1.0", "root.package");
+ unreachable();
+ }
+ catch (RuntimeException ex)
+ {
+ assertMessageContains(ex, "may no longer contain slashes");
+ }
+ }
+}
Propchange:
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/services/LibraryMappingTest.java
------------------------------------------------------------------------------
svn:eol-style = native