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>


Reply via email to