You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by ro...@apache.org on 2011/08/12 07:50:44 UTC
svn commit: r1156971 - in /tapestry/tapestry5/trunk: ./
tapestry-core/src/main/java/org/apache/tapestry5/internal/services/
tapestry-core/src/test/app1/
tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/
tapestry-core/src/test/java/org/...
Author: robertdzeigler
Date: Fri Aug 12 05:50:43 2011
New Revision: 1156971
URL: http://svn.apache.org/viewvc?rev=1156971&view=rev
Log:
TAP5-1605: Template parsing of expansions can't handle map expressions
Added:
tapestry/tapestry5/trunk/tapestry-core/src/test/app1/MapExpressionInExpansions.tml
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/MapExpressionInExpansions.java
tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/internal/services/expansions_with_maps.tml
- copied, changed from r1155574, tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/internal/services/multiple_expansions_on_one_line.tml
Modified:
tapestry/tapestry5/trunk/build.gradle
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SaxTemplateParser.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/CoreBehaviorsTests.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/TemplateParserImplTest.java
Modified: tapestry/tapestry5/trunk/build.gradle
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/build.gradle?rev=1156971&r1=1156970&r2=1156971&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/build.gradle (original)
+++ tapestry/tapestry5/trunk/build.gradle Fri Aug 12 05:50:43 2011
@@ -88,7 +88,7 @@ subprojects {
}
ideaModule {
- scopes.PROVIDED.plus += configurations.provided
+// scopes.PROVIDED.plus += configurations.provided
}
dependencies {
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SaxTemplateParser.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SaxTemplateParser.java?rev=1156971&r1=1156970&r2=1156971&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SaxTemplateParser.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SaxTemplateParser.java Fri Aug 12 05:50:43 2011
@@ -129,7 +129,7 @@ public class SaxTemplateParser
// expansions on the same text line into a single large
// but invalid expansion.
- private static final Pattern EXPANSION_PATTERN = Pattern.compile("\\$\\{\\s*(.*?)\\s*}");
+ private static final Pattern EXPANSION_PATTERN = Pattern.compile("\\$\\{\\s*(((?!\\$\\{).)*)\\s*}");
private static final Set<String> MUST_BE_ROOT = CollectionFactory.newSet("extend", "container");
Added: tapestry/tapestry5/trunk/tapestry-core/src/test/app1/MapExpressionInExpansions.tml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/app1/MapExpressionInExpansions.tml?rev=1156971&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/app1/MapExpressionInExpansions.tml (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/app1/MapExpressionInExpansions.tml Fri Aug 12 05:50:43 2011
@@ -0,0 +1,9 @@
+<html t:type="border" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter">
+ <h1>Map Expression in Template Expansion Demo</h1>
+
+ <ul>
+ <li>Empty Map: <span id="emptymap">${echoMap({})}</span></li>
+ <li>String Keys Map: <span id="stringmap">${echoMap({'A':1})}</span></li>
+ <li>Number Keys Map: <span id="numberkeysmap">${echoMap({1: 'one'})}</span></li>
+ </ul>
+</html>
Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/CoreBehaviorsTests.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/CoreBehaviorsTests.java?rev=1156971&r1=1156970&r2=1156971&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/CoreBehaviorsTests.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/CoreBehaviorsTests.java Fri Aug 12 05:50:43 2011
@@ -126,6 +126,16 @@ public class CoreBehaviorsTests extends
assertTextPresent("[value provided by a template expansion]");
}
+ @Test
+ public void maps_in_expansions() throws Exception
+ {
+ openLinks("Map Expressions in Expansions Demo");
+
+ assertText("emptymap", "{}");
+ assertText("stringmap", "{A:1}");
+ assertText("numberkeysmap", "{1:one}");
+ }
+
/**
* {@link org.apache.tapestry5.internal.transform.InjectContainerWorker} is
* largely tested by the forms tests
Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java?rev=1156971&r1=1156970&r2=1156971&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java Fri Aug 12 05:50:43 2011
@@ -489,7 +489,9 @@ public class Index
new Item("BeanEditFormPrepareBubbling", "BeanEditor Prepare Bubbling Demo", "Prepare event bubbling"),
- new Item("NestedFormFragment", "Nested Form Fragment Demo", "Nesting Form Fragments work properly")
+ new Item("NestedFormFragment", "Nested Form Fragment Demo", "Nesting Form Fragments work properly"),
+
+ new Item("MapExpressionInExpansions", "Map Expressions in Expansions Demo", "Maps can be used in expansions")
);
Added: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/MapExpressionInExpansions.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/MapExpressionInExpansions.java?rev=1156971&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/MapExpressionInExpansions.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/MapExpressionInExpansions.java Fri Aug 12 05:50:43 2011
@@ -0,0 +1,48 @@
+// Copyright 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
+//
+// 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.integration.app1.pages;
+
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * Demonstrates the use of Map expressions in template expansions (eg: ${{'a': 1, 'b': 2}}
+ */
+public class MapExpressionInExpansions
+{
+
+ public String echoMap(Map<?,?> value)
+ {
+ if (value == null)
+ return "";
+
+ StringBuilder builder = new StringBuilder("{");
+
+ for (Map.Entry entry : value.entrySet())
+ {
+ builder.append(entry.getKey())
+ .append(":")
+ .append(entry.getValue())
+ .append(",");
+ }
+
+ if (builder.length() > 1)
+ builder.deleteCharAt(builder.length()-1);
+
+ builder.append("}");
+
+ return builder.toString();
+ }
+
+}
Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/TemplateParserImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/TemplateParserImplTest.java?rev=1156971&r1=1156970&r2=1156971&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/TemplateParserImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/TemplateParserImplTest.java Fri Aug 12 05:50:43 2011
@@ -565,6 +565,29 @@ public class TemplateParserImplTest exte
}
@Test
+ public void expansions_with_maps()
+ {
+ List<TemplateToken> tokens= tokens("expansions_with_maps.tml");
+
+ System.out.println(tokens);
+ assertEquals(tokens.size(), 11);
+
+ //note that a single expansion on a line and two expansions on a line are tested individually elsewhere,
+ //so we group them together here just to cover all of the bases when using maps.
+ ExpansionToken expansion = get(tokens, 2);
+ assertEquals(expansion.getExpression(), "{}", "Empty map parsed incorrectly in an expansion");
+
+ expansion = get(tokens, 4);
+ assertEquals(expansion.getExpression(), "{'a': 'b'}", "Non-empty map parsed incorrectly in an expansion");
+
+ expansion = get(tokens, 6);
+ assertEquals(expansion.getExpression(), "{'one': 1}", "First expansion in a line with two expansions parsed incorrectly");
+
+ expansion = get(tokens, 8);
+ assertEquals(expansion.getExpression(), "{'two': 2}", "Second expansion in a line with two expansions parsed incorrectly");
+ }
+
+ @Test
public void parameter_element()
{
List<TemplateToken> tokens = tokens("parameter_element.tml");
Copied: tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/internal/services/expansions_with_maps.tml (from r1155574, tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/internal/services/multiple_expansions_on_one_line.tml)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/internal/services/expansions_with_maps.tml?p2=tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/internal/services/expansions_with_maps.tml&p1=tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/internal/services/multiple_expansions_on_one_line.tml&r1=1155574&r2=1156971&rev=1156971&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/internal/services/multiple_expansions_on_one_line.tml (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/internal/services/expansions_with_maps.tml Fri Aug 12 05:50:43 2011
@@ -1,3 +1,5 @@
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd" xml:space="preserve">
- <dd>${classLoader} [${classLoader.class.name}]</dd>
+ Empty map: ${{}}
+ Non-empty map: ${{'a': 'b'}}
+ Two expansions with maps: ${{'one': 1}} ${{'two': 2}}
</html>