Repository: wicket
Updated Branches:
  refs/heads/wicket-6.x 2200ad261 -> 629b325d3


WICKET-5771 Ability to escape resource bundle messages added with
wicket:message


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/629b325d
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/629b325d
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/629b325d

Branch: refs/heads/wicket-6.x
Commit: 629b325d3b82012e3f8e2ed1665ec1cd00730520
Parents: 2200ad2
Author: Andrea Del Bene <[email protected]>
Authored: Fri Nov 21 16:20:07 2014 +0100
Committer: Andrea Del Bene <[email protected]>
Committed: Sat Nov 22 15:57:10 2014 +0100

----------------------------------------------------------------------
 .../markup/resolver/WicketMessageResolver.java  | 17 +++++++++--
 .../WicketMessageResolverEscapePage.html        |  7 +++++
 .../WicketMessageResolverEscapePage.java        | 30 ++++++++++++++++++++
 .../WicketMessageResolverEscapePage.properties  |  3 ++
 ...MessageResolverEscapePageExpectedResult.html |  7 +++++
 ...ssageResolverEscapePageWrongEscapeValue.html |  5 ++++
 ...ssageResolverEscapePageWrongEscapeValue.java | 30 ++++++++++++++++++++
 .../resolver/WicketMessageResolverTest.java     | 24 ++++++++++++++++
 8 files changed, 120 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/629b325d/wicket-core/src/main/java/org/apache/wicket/markup/resolver/WicketMessageResolver.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/resolver/WicketMessageResolver.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/resolver/WicketMessageResolver.java
index 80faa7d..267626d 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/resolver/WicketMessageResolver.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/resolver/WicketMessageResolver.java
@@ -120,8 +120,10 @@ public class WicketMessageResolver implements 
IComponentResolver
                                                "Wrong format of 
<wicket:message key='xxx'>: attribute 'key' is missing");
                                }
 
+                               boolean escape = 
wtag.getAttributes().getBoolean("escape");
+
                                final String id = "_message_" + 
container.getPage().getAutoIndex();
-                               MessageContainer label = new 
MessageContainer(id, messageKey);
+                               MessageContainer label = new 
MessageContainer(id, messageKey, escape);
                                
label.setRenderBodyOnly(container.getApplication()
                                        .getMarkupSettings()
                                        .getStripWicketTags());
@@ -157,16 +159,20 @@ public class WicketMessageResolver implements 
IComponentResolver
 
                private static final String NOT_FOUND = "[Warning: Property for 
'%s' not found]";
 
+               private final boolean escapeValue;
+
                /**
                 * Construct.
                 * 
                 * @param id
                 * @param messageKey
+                * @param escapeValue
                 */
-               public MessageContainer(final String id, final String 
messageKey)
+               public MessageContainer(final String id, final String 
messageKey, boolean escapeValue)
                {
                        // The message key becomes the model
                        super(id, new Model<String>(messageKey));
+                       this.escapeValue = escapeValue;
 
                        setEscapeModelStrings(false);
                }
@@ -240,7 +246,7 @@ public class WicketMessageResolver implements 
IComponentResolver
                        final Map<String, Object> variablesReplaced = new 
HashMap<String, Object>();
 
                        // Replace all ${var} within the property value with 
real values
-                       String text = new MapVariableInterpolator(value, 
childTags)
+                       CharSequence text = new MapVariableInterpolator(value, 
childTags)
                        {
                                @Override
                                protected String getValue(final String 
variableName)
@@ -291,6 +297,11 @@ public class WicketMessageResolver implements 
IComponentResolver
                                }
                        }.toString();
 
+                       if (escapeValue) 
+                       {
+                               text = Strings.escapeMarkup(text);
+                       }
+
                        getResponse().write(text);
 
                        // Make sure all of the children were rendered

http://git-wip-us.apache.org/repos/asf/wicket/blob/629b325d/wicket-core/src/test/java/org/apache/wicket/markup/resolver/WicketMessageResolverEscapePage.html
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markup/resolver/WicketMessageResolverEscapePage.html
 
b/wicket-core/src/test/java/org/apache/wicket/markup/resolver/WicketMessageResolverEscapePage.html
new file mode 100644
index 0000000..7692e31
--- /dev/null
+++ 
b/wicket-core/src/test/java/org/apache/wicket/markup/resolver/WicketMessageResolverEscapePage.html
@@ -0,0 +1,7 @@
+<html xmlns:wicket>
+<body>
+<wicket:message key="keyEscapeNotSet">should not escape</wicket:message>
+<wicket:message key="keyEscapeSetFalse" escape="false">should not 
escape</wicket:message>
+<wicket:message key="keyEscapeSetTrue" escape="true">should 
escape</wicket:message>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/wicket/blob/629b325d/wicket-core/src/test/java/org/apache/wicket/markup/resolver/WicketMessageResolverEscapePage.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markup/resolver/WicketMessageResolverEscapePage.java
 
