/** * @return the {@link CLI} instance by reading the annotation. */ @Override public CLI define() { return CLIConfigurator.define(clazz); } }
/** * Creates an instance of {@link CLI} from the given Java class. It instantiates the {@link CLI} object from the * annotations used in the class. * * @param clazz the annotated class * @return the created instance of {@link CLI} */ @GenIgnore static CLI create(Class<?> clazz) { return CLIConfigurator.define(clazz); }
@Test(expected = IllegalArgumentException.class) public void testThatCLINeedsAName() { CLIConfigurator.define(MyCommandWithoutName.class); }
@Test(expected = IllegalArgumentException.class) public void testThatCLINeedsANonEmptyName() { CLIConfigurator.define(MyCommandWithoutEmptyName.class); }
@Test public void testArgumentWithDefaultValue() throws CLIException { CommandWithDefaultValueOnArgument command = new CommandWithDefaultValueOnArgument(); CLI cli = CLIConfigurator.define(command.getClass()).setName("test"); CommandLine evaluatedCLI = parse(cli, "foo"); CLIConfigurator.inject(evaluatedCLI, command); assertThat(command.x.get()).isEqualTo("foo"); assertThat(command.y.get()).isEqualTo(25); }
@Test public void testArgumentInjectionWithSeveralArguments() throws CLIException { CommandForMultipleArgumentTest command = new CommandForMultipleArgumentTest(); CLI cli = CLIConfigurator.define(command.getClass()).setName("test"); CommandLine evaluatedCLI = parse(cli, "foo", "1"); CLIConfigurator.inject(evaluatedCLI, command); assertThat(command.x.get()).isEqualTo("foo"); assertThat(command.y.get()).isEqualTo(1); }
@Test public void testArgumentInjectionWithConvertedByAndDefaultValue() throws CLIException { CommandForConvertedValueTest command = new CommandForConvertedValueTest(); CLI cli = CLIConfigurator.define(command.getClass()).setName("test"); CommandLine evaluatedCLI = parse(cli, "Bob,Morane"); CLIConfigurator.inject(evaluatedCLI, command); assertThat(command.reference.get().first).isEqualTo("Bob"); assertThat(command.reference.get().last).isEqualTo("Morane"); evaluatedCLI = parse(cli); CLIConfigurator.inject(evaluatedCLI, command); assertThat(command.reference.get().first).isEqualTo("Bill"); assertThat(command.reference.get().last).isEqualTo("Balantine"); }
@Test public void testArgumentInjection() throws CLIException { CommandForArgumentInjectionTest command = new CommandForArgumentInjectionTest(); CLI cli = CLIConfigurator.define(command.getClass()).setName("test"); CommandLine evaluatedCLI = parse(cli, "foo"); CLIConfigurator.inject(evaluatedCLI, command); assertThat(command.reference.get()).isEqualTo("foo"); }
@Test public void testOptionsWithChoicesUsingAnnotations() { CLI cli = CLIConfigurator.define(CLIUsingAEnumOption.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", "--foo", "bar")); 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 testSystemProperties() throws CLIException { CLI cli = CLIConfigurator.define(command.getClass()); VertxCommandLauncher launcher = new VertxCommandLauncher(); CommandLine evaluatedCLI = parse(cli, "--name=vert.x", "-Dfoo=bar", "--systemProp=x=y"); CLIConfigurator.inject(evaluatedCLI, command); command.setUp(new ExecutionContext(command, launcher, evaluatedCLI)); assertThat(System.getProperty("foo")).isEqualToIgnoringCase("bar"); assertThat(System.getProperty("x")).isEqualToIgnoringCase("y"); command.tearDown(); // System properties are not removed by the tearDown. assertThat(System.getProperty("foo")).isEqualToIgnoringCase("bar"); assertThat(System.getProperty("x")).isEqualToIgnoringCase("y"); }
@Test public void testUsage() { CLI command = CLIConfigurator.define(HelloClI.class); StringBuilder builder = new StringBuilder(); command.usage(builder); assertThat(builder.toString()) .containsIgnoringCase("Usage: hello -n <name>") .containsIgnoringCase("A command saying hello.") .containsIgnoringCase("A simple cli to wish you a good day. Pass your name with `--name`") .containsIgnoringCase(" -n,--name <name> your name"); }
@Test public void testOptionsWithDescription() { CLI cli = CLIConfigurator.define(CommandForDescriptionTest.class); assertThat(cli.getOptions()).hasSize(1); assertThat(find(cli.getOptions(), "option").getDescription()) .isEqualTo("This option is awesome"); }
@Test public void testCWD() throws CLIException { CLI cli = CLIConfigurator.define(command.getClass()); CommandLine evaluatedCLI = parse(cli, "--name=vert.x"); CLIConfigurator.inject(evaluatedCLI, command); assertThat(command.getCwd()).isEqualTo(new File(".")); evaluatedCLI = parse(cli, "--cwd=target", "--name=vert.x"); CLIConfigurator.inject(evaluatedCLI, command); assertThat(command.getCwd()).isEqualTo(new File("target")); }
@Test public void testOptionsWithDefaultValue() { CLI cli = CLIConfigurator.define(CommandForDefaultValueTest.class); assertThat(cli.getOptions()).hasSize(1); assertThat(find(cli.getOptions(), "option").getDefaultValue()).isEqualTo("bar"); assertThat(find(cli.getOptions(), "option").getName()).isEqualTo("option"); }
@Test public void testInjectionOfString() throws CLIException { HelloClI command = new HelloClI(); CLI cli = CLIConfigurator.define(HelloClI.class); CommandLine evaluatedCLI = cli.parse(Arrays.asList("--name", "vert.x")); CLIConfigurator.inject(evaluatedCLI, command); assertThat(command.run()).isEqualToIgnoringCase("Hello vert.x"); assertThat(command.name).isEqualToIgnoringCase("vert.x"); }
@Test public void testHelpOptionUsingAnnotation() { CLI cli = CLIConfigurator.define(CLIUsingAHelpOption.class);
@Test public void testHelloCLIFromClass() { CLI command = CLIConfigurator.define(HelloClI.class); assertThat(command.getOptions()).hasSize(1); TypedOption option = (TypedOption) find(command.getOptions(), "name"); assertThat(option.getLongName()).isEqualToIgnoringCase("name"); assertThat(option.getShortName()).isEqualToIgnoringCase("n"); assertThat(option.getType()).isEqualTo(String.class); assertThat(option.getArgName()).isEqualTo("name"); assertThat(option.getDescription()).isEqualToIgnoringCase("your name"); assertThat(option.getDefaultValue()).isNull(); assertThat(option.acceptValue()).isTrue(); assertThat(option.isMultiValued()).isFalse(); assertThat(option.isRequired()).isTrue(); }
@Test public void testOptionsParsedAsList() { CLI command = CLIConfigurator.define(CommandForParsedAsList.class); assertThat(command.getOptions()).hasSize(1); assertThat(((TypedOption) find(command.getOptions(), "option")) .getListSeparator()).isEqualTo(":"); assertThat(find(command.getOptions(), "option").isMultiValued()).isTrue(); assertThat(((TypedOption) find(command.getOptions(), "option")).getType()) .isEqualTo(String.class); }
@Test public void testTypeExtraction() { CLI command = CLIConfigurator.define(CommandForTypeExtractTest.class); assertThat(command.getOptions()).hasSize(6); TypedOption model = (TypedOption) find(command.getOptions(), "list"); assertThat(model.getType()).isEqualTo(String.class); assertThat(model.isMultiValued()).isTrue(); model = (TypedOption) find(command.getOptions(), "set"); assertThat(model.getType()).isEqualTo(Character.class); assertThat(model.isMultiValued()).isTrue(); model = (TypedOption) find(command.getOptions(), "collection"); assertThat(model.getType()).isEqualTo(Integer.class); assertThat(model.isMultiValued()).isTrue(); model = (TypedOption) find(command.getOptions(), "tree"); assertThat(model.getType()).isEqualTo(String.class); assertThat(model.isMultiValued()).isTrue(); model = (TypedOption) find(command.getOptions(), "al"); assertThat(model.getType()).isEqualTo(String.class); assertThat(model.isMultiValued()).isTrue(); model = (TypedOption) find(command.getOptions(), "array"); assertThat(model.getType()).isEqualTo(Integer.TYPE); assertThat(model.isMultiValued()).isTrue(); }
@Test public void testMultiValuesInjection() throws CLIException { CLIWithMultipleValues command = new CLIWithMultipleValues(); CLI cli = CLIConfigurator.define(command.getClass());