@Test public void testUsageComputationWhenUsingOnlyLongOption() { final CLI cli = CLI.create("test") .addOption(new Option().setLongName("file").setDescription("a file")); StringBuilder builder = new StringBuilder(); cli.usage(builder); assertThat(builder.toString()) .contains("test [--file <value>]") .contains(" --file <value> a file"); }
@Test public void testUsageComputationWhenUsingOnlyShortOption() { final CLI cli = CLI.create("test") .addOption(new Option().setShortName("f").setDescription("a file")); StringBuilder builder = new StringBuilder(); cli.usage(builder); assertThat(builder.toString()) .contains("test [-f <value>]") .contains(" -f <value> a file"); }
@Test public void testUsageComputationWhenUsingOnlyFlagShortOption() { final CLI cli = CLI.create("test") .addOption(new Option().setShortName("f").setDescription("turn on/off").setFlag(true)); StringBuilder builder = new StringBuilder(); cli.usage(builder); assertThat(builder.toString()) .contains("test [-f]") .contains("Options and Arguments") .contains(" -f turn on/off"); }
@Test public void testUsageComputationWhenUsingShortAndLongOption() { final CLI cli = CLI.create("test") .addOption(new Option().setLongName("file").setShortName("f").setDescription("a file")); StringBuilder builder = new StringBuilder(); cli.usage(builder); assertThat(builder.toString()) .contains("test [-f <value>]") .contains(" -f,--file <value> a file"); }
@Test public void testUsageComputationWhenUsingOnlyFlagLongOption() { final CLI cli = CLI.create("test") .addOption(new Option().setLongName("flag").setDescription("turn on/off").setFlag(true)); StringBuilder builder = new StringBuilder(); cli.usage(builder); assertThat(builder.toString()) .contains("test [--flag]") .contains(" --flag turn on/off"); }
@Test public void testUsageComputationWhenUsingShortAndLongFlagOption() { final CLI cli = CLI.create("test") .addOption(new Option().setLongName("flag").setShortName("f").setDescription("turn on/off").setFlag(true)); StringBuilder builder = new StringBuilder(); cli.usage(builder); assertThat(builder.toString()) .contains("test [-f]") .contains(" -f,--flag turn on/off"); }
@Test public void testFlag() { final CLI cli = CLI.create("test") .addOption(new Option().setShortName("f").setFlag(true)) .addOption(new Option().setShortName("x")); final CommandLine evaluated = cli.parse(Arrays.asList("-f", "-x", "foo")); assertThat(evaluated.isFlagEnabled("f")).isTrue(); assertThat((String) evaluated.getOptionValue("x")).isEqualToIgnoringCase("foo"); }
@Test public void testMissingFlag() { final CLI cli = CLI.create("test") .addOption(new Option().setShortName("f").setFlag(true)) .addOption(new Option().setShortName("x")); final CommandLine evaluated = cli.parse(Arrays.asList("-x", "foo")); assertThat(evaluated.isFlagEnabled("f")).isFalse(); assertThat((String) evaluated.getOptionValue("x")).isEqualToIgnoringCase("foo"); }
@Test public void testUsageComputationWhenUsingRequiredOptionAndArgument() { final CLI cli = CLI.create("test") .addOption(new Option().setLongName("file").setShortName("f").setDescription("a file").setRequired(true)) .addArgument(new Argument().setArgName("foo").setDescription("foo").setRequired(true)); StringBuilder builder = new StringBuilder(); cli.usage(builder); assertThat(builder.toString()) .contains("test -f <value> foo") .contains(" -f,--file <value> a file") .contains("<foo> foo"); }
@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 testOptionAndRequiredOption() throws Exception { String[] args = new String[]{"-a", "-b", "file"}; TypedOption<String> b = new TypedOption<String>().setShortName("b").setLongName("bfile").setSingleValued(true) .setDescription("set the value of [b]").setType(String.class).setRequired(true); cli.removeOption("b").addOption(b); CommandLine evaluated = cli.parse(Arrays.asList(args)); assertThat(getBooleanOption(evaluated, "a")).isTrue(); assertThat(getStringOption(evaluated, "b")).isEqualTo("file"); assertThat(evaluated.allArguments()).isEmpty(); }
@Test public void testWithRequiredOption() throws Exception { String[] args = new String[]{"-b", "file"}; TypedOption<String> b = new TypedOption<String>().setShortName("b").setLongName("bfile").setSingleValued(true) .setDescription("set the value of [b]").setType(String.class).setRequired(true); cli.removeOption("b").addOption(b); CommandLine evaluated = cli.parse(Arrays.asList(args)); assertThat(getBooleanOption(evaluated, "a")).isFalse(); assertThat((String) evaluated.getOptionValue("b")).isEqualTo("file"); assertThat(evaluated.allArguments()).isEmpty(); }
@Test public void testPartialLongOptionSingleDash() throws Exception { String[] args = new String[]{"-ver"}; TypedOption<Boolean> v2 = new TypedOption<Boolean>().setLongName("version").setType(Boolean.class) .setSingleValued(false); TypedOption<Integer> v1 = new TypedOption<Integer>().setSingleValued(true) .setShortName("v") .setType(Integer.class); cli.addOption(v1).addOption(v2); CommandLine evaluated = cli.parse(Arrays.asList(args)); assertThat((Object) evaluated.getOptionValue("v")).isNull(); assertThat((boolean) evaluated.getOptionValue("version")).isTrue(); }
@Test public void testUnambiguousPartialLongOption2() throws Exception { String[] args = new String[]{"-ver"}; TypedOption<Boolean> v = new TypedOption<Boolean>().setLongName("version").setType(Boolean.class) .setSingleValued(false); TypedOption<Boolean> h = new TypedOption<Boolean>().setLongName("help").setType(Boolean.class) .setSingleValued(false); cli.addOption(v).addOption(h); CommandLine evaluated = cli.parse(Arrays.asList(args)); assertThat(getBooleanOption(evaluated, "version")).isTrue(); }
@Test public void testUnambiguousPartialLongOption1() throws Exception { String[] args = new String[]{"--ver"}; TypedOption<Boolean> v = new TypedOption<Boolean>().setLongName("version").setType(Boolean.class) .setSingleValued(false); TypedOption<Boolean> h = new TypedOption<Boolean>().setLongName("help").setType(Boolean.class) .setSingleValued(false); cli.addOption(v).addOption(h); CommandLine evaluated = cli.parse(Arrays.asList(args)); assertThat(getBooleanOption(evaluated, "version")).isTrue(); }
@Test public void testUnambiguousPartialLongOption3() throws Exception { String[] args = new String[]{"--ver=1"}; TypedOption<Integer> v = new TypedOption<Integer>().setLongName("verbose") .setSingleValued(true) .setType(Integer.class); TypedOption<Boolean> h = new TypedOption<Boolean>().setLongName("help").setType(Boolean.class) .setSingleValued(false); cli.addOption(v).addOption(h); CommandLine evaluated = cli.parse(Arrays.asList(args)); assertThat((int) evaluated.getOptionValue("verbose")).isEqualTo(1); }
@Test public void testUnambiguousPartialLongOption4() throws Exception { String[] args = new String[]{"-ver=1"}; TypedOption<Integer> v = new TypedOption<Integer>().setLongName("verbose") .setSingleValued(true) .setType(Integer.class); TypedOption<Boolean> h = new TypedOption<Boolean>().setLongName("help") .setType(Boolean.class) .setSingleValued(false); cli.addOption(v).addOption(h); CommandLine evaluated = cli.parse(Arrays.asList(args)); assertThat((int) evaluated.getOptionValue("verbose")).isEqualTo(1); }
@Test public void testMissingRequiredOption() throws Exception { String[] args = new String[]{"-a"}; TypedOption<String> b = new TypedOption<String>().setShortName("b").setLongName("bfile") .setSingleValued(true) .setDescription("set the value of [b]").setType(String.class).setRequired(true); cli.removeOption("b").addOption(b); try { cli.parse(Arrays.asList(args)); fail("exception expected"); } catch (MissingOptionException e) { assertThat(e.getExpected()).hasSize(1); } }
@Test public void testMultiValues() throws Exception { String[] args = new String[]{"-e", "one", "two", "-f", "1"}; TypedOption<String> e = new TypedOption<String>().setShortName("e") .setMultiValued(true).setType(String.class); TypedOption<Integer> f = new TypedOption<Integer>().setShortName("f") .setMultiValued(true).setType(Integer.class); cli.addOption(e).addOption(f); CommandLine evaluated = cli.parse(Arrays.asList(args)); assertThat(evaluated.getOptionValues("e")).contains("one", "two").hasSize(2); assertThat(evaluated.getOptionValues("f")).contains(1).hasSize(1); }
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."); }