/** * Creates an instance of {@link CLI} using the default implementation. * * @param name the name of the CLI (must not be {@code null}) * @return the created instance of {@link CLI} */ static CLI create(String name) { return new DefaultCLI().setName(name); }
@Before public void setUp() { cli = new DefaultCLI().setName("test"); }
@Before public void setUp() { cli = new DefaultCLI().setName("test"); }
@Test public void testWhenThereAreNoDeclaredArguments() { CLI cli = new DefaultCLI().setName("test"); CommandLine cl = cli.parse(Arrays.asList("a", "b", "c")); assertThat(cl.allArguments()).containsExactly("a", "b", "c"); }
@Test public void testOptionsWithChoicesUsingEnum() { CLI cli = new DefaultCLI().setName("test"); cli.addOption(new TypedOption<RetentionPolicy>().setLongName("retention").setType(RetentionPolicy.class)); StringBuilder builder = new StringBuilder(); cli.usage(builder); assertThat(builder.toString()) .contains("[--retention {CLASS, RUNTIME, SOURCE}]") // Usage line .contains(" --retention {CLASS, RUNTIME, SOURCE}"); // options CommandLine line = cli.parse(Arrays.asList("--retention", "CLASS")); assertThat((RetentionPolicy) line.getOptionValue("retention")).isEqualTo(RetentionPolicy.CLASS); try { cli.parse(Collections.singletonList("--retention=nope")); fail("Invalid value expected"); } catch (InvalidValueException e) { // OK } }
@Test public void testOptionsWithChoices() { CLI cli = new DefaultCLI().setName("test"); cli.addOption(new Option().setLongName("color").addChoice("red").addChoice("blue").addChoice("green")); StringBuilder builder = new StringBuilder(); cli.usage(builder); assertThat(builder.toString()) .contains("[--color {blue, green, red}]") // Usage line .contains(" --color {blue, green, red}"); // options CommandLine line = cli.parse(Arrays.asList("--color", "blue")); assertThat((String) line.getOptionValue("color")).isEqualTo("blue"); try { cli.parse(Collections.singletonList("--color=black")); fail("Invalid value expected"); } catch (InvalidValueException e) { // OK } }
@Test public void testWithMultipleArgumentReceivingSingleValues() { CLI cli = new DefaultCLI().setName("test"); cli.addArgument(new Argument().setIndex(0)); cli.addArgument(new Argument().setIndex(1).setMultiValued(true)); CommandLine cl = cli.parse(Arrays.asList("a", "b")); assertThat((String) cl.getArgumentValue(0)).isEqualTo("a"); assertThat(cl.getArgumentValues(1)).containsExactly("b"); assertThat((String) cl.getArgumentValue(1)).isEqualTo("b"); }
@Test public void testWithArgumentReceivingMultipleValues() { CLI cli = new DefaultCLI().setName("test"); cli.addArgument(new Argument().setIndex(0).setArgName("arg").setDescription("argument1")); cli.addArgument(new Argument().setIndex(1).setMultiValued(true).setArgName("m").setDescription("multiple arg")); CommandLine cl = cli.parse(Arrays.asList("a", "b", "c")); assertThat((String) cl.getArgumentValue(0)).isEqualTo("a"); assertThat(cl.getArgumentValues(1)).containsExactly("b", "c"); assertThat((String) cl.getArgumentValue(1)).isEqualTo("b"); StringBuilder builder = new StringBuilder(); cli.usage(builder); assertThat(builder.toString()).contains("test arg m..."); }
@Test public void testOptionsWithChoicesAndDefault() { CLI cli = new DefaultCLI().setName("test"); cli.addOption(new Option().setLongName("color").addChoice("red").addChoice("blue").addChoice("green") .setDefaultValue("green")); StringBuilder builder = new StringBuilder(); cli.usage(builder); assertThat(builder.toString()) .contains("[--color {blue, green, red}]") // Usage line .contains(" --color {blue, green, red}"); // options CommandLine line = cli.parse(Arrays.asList("--color", "blue")); assertThat((String) line.getOptionValue("color")).isEqualTo("blue"); try { cli.parse(Collections.singletonList("--color=black")); fail("Invalid value expected"); } catch (InvalidValueException e) { // OK } line = cli.parse(Collections.emptyList()); assertThat((String) line.getOptionValue("color")).isEqualTo("green"); }
@Test public void testWithMultipleRequiredArgument() { CLI cli = new DefaultCLI().setName("test"); cli.addArgument(new Argument().setIndex(0)); cli.addArgument(new Argument().setIndex(1).setMultiValued(true).setRequired(true)); CommandLine cl = cli.parse(Arrays.asList("a", "b", "c")); assertThat((String) cl.getArgumentValue(0)).isEqualTo("a"); assertThat(cl.getArgumentValues(1)).containsExactly("b", "c"); assertThat((String) cl.getArgumentValue(1)).isEqualTo("b"); cl = cli.parse(Arrays.asList("a", "b")); assertThat((String) cl.getArgumentValue(0)).isEqualTo("a"); assertThat(cl.getArgumentValues(1)).containsExactly("b"); assertThat((String) cl.getArgumentValue(1)).isEqualTo("b"); try { cli.parse(Collections.singletonList("a")); fail("required argument not fultilled"); } catch (MissingValueException e) { // OK. } }
@Test public void testWithList() throws CLIException { CLI cli = new DefaultCLI().setName("test"); Option[] options = new Option[]{ new TypedOption<String>().setShortName("f").setLongName("file") .setParsedAsList(true).setType(String.class) }; cli.addOptions(Arrays.asList(options)); CommandLine evaluated = cli.parse(Collections.singletonList("-f=hello.txt,hello2.txt")); assertThat(evaluated.cli().getOptions()).hasSize(1); assertThat((String) evaluated.getOptionValue("file")).isEqualTo("hello.txt,hello2.txt"); assertThat(evaluated.getOptionValues("f")) .containsExactly("hello.txt", "hello2.txt"); }
@Test public void testThatArgumentIndexCanBeGenerated() { CLI cli = new DefaultCLI().setName("test"); cli.addArgument(new Argument()); cli.addArgument(new Argument()); cli.addArgument(new Argument().setMultiValued(true)); CommandLine line = cli.parse(Arrays.asList("a", "b", "c", "d")); assertThat((String) line.getArgumentValue(0)).isEqualToIgnoringCase("a"); assertThat((String) line.getArgumentValue(1)).isEqualToIgnoringCase("b"); assertThat(line.getArgumentValues(2)).containsExactly("c", "d"); }
@Test public void testNegativeNumbers() throws CLIException { CLI cli = new DefaultCLI().setName("test"); Option[] options = new Option[]{ new TypedOption<Double>().setLongName("num").setSingleValued(true) .setType(Double.class) }; cli.addOptions(Arrays.asList(options)); CommandLine evaluated = cli.parse(Arrays.asList("--num", "-1.5")); assertThat(evaluated.cli().getOptions()).hasSize(1); assertThat(cli.getArguments()).isEmpty(); assertThat((double) evaluated.getOptionValue("num")).isEqualTo(-1.5d); evaluated = cli.parse(Collections.singletonList("--num=-1.5")); assertThat(evaluated.cli().getOptions()).hasSize(1); assertThat(cli.getArguments()).isEmpty(); assertThat((double) evaluated.getOptionValue("num")).isEqualTo(-1.5d); }
@Test public void testThatArgumentIndexCanBeGeneratedWithPartiallyNumberedArguments() { CLI cli = new DefaultCLI().setName("test"); cli.addArgument(new Argument()); cli.addArgument(new Argument().setIndex(1)); cli.addArgument(new Argument().setMultiValued(true)); CommandLine line = cli.parse(Arrays.asList("a", "b", "c", "d")); assertThat((String) line.getArgumentValue(0)).isEqualToIgnoringCase("a"); assertThat((String) line.getArgumentValue(1)).isEqualToIgnoringCase("b"); assertThat(line.getArgumentValues(2)).containsExactly("c", "d"); }
@Test public void testWithDashD() throws CLIException { CLI cli = new DefaultCLI().setName("test"); Option[] options = new Option[]{ new TypedOption<String>().setShortName("D").setLongName("systemProperty") .setMultiValued(true).setType(String.class), new TypedOption<Boolean>().setShortName("F").setLongName("flag") .setFlag(true) .setType(Boolean.class) }; cli.addOptions(Arrays.asList(options)); CommandLine evaluated = cli.parse(Arrays.asList("-Dx=y", "-F")); assertThat(evaluated.cli().getOptions()).hasSize(2); assertThat(evaluated.getRawValueForOption(evaluated.cli().getOption("systemProperty"))) .isEqualTo("x=y"); assertThat((boolean) evaluated.getOptionValue("flag")).isTrue(); }
public static CLI define() { return new DefaultCLI().setName("bye").addOption(new TypedOption<String>() .setType(String.class) .setRequired(true) .setShortName("n") .setSingleValued(true)) .setSummary("A command saying goodbye."); }
@Test(expected = CLIException.class) public void testThatNonUniqueArgumentIndexAreDetected() { CLI cli = new DefaultCLI().setName("test"); cli.addArgument(new Argument().setIndex(0)); cli.addArgument(new Argument().setIndex(1)); cli.addArgument(new Argument().setIndex(1)); // conflict cli.parse(Arrays.asList("a", "b", "c")); }
@Test(expected = CLIException.class) public void testThatOnlyTheLastArgumentCanBeMultivalued() { CLI cli = new DefaultCLI().setName("test"); cli.addArgument(new Argument().setIndex(0)); cli.addArgument(new Argument().setIndex(1).setMultiValued(true)); cli.addArgument(new Argument().setIndex(2)); cli.parse(Arrays.asList("a", "b", "c", "d")); }
@Test(expected = CLIException.class) public void testThatOnlyOneArgumentCanBeMultivalued() { CLI cli = new DefaultCLI().setName("test"); cli.addArgument(new Argument().setIndex(0)); cli.addArgument(new Argument().setIndex(1).setMultiValued(true)); cli.addArgument(new Argument().setIndex(2).setMultiValued(true)); cli.parse(Arrays.asList("a", "b", "c", "d")); }
@Before public void setUp() { cli = new DefaultCLI(); cli.setName("test").setHidden(false).setDescription("A test command"); cli.addOption(new TypedOption<Boolean>().setType(Boolean.class).setShortName("a").setLongName("enable-a") .setFlag(true).setDescription("turn [a] on or off")); cli.addOption(new TypedOption<String>().setType(String.class).setShortName("b").setLongName("bfile").setSingleValued(true) .setDescription("set the value of [b]")); cli.addOption(new TypedOption<Boolean>().setType(Boolean.class).setShortName("c").setLongName("copt").setSingleValued(false) .setDescription("turn [c] on or off")); }