Some small improvements to value flags, and a unit test.

This commit is contained in:
zml2008 2011-09-14 17:58:22 -07:00
parent 6cdfd86f0b
commit 75e843b965
2 changed files with 37 additions and 9 deletions

View File

@ -85,9 +85,7 @@ public class CommandContext {
// Then flags // Then flags
for (int i = 1; i < args.length; ++i) { for (int i = 1; i < args.length; ++i) {
final String arg = args[i]; final String arg = args[i];
if (arg.charAt(0) != '-') {
break;
}
if (arg.equals("--")) { if (arg.equals("--")) {
args = removePortionOfArray(args, i, i, null); args = removePortionOfArray(args, i, i, null);
@ -95,28 +93,26 @@ public class CommandContext {
} }
if (!arg.matches("^-[a-zA-Z]+$")) { if (!arg.matches("^-[a-zA-Z]+$")) {
throw new CommandException("Invalid flag character given."); continue;
} }
int index = i;
for (int k = 1; k < arg.length(); ++k) { for (int k = 1; k < arg.length(); ++k) {
final char flagName = arg.charAt(k); final char flagName = arg.charAt(k);
if (valueFlags.contains(flagName)) { if (valueFlags.contains(flagName)) {
if (this.valueFlags.containsKey(flagName)) { if (this.valueFlags.containsKey(flagName)) {
throw new CommandException("Value flag '" + flagName + "' already given"); throw new CommandException("Value flag '" + flagName + "' already given");
} }
index++;
final int index = i + 1;
if (index >= args.length) { if (index >= args.length) {
throw new CommandException("Value flag '" + flagName + "' specified without value"); throw new CommandException("Value flag '" + flagName + "' specified without value");
} }
this.valueFlags.put(flagName, args[index]); this.valueFlags.put(flagName, args[index]);
args = removePortionOfArray(args, index, index, null);
} else { } else {
booleanFlags.add(flagName); booleanFlags.add(flagName);
} }
} }
args = removePortionOfArray(args, i, i, null); args = removePortionOfArray(args, i, index, null);
} }
this.args = args; this.args = args;
} }

View File

@ -0,0 +1,32 @@
package com.sk89q.minecraft.util.commands;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
import java.util.Arrays;
import java.util.HashSet;
public class CommandContextTest {
final String firstCmdString = "herpderp -opw testers \"mani world\" 'another thing' because something";
CommandContext firstCommand;
CommandContext secondCommand;
@Before
public void setUpTest(){
try {
firstCommand = new CommandContext(firstCmdString, new HashSet<Character>(Arrays.asList('o', 'w')));
} catch (CommandException e) {
e.printStackTrace();
fail();
}
}
@Test(expected = CommandException.class)
public void testInvalidFlags() throws CommandException {
String failingCommand = "herpderp -opw testers";
new CommandContext(failingCommand, new HashSet<Character>(Arrays.asList('o', 'w')));
}
}