diff --git a/README.md b/README.md
index d7583e6..43b63b6 100644
--- a/README.md
+++ b/README.md
@@ -52,8 +52,13 @@ You can specify several fields for each parameter:
```
### 3. Parse the Arguments
-Call the `parseArgs()` method after adding all parameters.
-Catch possible `ArgsException` errors for common parsing
+Call the `parse()` or `parseUnchecked()` method after adding all parameters.
+
+- The `parse()` method directly handles all ArgsExceptions and uses `System.exit()` if any invalid argument is
+provided to the console or `--help` / `-h` was used.
+- The `parseUnchecked()` method throws the exceptions, which you can catch and handle manually.
+
+The ArgsParser catches possible `ArgsException` errors for common parsing
issues such as:
- No arguments provided
@@ -65,9 +70,15 @@ issues such as:
A `CalledForHelpNotification` can also be thrown if the user requests the help message.
Exit with status code 0 for help requests and 1 for errors is recommended.
+The Code example look like this:
+```Java
+ parser.parse();
+```
+
+or like this for manually handling the ArgsExceptions:
```java
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (CalledForHelpNotification help) {
System.out.println(help.getMessage());
diff --git a/src/ArgsParser/ArgsParser.java b/src/ArgsParser/ArgsParser.java
index 1bca2e2..da0a20f 100644
--- a/src/ArgsParser/ArgsParser.java
+++ b/src/ArgsParser/ArgsParser.java
@@ -49,7 +49,7 @@ of this software and associated documentation files (the "Software"), to deal
*
Parameters can have a description
* Parameters can be of type String, Integer, Double, Boolean or Character
*
- * After all parameters are added, the {@link #parseArgs()} method has to be called! (this is mandatory!)
+ * After all parameters are added, the {@link #parseUnchecked()} method has to be called! (this is mandatory!)
* Then the arguments can be accessed by using {@link Parameter#getArgument()} on the specific Parameter variable
* which will return the parsed argument of that parameter as the specified type
*
@@ -401,6 +401,31 @@ public Parameter addCharacterParameter(String fullFlag, String shortF
return createParameter(fullFlag, shortFlag, null, Character.class, false, defaultValue);
}
+ /**
+ *
+ * - checks if args is Empty
+ * - checks if --help or -h was called on the program
+ * - goes through the args given to the ArgsParser and assigns each parameter its argument, making it callable via flags
+ * - checks if all mandatory parameters were given in the args
+ *
+ * Directly handles any ArgsException by printing the message to the console than exiting the program!
+ */
+ public void parse() {
+
+ try {
+ parseUnchecked();
+
+ } catch (CalledForHelpNotification help) {
+ System.out.println(help.getMessage());
+ System.exit(0);
+
+ } catch (ArgsException e) {
+ System.out.println(e.getMessage());
+ System.exit(1);
+ }
+
+ }
+
/**
*
* - checks if args is Empty
@@ -416,7 +441,7 @@ public Parameter addCharacterParameter(String fullFlag, String shortF
* @throws CalledForHelpNotification if --help or -h was called
* @throws InvalidArgTypeArgsException if the argument provided to a flag is not of the correct type
*/
- public void parseArgs() throws NoArgumentsProvidedArgsException, UnknownFlagArgsException,
+ public void parseUnchecked() throws NoArgumentsProvidedArgsException, UnknownFlagArgsException,
TooManyArgumentsArgsException, MissingArgArgsException, MandatoryArgNotProvidedArgsException,
CalledForHelpNotification, InvalidArgTypeArgsException {
diff --git a/src/ArgsParser/Parameter.java b/src/ArgsParser/Parameter.java
index 11c9568..c0a2dfe 100644
--- a/src/ArgsParser/Parameter.java
+++ b/src/ArgsParser/Parameter.java
@@ -142,7 +142,7 @@ protected boolean hasArgument() {
/**
* getter method for the argument attribute
* @return argument as String
- * @throws IllegalStateException if {@link ArgsParser#parseArgs()} was not called before trying to access this argument
+ * @throws IllegalStateException if {@link ArgsParser#parseUnchecked()} was not called before trying to access this argument
*/
public T getArgument() throws IllegalStateException {
if (!parser.parseArgsWasCalled) throw new IllegalStateException("parseArgs() was not called before trying to access the argument!");
diff --git a/src/test/TestArgsParser.java b/src/test/TestArgsParser.java
index 43d584e..fd41e7b 100644
--- a/src/test/TestArgsParser.java
+++ b/src/test/TestArgsParser.java
@@ -1,9 +1,8 @@
import ArgsParser.*;
import ArgsParser.ArgsExceptions.*;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
public class TestArgsParser {
@@ -13,7 +12,7 @@ public void testNoArgumentsProvided() {
ArgsParser parser = new ArgsParser(new String[] {});
Parameter file = parser.addStringParameter("file", "f", " ",true);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (ArgsException e) {
System.out.println(e.getMessage());
assertEquals(new NoArgumentsProvidedArgsException().getMessage(), e.getMessage());
@@ -28,7 +27,7 @@ public void testParameterDotGetArgument() {
ArgsParser parser = new ArgsParser(new String[] {"--file", "file.txt"});
Parameter file = parser.addStringParameter("file", "f", " ", true);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
e.printStackTrace();
}
@@ -45,7 +44,7 @@ public void testUnknownParameter() {
Parameter file = parser.addStringParameter("file", "f", "descr", true);
Parameter save = parser.addStringParameter("save", "s", "descr", true);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
System.out.println(e.getMessage());
assertEquals(new UnknownFlagArgsException("-f").getMessage(), e.getMessage());
@@ -58,7 +57,7 @@ public void testGetArgumentWithMultipleFlagsAndWrongInput() {
Parameter file = parser.addStringParameter("file", "f", "descr", true);
Parameter save = parser.addStringParameter("save", "w", "descr", true);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
System.out.println(e.getMessage());
assertEquals(new UnknownFlagArgsException("-s").getMessage(), e.getMessage());
@@ -74,7 +73,7 @@ public void testMissingArgument() {
Parameter file = parser.addStringParameter("file", "m", "descr", true);
Parameter save = parser.addStringParameter("save", "s", "descr", true);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
System.out.println(e.getMessage());
assertEquals(new MissingArgArgsException("--file").getMessage(), e.getMessage());
@@ -88,7 +87,7 @@ public void testMissingLastArgument() {
Parameter file = parser.addStringParameter("--file", "f", "descr", true);
Parameter save = parser.addStringParameter("--save", "s", "descr", true);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
System.out.println(e.getMessage());
assertEquals(new MissingArgArgsException("--save").getMessage(), e.getMessage());
@@ -102,7 +101,7 @@ public void testMissingShorts() {
Parameter file = parser.addStringParameter("--file", "m", "descr", true);
Parameter save = parser.addStringParameter("--save", "s", true);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
System.out.println(e.getMessage());
assertEquals(new UnknownFlagArgsException("-f").getMessage(), e.getMessage());
@@ -117,7 +116,7 @@ public void testMandatoryArgMissing() {
Parameter save = parser.addStringParameter("save", "s", "descr", true);
Parameter optional = parser.addStringParameter("optional", "o", "descr", false);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (ArgsException e) {
System.out.println(e.getMessage());
assertEquals(new MandatoryArgNotProvidedArgsException("Mandatory parameters are missing:\n--save").getMessage(), e.getMessage());
@@ -132,7 +131,7 @@ public void testTooManyArguments() {
Parameter file = parser.addStringParameter("file", "f", "descr", true);
Parameter save = parser.addStringParameter("save", "s", "descr", true);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (ArgsException e) {
System.out.println(e.getMessage());
assertEquals(new TooManyArgumentsArgsException("--save").getMessage(), e.getMessage());
@@ -147,7 +146,7 @@ public void testGetArgumentAsString() {
Parameter file = parser.addStringParameter("file", "f", true);
Parameter integer = parser.addIntegerParameter("integer", "int", "descr", true);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
e.printStackTrace();
}
@@ -162,7 +161,7 @@ public void testGetArgumentWithGenericType() {
Parameter file = parser.addStringParameter("file", "f", "descr", true);
Parameter integer = parser.addIntegerParameter("integer", "int", "descr", true);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
e.printStackTrace();
}
@@ -178,7 +177,7 @@ public void testBooleanGetArgument() {
Parameter file = parser.addStringParameter("file", "f", "descr", true);
Parameter bool = parser.addBooleanParameter("boolean", "b", "descr", true);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
e.printStackTrace();
}
@@ -192,7 +191,7 @@ public void testGetArgumentAsDouble() {
Parameter file = parser.addStringParameter("file", "f", "descr", true);
Parameter doub = parser.addDoubleParameter("double", "d", "descr", true);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
e.printStackTrace();
}
@@ -208,7 +207,7 @@ public void testGetArgumentAsDoubleWithWrongInput() {
Parameter file = parser.addStringParameter("file", "f", "descr", true);
Parameter doub = parser.addDoubleParameter("double", "d", "descr", true);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
System.out.println(e.getMessage());
assertEquals(new InvalidArgTypeArgsException("--double", "Double", "multiple points").getMessage(), e.getMessage());
@@ -221,14 +220,14 @@ public void useDefaultValue() {
Parameter file = parser.addStringParameter("file", "f", "descr", true);
Parameter doub = parser.addDoubleParameter("double", "d", "descr", 12.3);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
}
Double expected = 12.3 + 3;
Double result = doub.getArgument() + 3;
- Assert.assertEquals(expected, result);
+ assertEquals(expected, result);
}
@Test
@@ -237,14 +236,14 @@ public void testDefaultOverride() {
Parameter file = parser.addStringParameter("file", "f", "descr", true);
Parameter doub = parser.addDoubleParameter("double", "d", "descr", 12.3);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
}
Double result = doub.getArgument();
Double expected = 5.5;
- Assert.assertEquals(expected, result);
+ assertEquals(expected, result);
}
@Test
@@ -253,7 +252,7 @@ public void testHelp() {
Parameter file = parser.addStringParameter("file", "f", "descri", "/home/user/projects/one/two/my_project/source/main/java/com/example/myapp/ExampleClassThatWonTDoAnythingElseThanBeeingAnExample.java");
Parameter doub = parser.addDoubleParameter("double", "d", "des", 12.3);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (CalledForHelpNotification e) {
System.out.println(e.getMessage());
} catch (ArgsException e) {
@@ -268,7 +267,7 @@ public void testLargerHelp() {
Parameter bool = parser.addBooleanParameter("boolean", "b", "des", true);
Parameter integer = parser.addIntegerParameter("integer", "i", "des", 5);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (CalledForHelpNotification e) {
System.out.println(e.getMessage());
} catch (ArgsException e) {
@@ -280,7 +279,7 @@ public void testAddIntegerParameterWithDescriptionAndMandatory() {
ArgsParser parser = new ArgsParser(new String[] {"--number", "42"});
Parameter number = parser.addIntegerParameter("number", "n", "An integer number", true);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
e.printStackTrace();
}
@@ -294,7 +293,7 @@ public void testAddIntegerParameterMandatory() {
ArgsParser parser = new ArgsParser(new String[] {"--number", "42"});
Parameter number = parser.addIntegerParameter("number", "n", true);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
e.printStackTrace();
}
@@ -308,7 +307,7 @@ public void testAddIntegerParameterWithDescriptionAndDefaultValue() {
ArgsParser parser = new ArgsParser(new String[] {});
Parameter number = parser.addIntegerParameter("number", "n", "An integer number", 42);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
}
Integer result = number.getArgument();
@@ -321,7 +320,7 @@ public void testAddIntegerParameterDefaultValue() {
ArgsParser parser = new ArgsParser(new String[] {});
Parameter number = parser.addIntegerParameter("number", "n", 42);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
}
Integer result = number.getArgument();
@@ -334,7 +333,7 @@ public void testAddDoubleParameterWithDescriptionAndMandatory() {
ArgsParser parser = new ArgsParser(new String[] {"--number", "42.5"});
Parameter number = parser.addDoubleParameter("number", "n", "A double number", true);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
e.printStackTrace();
}
@@ -348,7 +347,7 @@ public void testAddDoubleParameterMandatory() {
ArgsParser parser = new ArgsParser(new String[] {"--number", "42.5"});
Parameter number = parser.addDoubleParameter("number", "n", true);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
e.printStackTrace();
}
@@ -362,7 +361,7 @@ public void testAddDoubleParameterWithDescriptionAndDefaultValue() {
ArgsParser parser = new ArgsParser(new String[] {});
Parameter number = parser.addDoubleParameter("number", "n", "A double number", 42.5);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
}
Double result = number.getArgument();
@@ -375,7 +374,7 @@ public void testAddDoubleParameterDefaultValue() {
ArgsParser parser = new ArgsParser(new String[] {});
Parameter number = parser.addDoubleParameter("number", "n", 42.5);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
}
Double result = number.getArgument();
@@ -388,7 +387,7 @@ public void testAddBooleanParameterWithDescriptionAndMandatory() {
ArgsParser parser = new ArgsParser(new String[] {"--flag", "true"});
Parameter flag = parser.addBooleanParameter("flag", "f", "A boolean flag", true);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
e.printStackTrace();
}
@@ -402,7 +401,7 @@ public void testAddBooleanParameterMandatory() {
ArgsParser parser = new ArgsParser(new String[] {"--flag", "true"});
Parameter flag = parser.addBooleanParameter("flag", "f", true);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
e.printStackTrace();
}
@@ -416,7 +415,7 @@ public void testAddBooleanParameterWithDescriptionAndDefaultValue() {
ArgsParser parser = new ArgsParser(new String[] {"--flag", "false"});
Parameter flag = parser.addBooleanParameter("flag", "f", "A boolean flag", true);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
e.printStackTrace();
}
@@ -430,7 +429,7 @@ public void testAddBooleanParameterDefaultValue() {
ArgsParser parser = new ArgsParser(new String[] {"-f", "true"});
Parameter flag = parser.addBooleanParameter("flag", "f", true);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
e.printStackTrace();
}
@@ -444,7 +443,7 @@ public void testAddCharacterParameterWithDescriptionAndMandatory() {
ArgsParser parser = new ArgsParser(new String[] {"--char", "c"});
Parameter character = parser.addCharacterParameter("char", "c", "A character", true);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
e.printStackTrace();
}
@@ -458,7 +457,7 @@ public void testAddCharacterParameterMandatory() {
ArgsParser parser = new ArgsParser(new String[] {"--char", "c"});
Parameter character = parser.addCharacterParameter("char", "c", true);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
e.printStackTrace();
}
@@ -472,7 +471,7 @@ public void testAddCharacterParameterWithDescriptionAndDefaultValue() {
ArgsParser parser = new ArgsParser(new String[] {});
Parameter character = parser.addCharacterParameter("char", "c", "A character", 'c');
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
}
Character result = character.getArgument();
@@ -485,7 +484,7 @@ public void testAddCharacterParameterDefaultValue() {
ArgsParser parser = new ArgsParser(new String[] {});
Parameter character = parser.addCharacterParameter("char", "c", 'c');
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
}
Character result = character.getArgument();
@@ -497,7 +496,7 @@ public void testStringDeafult() {
ArgsParser parser = new ArgsParser(new String[] {});
Parameter string = parser.addStringParameter("string", "s", "default");
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
}
String result = string.getArgument();
@@ -509,7 +508,7 @@ public void testBool() {
ArgsParser parser = new ArgsParser(new String[] {"--bool", "true"});
Parameter bool = parser.addBooleanParameter(true, "bool", "b", "descr");
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
e.printStackTrace();
}
@@ -522,7 +521,7 @@ public void testBool2() {
ArgsParser parser = new ArgsParser(new String[] {"--bool", "false"});
Parameter bool = parser.addBooleanParameter(false, "bool", "b");
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
e.printStackTrace();
}
@@ -536,7 +535,7 @@ public void testSameFlagNameException() {
Parameter file = parser.addStringParameter("file", "f", "descr", true);
try {
Parameter file2 = parser.addStringParameter("file", "f2", "descr", true);
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
assertEquals("Flag already exists: file", e.getMessage());
}
@@ -547,7 +546,7 @@ public void testNoFlags() {
ArgsParser parser = new ArgsParser(new String[] {"file.txt"});
Parameter file = parser.addStringParameter("file", "f", "descr", true);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
System.out.println(e.getMessage());
assertEquals(new MandatoryArgNotProvidedArgsException("Mandatory parameters are missing:\n--file").getMessage(), e.getMessage());
@@ -561,7 +560,7 @@ public void testMultipleMandatoryArgumentsMissing() {
Parameter file = parser.addStringParameter("file", "f", "descr", true);
Parameter save = parser.addStringParameter("save", "s", "descr", true);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
System.out.println(e.getMessage());
assertEquals(new MandatoryArgNotProvidedArgsException("Mandatory parameters are missing:\n--save\n--file").getMessage(), e.getMessage());
@@ -573,7 +572,7 @@ public void testHelpForOneFlag() {
ArgsParser parser = new ArgsParser(new String[] {"--file", "--help"});
Parameter file = parser.addStringParameter("file", "f", "descr", true);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (CalledForHelpNotification e) {
System.out.println(e.getMessage());
} catch (ArgsException e) {
@@ -588,7 +587,7 @@ public void testShortFlag() {
Parameter example3 = parser.addStringParameter("parameterFlag3", "pf3", "This is a description for the parameter", true);
Parameter argWithDefault = parser.addDoubleParameter("parameterFlag4", "pf4", "description", 5.6);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (CalledForHelpNotification help) {
System.out.println(help.getMessage());
@@ -605,7 +604,7 @@ public void testGetArgument() {
ArgsParser parser = new ArgsParser(new String[] {"--file", "file.txt"});
Parameter file = parser.addStringParameter("file", "f", "descr", true);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
e.printStackTrace();
}
@@ -619,7 +618,7 @@ public void testClassCastExceptionInGetArgument() {
ArgsParser parser = new ArgsParser(new String[] {"--file", "file.txt"});
Parameter file = parser.addStringParameter("file", "f", "descr", true);
try {
- parser.parseArgs();
+ parser.parseUnchecked();
} catch (Exception e) {
e.printStackTrace();
}
@@ -631,4 +630,29 @@ public void testClassCastExceptionInGetArgument() {
"of loader 'bootstrap')").getMessage(), e.getMessage());
}
}
+
+ @Test
+ public void testDirectParse() {
+ ArgsParser parser = new ArgsParser(new String[] {"--file", "file.txt"});
+ Parameter file = parser.addStringParameter("file", "f", "descr", true);
+ parser.parse();
+
+ assertEquals("file.txt", file.getArgument());
+ }
+
+ // tests for the checked parse() method
+
+// @Test
+// public void testDirectHelp() {
+// ArgsParser parser = new ArgsParser(new String[] {"--help"});
+// Parameter file = parser.addStringParameter("file", "f", "descr", true);
+// parser.parse();
+// }
+
+// @Test
+// public void testArgsExceptionWithDirectParse() {
+// ArgsParser parser = new ArgsParser(new String[] {"-f"});
+// Parameter file = parser.addStringParameter("file", "f", "descr", true);
+// parser.parse();
+// }
}