@Test public void testConcatenatedOptions() throws CLIException { CLI cli = new DefaultCLI().setName("test"); Option[] options = new Option[]{ new TypedOption<Boolean>().setShortName("d").setFlag(true) .setType(Boolean.class), new TypedOption<Boolean>().setShortName("e").setFlag(true) .setType(Boolean.class), new TypedOption<Boolean>().setShortName("f").setFlag(true) .setType(Boolean.class) }; cli.addOptions(Arrays.asList(options)); CommandLine evaluated = cli.parse(Arrays.asList("-d", "-e", "-f")); assertThat((boolean) evaluated.getOptionValue("d")).isTrue(); assertThat((boolean) evaluated.getOptionValue("e")).isTrue(); assertThat((boolean) evaluated.getOptionValue("f")).isTrue(); evaluated = cli.parse(Collections.singletonList("-de")); assertThat((boolean) evaluated.getOptionValue("d")).isTrue(); assertThat((boolean) evaluated.getOptionValue("e")).isTrue(); assertThat((boolean) evaluated.getOptionValue("f")).isFalse(); evaluated = cli.parse(Collections.singletonList("-def")); assertThat((boolean) evaluated.getOptionValue("d")).isTrue(); assertThat((boolean) evaluated.getOptionValue("e")).isTrue(); assertThat((boolean) evaluated.getOptionValue("f")).isTrue(); }
new TypedOption<Boolean>().setType(Boolean.TYPE) .setShortName("f").setLongName("flag") .setFlag(true).setSingleValued(true), new TypedOption<Boolean>().setType(Boolean.TYPE) .setShortName("f2").setLongName("flag2") .setFlag(true).setSingleValued(true), new TypedOption<Boolean>().setType(Boolean.TYPE) .setShortName("f3").setLongName("flag3") .setFlag(true) };
@Test public void testRequiredOptions() throws CLIException { Option[] options = new Option[]{ new TypedOption<Boolean>().setShortName("f").setLongName("flag") .setType(Boolean.class).setRequired(true).setFlag(true) }; cli.addOptions(Arrays.asList(options)); cli.parse(Collections.singletonList("-f")); }
.setSingleValued(option.acceptValue()) .setArgName(option.argName()) .setFlag(option.flag()) .setHelp(option.help()) .setRequired(option.required());
@Test public void testAmbiguousLongWithoutEqualSingleDash() throws Exception { String[] args = new String[]{"-b", "-foobar"}; TypedOption<String> f = new TypedOption<String>().setType(String.class).setLongName("foo").setShortName("f").setSingleValued(true); TypedOption<Boolean> b = new TypedOption<Boolean>().setType(Boolean.class).setLongName("bar").setShortName("b") .setFlag(true); cli.removeOption("b").addOption(f).addOption(b); CommandLine evaluated = cli.parse(Arrays.asList(args)); assertThat((boolean) evaluated.getOptionValue("bar")).isTrue(); assertThat((String) evaluated.getOptionValue("foo")).isEqualTo("bar"); }
@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(); }
@Test public void testLongWithUnexpectedArgument1() throws Exception { String[] args = new String[]{"--foo=bar"}; TypedOption<Boolean> f = new TypedOption<Boolean>().setLongName("foo").setShortName("f") .setType(Boolean.class) .setSingleValued(false) // No value accepted here. .setFlag(true); cli.addOption(f); try { CommandLine evaluated = cli.parse(Arrays.asList(args)); fail("Exception expected"); } catch (InvalidValueException e) { assertThat(e.getOption().getShortName()).isEqualToIgnoringCase("f"); assertThat(e.getValue()).isEqualToIgnoringCase("bar"); } }
.setSingleValued(true).setDefaultValue("1"), new TypedOption<Boolean>().setLongName("worker").setType(Boolean.class) .setFlag(true), new TypedOption<String>().setLongName("classpath").setShortName("cp") .setListSeparator(File.pathSeparator) .setType(String.class).setSingleValued(true), new TypedOption<Boolean>().setLongName("cluster").setType(Boolean.class) .setFlag(true), new TypedOption<Integer>().setLongName("cluster-port").setType(Integer.class) .setSingleValued(true), .setSingleValued(true), new TypedOption<Boolean>().setLongName("ha").setType(Boolean.class) .setFlag(true).setSingleValued(true), new TypedOption<Integer>().setLongName("quorum").setType(Integer.class) .setSingleValued(true),
@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")); }
@Test public void testConcatenatedOptions() throws CLIException { CLI cli = new DefaultCLI().setName("test"); Option[] options = new Option[]{ new TypedOption<Boolean>().setShortName("d").setFlag(true) .setType(Boolean.class), new TypedOption<Boolean>().setShortName("e").setFlag(true) .setType(Boolean.class), new TypedOption<Boolean>().setShortName("f").setFlag(true) .setType(Boolean.class) }; cli.addOptions(Arrays.asList(options)); CommandLine evaluated = cli.parse(Arrays.asList("-d", "-e", "-f")); assertThat((boolean) evaluated.getOptionValue("d")).isTrue(); assertThat((boolean) evaluated.getOptionValue("e")).isTrue(); assertThat((boolean) evaluated.getOptionValue("f")).isTrue(); evaluated = cli.parse(Collections.singletonList("-de")); assertThat((boolean) evaluated.getOptionValue("d")).isTrue(); assertThat((boolean) evaluated.getOptionValue("e")).isTrue(); assertThat((boolean) evaluated.getOptionValue("f")).isFalse(); evaluated = cli.parse(Collections.singletonList("-def")); assertThat((boolean) evaluated.getOptionValue("d")).isTrue(); assertThat((boolean) evaluated.getOptionValue("e")).isTrue(); assertThat((boolean) evaluated.getOptionValue("f")).isTrue(); }
@Test public void testRequiredOptions() throws CLIException { Option[] options = new Option[]{ new TypedOption<Boolean>().setShortName("f").setLongName("flag") .setType(Boolean.class).setRequired(true).setFlag(true) }; cli.addOptions(Arrays.asList(options)); cli.parse(Collections.singletonList("-f")); }
new TypedOption<Boolean>().setType(Boolean.TYPE) .setShortName("f").setLongName("flag") .setFlag(true).setSingleValued(true), new TypedOption<Boolean>().setType(Boolean.TYPE) .setShortName("f2").setLongName("flag2") .setFlag(true).setSingleValued(true), new TypedOption<Boolean>().setType(Boolean.TYPE) .setShortName("f3").setLongName("flag3") .setFlag(true) };
.setSingleValued(option.acceptValue()) .setArgName(option.argName()) .setFlag(option.flag()) .setHelp(option.help()) .setRequired(option.required());
@Test public void testAmbiguousLongWithoutEqualSingleDash() throws Exception { String[] args = new String[]{"-b", "-foobar"}; TypedOption<String> f = new TypedOption<String>().setType(String.class).setLongName("foo").setShortName("f").setSingleValued(true); TypedOption<Boolean> b = new TypedOption<Boolean>().setType(Boolean.class).setLongName("bar").setShortName("b") .setFlag(true); cli.removeOption("b").addOption(f).addOption(b); CommandLine evaluated = cli.parse(Arrays.asList(args)); assertThat((boolean) evaluated.getOptionValue("bar")).isTrue(); assertThat((String) evaluated.getOptionValue("foo")).isEqualTo("bar"); }
@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(); }
@Test public void testLongWithUnexpectedArgument1() throws Exception { String[] args = new String[]{"--foo=bar"}; TypedOption<Boolean> f = new TypedOption<Boolean>().setLongName("foo").setShortName("f") .setType(Boolean.class) .setSingleValued(false) // No value accepted here. .setFlag(true); cli.addOption(f); try { CommandLine evaluated = cli.parse(Arrays.asList(args)); fail("Exception expected"); } catch (InvalidValueException e) { assertThat(e.getOption().getShortName()).isEqualToIgnoringCase("f"); assertThat(e.getValue()).isEqualToIgnoringCase("bar"); } }
.setSingleValued(true).setDefaultValue("1"), new TypedOption<Boolean>().setLongName("worker").setType(Boolean.class) .setFlag(true), new TypedOption<String>().setLongName("classpath").setShortName("cp") .setListSeparator(File.pathSeparator) .setType(String.class).setSingleValued(true), new TypedOption<Boolean>().setLongName("cluster").setType(Boolean.class) .setFlag(true), new TypedOption<Integer>().setLongName("cluster-port").setType(Integer.class) .setSingleValued(true), .setSingleValued(true), new TypedOption<Boolean>().setLongName("ha").setType(Boolean.class) .setFlag(true).setSingleValued(true), new TypedOption<Integer>().setLongName("quorum").setType(Integer.class) .setSingleValued(true),
@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")); }