Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/ArgsParser/ArgsParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -687,7 +687,7 @@ private Set<Parameter<?>> parseArguments() throws UnknownFlagArgsException, TooM
} else if (currentPositionIsFlag && flagAlreadyProvided) { // if the flag already was set
throw new FlagAlreadyProvidedArgsException(currentParameter.getFullFlag(), currentParameter.getShortFlag());

} else if (argumentSet && !currentPositionIsFlag) { // if two arguments are provided to a single flag
} else if (argumentSet && !currentPositionIsFlag && !currentPositionIsCommand) { // if two arguments are provided to a single flag
throw new TooManyArgumentsArgsException(longFlagUsed ? currentParameter.getFullFlag() : currentParameter.getShortFlag());

} else if (currentPositionIsFlag && lastPositionWasFlag) { // if a flag follows another flag
Expand All @@ -705,7 +705,7 @@ private Set<Parameter<?>> parseArguments() throws UnknownFlagArgsException, TooM
if (isArrayParam) { // we "collect" all following arguments after an array parameter in a StringBuilder
StringBuilder arguments = new StringBuilder();
arguments.append(args[i]).append("==="); // every entry in the array gets seperated by ===
while(i + 1 < argsLength && !args[i + 1].startsWith("-")) { // loop through all arguments
while(i + 1 < argsLength && !args[i + 1].startsWith("-") && !commandMap.containsKey(args[i + 1])) { // loop through all arguments
arguments.append(args[++i]).append("===");
}
currentParameter.setArgument(arguments.toString());
Expand Down
55 changes: 55 additions & 0 deletions src/test/TestAddParameterMethods.java
Original file line number Diff line number Diff line change
Expand Up @@ -375,6 +375,30 @@ public void testAddDefaultCharacterArrayParameterWithArgument() {
}



// Commands

@Test
public void testCommand() {
String[] args = {"command"};
ArgsParser parser = new ArgsParser(args);
Command command = parser.addCommand("command", "c", "");
parser.parse();

assertTrue(command.isProvided());
}

@Test
public void testIndirectCommandCheck() {
String[] args = {"command"};
ArgsParser parser = new ArgsParser(args);
Command command = parser.addCommand("command", "c", "");
parser.parse();

assertTrue(parser.checkIfCommandIsProvided("command"));
}


// Mixing addParameter Methods


Expand Down Expand Up @@ -506,4 +530,35 @@ public void testGetArgumentOf() {
assertEquals('x', (Character) parser.getArgumentOf("--Character"));
assertArrayEquals(new Character[]{'a', 'z'}, (Character[]) parser.getArgumentOf("--CharacterArray"));
}

@Test
public void testCombinationsOfCommandsAndFlags() {
String[] args = new String[]{
"c3",
"-s", "stringInput",
"-sArr", "arr1", "arr2",
"-i", "42",
"command1",
"-iArr", "1", "2",
"command2"
};
ArgsParser parser = new ArgsParser(args);
Parameter<String> stringPar = parser.addMandatoryStringParameter("String", "s", "desc");
Parameter<String[]> stringArrPar = parser.addStringArrayParameter("StringArray", "sArr", "", false);
Parameter<Integer> intPar = parser.addMandatoryIntegerParameter("Int", "i", "desc");
Parameter<Integer[]> intArrPar = parser.addIntegerArrayParameter("IntArray", "iArr", "", false);
Command command1 = parser.addCommand("command1", "c1", null);
Command command2 = parser.addCommand("command2", "c2", null);
Command command3 = parser.addCommand("command3", "c3", null);
parser.parse();

assertEquals("stringInput", parser.getArgumentOf("--String"));
assertArrayEquals(new String[]{"arr1", "arr2"}, stringArrPar.getArgument());
assertEquals(42, intPar.getArgument());
assertArrayEquals(new Integer[]{1, 2}, (Integer[]) intArrPar.getArgument());
assertTrue(command1.isProvided());
assertTrue(command2.isProvided());
assertTrue(command3.isProvided());
}

}