Repository: wicket Updated Branches: refs/heads/master cf6172bd5 -> 0f4b60ac4
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/0f4b60ac Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/0f4b60ac Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/0f4b60ac Branch: refs/heads/master Commit: 0f4b60ac45e1b070cc800d720a706549bdfd2dbe Parents: cf6172b Author: Andrea Del Bene <[email protected]> Authored: Fri Nov 21 16:20:07 2014 +0100 Committer: Andrea Del Bene <[email protected]> Committed: Fri Nov 21 17:28:50 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/0f4b60ac/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/0f4b60ac/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/0f4b60ac/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/0f4b60ac/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/0f4b60ac/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"><strong>escapeSetTrue</strong></wicket:message> +</body> +</html> http://git-wip-us.apache.org/repos/asf/wicket/blob/0f4b60ac/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/0f4b60ac/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/0f4b60ac/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()); + } + } + }
