diff --git a/lib/src/main/java/rife/render/Capitalize.java b/lib/src/main/java/rife/render/Capitalize.java index a2e838f..2b9a925 100644 --- a/lib/src/main/java/rife/render/Capitalize.java +++ b/lib/src/main/java/rife/render/Capitalize.java @@ -40,11 +40,7 @@ public class Capitalize implements ValueRenderer { */ @Override public String render(Template template, String valueId, String differentiator) { - if (template.hasValueId(differentiator)) { - var value = template.getValue(differentiator); - return value.substring(0, 1).toUpperCase(Localization.getLocale()) + value.substring(1); - } else { - return ""; - } + var value = RenderUtils.fetchValue(template, differentiator); + return value.substring(0, 1).toUpperCase(Localization.getLocale()) + value.substring(1); } } diff --git a/lib/src/main/java/rife/render/EncodeBase64.java b/lib/src/main/java/rife/render/EncodeBase64.java index 4b495fd..997897a 100644 --- a/lib/src/main/java/rife/render/EncodeBase64.java +++ b/lib/src/main/java/rife/render/EncodeBase64.java @@ -43,10 +43,7 @@ public class EncodeBase64 implements ValueRenderer { */ @Override public String render(Template template, String valueId, String differentiator) { - if (template.hasValueId(differentiator)) { - return StringUtils.encodeBase64(template.getValue(differentiator).getBytes(StandardCharsets.UTF_8)); - } else { - return ""; - } + return StringUtils.encodeBase64(RenderUtils.fetchValue(template, differentiator) + .getBytes(StandardCharsets.UTF_8)); } } diff --git a/lib/src/main/java/rife/render/EncodeHtml.java b/lib/src/main/java/rife/render/EncodeHtml.java index 1194c45..3490e5e 100644 --- a/lib/src/main/java/rife/render/EncodeHtml.java +++ b/lib/src/main/java/rife/render/EncodeHtml.java @@ -41,10 +41,6 @@ public class EncodeHtml implements ValueRenderer { */ @Override public String render(Template template, String valueId, String differentiator) { - if (template.hasValueId(differentiator)) { - return StringUtils.encodeHtml(template.getValue(differentiator)); - } else { - return ""; - } + return StringUtils.encodeHtml(RenderUtils.fetchValue(template, differentiator)); } } diff --git a/lib/src/main/java/rife/render/EncodeHtmlEntities.java b/lib/src/main/java/rife/render/EncodeHtmlEntities.java index 42fad25..5e33b49 100644 --- a/lib/src/main/java/rife/render/EncodeHtmlEntities.java +++ b/lib/src/main/java/rife/render/EncodeHtmlEntities.java @@ -59,10 +59,6 @@ public class EncodeHtmlEntities implements ValueRenderer { */ @Override public String render(Template template, String valueId, String differentiator) { - if (template.hasValueId(differentiator)) { - return toHtmlEntities(template.getValue(differentiator)); - } else { - return ""; - } + return toHtmlEntities(RenderUtils.fetchValue(template, differentiator)); } } diff --git a/lib/src/main/java/rife/render/EncodeJson.java b/lib/src/main/java/rife/render/EncodeJson.java index e9eed9c..668f02e 100644 --- a/lib/src/main/java/rife/render/EncodeJson.java +++ b/lib/src/main/java/rife/render/EncodeJson.java @@ -41,10 +41,6 @@ public class EncodeJson implements ValueRenderer { */ @Override public String render(Template template, String valueId, String differentiator) { - if (template.hasValueId(differentiator)) { - return StringUtils.encodeJson(template.getValue(differentiator)); - } else { - return ""; - } + return StringUtils.encodeJson(RenderUtils.fetchValue(template, differentiator)); } } diff --git a/lib/src/main/java/rife/render/EncodeQp.java b/lib/src/main/java/rife/render/EncodeQp.java index ccff9a2..ac03550 100644 --- a/lib/src/main/java/rife/render/EncodeQp.java +++ b/lib/src/main/java/rife/render/EncodeQp.java @@ -76,10 +76,6 @@ public class EncodeQp implements ValueRenderer { */ @Override public String render(Template template, String valueId, String differentiator) { - if (template.hasValueId(differentiator)) { - return toQuotedPrintable(template.getValue(differentiator)); - } else { - return ""; - } + return toQuotedPrintable(RenderUtils.fetchValue(template, differentiator)); } } diff --git a/lib/src/main/java/rife/render/EncodeUnicode.java b/lib/src/main/java/rife/render/EncodeUnicode.java index 938b580..a95ae2a 100644 --- a/lib/src/main/java/rife/render/EncodeUnicode.java +++ b/lib/src/main/java/rife/render/EncodeUnicode.java @@ -41,10 +41,6 @@ public class EncodeUnicode implements ValueRenderer { */ @Override public String render(Template template, String valueId, String differentiator) { - if (template.hasValueId(differentiator)) { - return StringUtils.encodeUnicode(template.getValue(differentiator)); - } else { - return ""; - } + return StringUtils.encodeUnicode(RenderUtils.fetchValue(template, differentiator)); } } diff --git a/lib/src/main/java/rife/render/EncodeUrl.java b/lib/src/main/java/rife/render/EncodeUrl.java index c8abe66..0aa3fd6 100644 --- a/lib/src/main/java/rife/render/EncodeUrl.java +++ b/lib/src/main/java/rife/render/EncodeUrl.java @@ -41,14 +41,6 @@ public class EncodeUrl implements ValueRenderer { */ @Override public String render(Template template, String valueId, String differentiator) { - String value; - if (template.hasValueId(differentiator)) { - value = template.getValue(differentiator); - } else if (template.hasAttribute(differentiator)) { - value = template.getAttribute(differentiator).toString(); - } else { - return ""; - } - return StringUtils.encodeUrl(value); + return StringUtils.encodeUrl(RenderUtils.fetchValue(template, differentiator)); } } diff --git a/lib/src/main/java/rife/render/EncodeXml.java b/lib/src/main/java/rife/render/EncodeXml.java index 7e1dd48..069f5ee 100644 --- a/lib/src/main/java/rife/render/EncodeXml.java +++ b/lib/src/main/java/rife/render/EncodeXml.java @@ -41,10 +41,6 @@ public class EncodeXml implements ValueRenderer { */ @Override public String render(Template template, String valueId, String differentiator) { - if (template.hasValueId(differentiator)) { - return StringUtils.encodeXml(template.getValue(differentiator)); - } else { - return ""; - } + return StringUtils.encodeXml(RenderUtils.fetchValue(template, differentiator)); } } diff --git a/lib/src/main/java/rife/render/Lowercase.java b/lib/src/main/java/rife/render/Lowercase.java index b4de6bd..73a0ac0 100644 --- a/lib/src/main/java/rife/render/Lowercase.java +++ b/lib/src/main/java/rife/render/Lowercase.java @@ -40,10 +40,6 @@ public class Lowercase implements ValueRenderer { */ @Override public String render(Template template, String valueId, String differentiator) { - if (template.hasValueId(differentiator)) { - return template.getValue(differentiator).toLowerCase(Localization.getLocale()); - } else { - return ""; - } + return RenderUtils.fetchValue(template, differentiator).toLowerCase(Localization.getLocale()); } } diff --git a/lib/src/main/java/rife/render/RenderUtils.java b/lib/src/main/java/rife/render/RenderUtils.java new file mode 100644 index 0000000..b30a43b --- /dev/null +++ b/lib/src/main/java/rife/render/RenderUtils.java @@ -0,0 +1,48 @@ +/* + * Copyright 2023 the original author or authors. + * + * 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 + * + * https://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 rife.render; + +import rife.template.Template; +import rife.tools.Convert; + +/** + * Collection of utility-type methods commonly used by the renderers. + */ +public final class RenderUtils { + private RenderUtils() { + // no-op + } + + /** + * Fetches the specified value from a template or template's attribute. + * + * @param template the template + * @param valueId the ID of the value to fetch + * @return The fetched value. + */ + public static String fetchValue(Template template, String valueId) { + Object value = null; + if (template.hasValueId(valueId)) { + value = template.getValue(valueId); + } + if (value == null && template.hasAttribute(valueId)) { + value = template.getAttribute(valueId); + } + return Convert.toString(value); + } +} diff --git a/lib/src/main/java/rife/render/Rot13.java b/lib/src/main/java/rife/render/Rot13.java index e7ce2b9..a18ae41 100644 --- a/lib/src/main/java/rife/render/Rot13.java +++ b/lib/src/main/java/rife/render/Rot13.java @@ -77,10 +77,6 @@ public class Rot13 implements ValueRenderer { */ @Override public String render(Template template, String valueId, String differentiator) { - if (template.hasValueId(differentiator)) { - return rot13(template.getValue(differentiator)); - } else { - return ""; - } + return rot13(RenderUtils.fetchValue(template, differentiator)); } } diff --git a/lib/src/main/java/rife/render/SwapCase.java b/lib/src/main/java/rife/render/SwapCase.java index f534915..c021372 100644 --- a/lib/src/main/java/rife/render/SwapCase.java +++ b/lib/src/main/java/rife/render/SwapCase.java @@ -70,10 +70,6 @@ public class SwapCase implements ValueRenderer { */ @Override public String render(Template template, String valueId, String differentiator) { - if (template.hasValueId(differentiator)) { - return swapCase(template.getValue(differentiator)); - } else { - return ""; - } + return swapCase(RenderUtils.fetchValue(template, differentiator)); } } diff --git a/lib/src/main/java/rife/render/Trim.java b/lib/src/main/java/rife/render/Trim.java index 985b102..d16fb63 100644 --- a/lib/src/main/java/rife/render/Trim.java +++ b/lib/src/main/java/rife/render/Trim.java @@ -39,10 +39,6 @@ public class Trim implements ValueRenderer { */ @Override public String render(Template template, String valueId, String differentiator) { - if (template.hasValueId(differentiator)) { - return template.getValue(differentiator).trim(); - } else { - return ""; - } + return RenderUtils.fetchValue(template, differentiator).trim(); } } diff --git a/lib/src/main/java/rife/render/Uncapitalize.java b/lib/src/main/java/rife/render/Uncapitalize.java index 45682fb..408c7c1 100644 --- a/lib/src/main/java/rife/render/Uncapitalize.java +++ b/lib/src/main/java/rife/render/Uncapitalize.java @@ -40,11 +40,7 @@ public class Uncapitalize implements ValueRenderer { */ @Override public String render(Template template, String valueId, String differentiator) { - if (template.hasValueId(differentiator)) { - var value = template.getValue(differentiator); - return value.substring(0, 1).toLowerCase(Localization.getLocale()) + value.substring(1); - } else { - return ""; - } + var value = RenderUtils.fetchValue(template, differentiator); + return value.substring(0, 1).toLowerCase(Localization.getLocale()) + value.substring(1); } } diff --git a/lib/src/main/java/rife/render/Uppercase.java b/lib/src/main/java/rife/render/Uppercase.java index 7101db7..95c00c1 100644 --- a/lib/src/main/java/rife/render/Uppercase.java +++ b/lib/src/main/java/rife/render/Uppercase.java @@ -40,10 +40,6 @@ public class Uppercase implements ValueRenderer { */ @Override public String render(Template template, String valueId, String differentiator) { - if (template.hasValueId(differentiator)) { - return template.getValue(differentiator).toUpperCase(Localization.getLocale()); - } else { - return ""; - } + return RenderUtils.fetchValue(template, differentiator).toUpperCase(Localization.getLocale()); } } diff --git a/lib/src/test/java/rife/render/TestCase.java b/lib/src/test/java/rife/render/TestCase.java new file mode 100644 index 0000000..07fc9f1 --- /dev/null +++ b/lib/src/test/java/rife/render/TestCase.java @@ -0,0 +1,40 @@ +/* + * Copyright 2023 the original author or authors. + * + * 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 + * + * https://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 rife.render; + +import org.junit.jupiter.api.Test; +import rife.template.TemplateFactory; + +import static org.assertj.core.api.Assertions.assertThat; + +class TestCase { + @Test + void testCapitalize() { + var t = TemplateFactory.TXT.get("capitalize"); + t.setAttribute("foo", "this is a test"); + assertThat(t.getContent()).isEqualTo("This is a test"); + } + + @Test + void testLowercase() { + var t = TemplateFactory.TXT.get("lowercase"); + var bean = new ValueBean("this IS a TEST"); + t.setBean(bean); + assertThat(t.getContent()).isEqualTo(bean.getValue() + ": this is a test"); + } +} \ No newline at end of file diff --git a/lib/src/test/java/rife/render/TestEncode.java b/lib/src/test/java/rife/render/TestEncode.java index 6b580f7..6234532 100644 --- a/lib/src/test/java/rife/render/TestEncode.java +++ b/lib/src/test/java/rife/render/TestEncode.java @@ -17,17 +17,48 @@ package rife.render; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import rife.template.TemplateFactory; import static org.assertj.core.api.Assertions.assertThat; + class TestEncode { + public static final String FOO = "foo"; + + @Test + void testEncodeBase64() { + var t = TemplateFactory.TXT.get("base64"); + t.setValue(FOO, "This is a test"); + assertThat(t.getContent()).isEqualTo(t.getValue(FOO) + ": VGhpcyBpcyBhIHRlc3Q="); + } + + @Test + void testEncodeHtml() { + var t = TemplateFactory.HTML.get("encodeHtml"); + t.setAttribute(FOO, ""); + assertThat(t.getContent()).isEqualTo("<a test &>"); + } + + @Test + void testEncodeRot13() { + var t = TemplateFactory.TXT.get("rot13"); + var value = "This is a test"; + var rot13 = "Guvf vf n grfg"; + + // Encode + var bean = new ValueBean(value); + t.setBean(bean); + assertThat(t.getContent()).isEqualTo(bean.getValue() + ": " + rot13); + + // Decode + t.setValue("value", rot13); + assertThat(t.getContent()).isEqualTo(rot13 + ": " + value); + } + @Test void testEncodeUrl() { var t = TemplateFactory.HTML.get("encodeUrl"); - t.setAttribute("foo", "a test &"); - var encodedValue = "a%20test%20%26"; - assertThat(t.getContent()).isEqualTo(encodedValue + "
\n" + encodedValue); + t.setAttribute(FOO, "a test &"); + assertThat(t.getContent()).isEqualTo("
a test &"); } -} +} \ No newline at end of file diff --git a/lib/src/test/resources/templates/base64.txt b/lib/src/test/resources/templates/base64.txt new file mode 100644 index 0000000..fc4ea4d --- /dev/null +++ b/lib/src/test/resources/templates/base64.txt @@ -0,0 +1 @@ +{{v foo/}}: {{v render:rife.render.EncodeBase64:foo/}} \ No newline at end of file diff --git a/lib/src/test/resources/templates/capitalize.txt b/lib/src/test/resources/templates/capitalize.txt new file mode 100644 index 0000000..55c972b --- /dev/null +++ b/lib/src/test/resources/templates/capitalize.txt @@ -0,0 +1 @@ +{{v render:rife.render.Capitalize:foo/}} \ No newline at end of file diff --git a/lib/src/test/resources/templates/encodeHtml.html b/lib/src/test/resources/templates/encodeHtml.html new file mode 100644 index 0000000..5f0a12f --- /dev/null +++ b/lib/src/test/resources/templates/encodeHtml.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/lib/src/test/resources/templates/encodeUrl.html b/lib/src/test/resources/templates/encodeUrl.html index cf5a5f9..58c9aa2 100644 --- a/lib/src/test/resources/templates/encodeUrl.html +++ b/lib/src/test/resources/templates/encodeUrl.html @@ -1,3 +1 @@ -
-{{v render:rife.render.EncodeUrl:foo/}} -{{v foo/}} \ No newline at end of file +{{v render:rife.render.EncodeHtml:foo/}} \ No newline at end of file diff --git a/lib/src/test/resources/templates/lowercase.txt b/lib/src/test/resources/templates/lowercase.txt new file mode 100644 index 0000000..6bf9790 --- /dev/null +++ b/lib/src/test/resources/templates/lowercase.txt @@ -0,0 +1 @@ +{{v value/}}: {{v render:rife.render.Lowercase:value/}} \ No newline at end of file diff --git a/lib/src/test/resources/templates/rot13.txt b/lib/src/test/resources/templates/rot13.txt new file mode 100644 index 0000000..e610273 --- /dev/null +++ b/lib/src/test/resources/templates/rot13.txt @@ -0,0 +1 @@ +{{v value/}}: {{v render:rife.render.Rot13:value/}} \ No newline at end of file