static OptionSpec extractOptionSpec(TypedMember member, IFactory factory) { Option option = member.getAnnotation(Option.class); OptionSpec.Builder builder = OptionSpec.builder(option.names()); initCommon(builder, member); builder.order(option.order()); builder.help(option.help()); builder.usageHelp(option.usageHelp()); builder.versionHelp(option.versionHelp()); builder.showDefaultValue(option.showDefaultValue()); if (!NoCompletionCandidates.class.equals(option.completionCandidates())) { builder.completionCandidates(DefaultFactory.createCompletionCandidates(factory, option.completionCandidates())); } builder.arity(Range.optionArity(member)); builder.required(option.required()); builder.interactive(option.interactive()); Class<?>[] elementTypes = inferTypes(member.getType(), option.type(), member.getGenericType()); builder.auxiliaryTypes(elementTypes); builder.paramLabel(inferLabel(option.paramLabel(), member.name(), member.getType(), elementTypes)); builder.hideParamSyntax(option.hideParamSyntax()); builder.description(option.description()); builder.descriptionKey(option.descriptionKey()); builder.splitRegex(option.split()); builder.hidden(option.hidden()); builder.defaultValue(option.defaultValue()); builder.converters(DefaultFactory.createConverter(factory, option.converter())); return builder.build(); } static PositionalParamSpec extractPositionalParamSpec(TypedMember member, IFactory factory) {
@Test public void testOptionInteractiveNotSupportedForMultiValue() { OptionSpec.Builder[] options = new OptionSpec.Builder[]{ OptionSpec.builder("-x").arity("0").interactive(true), OptionSpec.builder("-x").arity("0..1").interactive(true), OptionSpec.builder("-x").arity("2").interactive(true), OptionSpec.builder("-x").arity("3").interactive(true), OptionSpec.builder("-x").arity("1..2").interactive(true), OptionSpec.builder("-x").arity("1..*").interactive(true), OptionSpec.builder("-x").arity("0..*").interactive(true), }; for (OptionSpec.Builder opt : options) { try { opt.build(); fail("Expected exception"); } catch (InitializationException ex) { assertEquals("Interactive options and positional parameters are only supported for arity=1, not for arity=" + opt.arity(), ex.getMessage()); } } }
@Test public void testOptionInteractiveFalseByDefault() { assertFalse(OptionSpec.builder("-x").interactive()); assertFalse(OptionSpec.builder("-x").build().interactive()); }
@Test public void testOptionInteractiveIfSet() { assertTrue(OptionSpec.builder("-x").interactive(true).interactive()); assertTrue(OptionSpec.builder("-x").arity("1").interactive(true).build().interactive()); }
@Test public void testOptionInteractiveNotSupportedForMultiValue() { OptionSpec.Builder[] options = new OptionSpec.Builder[]{ OptionSpec.builder("-x").arity("0").interactive(true), OptionSpec.builder("-x").arity("0..1").interactive(true), OptionSpec.builder("-x").arity("2").interactive(true), OptionSpec.builder("-x").arity("3").interactive(true), OptionSpec.builder("-x").arity("1..2").interactive(true), OptionSpec.builder("-x").arity("1..*").interactive(true), OptionSpec.builder("-x").arity("0..*").interactive(true), }; for (OptionSpec.Builder opt : options) { try { opt.build(); fail("Expected exception"); } catch (InitializationException ex) { assertEquals("Interactive options and positional parameters are only supported for arity=1, not for arity=" + opt.arity(), ex.getMessage()); } } }
@Test public void testOptionInteractiveIfSet() { assertTrue(OptionSpec.builder("-x").interactive(true).interactive()); assertTrue(OptionSpec.builder("-x").arity("1").interactive(true).build().interactive()); }
@Test public void testOptionInteractiveFalseByDefault() { assertFalse(OptionSpec.builder("-x").interactive()); assertFalse(OptionSpec.builder("-x").build().interactive()); }