mirror of
https://github.com/gbevin/urlencoder.git
synced 2025-04-26 07:47:13 -07:00
Reworked main method for testability.
This commit is contained in:
parent
0f12ed90cc
commit
f3c7853d02
2 changed files with 90 additions and 15 deletions
|
@ -219,7 +219,17 @@ public final class UrlEncoder {
|
||||||
return ch <= '~' && UNRESERVED_URI_CHARS.get(ch);
|
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;
|
var valid_arguments = true;
|
||||||
if (arguments.length < 1 ||
|
if (arguments.length < 1 ||
|
||||||
arguments.length > 2) {
|
arguments.length > 2) {
|
||||||
|
@ -236,22 +246,32 @@ public final class UrlEncoder {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!valid_arguments) {
|
if (!valid_arguments) {
|
||||||
System.err.println("Usage : java " + UrlEncoder.class.getName() + " [-ed] text");
|
return new MainResult("Usage : java " + UrlEncoder.class.getName() + " [-ed] text" + System.lineSeparator() +
|
||||||
System.err.println("Encode and decode URL parameters.");
|
"Encode and decode URL parameters." + System.lineSeparator() +
|
||||||
System.err.println(" -e encode (default)");
|
" -e encode (default)" + System.lineSeparator() +
|
||||||
System.err.println(" -d decode");
|
" -d decode" + System.lineSeparator(), 1);
|
||||||
System.exit(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (1 == arguments.length) {
|
if (1 == arguments.length) {
|
||||||
System.out.println(UrlEncoder.encode(arguments[0]));
|
return new MainResult(UrlEncoder.encode(arguments[0]), 0);
|
||||||
System.exit(0);
|
|
||||||
} else if (arguments[0].equals("-e")) {
|
} else if (arguments[0].equals("-e")) {
|
||||||
System.out.println(UrlEncoder.encode(arguments[1]));
|
return new MainResult(UrlEncoder.encode(arguments[1]), 0);
|
||||||
System.exit(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
System.out.println(UrlEncoder.decode(arguments[1]));
|
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);
|
System.exit(0);
|
||||||
}
|
}
|
||||||
|
case 1: {
|
||||||
|
System.err.println(result.output);
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,4 +43,59 @@ class UrlEncoderTest {
|
||||||
assertEquals("?test=a%20test", UrlEncoder.encode("?test=a test", '?', '='));
|
assertEquals("?test=a%20test", UrlEncoder.encode("?test=a test", '?', '='));
|
||||||
assertEquals("aaa", UrlEncoder.encode("aaa", 'a'));
|
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);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue