You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2024/08/10 13:00:53 UTC
(commons-cli) 07/09: Sort members
This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-cli.git
commit 7ecbc0ce89af46b513169e149fba8657430303a0
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sat Aug 10 08:53:36 2024 -0400
Sort members
---
.../org/apache/commons/cli/CommandLineTest.java | 1064 ++++++++++----------
1 file changed, 532 insertions(+), 532 deletions(-)
diff --git a/src/test/java/org/apache/commons/cli/CommandLineTest.java b/src/test/java/org/apache/commons/cli/CommandLineTest.java
index 31998da..6fefd89 100644
--- a/src/test/java/org/apache/commons/cli/CommandLineTest.java
+++ b/src/test/java/org/apache/commons/cli/CommandLineTest.java
@@ -41,280 +41,149 @@ public class CommandLineTest {
private enum Count { ONE, TWO, THREE }
- @Test
- public void testBuilder() {
- final CommandLine.Builder builder = new CommandLine.Builder();
- builder.addArg("foo").addArg("bar");
- builder.addOption(Option.builder("T").build());
- final CommandLine cmd = builder.build();
-
- assertEquals("foo", cmd.getArgs()[0]);
- assertEquals("bar", cmd.getArgList().get(1));
- assertEquals("T", cmd.getOptions()[0].getOpt());
- }
-
- @Test
- public void testBuilderNullArgs() {
- final CommandLine.Builder builder = new CommandLine.Builder();
- builder.addArg(null).addArg(null);
- builder.addOption(Option.builder("T").build());
- final CommandLine cmd = builder.build();
-
- assertEquals(0, cmd.getArgs().length);
- assertEquals("T", cmd.getOptions()[0].getOpt());
- }
-
- @Test
- public void testBuilderNullOption() {
- final CommandLine.Builder builder = new CommandLine.Builder();
- builder.addArg("foo").addArg("bar");
- builder.addOption(null);
- builder.addOption(null);
- builder.addOption(null);
- final CommandLine cmd = builder.build();
+ private static Stream<Arguments> createHasOptionParameters() throws ParseException {
+ final List<Arguments> lst = new ArrayList<>();
+ final Option optT = Option.builder().option("T").longOpt("tee").deprecated().optionalArg(true).build();
+ final Option optU = Option.builder("U").longOpt("you").optionalArg(true).build();
+ final OptionGroup optionGroup = new OptionGroup().addOption(optT).addOption(optU);
- assertEquals("foo", cmd.getArgs()[0]);
- assertEquals("bar", cmd.getArgList().get(1));
- assertEquals(0, cmd.getOptions().length);
- }
+ final String[] foobar = { "foo", "bar" };
+ // T set
+ lst.add(Arguments.of(new String[] {"-T"}, optT, optionGroup, true, true, true, true, optT));
+ lst.add(Arguments.of(new String[] {"-T", "foo"}, optT, optionGroup, true, true, true, true, optT));
+ lst.add(Arguments.of(new String[] {"--tee"}, optT, optionGroup, true, true, true, true, optT));
+ lst.add(Arguments.of(new String[] {"--tee", "foo"}, optT, optionGroup, true, true, true, true, optT));
- @Test
- public void testGetOptionProperties() throws Exception {
- final String[] args = {"-Dparam1=value1", "-Dparam2=value2", "-Dparam3", "-Dparam4=value4", "-D", "--property", "foo=bar"};
+ lst.add(Arguments.of(new String[] {"-U"}, optT, optionGroup, false, false, false, true, optU));
+ lst.add(Arguments.of(new String[] {"-U", "foo", "bar"}, optT, optionGroup, false, false, false, true, optU));
+ lst.add(Arguments.of(new String[] {"--you"}, optT, optionGroup, false, false, false, true, optU));
+ lst.add(Arguments.of(new String[] {"--you", "foo", "bar"}, optT, optionGroup, false, false, false, true, optU));
- final Options options = new Options();
- options.addOption(Option.builder("D").valueSeparator().optionalArg(true).numberOfArgs(2).build());
- options.addOption(Option.builder().valueSeparator().numberOfArgs(2).longOpt("property").build());
- final Parser parser = new GnuParser();
- final CommandLine cl = parser.parse(options, args);
+ // U set
+ lst.add(Arguments.of(new String[] {"-T"}, optU, optionGroup, false, false, true, true, optT));
+ lst.add(Arguments.of(new String[] {"-T", "foo", "bar"}, optU, optionGroup, false, false, true, true, optT));
+ lst.add(Arguments.of(new String[] {"--tee"}, optU, optionGroup, false, false, true, true, optT));
+ lst.add(Arguments.of(new String[] {"--tee", "foo", "bar"}, optU, optionGroup, false, false, true, true, optT));
- final Properties props = cl.getOptionProperties("D");
- assertNotNull(props, "null properties");
- assertEquals(4, props.size(), "number of properties in " + props);
- assertEquals("value1", props.getProperty("param1"), "property 1");
- assertEquals("value2", props.getProperty("param2"), "property 2");
- assertEquals("true", props.getProperty("param3"), "property 3");
- assertEquals("value4", props.getProperty("param4"), "property 4");
+ lst.add(Arguments.of(new String[] {"-U"}, optU, optionGroup, false, true, false, true, optU));
+ lst.add(Arguments.of(new String[] {"-U", "foo", "bar"}, optU, optionGroup, false, true, false, true, optU));
+ lst.add(Arguments.of(new String[] {"--you"}, optU, optionGroup, false, true, false, true, optU));
+ lst.add(Arguments.of(new String[] {"--you", "foo", "bar"}, optU, optionGroup, false, true, false, true, optU));
- assertEquals("bar", cl.getOptionProperties("property").getProperty("foo"), "property with long format");
+ return lst.stream();
}
- @Test
- public void testGetOptionPropertiesWithOption() throws Exception {
- final String[] args = {"-Dparam1=value1", "-Dparam2=value2", "-Dparam3", "-Dparam4=value4", "-D", "--property", "foo=bar"};
-
- final Options options = new Options();
- final Option optionD = Option.builder("D").valueSeparator().numberOfArgs(2).optionalArg(true).build();
- final Option optionProperty = Option.builder().valueSeparator().numberOfArgs(2).longOpt("property").build();
- options.addOption(optionD);
- options.addOption(optionProperty);
-
- final Parser parser = new GnuParser();
- final CommandLine cl = parser.parse(options, args);
-
- final Properties props = cl.getOptionProperties(optionD);
- assertNotNull(props, "null properties");
- assertEquals(4, props.size(), "number of properties in " + props);
- assertEquals("value1", props.getProperty("param1"), "property 1");
- assertEquals("value2", props.getProperty("param2"), "property 2");
- assertEquals("true", props.getProperty("param3"), "property 3");
- assertEquals("value4", props.getProperty("param4"), "property 4");
-
- assertEquals("bar", cl.getOptionProperties(optionProperty).getProperty("foo"), "property with long format");
- }
+ private static Stream<Arguments> createOptionValueParameters() throws ParseException {
+ final List<Arguments> lst = new ArrayList<>();
+ final Option optT = Option.builder().option("T").longOpt("tee").deprecated().optionalArg(true).build();
+ final Option optU = Option.builder("U").longOpt("you").optionalArg(true).build();
+ final OptionGroup optionGroup = new OptionGroup().addOption(optT).addOption(optU);
- @Test
- public void testGetOptionsBuilder() {
- final CommandLine cmd = CommandLine.builder().build();
- assertNotNull(cmd.getOptions());
- assertEquals(0, cmd.getOptions().length);
+ // T set
+ lst.add(Arguments.of(new String[] {"-T"}, optT, optionGroup, true, null, true, null, optT));
+ lst.add(Arguments.of(new String[] {"-T", "foo"}, optT, optionGroup, true, "foo", true, "foo", optT));
+ lst.add(Arguments.of(new String[] {"--tee"}, optT, optionGroup, true, null, true, null, optT));
+ lst.add(Arguments.of(new String[] {"--tee", "foo"}, optT, optionGroup, true, "foo", true, "foo", optT));
- cmd.addOption(null);
- cmd.addOption(new Option("a", null));
- cmd.addOption(new Option("b", null));
- cmd.addOption(new Option("c", null));
+ lst.add(Arguments.of(new String[] {"-U"}, optT, optionGroup, false, null, false, null, optU));
+ lst.add(Arguments.of(new String[] {"-U", "foo"}, optT, optionGroup, false, null, false, "foo", optU));
+ lst.add(Arguments.of(new String[] {"--you"}, optT, optionGroup, false, null, false, null, optU));
+ lst.add(Arguments.of(new String[] {"--you", "foo"}, optT, optionGroup, false, null, false, "foo", optU));
- assertEquals(3, cmd.getOptions().length);
- }
- @Test
- public void testGetOptionsCtor() {
- final CommandLine cmd = new CommandLine();
- assertNotNull(cmd.getOptions());
- assertEquals(0, cmd.getOptions().length);
+ // U set
+ lst.add(Arguments.of(new String[] {"-T"}, optU, optionGroup, false, null, true, null, optT));
+ lst.add(Arguments.of(new String[] {"-T", "foo"}, optU, optionGroup, false, null, true, "foo", optT));
+ lst.add(Arguments.of(new String[] {"--tee"}, optU, optionGroup, false, null, true, null, optT));
+ lst.add(Arguments.of(new String[] {"--tee", "foo"}, optU, optionGroup, false, null, true, "foo", optT));
- cmd.addOption(new Option("a", null));
- cmd.addOption(new Option("b", null));
- cmd.addOption(new Option("c", null));
- cmd.addOption(null);
+ lst.add(Arguments.of(new String[] {"-U"}, optU, optionGroup, false, null, false, null, optU));
+ lst.add(Arguments.of(new String[] {"-U", "foo"}, optU, optionGroup, false, "foo", false, "foo", optU));
+ lst.add(Arguments.of(new String[] {"--you"}, optU, optionGroup, false, null, false, null, optU));
+ lst.add(Arguments.of(new String[] {"--you", "foo"}, optU, optionGroup, false, "foo", false, "foo", optU));
- assertEquals(3, cmd.getOptions().length);
+ return lst.stream();
}
- @Test
- public void testBadGetParsedOptionValue() throws Exception {
+ private static Stream<Arguments> createOptionValuesParameters() throws ParseException {
+ final List<Arguments> lst = new ArrayList<>();
+ final Option optT = Option.builder().option("T").longOpt("tee").numberOfArgs(2).deprecated().optionalArg(true).build();
+ final Option optU = Option.builder("U").longOpt("you").numberOfArgs(2).optionalArg(true).build();
+ final OptionGroup optionGroup = new OptionGroup().addOption(optT).addOption(optU);
- final Options options = new Options();
- options.addOption(Option.builder("i").hasArg().type(Number.class).build());
- options.addOption(Option.builder("c").hasArg().converter(s -> Count.valueOf(s.toUpperCase())).build());
+ final String[] foobar = { "foo", "bar" };
+ // T set
+ lst.add(Arguments.of(new String[] {"-T"}, optT, optionGroup, true, null, true, null, optT));
+ lst.add(Arguments.of(new String[] {"-T", "foo", "bar"}, optT, optionGroup, true, foobar, true, foobar, optT));
+ lst.add(Arguments.of(new String[] {"--tee"}, optT, optionGroup, true, null, true, null, optT));
+ lst.add(Arguments.of(new String[] {"--tee", "foo", "bar"}, optT, optionGroup, true, foobar, true, foobar, optT));
+ lst.add(Arguments.of(new String[] {"-U"}, optT, optionGroup, false, null, false, null, optU));
+ lst.add(Arguments.of(new String[] {"-U", "foo", "bar"}, optT, optionGroup, false, null, false, foobar, optU));
+ lst.add(Arguments.of(new String[] {"--you"}, optT, optionGroup, false, null, false, null, optU));
+ lst.add(Arguments.of(new String[] {"--you", "foo", "bar"}, optT, optionGroup, false, null, false, foobar, optU));
- final CommandLineParser parser = new DefaultParser();
- final CommandLine cmd = parser.parse(options, new String[] {"-i", "foo", "-c", "bar"});
- assertEquals(NumberFormatException.class, assertThrows(ParseException.class, () -> cmd.getParsedOptionValue("i")).getCause().getClass());
- assertEquals(IllegalArgumentException.class, assertThrows(ParseException.class, () -> cmd.getParsedOptionValue("c")).getCause().getClass());
- }
+ // U set
+ lst.add(Arguments.of(new String[] {"-T"}, optU, optionGroup, false, null, true, null, optT));
+ lst.add(Arguments.of(new String[] {"-T", "foo", "bar"}, optU, optionGroup, false, null, true, foobar, optT));
+ lst.add(Arguments.of(new String[] {"--tee"}, optU, optionGroup, false, null, true, null, optT));
+ lst.add(Arguments.of(new String[] {"--tee", "foo", "bar"}, optU, optionGroup, false, null, true, foobar, optT));
- @Test
- public void testNullOption() throws Exception {
- final Options options = new Options();
- final Option optI = Option.builder("i").hasArg().type(Number.class).build();
- final Option optF = Option.builder("f").hasArg().build();
- options.addOption(optI);
- options.addOption(optF);
- final CommandLineParser parser = new DefaultParser();
- final CommandLine cmd = parser.parse(options, new String[] {"-i", "123", "-f", "foo"});
- assertNull(cmd.getOptionValue((Option) null));
- assertNull(cmd.getParsedOptionValue((Option) null));
- assertNull(cmd.getOptionValue((OptionGroup) null));
- assertNull(cmd.getParsedOptionValue((OptionGroup) null));
- }
+ lst.add(Arguments.of(new String[] {"-U"}, optU, optionGroup, false, null, false, null, optU));
+ lst.add(Arguments.of(new String[] {"-U", "foo", "bar"}, optU, optionGroup, false, foobar, false, foobar, optU));
+ lst.add(Arguments.of(new String[] {"--you"}, optU, optionGroup, false, null, false, null, optU));
+ lst.add(Arguments.of(new String[] {"--you", "foo", "bar"}, optU, optionGroup, false, foobar, false, foobar, optU));
- private void assertWritten(final boolean optDep, final ByteArrayOutputStream baos) {
- System.out.flush();
- if (optDep) {
- assertEquals("Option 'T''tee': Deprecated", baos.toString().trim());
- } else {
- assertEquals("", baos.toString());
- }
- baos.reset();
+ return lst.stream();
}
- @ParameterizedTest(name = "{0}, {1}")
- @MethodSource("createOptionValueParameters")
- public void noDeprecationHandlerTest(final String[] args, final Option opt, final OptionGroup optionGroup, final boolean optDep,
- final String optValue, final boolean grpDep, final String grpValue, final Option grpOpt) throws ParseException {
- final Options options = new Options().addOptionGroup(optionGroup);
- final CommandLine commandLine = DefaultParser.builder().build().parse(options, args);
- final Supplier<String> thinger = () -> "thing";
- final Supplier<String> nullSupplier = null;
- final ByteArrayOutputStream baos = new ByteArrayOutputStream();
- final PrintStream ps = System.out;
- try {
- System.setOut(new PrintStream(baos));
-
- final OptionGroup otherGroup = new OptionGroup().addOption(Option.builder("o").longOpt("other").hasArg().build())
- .addOption(Option.builder().option("p").longOpt("part").hasArg().build());
- final OptionGroup nullGroup = null;
-
- // test char option
- assertEquals(optValue, commandLine.getOptionValue(asChar(opt)));
- assertWritten(optDep, baos);
-
- assertEquals(optValue == null ? "thing" : optValue, commandLine.getOptionValue(asChar(opt), "thing"));
- assertWritten(optDep, baos);
-
- assertEquals(optValue == null ? "thing" : optValue, commandLine.getOptionValue(asChar(opt), thinger));
- assertWritten(optDep, baos);
-
- assertEquals(optValue, commandLine.getOptionValue(asChar(opt), nullSupplier));
- assertWritten(optDep, baos);
-
- // test short option arg
- assertEquals(optValue, commandLine.getOptionValue(opt.getOpt()));
- assertWritten(optDep, baos);
-
- assertEquals(optValue == null ? "thing" : optValue, commandLine.getOptionValue(opt.getOpt(), "thing"));
- assertWritten(optDep, baos);
-
- assertEquals(optValue == null ? "thing" : optValue, commandLine.getOptionValue(opt.getOpt(), thinger));
- assertWritten(optDep, baos);
-
- assertEquals(optValue, commandLine.getOptionValue(opt.getOpt(), nullSupplier));
- assertWritten(optDep, baos);
-
- // test long option arg
- assertEquals(optValue, commandLine.getOptionValue(opt.getLongOpt()));
- assertWritten(optDep, baos);
-
- assertEquals(optValue == null ? "thing" : optValue, commandLine.getOptionValue(opt.getLongOpt(), "thing"));
- assertWritten(optDep, baos);
-
- assertEquals(optValue == null ? "thing" : optValue, commandLine.getOptionValue(opt.getLongOpt(), thinger));
- assertWritten(optDep, baos);
-
- assertEquals(optValue, commandLine.getOptionValue(opt.getLongOpt(), nullSupplier));
- assertWritten(optDep, baos);
-
- // test Option arg
- assertEquals(optValue, commandLine.getOptionValue(opt));
- assertWritten(optDep, baos);
-
- assertEquals(optValue == null ? "thing" : optValue, commandLine.getOptionValue(opt, "thing"));
- assertWritten(optDep, baos);
-
- assertEquals(optValue == null ? "thing" : optValue, commandLine.getOptionValue(opt, thinger));
- assertWritten(optDep, baos);
-
- assertEquals(optValue, commandLine.getOptionValue(opt, nullSupplier));
- assertWritten(optDep, baos);
-
- // test optionGroup arg
- assertEquals(grpValue, commandLine.getOptionValue(optionGroup));
- assertWritten(grpDep, baos);
-
- assertEquals(grpValue == null ? "thing" : grpValue, commandLine.getOptionValue(optionGroup, "thing"));
- assertWritten(grpDep, baos);
-
- assertEquals(grpValue == null ? "thing" : grpValue, commandLine.getOptionValue(optionGroup, thinger));
- assertWritten(grpDep, baos);
-
- assertEquals(grpValue, commandLine.getOptionValue(optionGroup, nullSupplier));
- assertWritten(grpDep, baos);
-
- // test other group arg
- assertNull(commandLine.getOptionValue(otherGroup));
- assertWritten(false, baos);
-
- assertEquals("thing", commandLine.getOptionValue(otherGroup, "thing"));
- assertWritten(false, baos);
-
- assertEquals("thing", commandLine.getOptionValue(otherGroup, thinger));
- assertWritten(false, baos);
-
- assertNull(commandLine.getOptionValue(otherGroup, nullSupplier));
- assertWritten(false, baos);
+ private static Stream<Arguments> createParsedOptionValueParameters() throws ParseException {
+ final List<Arguments> lst = new ArrayList<>();
+ final Option optT = Option.builder().option("T").longOpt("tee").deprecated().type(Integer.class).optionalArg(true).build();
+ final Option optU = Option.builder("U").longOpt("you").type(Integer.class).optionalArg(true).build();
+ final OptionGroup optionGroup = new OptionGroup().addOption(optT).addOption(optU);
+ final Integer expected = Integer.valueOf(1);
- // test null Group arg
- assertNull(commandLine.getOptionValue(nullGroup));
- assertWritten(false, baos);
+ // T set
+ lst.add(Arguments.of(new String[] {"-T"}, optT, optionGroup, true, null, true, null, optT));
+ lst.add(Arguments.of(new String[] {"-T", "1"}, optT, optionGroup, true, expected, true, expected, optT));
+ lst.add(Arguments.of(new String[] {"--tee"}, optT, optionGroup, true, null, true, null, optT));
+ lst.add(Arguments.of(new String[] {"--tee", "1"}, optT, optionGroup, true, expected, true, expected, optT));
- assertEquals("thing", commandLine.getOptionValue(nullGroup, "thing"));
- assertWritten(false, baos);
+ lst.add(Arguments.of(new String[] {"-U"}, optT, optionGroup, false, null, false, null, optU));
+ lst.add(Arguments.of(new String[] {"-U", "1"}, optT, optionGroup, false, null, false, expected, optU));
+ lst.add(Arguments.of(new String[] {"--you"}, optT, optionGroup, false, null, false, null, optU));
+ lst.add(Arguments.of(new String[] {"--you", "1"}, optT, optionGroup, false, null, false, expected, optU));
- assertEquals("thing", commandLine.getOptionValue(nullGroup, thinger));
- assertWritten(false, baos);
- assertNull(commandLine.getOptionValue(nullGroup, nullSupplier));
- assertWritten(false, baos);
+ // U set
+ lst.add(Arguments.of(new String[] {"-T"}, optU, optionGroup, false, null, true, null, optT));
+ lst.add(Arguments.of(new String[] {"-T", "1"}, optU, optionGroup, false, null, true, expected, optT));
+ lst.add(Arguments.of(new String[] {"--tee"}, optU, optionGroup, false, null, true, null, optT));
+ lst.add(Arguments.of(new String[] {"--tee", "1"}, optU, optionGroup, false, null, true, expected, optT));
- // test not an option
- assertNull(commandLine.getOptionValue("Nope"));
- assertWritten(false, baos);
+ lst.add(Arguments.of(new String[] {"-U"}, optU, optionGroup, false, null, false, null, optU));
+ lst.add(Arguments.of(new String[] {"-U", "1"}, optU, optionGroup, false, expected, false, expected, optU));
+ lst.add(Arguments.of(new String[] {"--you"}, optU, optionGroup, false, null, false, null, optU));
+ lst.add(Arguments.of(new String[] {"--you", "1"}, optU, optionGroup, false, expected, false, expected, optU));
- assertEquals("thing", commandLine.getOptionValue("Nope", "thing"));
- assertWritten(false, baos);
+ return lst.stream();
+ }
- assertEquals("thing", commandLine.getOptionValue("Nope", thinger));
- assertWritten(false, baos);
+ char asChar(final Option opt) {
+ return opt.getOpt().charAt(0);
+ }
- assertNull(commandLine.getOptionValue("Nope", nullSupplier));
- assertWritten(false, baos);
- } finally {
- System.setOut(ps);
+ private void assertWritten(final boolean optDep, final ByteArrayOutputStream baos) {
+ System.out.flush();
+ if (optDep) {
+ assertEquals("Option 'T''tee': Deprecated", baos.toString().trim());
+ } else {
+ assertEquals("", baos.toString());
}
+ baos.reset();
}
/**
@@ -333,8 +202,62 @@ public class CommandLineTest {
handler.clear();
}
- char asChar(final Option opt) {
- return opt.getOpt().charAt(0);
+ /**
+ * Test for get option values with and without default values. Verifies that deprecated options only report as
+ * deprecated once.
+ * @param args the argument strings to parse.
+ * @param opt the option to check for values with.
+ * @param optionGroup the option group to check for values with.
+ * @param optDep {@code true} if the opt is deprecated.
+ * @param optValue The value expected from opt.
+ * @param grpDep {@code true} if the group is deprecated.
+ * @param grpValue the value expected from the group.
+ * @param grpOpt the option that is expected to be processed by the group.
+ * @throws ParseException on parse error.
+ */
+ @ParameterizedTest(name = "{0}, {1}")
+ @MethodSource("createOptionValuesParameters")
+ public void getOptionValuesTest(final String[] args, final Option opt, final OptionGroup optionGroup, final boolean optDep,
+ final String[] optValue, final boolean grpDep, final String[] grpValue, final Option grpOpt) throws ParseException {
+ final Options options = new Options().addOptionGroup(optionGroup);
+ final List<Option> handler = new ArrayList<>();
+ final CommandLine commandLine = DefaultParser.builder().setDeprecatedHandler(handler::add).build().parse(options, args);
+ final OptionGroup otherGroup = new OptionGroup().addOption(Option.builder("o").longOpt("other").hasArg().build())
+ .addOption(Option.builder().option("p").longOpt("part").hasArg().build());
+ final OptionGroup nullGroup = null;
+
+ // test char option arg
+ assertArrayEquals(optValue, commandLine.getOptionValues(asChar(opt)));
+ checkHandler(optDep, handler, opt);
+
+ // test short option arg
+ assertArrayEquals(optValue, commandLine.getOptionValues(opt.getOpt()));
+ checkHandler(optDep, handler, opt);
+
+ // test long option arg
+ assertArrayEquals(optValue, commandLine.getOptionValues(opt.getLongOpt()));
+ checkHandler(optDep, handler, opt);
+
+ // test Option arg
+ assertArrayEquals(optValue, commandLine.getOptionValues(opt));
+ checkHandler(optDep, handler, opt);
+
+
+ // test OptionGroup arg
+ assertArrayEquals(grpValue, commandLine.getOptionValues(optionGroup));
+ checkHandler(grpDep, handler, grpOpt);
+
+ // test not an option
+ assertNull(commandLine.getOptionValues("Nope"));
+ checkHandler(false, handler, opt);
+
+ // test other group arg
+ assertNull(commandLine.getOptionValues(otherGroup));
+ checkHandler(false, handler, grpOpt);
+
+ // test null group arg
+ assertNull(commandLine.getOptionValues(nullGroup));
+ checkHandler(false, handler, grpOpt);
}
/**
@@ -443,184 +366,99 @@ public class CommandLineTest {
checkHandler(false, handler, opt);
}
- private static Stream<Arguments> createOptionValueParameters() throws ParseException {
- final List<Arguments> lst = new ArrayList<>();
- final Option optT = Option.builder().option("T").longOpt("tee").deprecated().optionalArg(true).build();
- final Option optU = Option.builder("U").longOpt("you").optionalArg(true).build();
- final OptionGroup optionGroup = new OptionGroup().addOption(optT).addOption(optU);
-
- // T set
- lst.add(Arguments.of(new String[] {"-T"}, optT, optionGroup, true, null, true, null, optT));
- lst.add(Arguments.of(new String[] {"-T", "foo"}, optT, optionGroup, true, "foo", true, "foo", optT));
- lst.add(Arguments.of(new String[] {"--tee"}, optT, optionGroup, true, null, true, null, optT));
- lst.add(Arguments.of(new String[] {"--tee", "foo"}, optT, optionGroup, true, "foo", true, "foo", optT));
-
- lst.add(Arguments.of(new String[] {"-U"}, optT, optionGroup, false, null, false, null, optU));
- lst.add(Arguments.of(new String[] {"-U", "foo"}, optT, optionGroup, false, null, false, "foo", optU));
- lst.add(Arguments.of(new String[] {"--you"}, optT, optionGroup, false, null, false, null, optU));
- lst.add(Arguments.of(new String[] {"--you", "foo"}, optT, optionGroup, false, null, false, "foo", optU));
-
-
- // U set
- lst.add(Arguments.of(new String[] {"-T"}, optU, optionGroup, false, null, true, null, optT));
- lst.add(Arguments.of(new String[] {"-T", "foo"}, optU, optionGroup, false, null, true, "foo", optT));
- lst.add(Arguments.of(new String[] {"--tee"}, optU, optionGroup, false, null, true, null, optT));
- lst.add(Arguments.of(new String[] {"--tee", "foo"}, optU, optionGroup, false, null, true, "foo", optT));
-
- lst.add(Arguments.of(new String[] {"-U"}, optU, optionGroup, false, null, false, null, optU));
- lst.add(Arguments.of(new String[] {"-U", "foo"}, optU, optionGroup, false, "foo", false, "foo", optU));
- lst.add(Arguments.of(new String[] {"--you"}, optU, optionGroup, false, null, false, null, optU));
- lst.add(Arguments.of(new String[] {"--you", "foo"}, optU, optionGroup, false, "foo", false, "foo", optU));
-
- return lst.stream();
- }
-
-
- /**
- * Test for get option values with and without default values. Verifies that deprecated options only report as
- * deprecated once.
- * @param args the argument strings to parse.
- * @param opt the option to check for values with.
- * @param optionGroup the option group to check for values with.
- * @param optDep {@code true} if the opt is deprecated.
- * @param optValue The value expected from opt.
- * @param grpDep {@code true} if the group is deprecated.
- * @param grpValue the value expected from the group.
- * @param grpOpt the option that is expected to be processed by the group.
- * @throws ParseException on parse error.
- */
- @ParameterizedTest(name = "{0}, {1}")
- @MethodSource("createOptionValuesParameters")
- public void getOptionValuesTest(final String[] args, final Option opt, final OptionGroup optionGroup, final boolean optDep,
- final String[] optValue, final boolean grpDep, final String[] grpValue, final Option grpOpt) throws ParseException {
- final Options options = new Options().addOptionGroup(optionGroup);
- final List<Option> handler = new ArrayList<>();
- final CommandLine commandLine = DefaultParser.builder().setDeprecatedHandler(handler::add).build().parse(options, args);
- final OptionGroup otherGroup = new OptionGroup().addOption(Option.builder("o").longOpt("other").hasArg().build())
- .addOption(Option.builder().option("p").longOpt("part").hasArg().build());
- final OptionGroup nullGroup = null;
-
- // test char option arg
- assertArrayEquals(optValue, commandLine.getOptionValues(asChar(opt)));
- checkHandler(optDep, handler, opt);
-
- // test short option arg
- assertArrayEquals(optValue, commandLine.getOptionValues(opt.getOpt()));
- checkHandler(optDep, handler, opt);
-
- // test long option arg
- assertArrayEquals(optValue, commandLine.getOptionValues(opt.getLongOpt()));
- checkHandler(optDep, handler, opt);
-
- // test Option arg
- assertArrayEquals(optValue, commandLine.getOptionValues(opt));
- checkHandler(optDep, handler, opt);
-
-
- // test OptionGroup arg
- assertArrayEquals(grpValue, commandLine.getOptionValues(optionGroup));
- checkHandler(grpDep, handler, grpOpt);
-
- // test not an option
- assertNull(commandLine.getOptionValues("Nope"));
- checkHandler(false, handler, opt);
-
- // test other group arg
- assertNull(commandLine.getOptionValues(otherGroup));
- checkHandler(false, handler, grpOpt);
-
- // test null group arg
- assertNull(commandLine.getOptionValues(nullGroup));
- checkHandler(false, handler, grpOpt);
- }
-
- private static Stream<Arguments> createOptionValuesParameters() throws ParseException {
- final List<Arguments> lst = new ArrayList<>();
- final Option optT = Option.builder().option("T").longOpt("tee").numberOfArgs(2).deprecated().optionalArg(true).build();
- final Option optU = Option.builder("U").longOpt("you").numberOfArgs(2).optionalArg(true).build();
- final OptionGroup optionGroup = new OptionGroup().addOption(optT).addOption(optU);
-
- final String[] foobar = { "foo", "bar" };
- // T set
- lst.add(Arguments.of(new String[] {"-T"}, optT, optionGroup, true, null, true, null, optT));
- lst.add(Arguments.of(new String[] {"-T", "foo", "bar"}, optT, optionGroup, true, foobar, true, foobar, optT));
- lst.add(Arguments.of(new String[] {"--tee"}, optT, optionGroup, true, null, true, null, optT));
- lst.add(Arguments.of(new String[] {"--tee", "foo", "bar"}, optT, optionGroup, true, foobar, true, foobar, optT));
-
- lst.add(Arguments.of(new String[] {"-U"}, optT, optionGroup, false, null, false, null, optU));
- lst.add(Arguments.of(new String[] {"-U", "foo", "bar"}, optT, optionGroup, false, null, false, foobar, optU));
- lst.add(Arguments.of(new String[] {"--you"}, optT, optionGroup, false, null, false, null, optU));
- lst.add(Arguments.of(new String[] {"--you", "foo", "bar"}, optT, optionGroup, false, null, false, foobar, optU));
-
-
- // U set
- lst.add(Arguments.of(new String[] {"-T"}, optU, optionGroup, false, null, true, null, optT));
- lst.add(Arguments.of(new String[] {"-T", "foo", "bar"}, optU, optionGroup, false, null, true, foobar, optT));
- lst.add(Arguments.of(new String[] {"--tee"}, optU, optionGroup, false, null, true, null, optT));
- lst.add(Arguments.of(new String[] {"--tee", "foo", "bar"}, optU, optionGroup, false, null, true, foobar, optT));
-
- lst.add(Arguments.of(new String[] {"-U"}, optU, optionGroup, false, null, false, null, optU));
- lst.add(Arguments.of(new String[] {"-U", "foo", "bar"}, optU, optionGroup, false, foobar, false, foobar, optU));
- lst.add(Arguments.of(new String[] {"--you"}, optU, optionGroup, false, null, false, null, optU));
- lst.add(Arguments.of(new String[] {"--you", "foo", "bar"}, optU, optionGroup, false, foobar, false, foobar, optU));
-
- return lst.stream();
- }
-
- /**
- * Tests the hasOption calls.
- * @param args the argument strings to parse.
- * @param opt the option to check for values with.
- * @param optionGroup the option group to check for values with.
- * @param optDep {@code true} if the opt is deprecated.
- * @param has {@code true} if the opt is present.
- * @param grpDep {@code true} if the group is deprecated.
- * @param hasGrp {@code true} if the group is present.
- * @param grpOpt the option that is expected to be processed by the group.
- * @throws ParseException on parsing error.
- */
@ParameterizedTest(name = "{0}, {1}")
- @MethodSource("createHasOptionParameters")
- public void hasOptionTest(final String[] args, final Option opt, final OptionGroup optionGroup, final boolean optDep,
- final boolean has, final boolean grpDep, final boolean hasGrp, final Option grpOpt) throws ParseException {
+ @MethodSource("createParsedOptionValueParameters")
+ public void getParsedOptionValueTest(final String[] args, final Option opt, final OptionGroup optionGroup, final boolean optDep,
+ final Integer optValue, final boolean grpDep, final Integer grpValue, final Option grpOpt) throws ParseException {
final Options options = new Options().addOptionGroup(optionGroup);
final List<Option> handler = new ArrayList<>();
final CommandLine commandLine = DefaultParser.builder().setDeprecatedHandler(handler::add).build().parse(options, args);
+ final Supplier<Integer> thinger = () -> 2;
final OptionGroup otherGroup = new OptionGroup().addOption(Option.builder("o").longOpt("other").hasArg().build())
.addOption(Option.builder().option("p").longOpt("part").hasArg().build());
final OptionGroup nullGroup = null;
+ final Integer thing = 2;
// test char option arg
- assertEquals(has, commandLine.hasOption(asChar(opt)));
+ assertEquals(optValue, commandLine.getParsedOptionValue(asChar(opt)));
+ checkHandler(optDep, handler, opt);
+
+ assertEquals(optValue == null ? thing : optValue, commandLine.getParsedOptionValue(asChar(opt), thing));
+ checkHandler(optDep, handler, opt);
+
+ assertEquals(optValue == null ? thing : optValue, commandLine.getParsedOptionValue(asChar(opt), thinger));
checkHandler(optDep, handler, opt);
// test short option arg
- assertEquals(has, commandLine.hasOption(opt.getOpt()));
+ assertEquals(optValue, commandLine.getParsedOptionValue(opt.getOpt()));
+ checkHandler(optDep, handler, opt);
+
+ assertEquals(optValue == null ? thing : optValue, commandLine.getParsedOptionValue(opt.getOpt(), thing));
+ checkHandler(optDep, handler, opt);
+
+ assertEquals(optValue == null ? thing : optValue, commandLine.getParsedOptionValue(opt.getOpt(), thinger));
checkHandler(optDep, handler, opt);
// test long option arg
- assertEquals(has, commandLine.hasOption(opt.getLongOpt()));
+ assertEquals(optValue, commandLine.getParsedOptionValue(opt.getLongOpt()));
+ checkHandler(optDep, handler, opt);
+
+ assertEquals(optValue == null ? thing : optValue, commandLine.getParsedOptionValue(opt.getLongOpt(), thing));
+ checkHandler(optDep, handler, opt);
+
+ assertEquals(optValue == null ? thing : optValue, commandLine.getParsedOptionValue(opt.getLongOpt(), thinger));
checkHandler(optDep, handler, opt);
+
// test Option arg
- assertEquals(has, commandLine.hasOption(opt));
+ assertEquals(optValue, commandLine.getParsedOptionValue(opt));
+ checkHandler(optDep, handler, opt);
+
+ assertEquals(optValue == null ? thing : optValue, commandLine.getParsedOptionValue(opt, thing));
+ checkHandler(optDep, handler, opt);
+
+ assertEquals(optValue == null ? thing : optValue, commandLine.getParsedOptionValue(opt, thinger));
checkHandler(optDep, handler, opt);
// test OptionGroup arg
- assertEquals(hasGrp, commandLine.hasOption(optionGroup));
+ assertEquals(grpValue, commandLine.getParsedOptionValue(optionGroup));
checkHandler(grpDep, handler, grpOpt);
- // test other group arg
- assertFalse(commandLine.hasOption(otherGroup));
+ assertEquals(grpValue == null ? thing : grpValue, commandLine.getParsedOptionValue(optionGroup, thing));
+ checkHandler(grpDep, handler, grpOpt);
+
+ assertEquals(grpValue == null ? thing : grpValue, commandLine.getParsedOptionValue(optionGroup, thinger));
+ checkHandler(grpDep, handler, grpOpt);
+
+ // test other Group arg
+ assertNull(commandLine.getParsedOptionValue(otherGroup));
+ checkHandler(false, handler, grpOpt);
+
+ assertEquals(thing, commandLine.getParsedOptionValue(otherGroup, thing));
checkHandler(false, handler, grpOpt);
+ assertEquals(thing, commandLine.getParsedOptionValue(otherGroup, thinger));
+ checkHandler(false, handler, grpOpt);
- // test null group arg
- assertFalse(commandLine.hasOption(nullGroup));
+ // test null Group arg
+ assertNull(commandLine.getParsedOptionValue(nullGroup));
+ checkHandler(false, handler, grpOpt);
+
+ assertEquals(thing, commandLine.getParsedOptionValue(nullGroup, thing));
+ checkHandler(false, handler, grpOpt);
+
+ assertEquals(thing, commandLine.getParsedOptionValue(nullGroup, thinger));
checkHandler(false, handler, grpOpt);
+
// test not an option
- assertFalse(commandLine.hasOption("Nope"));
+ assertNull(commandLine.getParsedOptionValue("Nope"));
+ checkHandler(false, handler, opt);
+
+ assertEquals(thing, commandLine.getParsedOptionValue("Nope", thing));
+ checkHandler(false, handler, opt);
+
+ assertEquals(thing, commandLine.getParsedOptionValue("Nope", thinger));
checkHandler(false, handler, opt);
}
@@ -704,189 +542,351 @@ public class CommandLineTest {
assertWritten(false, baos);
- // test short option arg
- assertEquals(has, commandLine.hasOption(opt.getOpt()));
+ // test short option arg
+ assertEquals(has, commandLine.hasOption(opt.getOpt()));
+ assertWritten(false, baos);
+
+ // test long option arg
+ assertEquals(has, commandLine.hasOption(opt.getLongOpt()));
+ assertWritten(false, baos);
+
+ // test Option arg
+ assertEquals(has, commandLine.hasOption(opt));
+ assertWritten(false, baos);
+
+ // test OptionGroup arg
+ assertEquals(hasGrp, commandLine.hasOption(optionGroup));
+ assertWritten(false, baos);
+
+ // test not an option
+ assertFalse(commandLine.hasOption("Nope"));
+ assertWritten(false, baos);
+ } finally {
+ System.setOut(ps);
+ }
+ }
+
+ /**
+ * Tests the hasOption calls.
+ * @param args the argument strings to parse.
+ * @param opt the option to check for values with.
+ * @param optionGroup the option group to check for values with.
+ * @param optDep {@code true} if the opt is deprecated.
+ * @param has {@code true} if the opt is present.
+ * @param grpDep {@code true} if the group is deprecated.
+ * @param hasGrp {@code true} if the group is present.
+ * @param grpOpt the option that is expected to be processed by the group.
+ * @throws ParseException on parsing error.
+ */
+ @ParameterizedTest(name = "{0}, {1}")
+ @MethodSource("createHasOptionParameters")
+ public void hasOptionTest(final String[] args, final Option opt, final OptionGroup optionGroup, final boolean optDep,
+ final boolean has, final boolean grpDep, final boolean hasGrp, final Option grpOpt) throws ParseException {
+ final Options options = new Options().addOptionGroup(optionGroup);
+ final List<Option> handler = new ArrayList<>();
+ final CommandLine commandLine = DefaultParser.builder().setDeprecatedHandler(handler::add).build().parse(options, args);
+ final OptionGroup otherGroup = new OptionGroup().addOption(Option.builder("o").longOpt("other").hasArg().build())
+ .addOption(Option.builder().option("p").longOpt("part").hasArg().build());
+ final OptionGroup nullGroup = null;
+
+ // test char option arg
+ assertEquals(has, commandLine.hasOption(asChar(opt)));
+ checkHandler(optDep, handler, opt);
+
+ // test short option arg
+ assertEquals(has, commandLine.hasOption(opt.getOpt()));
+ checkHandler(optDep, handler, opt);
+
+ // test long option arg
+ assertEquals(has, commandLine.hasOption(opt.getLongOpt()));
+ checkHandler(optDep, handler, opt);
+
+ // test Option arg
+ assertEquals(has, commandLine.hasOption(opt));
+ checkHandler(optDep, handler, opt);
+
+ // test OptionGroup arg
+ assertEquals(hasGrp, commandLine.hasOption(optionGroup));
+ checkHandler(grpDep, handler, grpOpt);
+
+ // test other group arg
+ assertFalse(commandLine.hasOption(otherGroup));
+ checkHandler(false, handler, grpOpt);
+
+
+ // test null group arg
+ assertFalse(commandLine.hasOption(nullGroup));
+ checkHandler(false, handler, grpOpt);
+
+ // test not an option
+ assertFalse(commandLine.hasOption("Nope"));
+ checkHandler(false, handler, opt);
+ }
+
+ @ParameterizedTest(name = "{0}, {1}")
+ @MethodSource("createOptionValueParameters")
+ public void noDeprecationHandlerTest(final String[] args, final Option opt, final OptionGroup optionGroup, final boolean optDep,
+ final String optValue, final boolean grpDep, final String grpValue, final Option grpOpt) throws ParseException {
+ final Options options = new Options().addOptionGroup(optionGroup);
+ final CommandLine commandLine = DefaultParser.builder().build().parse(options, args);
+ final Supplier<String> thinger = () -> "thing";
+ final Supplier<String> nullSupplier = null;
+ final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ final PrintStream ps = System.out;
+ try {
+ System.setOut(new PrintStream(baos));
+
+ final OptionGroup otherGroup = new OptionGroup().addOption(Option.builder("o").longOpt("other").hasArg().build())
+ .addOption(Option.builder().option("p").longOpt("part").hasArg().build());
+ final OptionGroup nullGroup = null;
+
+ // test char option
+ assertEquals(optValue, commandLine.getOptionValue(asChar(opt)));
+ assertWritten(optDep, baos);
+
+ assertEquals(optValue == null ? "thing" : optValue, commandLine.getOptionValue(asChar(opt), "thing"));
+ assertWritten(optDep, baos);
+
+ assertEquals(optValue == null ? "thing" : optValue, commandLine.getOptionValue(asChar(opt), thinger));
+ assertWritten(optDep, baos);
+
+ assertEquals(optValue, commandLine.getOptionValue(asChar(opt), nullSupplier));
+ assertWritten(optDep, baos);
+
+ // test short option arg
+ assertEquals(optValue, commandLine.getOptionValue(opt.getOpt()));
+ assertWritten(optDep, baos);
+
+ assertEquals(optValue == null ? "thing" : optValue, commandLine.getOptionValue(opt.getOpt(), "thing"));
+ assertWritten(optDep, baos);
+
+ assertEquals(optValue == null ? "thing" : optValue, commandLine.getOptionValue(opt.getOpt(), thinger));
+ assertWritten(optDep, baos);
+
+ assertEquals(optValue, commandLine.getOptionValue(opt.getOpt(), nullSupplier));
+ assertWritten(optDep, baos);
+
+ // test long option arg
+ assertEquals(optValue, commandLine.getOptionValue(opt.getLongOpt()));
+ assertWritten(optDep, baos);
+
+ assertEquals(optValue == null ? "thing" : optValue, commandLine.getOptionValue(opt.getLongOpt(), "thing"));
+ assertWritten(optDep, baos);
+
+ assertEquals(optValue == null ? "thing" : optValue, commandLine.getOptionValue(opt.getLongOpt(), thinger));
+ assertWritten(optDep, baos);
+
+ assertEquals(optValue, commandLine.getOptionValue(opt.getLongOpt(), nullSupplier));
+ assertWritten(optDep, baos);
+
+ // test Option arg
+ assertEquals(optValue, commandLine.getOptionValue(opt));
+ assertWritten(optDep, baos);
+
+ assertEquals(optValue == null ? "thing" : optValue, commandLine.getOptionValue(opt, "thing"));
+ assertWritten(optDep, baos);
+
+ assertEquals(optValue == null ? "thing" : optValue, commandLine.getOptionValue(opt, thinger));
+ assertWritten(optDep, baos);
+
+ assertEquals(optValue, commandLine.getOptionValue(opt, nullSupplier));
+ assertWritten(optDep, baos);
+
+ // test optionGroup arg
+ assertEquals(grpValue, commandLine.getOptionValue(optionGroup));
+ assertWritten(grpDep, baos);
+
+ assertEquals(grpValue == null ? "thing" : grpValue, commandLine.getOptionValue(optionGroup, "thing"));
+ assertWritten(grpDep, baos);
+
+ assertEquals(grpValue == null ? "thing" : grpValue, commandLine.getOptionValue(optionGroup, thinger));
+ assertWritten(grpDep, baos);
+
+ assertEquals(grpValue, commandLine.getOptionValue(optionGroup, nullSupplier));
+ assertWritten(grpDep, baos);
+
+ // test other group arg
+ assertNull(commandLine.getOptionValue(otherGroup));
+ assertWritten(false, baos);
+
+ assertEquals("thing", commandLine.getOptionValue(otherGroup, "thing"));
+ assertWritten(false, baos);
+
+ assertEquals("thing", commandLine.getOptionValue(otherGroup, thinger));
+ assertWritten(false, baos);
+
+ assertNull(commandLine.getOptionValue(otherGroup, nullSupplier));
+ assertWritten(false, baos);
+
+ // test null Group arg
+ assertNull(commandLine.getOptionValue(nullGroup));
+ assertWritten(false, baos);
+
+ assertEquals("thing", commandLine.getOptionValue(nullGroup, "thing"));
+ assertWritten(false, baos);
+
+ assertEquals("thing", commandLine.getOptionValue(nullGroup, thinger));
+ assertWritten(false, baos);
+
+ assertNull(commandLine.getOptionValue(nullGroup, nullSupplier));
assertWritten(false, baos);
- // test long option arg
- assertEquals(has, commandLine.hasOption(opt.getLongOpt()));
+ // test not an option
+ assertNull(commandLine.getOptionValue("Nope"));
assertWritten(false, baos);
- // test Option arg
- assertEquals(has, commandLine.hasOption(opt));
+ assertEquals("thing", commandLine.getOptionValue("Nope", "thing"));
assertWritten(false, baos);
- // test OptionGroup arg
- assertEquals(hasGrp, commandLine.hasOption(optionGroup));
+ assertEquals("thing", commandLine.getOptionValue("Nope", thinger));
assertWritten(false, baos);
- // test not an option
- assertFalse(commandLine.hasOption("Nope"));
+ assertNull(commandLine.getOptionValue("Nope", nullSupplier));
assertWritten(false, baos);
} finally {
System.setOut(ps);
}
}
- private static Stream<Arguments> createHasOptionParameters() throws ParseException {
- final List<Arguments> lst = new ArrayList<>();
- final Option optT = Option.builder().option("T").longOpt("tee").deprecated().optionalArg(true).build();
- final Option optU = Option.builder("U").longOpt("you").optionalArg(true).build();
- final OptionGroup optionGroup = new OptionGroup().addOption(optT).addOption(optU);
-
- final String[] foobar = { "foo", "bar" };
- // T set
- lst.add(Arguments.of(new String[] {"-T"}, optT, optionGroup, true, true, true, true, optT));
- lst.add(Arguments.of(new String[] {"-T", "foo"}, optT, optionGroup, true, true, true, true, optT));
- lst.add(Arguments.of(new String[] {"--tee"}, optT, optionGroup, true, true, true, true, optT));
- lst.add(Arguments.of(new String[] {"--tee", "foo"}, optT, optionGroup, true, true, true, true, optT));
-
- lst.add(Arguments.of(new String[] {"-U"}, optT, optionGroup, false, false, false, true, optU));
- lst.add(Arguments.of(new String[] {"-U", "foo", "bar"}, optT, optionGroup, false, false, false, true, optU));
- lst.add(Arguments.of(new String[] {"--you"}, optT, optionGroup, false, false, false, true, optU));
- lst.add(Arguments.of(new String[] {"--you", "foo", "bar"}, optT, optionGroup, false, false, false, true, optU));
+ @Test
+ public void testBadGetParsedOptionValue() throws Exception {
+ final Options options = new Options();
+ options.addOption(Option.builder("i").hasArg().type(Number.class).build());
+ options.addOption(Option.builder("c").hasArg().converter(s -> Count.valueOf(s.toUpperCase())).build());
- // U set
- lst.add(Arguments.of(new String[] {"-T"}, optU, optionGroup, false, false, true, true, optT));
- lst.add(Arguments.of(new String[] {"-T", "foo", "bar"}, optU, optionGroup, false, false, true, true, optT));
- lst.add(Arguments.of(new String[] {"--tee"}, optU, optionGroup, false, false, true, true, optT));
- lst.add(Arguments.of(new String[] {"--tee", "foo", "bar"}, optU, optionGroup, false, false, true, true, optT));
- lst.add(Arguments.of(new String[] {"-U"}, optU, optionGroup, false, true, false, true, optU));
- lst.add(Arguments.of(new String[] {"-U", "foo", "bar"}, optU, optionGroup, false, true, false, true, optU));
- lst.add(Arguments.of(new String[] {"--you"}, optU, optionGroup, false, true, false, true, optU));
- lst.add(Arguments.of(new String[] {"--you", "foo", "bar"}, optU, optionGroup, false, true, false, true, optU));
+ final CommandLineParser parser = new DefaultParser();
+ final CommandLine cmd = parser.parse(options, new String[] {"-i", "foo", "-c", "bar"});
- return lst.stream();
+ assertEquals(NumberFormatException.class, assertThrows(ParseException.class, () -> cmd.getParsedOptionValue("i")).getCause().getClass());
+ assertEquals(IllegalArgumentException.class, assertThrows(ParseException.class, () -> cmd.getParsedOptionValue("c")).getCause().getClass());
}
- @ParameterizedTest(name = "{0}, {1}")
- @MethodSource("createParsedOptionValueParameters")
- public void getParsedOptionValueTest(final String[] args, final Option opt, final OptionGroup optionGroup, final boolean optDep,
- final Integer optValue, final boolean grpDep, final Integer grpValue, final Option grpOpt) throws ParseException {
- final Options options = new Options().addOptionGroup(optionGroup);
- final List<Option> handler = new ArrayList<>();
- final CommandLine commandLine = DefaultParser.builder().setDeprecatedHandler(handler::add).build().parse(options, args);
- final Supplier<Integer> thinger = () -> 2;
- final OptionGroup otherGroup = new OptionGroup().addOption(Option.builder("o").longOpt("other").hasArg().build())
- .addOption(Option.builder().option("p").longOpt("part").hasArg().build());
- final OptionGroup nullGroup = null;
- final Integer thing = 2;
-
- // test char option arg
- assertEquals(optValue, commandLine.getParsedOptionValue(asChar(opt)));
- checkHandler(optDep, handler, opt);
-
- assertEquals(optValue == null ? thing : optValue, commandLine.getParsedOptionValue(asChar(opt), thing));
- checkHandler(optDep, handler, opt);
-
- assertEquals(optValue == null ? thing : optValue, commandLine.getParsedOptionValue(asChar(opt), thinger));
- checkHandler(optDep, handler, opt);
-
- // test short option arg
- assertEquals(optValue, commandLine.getParsedOptionValue(opt.getOpt()));
- checkHandler(optDep, handler, opt);
-
- assertEquals(optValue == null ? thing : optValue, commandLine.getParsedOptionValue(opt.getOpt(), thing));
- checkHandler(optDep, handler, opt);
-
- assertEquals(optValue == null ? thing : optValue, commandLine.getParsedOptionValue(opt.getOpt(), thinger));
- checkHandler(optDep, handler, opt);
-
- // test long option arg
- assertEquals(optValue, commandLine.getParsedOptionValue(opt.getLongOpt()));
- checkHandler(optDep, handler, opt);
-
- assertEquals(optValue == null ? thing : optValue, commandLine.getParsedOptionValue(opt.getLongOpt(), thing));
- checkHandler(optDep, handler, opt);
-
- assertEquals(optValue == null ? thing : optValue, commandLine.getParsedOptionValue(opt.getLongOpt(), thinger));
- checkHandler(optDep, handler, opt);
+ @Test
+ public void testBuilder() {
+ final CommandLine.Builder builder = new CommandLine.Builder();
+ builder.addArg("foo").addArg("bar");
+ builder.addOption(Option.builder("T").build());
+ final CommandLine cmd = builder.build();
- // test Option arg
- assertEquals(optValue, commandLine.getParsedOptionValue(opt));
- checkHandler(optDep, handler, opt);
-
- assertEquals(optValue == null ? thing : optValue, commandLine.getParsedOptionValue(opt, thing));
- checkHandler(optDep, handler, opt);
+ assertEquals("foo", cmd.getArgs()[0]);
+ assertEquals("bar", cmd.getArgList().get(1));
+ assertEquals("T", cmd.getOptions()[0].getOpt());
+ }
- assertEquals(optValue == null ? thing : optValue, commandLine.getParsedOptionValue(opt, thinger));
- checkHandler(optDep, handler, opt);
+ @Test
+ public void testBuilderNullArgs() {
+ final CommandLine.Builder builder = new CommandLine.Builder();
+ builder.addArg(null).addArg(null);
+ builder.addOption(Option.builder("T").build());
+ final CommandLine cmd = builder.build();
- // test OptionGroup arg
- assertEquals(grpValue, commandLine.getParsedOptionValue(optionGroup));
- checkHandler(grpDep, handler, grpOpt);
+ assertEquals(0, cmd.getArgs().length);
+ assertEquals("T", cmd.getOptions()[0].getOpt());
+ }
- assertEquals(grpValue == null ? thing : grpValue, commandLine.getParsedOptionValue(optionGroup, thing));
- checkHandler(grpDep, handler, grpOpt);
+ @Test
+ public void testBuilderNullOption() {
+ final CommandLine.Builder builder = new CommandLine.Builder();
+ builder.addArg("foo").addArg("bar");
+ builder.addOption(null);
+ builder.addOption(null);
+ builder.addOption(null);
+ final CommandLine cmd = builder.build();
- assertEquals(grpValue == null ? thing : grpValue, commandLine.getParsedOptionValue(optionGroup, thinger));
- checkHandler(grpDep, handler, grpOpt);
+ assertEquals("foo", cmd.getArgs()[0]);
+ assertEquals("bar", cmd.getArgList().get(1));
+ assertEquals(0, cmd.getOptions().length);
+ }
- // test other Group arg
- assertNull(commandLine.getParsedOptionValue(otherGroup));
- checkHandler(false, handler, grpOpt);
+ @Test
+ public void testGetOptionProperties() throws Exception {
+ final String[] args = {"-Dparam1=value1", "-Dparam2=value2", "-Dparam3", "-Dparam4=value4", "-D", "--property", "foo=bar"};
- assertEquals(thing, commandLine.getParsedOptionValue(otherGroup, thing));
- checkHandler(false, handler, grpOpt);
+ final Options options = new Options();
+ options.addOption(Option.builder("D").valueSeparator().optionalArg(true).numberOfArgs(2).build());
+ options.addOption(Option.builder().valueSeparator().numberOfArgs(2).longOpt("property").build());
- assertEquals(thing, commandLine.getParsedOptionValue(otherGroup, thinger));
- checkHandler(false, handler, grpOpt);
+ final Parser parser = new GnuParser();
+ final CommandLine cl = parser.parse(options, args);
- // test null Group arg
- assertNull(commandLine.getParsedOptionValue(nullGroup));
- checkHandler(false, handler, grpOpt);
+ final Properties props = cl.getOptionProperties("D");
+ assertNotNull(props, "null properties");
+ assertEquals(4, props.size(), "number of properties in " + props);
+ assertEquals("value1", props.getProperty("param1"), "property 1");
+ assertEquals("value2", props.getProperty("param2"), "property 2");
+ assertEquals("true", props.getProperty("param3"), "property 3");
+ assertEquals("value4", props.getProperty("param4"), "property 4");
- assertEquals(thing, commandLine.getParsedOptionValue(nullGroup, thing));
- checkHandler(false, handler, grpOpt);
+ assertEquals("bar", cl.getOptionProperties("property").getProperty("foo"), "property with long format");
+ }
- assertEquals(thing, commandLine.getParsedOptionValue(nullGroup, thinger));
- checkHandler(false, handler, grpOpt);
+ @Test
+ public void testGetOptionPropertiesWithOption() throws Exception {
+ final String[] args = {"-Dparam1=value1", "-Dparam2=value2", "-Dparam3", "-Dparam4=value4", "-D", "--property", "foo=bar"};
+ final Options options = new Options();
+ final Option optionD = Option.builder("D").valueSeparator().numberOfArgs(2).optionalArg(true).build();
+ final Option optionProperty = Option.builder().valueSeparator().numberOfArgs(2).longOpt("property").build();
+ options.addOption(optionD);
+ options.addOption(optionProperty);
- // test not an option
- assertNull(commandLine.getParsedOptionValue("Nope"));
- checkHandler(false, handler, opt);
+ final Parser parser = new GnuParser();
+ final CommandLine cl = parser.parse(options, args);
- assertEquals(thing, commandLine.getParsedOptionValue("Nope", thing));
- checkHandler(false, handler, opt);
+ final Properties props = cl.getOptionProperties(optionD);
+ assertNotNull(props, "null properties");
+ assertEquals(4, props.size(), "number of properties in " + props);
+ assertEquals("value1", props.getProperty("param1"), "property 1");
+ assertEquals("value2", props.getProperty("param2"), "property 2");
+ assertEquals("true", props.getProperty("param3"), "property 3");
+ assertEquals("value4", props.getProperty("param4"), "property 4");
- assertEquals(thing, commandLine.getParsedOptionValue("Nope", thinger));
- checkHandler(false, handler, opt);
+ assertEquals("bar", cl.getOptionProperties(optionProperty).getProperty("foo"), "property with long format");
}
- private static Stream<Arguments> createParsedOptionValueParameters() throws ParseException {
- final List<Arguments> lst = new ArrayList<>();
- final Option optT = Option.builder().option("T").longOpt("tee").deprecated().type(Integer.class).optionalArg(true).build();
- final Option optU = Option.builder("U").longOpt("you").type(Integer.class).optionalArg(true).build();
- final OptionGroup optionGroup = new OptionGroup().addOption(optT).addOption(optU);
- final Integer expected = Integer.valueOf(1);
+ @Test
+ public void testGetOptionsBuilder() {
+ final CommandLine cmd = CommandLine.builder().build();
+ assertNotNull(cmd.getOptions());
+ assertEquals(0, cmd.getOptions().length);
- // T set
- lst.add(Arguments.of(new String[] {"-T"}, optT, optionGroup, true, null, true, null, optT));
- lst.add(Arguments.of(new String[] {"-T", "1"}, optT, optionGroup, true, expected, true, expected, optT));
- lst.add(Arguments.of(new String[] {"--tee"}, optT, optionGroup, true, null, true, null, optT));
- lst.add(Arguments.of(new String[] {"--tee", "1"}, optT, optionGroup, true, expected, true, expected, optT));
+ cmd.addOption(null);
+ cmd.addOption(new Option("a", null));
+ cmd.addOption(new Option("b", null));
+ cmd.addOption(new Option("c", null));
- lst.add(Arguments.of(new String[] {"-U"}, optT, optionGroup, false, null, false, null, optU));
- lst.add(Arguments.of(new String[] {"-U", "1"}, optT, optionGroup, false, null, false, expected, optU));
- lst.add(Arguments.of(new String[] {"--you"}, optT, optionGroup, false, null, false, null, optU));
- lst.add(Arguments.of(new String[] {"--you", "1"}, optT, optionGroup, false, null, false, expected, optU));
+ assertEquals(3, cmd.getOptions().length);
+ }
+ @Test
+ public void testGetOptionsCtor() {
+ final CommandLine cmd = new CommandLine();
+ assertNotNull(cmd.getOptions());
+ assertEquals(0, cmd.getOptions().length);
- // U set
- lst.add(Arguments.of(new String[] {"-T"}, optU, optionGroup, false, null, true, null, optT));
- lst.add(Arguments.of(new String[] {"-T", "1"}, optU, optionGroup, false, null, true, expected, optT));
- lst.add(Arguments.of(new String[] {"--tee"}, optU, optionGroup, false, null, true, null, optT));
- lst.add(Arguments.of(new String[] {"--tee", "1"}, optU, optionGroup, false, null, true, expected, optT));
+ cmd.addOption(new Option("a", null));
+ cmd.addOption(new Option("b", null));
+ cmd.addOption(new Option("c", null));
+ cmd.addOption(null);
- lst.add(Arguments.of(new String[] {"-U"}, optU, optionGroup, false, null, false, null, optU));
- lst.add(Arguments.of(new String[] {"-U", "1"}, optU, optionGroup, false, expected, false, expected, optU));
- lst.add(Arguments.of(new String[] {"--you"}, optU, optionGroup, false, null, false, null, optU));
- lst.add(Arguments.of(new String[] {"--you", "1"}, optU, optionGroup, false, expected, false, expected, optU));
+ assertEquals(3, cmd.getOptions().length);
+ }
- return lst.stream();
+ @Test
+ public void testNullOption() throws Exception {
+ final Options options = new Options();
+ final Option optI = Option.builder("i").hasArg().type(Number.class).build();
+ final Option optF = Option.builder("f").hasArg().build();
+ options.addOption(optI);
+ options.addOption(optF);
+ final CommandLineParser parser = new DefaultParser();
+ final CommandLine cmd = parser.parse(options, new String[] {"-i", "123", "-f", "foo"});
+ assertNull(cmd.getOptionValue((Option) null));
+ assertNull(cmd.getParsedOptionValue((Option) null));
+ assertNull(cmd.getOptionValue((OptionGroup) null));
+ assertNull(cmd.getParsedOptionValue((OptionGroup) null));
}
}