diff --git a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java index 5e4a092..439a069 100644 --- a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java +++ b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java @@ -67,7 +67,7 @@ public final class UrlEncoder { byte[] bytes_buffer = null; var bytes_pos = 0; var i = 0; - while(i < length) { + while (i < length) { ch = source.charAt(i); if (ch == '%') { @@ -137,7 +137,7 @@ public final class UrlEncoder { * @since 1.0 */ public static String encode(String source) { - return encode(source, (String)null); + return encode(source, (String) null); } /** @@ -174,7 +174,7 @@ public final class UrlEncoder { StringBuilder out = null; char ch; var i = 0; - while(i < source.length()) { + while (i < source.length()) { ch = source.charAt(i); if (isUnreservedUriChar(ch) || (allow != null && allow.indexOf(ch) != -1)) { if (out != null) { @@ -219,7 +219,17 @@ public final class UrlEncoder { return ch <= '~' && UNRESERVED_URI_CHARS.get(ch); } - public static void main(String[] arguments) { + static class MainResult { + final String output; + final int status; + + public MainResult(String output, int status) { + this.output = output; + this.status = status; + } + } + + static MainResult handleMain(String[] arguments) { var valid_arguments = true; if (arguments.length < 1 || arguments.length > 2) { @@ -236,22 +246,32 @@ public final class UrlEncoder { } if (!valid_arguments) { - System.err.println("Usage : java " + UrlEncoder.class.getName() + " [-ed] text"); - System.err.println("Encode and decode URL parameters."); - System.err.println(" -e encode (default)"); - System.err.println(" -d decode"); - System.exit(1); + return new MainResult("Usage : java " + UrlEncoder.class.getName() + " [-ed] text" + System.lineSeparator() + + "Encode and decode URL parameters." + System.lineSeparator() + + " -e encode (default)" + System.lineSeparator() + + " -d decode" + System.lineSeparator(), 1); } if (1 == arguments.length) { - System.out.println(UrlEncoder.encode(arguments[0])); - System.exit(0); + return new MainResult(UrlEncoder.encode(arguments[0]), 0); } else if (arguments[0].equals("-e")) { - System.out.println(UrlEncoder.encode(arguments[1])); - System.exit(0); + return new MainResult(UrlEncoder.encode(arguments[1]), 0); } - System.out.println(UrlEncoder.decode(arguments[1])); - System.exit(0); + return new MainResult(UrlEncoder.decode(arguments[1]), 0); + } + + public static void main(String[] arguments) { + var result = handleMain(arguments); + switch (result.status) { + case 0: { + System.out.println(result.output); + System.exit(0); + } + case 1: { + System.err.println(result.output); + System.exit(1); + } + } } } diff --git a/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java b/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java index 530dd4c..0f5c67b 100644 --- a/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java +++ b/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java @@ -43,4 +43,59 @@ class UrlEncoderTest { assertEquals("?test=a%20test", UrlEncoder.encode("?test=a test", '?', '=')); assertEquals("aaa", UrlEncoder.encode("aaa", 'a')); } + + @Test + void testMainNoArgs() { + var result = UrlEncoder.handleMain(new String[0]); + assertEquals(1, result.status); + assertTrue(result.output.contains(UrlEncoder.class.getName())); + } + + @Test + void testMainTooManyArgs() { + var result = UrlEncoder.handleMain(new String[] {"-x", "-g", "f"}); + assertEquals(1, result.status); + assertTrue(result.output.contains(UrlEncoder.class.getName())); + } + + @Test + void testMainWrongArgs2() { + var result = UrlEncoder.handleMain(new String[] {"-x", "txt"}); + assertEquals(1, result.status); + assertTrue(result.output.contains(UrlEncoder.class.getName())); + } + + @Test + void testMainWrongArgs1() { + var result = UrlEncoder.handleMain(new String[] {"-p"}); + assertEquals(1, result.status); + assertTrue(result.output.contains(UrlEncoder.class.getName())); + } + + @Test + void testDecodeMainOption() { + validMap.forEach((expected, source) -> { + var result = UrlEncoder.handleMain(new String[] {"-d", source}); + assertEquals(0, result.status); + assertEquals(expected, result.output); + }); + } + + @Test + void testEncodeMainDefault() { + validMap.forEach((source, expected) -> { + var result = UrlEncoder.handleMain(new String[] {source}); + assertEquals(0, result.status); + assertEquals(expected, result.output); + }); + } + + @Test + void testEncodeMainOption() { + validMap.forEach((source, expected) -> { + var result = UrlEncoder.handleMain(new String[] {"-e", source}); + assertEquals(0, result.status); + assertEquals(expected, result.output); + }); + } }