diff --git a/src/main/java/ghast/logger/StringFormatter.java b/src/main/java/ghast/logger/StringFormatter.java index bde0513..1e1f530 100644 --- a/src/main/java/ghast/logger/StringFormatter.java +++ b/src/main/java/ghast/logger/StringFormatter.java @@ -13,7 +13,7 @@ public final class StringFormatter { private static final char ESCAPE_CHAR = '\\'; public static String arrayFormat(String messagePattern, Object[] argArray) { - if (messagePattern == null) { + if (messagePattern == null || messagePattern.equals(EMPTY)) { return EMPTY; } else if (argArray == null) { return messagePattern; @@ -30,7 +30,7 @@ public final class StringFormatter { if (k == 0) { // this is a simple string return messagePattern; } else { // add the tail string which contains no variables and return - // the result. + // the result. sb.append(messagePattern, k, messagePattern.length()); return sb.toString(); } diff --git a/src/test/java/ghast/logger/StringFormatterTest.java b/src/test/java/ghast/logger/StringFormatterTest.java new file mode 100644 index 0000000..33ed046 --- /dev/null +++ b/src/test/java/ghast/logger/StringFormatterTest.java @@ -0,0 +1,95 @@ +package ghast.logger; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class StringFormatterTest { + + @Test + void emptyPattern() { + String actual = StringFormatter.arrayFormat(null, null); + assertEquals("", actual); + + actual = StringFormatter.arrayFormat("", null); + assertEquals("", actual); + } + + @Test + void nullArgArray() { + String pattern = "some pattern"; + String actual = StringFormatter.arrayFormat(pattern, null); + assertEquals(pattern, actual); + + pattern = "some pattern {}"; + actual = StringFormatter.arrayFormat(pattern, null); + assertEquals(pattern, actual); + } + + @Test + void dummyPattern() { + String actual = StringFormatter.arrayFormat("dummy pattern", new Object[]{"argument"}); + assertEquals("dummy pattern", actual); + } + + @Test + void escapePattern() { + String actual = StringFormatter.arrayFormat("Arg1: \\{}", new Object[]{"item1"}); + assertEquals("Arg1: {}", actual); + + actual = StringFormatter.arrayFormat("Arg1: {}, \\{}", new Object[]{"item1"}); + assertEquals("Arg1: item1, \\{}", actual); + } + + @Test + void simpleArg() { + String actual; + + actual = StringFormatter.arrayFormat("Arg1: {}", new Object[]{"item1"}); + assertEquals("Arg1: item1", actual); + + actual = StringFormatter.arrayFormat("Arg1: {}", new Object[]{11}); + assertEquals("Arg1: 11", actual); + + actual = StringFormatter.arrayFormat("Arg1: {}", new Object[]{11.5f}); + assertEquals("Arg1: 11.5", actual); + } + + @Test + void nullArg() { + String actual = StringFormatter.arrayFormat("Arg1: {}", new Object[]{null}); + assertEquals("Arg1: null", actual); + } + + @Test + void arrayArg() { + String actual; + + actual = StringFormatter.arrayFormat("Arg1: {}", new Object[]{new boolean[]{false, true}}); + assertEquals("Arg1: [false, true]", actual); + + actual = StringFormatter.arrayFormat("Arg1: {}", new Object[]{new byte[]{0b00, 0b01}}); + assertEquals("Arg1: [0, 1]", actual); + + actual = StringFormatter.arrayFormat("Arg1: {}", new Object[]{new char[]{'c', 'h'}}); + assertEquals("Arg1: [c, h]", actual); + + actual = StringFormatter.arrayFormat("Arg1: {}", new Object[]{new short[]{11, 12}}); + assertEquals("Arg1: [11, 12]", actual); + + actual = StringFormatter.arrayFormat("Arg1: {}", new Object[]{new int[]{11, 12}}); + assertEquals("Arg1: [11, 12]", actual); + + actual = StringFormatter.arrayFormat("Arg1: {}", new Object[]{new long[]{11L, 12L}}); + assertEquals("Arg1: [11, 12]", actual); + + actual = StringFormatter.arrayFormat("Arg1: {}", new Object[]{new float[]{11.2f, 12.3f}}); + assertEquals("Arg1: [11.2, 12.3]", actual); + + actual = StringFormatter.arrayFormat("Arg1: {}", new Object[]{new double[]{11.2d, 12.3d}}); + assertEquals("Arg1: [11.2, 12.3]", actual); + + actual = StringFormatter.arrayFormat("Arg1: {}", new Object[]{new String[]{"str-arr-1", "str-arr-2"}}); + assertEquals("Arg1: [str-arr-1, str-arr-2]", actual); + } +} \ No newline at end of file