From ef5777e54aca7a15e44bd33619fe5fb1cd0b129d Mon Sep 17 00:00:00 2001 From: Sergey Bezkostnyi Date: Mon, 14 Aug 2017 18:10:02 +0300 Subject: [PATCH] Add ability to change text escaper implementation (#70) --- src/main/java/j2html/Config.java | 13 ++++++ .../java/j2html/attributes/Attribute.java | 4 +- src/main/java/j2html/tags/Text.java | 4 +- src/main/java/j2html/utils/SimpleEscaper.java | 4 +- src/main/java/j2html/utils/TextEscaper.java | 7 ++++ src/test/java/j2html/PerformanceTest.java | 4 +- src/test/java/j2html/TextEscaperTest.java | 40 +++++++++++++++++++ 7 files changed, 68 insertions(+), 8 deletions(-) create mode 100644 src/main/java/j2html/Config.java create mode 100644 src/main/java/j2html/utils/TextEscaper.java create mode 100644 src/test/java/j2html/TextEscaperTest.java diff --git a/src/main/java/j2html/Config.java b/src/main/java/j2html/Config.java new file mode 100644 index 0000000..4dd46bd --- /dev/null +++ b/src/main/java/j2html/Config.java @@ -0,0 +1,13 @@ +package j2html; + +import j2html.utils.SimpleEscaper; +import j2html.utils.TextEscaper; + +public class Config { + + private Config() { + } + + public static TextEscaper textEscaper = new SimpleEscaper(); + +} diff --git a/src/main/java/j2html/attributes/Attribute.java b/src/main/java/j2html/attributes/Attribute.java index 913ff2a..b34c71a 100644 --- a/src/main/java/j2html/attributes/Attribute.java +++ b/src/main/java/j2html/attributes/Attribute.java @@ -1,7 +1,7 @@ package j2html.attributes; -import j2html.utils.SimpleEscaper; +import j2html.Config; public class Attribute { private String name; @@ -9,7 +9,7 @@ public class Attribute { public Attribute(String name, String value) { this.name = name; - this.value = SimpleEscaper.escape(value); + this.value = Config.textEscaper.escape(value); } public Attribute(String name) { diff --git a/src/main/java/j2html/tags/Text.java b/src/main/java/j2html/tags/Text.java index 3b850d0..ac24da3 100644 --- a/src/main/java/j2html/tags/Text.java +++ b/src/main/java/j2html/tags/Text.java @@ -1,6 +1,6 @@ package j2html.tags; -import j2html.utils.SimpleEscaper; +import j2html.Config; public class Text extends DomContent { @@ -12,7 +12,7 @@ public class Text extends DomContent { @Override public String render() { - return SimpleEscaper.escape(text); + return Config.textEscaper.escape(text); } } diff --git a/src/main/java/j2html/utils/SimpleEscaper.java b/src/main/java/j2html/utils/SimpleEscaper.java index b710f91..26bc2da 100644 --- a/src/main/java/j2html/utils/SimpleEscaper.java +++ b/src/main/java/j2html/utils/SimpleEscaper.java @@ -1,8 +1,8 @@ package j2html.utils; -public class SimpleEscaper { +public class SimpleEscaper implements TextEscaper { - public static String escape(String s) { + public String escape(String s) { if (s == null) { return null; } diff --git a/src/main/java/j2html/utils/TextEscaper.java b/src/main/java/j2html/utils/TextEscaper.java new file mode 100644 index 0000000..a960f29 --- /dev/null +++ b/src/main/java/j2html/utils/TextEscaper.java @@ -0,0 +1,7 @@ +package j2html.utils; + +public interface TextEscaper { + + String escape(String text); + +} diff --git a/src/test/java/j2html/PerformanceTest.java b/src/test/java/j2html/PerformanceTest.java index b6476b1..79f27ef 100644 --- a/src/test/java/j2html/PerformanceTest.java +++ b/src/test/java/j2html/PerformanceTest.java @@ -30,8 +30,8 @@ public class PerformanceTest { @Test public void test_escaper_performnce() throws Exception { - timeEscaper("SimpleEscaper#short", () -> SimpleEscaper.escape(shortTestString)); - timeEscaper("SimpleEscaper#long", () -> SimpleEscaper.escape(longTestString)); + timeEscaper("SimpleEscaper#short", () -> new SimpleEscaper().escape(shortTestString)); + timeEscaper("SimpleEscaper#long", () -> new SimpleEscaper().escape(longTestString)); timeEscaper("ApacheEscaper#short", () -> StringEscapeUtils.escapeHtml4(shortTestString)); timeEscaper("ApacheEscaper#long", () -> StringEscapeUtils.escapeHtml4(longTestString)); } diff --git a/src/test/java/j2html/TextEscaperTest.java b/src/test/java/j2html/TextEscaperTest.java new file mode 100644 index 0000000..49c6def --- /dev/null +++ b/src/test/java/j2html/TextEscaperTest.java @@ -0,0 +1,40 @@ +package j2html; + +import j2html.utils.SimpleEscaper; +import j2html.utils.TextEscaper; +import org.junit.Test; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.instanceOf; +import static org.hamcrest.Matchers.is; + +public class TextEscaperTest { + + @Test + public void testTextEscaper() throws Exception { + assertThat("default text escaper is SimpleEscaper", + Config.textEscaper, is(instanceOf(SimpleEscaper.class))); + + String expected = "<div></div>"; + assertThat("default text escaper works", + Config.textEscaper.escape("
"), is(expected)); + + Config.textEscaper = new NoOpEscaper(); + assertThat("user can change text escaper implementation", + Config.textEscaper, is(instanceOf(NoOpEscaper.class))); + + expected = "
"; + assertThat("user provided text escaper actually works", + Config.textEscaper.escape("
"), is(expected)); + } + + private static class NoOpEscaper implements TextEscaper { + + @Override + public String escape(String text) { + return text; + } + + } + +}