You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tiles.apache.org by mc...@apache.org on 2014/05/14 08:55:28 UTC

svn commit: r1594483 - in /tiles/framework/trunk: ./ tiles-core/src/main/java/org/apache/tiles/definition/pattern/PatternUtil.java tiles-core/src/test/java/org/apache/tiles/definition/pattern/PatternUtilTest.java

Author: mck
Date: Wed May 14 06:55:27 2014
New Revision: 1594483

URL: http://svn.apache.org/r1594483
Log:
`svn merge -c1594481 ^/tiles/framework/branches/TILES_3_0_X .`
| further fixes on 
|      TILES-574 – Tiles expressions do not work after wildcard
| 
| PatternUtil.INVALID_FORMAT_ELEMENT, the pattern to match "{.*}" occurrances that are not meant to be replaced, was in some cases was matching two much.
|  see test PatternUtilTest.testReplacePlaceholdersEL_options
| This resulted in "PatternSyntaxException: named capturing group is missing trailing }"
| 
| 3 tests have been added to cover such various side-cases.

Modified:
    tiles/framework/trunk/   (props changed)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PatternUtil.java
    tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PatternUtilTest.java

Propchange: tiles/framework/trunk/
------------------------------------------------------------------------------
  Merged /tiles/framework/branches/TILES_3_0_X:r1594481

Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PatternUtil.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PatternUtil.java?rev=1594483&r1=1594482&r2=1594483&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PatternUtil.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PatternUtil.java Wed May 14 06:55:27 2014
@@ -52,7 +52,7 @@ public final class PatternUtil {
 
     /** Pattern to find {.*} occurrences that do not match {[0-9]+} so to prevent MessageFormat from crashing.
      */
-    private static final Pattern INVALID_FORMAT_ELEMENT = Pattern.compile("\\Q{\\E[\\D^}]+\\Q}\\E");
+    private static final Pattern INVALID_FORMAT_ELEMENT = Pattern.compile("\\{[^}0-9]+\\}");
 
     /**
      * Private constructor to avoid instantiation.

Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PatternUtilTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PatternUtilTest.java?rev=1594483&r1=1594482&r2=1594483&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PatternUtilTest.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PatternUtilTest.java Wed May 14 06:55:27 2014
@@ -250,4 +250,73 @@ public class PatternUtilTest {
                 "some-${requestScope.someVariable}-other-value1-${requestScope.someOtherVariable}.jsp",
                 nudef.getAttribute("something").getExpressionObject().getExpression());
     }
+
+    /**
+     * Test method for
+     * {@link PatternUtil#replacePlaceholders(Definition, String, Object[])}.
+     */
+    @Test
+    public void testReplacePlaceholdersEL_conditional() {
+        Map<String, Attribute> attributes = new HashMap<String, Attribute>();
+        Attribute attribute = new Attribute("{1}/some-other-{2}-${requestScope.someBoolean ? 'a' : 'b'}.jsp");
+        attribute.setExpressionObject(new Expression((String)attribute.getValue()));
+        attributes.put("something", attribute);
+        Definition definition = new Definition("definitionName", new Attribute("template"), attributes);
+        Definition nudef = PatternUtil.replacePlaceholders(definition, "nudef", "value0", "value1", "value2", "value3");
+        assertEquals("nudef", nudef.getName());
+
+        assertEquals(
+                "value1/some-other-value2-${requestScope.someBoolean ? 'a' : 'b'}.jsp",
+                nudef.getAttribute("something").getValue());
+
+        assertEquals(
+                "value1/some-other-value2-${requestScope.someBoolean ? 'a' : 'b'}.jsp",
+                nudef.getAttribute("something").getExpressionObject().getExpression());
+    }
+
+    /**
+     * Test method for
+     * {@link PatternUtil#replacePlaceholders(Definition, String, Object[])}.
+     */
+    @Test
+    public void testReplacePlaceholdersEL_twice() {
+        Map<String, Attribute> attributes = new HashMap<String, Attribute>();
+        Attribute attribute = new Attribute("some-${requestScope.firstVariable}-${requestScope.secondVariable}.jsp");
+        attribute.setExpressionObject(new Expression((String)attribute.getValue()));
+        attributes.put("something", attribute);
+        Definition definition = new Definition("definitionName", new Attribute("template"), attributes);
+        Definition nudef = PatternUtil.replacePlaceholders(definition, "nudef", "value0", "value1", "value2", "value3");
+        assertEquals("nudef", nudef.getName());
+
+        assertEquals(
+                "some-${requestScope.firstVariable}-${requestScope.secondVariable}.jsp",
+                nudef.getAttribute("something").getValue());
+
+        assertEquals(
+                "some-${requestScope.firstVariable}-${requestScope.secondVariable}.jsp",
+                nudef.getAttribute("something").getExpressionObject().getExpression());
+    }
+
+    /**
+     * Test method for
+     * {@link PatternUtil#replacePlaceholders(Definition, String, Object[])}.
+     */
+    @Test
+    public void testReplacePlaceholdersEL_options() {
+        Map<String, Attribute> attributes = new HashMap<String, Attribute>();
+        Attribute attribute = new Attribute("{1}/{options[my_fallback}}/some-other-{2}-${requestScope.someVariable}.jsp");
+        attribute.setExpressionObject(new Expression((String)attribute.getValue()));
+        attributes.put("something", attribute);
+        Definition definition = new Definition("definitionName", new Attribute("template"), attributes);
+        Definition nudef = PatternUtil.replacePlaceholders(definition, "nudef", "value0", "value1", "value2", "value3");
+        assertEquals("nudef", nudef.getName());
+
+        assertEquals(
+                "value1/{options[my_fallback}}/some-other-value2-${requestScope.someVariable}.jsp",
+                nudef.getAttribute("something").getValue());
+
+        assertEquals(
+                "value1/{options[my_fallback}}/some-other-value2-${requestScope.someVariable}.jsp",
+                nudef.getAttribute("something").getExpressionObject().getExpression());
+    }
 }