b/wicket-core/src/test/java/org/apache/wicket/markup/resolver/WicketMessageResolverEscapePage.java
new file mode 100644
index 0000000..366847e
--- /dev/null
+++ 
b/wicket-core/src/test/java/org/apache/wicket/markup/resolver/WicketMessageResolverEscapePage.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.wicket.markup.resolver;
+
+import org.apache.wicket.markup.html.WebPage;
+
+
+/**
+ * Mock page for testing Wicket Message escaping.
+ * 
+ * @author Kees van Dieren
+ */
+public class WicketMessageResolverEscapePage extends WebPage
+{
+
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/629b325d/wicket-core/src/test/java/org/apache/wicket/markup/resolver/WicketMessageResolverEscapePage.properties
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markup/resolver/WicketMessageResolverEscapePage.properties
 
b/wicket-core/src/test/java/org/apache/wicket/markup/resolver/WicketMessageResolverEscapePage.properties
new file mode 100644
index 0000000..9a3eb7e
--- /dev/null
+++ 
b/wicket-core/src/test/java/org/apache/wicket/markup/resolver/WicketMessageResolverEscapePage.properties
@@ -0,0 +1,3 @@
+keyEscapeNotSet=<strong>escapeNotSet</strong>
+keyEscapeSetFalse=<strong>escapeSetFalse</strong>
+keyEscapeSetTrue=<strong>escapeSetTrue</strong>

http://git-wip-us.apache.org/repos/asf/wicket/blob/629b325d/wicket-core/src/test/java/org/apache/wicket/markup/resolver/WicketMessageResolverEscapePageExpectedResult.html
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markup/resolver/WicketMessageResolverEscapePageExpectedResult.html
 
b/wicket-core/src/test/java/org/apache/wicket/markup/resolver/WicketMessageResolverEscapePageExpectedResult.html
new file mode 100644
index 0000000..01e3096
--- /dev/null
+++ 
b/wicket-core/src/test/java/org/apache/wicket/markup/resolver/WicketMessageResolverEscapePageExpectedResult.html
@@ -0,0 +1,7 @@
+<html xmlns:wicket>
+<body>
+<wicket:message 
key="keyEscapeNotSet"><strong>escapeNotSet</strong></wicket:message>
+<wicket:message key="keyEscapeSetFalse" 
escape="false"><strong>escapeSetFalse</strong></wicket:message>
+<wicket:message key="keyEscapeSetTrue" 
escape="true">&lt;strong&gt;escapeSetTrue&lt;/strong&gt;</wicket:message>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/wicket/blob/629b325d/wicket-core/src/test/java/org/apache/wicket/markup/resolver/WicketMessageResolverEscapePageWrongEscapeValue.html
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markup/resolver/WicketMessageResolverEscapePageWrongEscapeValue.html
 
b/wicket-core/src/test/java/org/apache/wicket/markup/resolver/WicketMessageResolverEscapePageWrongEscapeValue.html
new file mode 100644
index 0000000..38dd052
--- /dev/null
+++ 
b/wicket-core/src/test/java/org/apache/wicket/markup/resolver/WicketMessageResolverEscapePageWrongEscapeValue.html
@@ -0,0 +1,5 @@
+<html xmlns:wicket>
+<body>
+<wicket:message key="keyEscapeSetToYesPlease" escape="yesPlease">should fail 
with exception</wicket:message>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/wicket/blob/629b325d/wicket-core/src/test/java/org/apache/wicket/markup/resolver/WicketMessageResolverEscapePageWrongEscapeValue.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markup/resolver/WicketMessageResolverEscapePageWrongEscapeValue.java
 
b/wicket-core/src/test/java/org/apache/wicket/markup/resolver/WicketMessageResolverEscapePageWrongEscapeValue.java
new file mode 100644
index 0000000..6a961e2
--- /dev/null
+++ 
b/wicket-core/src/test/java/org/apache/wicket/markup/resolver/WicketMessageResolverEscapePageWrongEscapeValue.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.wicket.markup.resolver;
+
+import org.apache.wicket.markup.html.WebPage;
+
+
+/**
+ * Mock page for testing Wicket Message escaping with wrong value for escape 
attribute.
+ * 
+ * @author Kees van Dieren
+ */
+public class WicketMessageResolverEscapePageWrongEscapeValue extends WebPage
+{
+
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/629b325d/wicket-core/src/test/java/org/apache/wicket/markup/resolver/WicketMessageResolverTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markup/resolver/WicketMessageResolverTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/markup/resolver/WicketMessageResolverTest.java
index 69155b8..8498bef 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/markup/resolver/WicketMessageResolverTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/markup/resolver/WicketMessageResolverTest.java
@@ -18,6 +18,7 @@ package org.apache.wicket.markup.resolver;
 
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.WicketTestCase;
+import org.apache.wicket.util.string.StringValueConversionException;
 import org.junit.Test;
 
 /**
@@ -100,4 +101,27 @@ public class WicketMessageResolverTest extends 
WicketTestCase
        {
                executeTest(SimplePage_6.class, 
"SimplePageExpectedResult_6.html");
        }
+
+       @Test
+       public void shouldEscapeMessageWhenEscapeAttributeIsSetToTrue() throws 
Exception
+       {
+               executeTest(WicketMessageResolverEscapePage.class, 
"WicketMessageResolverEscapePageExpectedResult.html");
+       }
+
+       @Test
+       public void shouldFailWithEscapeSetToUnsupportedValue()
+       {
+
+               try 
+               {
+                       
tester.startPage(WicketMessageResolverEscapePageWrongEscapeValue.class);
+                       fail("Expected to fail: wrong escape value");
+               }
+               catch (StringValueConversionException ex)
+               {
+                       String text = "Boolean value \"yesPlease\" not 
recognized";
+                       assertEquals(text, ex.getMessage());
+               }
+       }
+
 }

Reply via email to