More helpful error message on parameter order

This commit addresses a confusing error message that arises when a
property parameter (e.g. -D) is after a double-dash parameter. The
current error message reports to the user that the parameter does not
start with “--". Adding the second dash as the error message suggests
causes the parameter to be silently ignored. This is confusing for the
user. With this commit, the user is now informed that the parameter
order is violated.

Relates e27ede48ce
This commit is contained in:
Jason Tedor 2015-09-23 07:32:09 -04:00
parent 75e816400c
commit 9e7c56b430
2 changed files with 17 additions and 1 deletions

View File

@ -128,7 +128,13 @@ final class BootstrapCLIParser extends CliTool {
while (iterator.hasNext()) {
String arg = iterator.next();
if (!arg.startsWith("--")) {
throw new IllegalArgumentException("Parameter [" + arg + "]does not start with --");
if (arg.startsWith("-D") || arg.startsWith("-d") || arg.startsWith("-p")) {
throw new IllegalArgumentException(
"Parameter [" + arg + "] starting with \"-D\", \"-d\" or \"-p\" must be before any parameters starting with --"
);
} else {
throw new IllegalArgumentException("Parameter [" + arg + "]does not start with --");
}
}
// if there is no = sign, we have to get the next argu
arg = arg.replace("--", "");

View File

@ -220,6 +220,16 @@ public class BootstrapCliParserTests extends CliToolTestCase {
}
public void testThatHelpfulErrorMessageIsGivenWhenParametersAreOutOfOrder() throws Exception {
BootstrapCLIParser parser = new BootstrapCLIParser(terminal);
try {
parser.parse("start", new String[]{"--foo=bar", "-Dbaz=qux"});
fail("expected IllegalArgumentException for out-of-order parameters");
} catch (IllegalArgumentException e) {
assertThat(e.getMessage(), containsString("must appear before any parameters starting with --"));
}
}
private void registerProperties(String ... systemProperties) {
propertiesToClear.addAll(Arrays.asList(systemProperties));
}