mirror of
https://github.com/gbevin/urlencoder.git
synced 2025-04-24 23:07:12 -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
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue