@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 testShortWithoutEqual() throws Exception { String[] args = new String[]{"-fbar"}; cli.addOption(new TypedOption<String>().setType(String.class).setSingleValued(true) .setLongName("foo").setShortName("f")); CommandLine evaluated = cli.parse(Arrays.asList(args)); assertThat(getStringOption(evaluated, "foo")).isEqualTo("bar"); }
@Test public void testLongWithEqualSingleDash() throws Exception { String[] args = new String[]{"-foo=bar"}; cli.addOption(new TypedOption<String>().setType(String.class).setSingleValued(true) .setLongName("foo").setShortName("f")); CommandLine evaluated = cli.parse(Arrays.asList(args)); assertThat(getStringOption(evaluated, "foo")).isEqualTo("bar"); }
@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 testShortWithEqual() throws Exception { String[] args = new String[]{"-f=bar"}; cli.addOption(new TypedOption<String>().setType(String.class).setSingleValued(true) .setLongName("foo").setShortName("f")); CommandLine evaluated = cli.parse(Arrays.asList(args)); assertThat(getStringOption(evaluated, "foo")).isEqualTo("bar"); }
@Test public void testLongWithEqualDoubleDash() throws Exception { String[] args = new String[]{"--foo=bar"}; cli.addOption(new TypedOption<String>().setType(String.class).setSingleValued(true) .setLongName("foo").setShortName("f")); CommandLine evaluated = cli.parse(Arrays.asList(args)); assertThat(getStringOption(evaluated, "foo")).isEqualTo("bar"); }
@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 testLongWithoutEqualSingleDash() throws Exception { String[] args = new String[]{"-foobar"}; cli.addOption(new TypedOption<String>().setType(String.class).setSingleValued(true) .setLongName("foo").setShortName("f")); CommandLine evaluated = cli.parse(Arrays.asList(args)); assertThat(getStringOption(evaluated, "foo")).isEqualTo("bar"); }
@Test public void testArguments() throws CLIException { Option[] options = new Option[]{ new TypedOption<Boolean>().setShortName("f").setLongName("flag").setType(Boolean.class).setSingleValued(true) }; cli.addOptions(Arrays.asList(options)); CommandLine evaluated = cli.parse(Arrays.asList("org.acme.Foo", "-f=no")); assertThat(evaluated.allArguments()).contains("org.acme.Foo"); evaluated = cli.parse(Arrays.asList("-f=no", "org.acme.Foo")); assertThat(evaluated.allArguments()).contains("org.acme.Foo"); evaluated = cli.parse(Arrays.asList("-f=no", "org.acme.Foo", "bar")); assertThat(evaluated.allArguments()).contains("org.acme.Foo", "bar"); }
@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 testUnknownOption() throws CLIException { Option[] options = new Option[]{ new TypedOption<Boolean>().setShortName("f").setLongName("flag") .setType(Boolean.class).setRequired(true).setSingleValued(true) }; cli.addOptions(Arrays.asList(options)); CommandLine evaluated = cli.parse(Arrays.asList("-flag=true", "-unknown=x")); assertThat(evaluated.allArguments()).contains("-unknown=x"); }
@Test(expected = MissingOptionException.class) public void testNotFulfilledRequiredOptions() throws CLIException { Option[] options = new Option[]{ new TypedOption<Boolean>().setShortName("f").setLongName("flag").setType(Boolean.class).setRequired(true).setSingleValued(true) }; cli.addOptions(Arrays.asList(options)); CommandLine evaluated = cli.parse(Collections.emptyList()); }
@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")); }
@Test public void testLongWithoutEqualDoubleDash() throws Exception { String[] args = new String[]{"--foobar"}; TypedOption<String> f = new TypedOption<String>() .setType(String.class).setLongName("foo").setShortName("f").setSingleValued(true); cli.addOption(f); CommandLine evaluated = cli.parse(Arrays.asList(args)); // foo isn't expected to be recognized with a double dash assertThat((String) evaluated.getOptionValue("foo")).isNull(); }
@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 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); } }
@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")); }