static PositionalParamSpec extractPositionalParamSpec(TypedMember member, IFactory factory) { PositionalParamSpec.Builder builder = PositionalParamSpec.builder(); initCommon(builder, member); Range arity = Range.parameterArity(member); builder.arity(arity); builder.index(Range.parameterIndex(member)); builder.capacity(Range.parameterCapacity(member)); builder.required(arity.min > 0); Parameters parameters = member.getAnnotation(Parameters.class); builder.interactive(parameters.interactive()); Class<?>[] elementTypes = inferTypes(member.getType(), parameters.type(), member.getGenericType()); builder.auxiliaryTypes(elementTypes); builder.paramLabel(inferLabel(parameters.paramLabel(), member.name(), member.getType(), elementTypes)); builder.hideParamSyntax(parameters.hideParamSyntax()); builder.description(parameters.description()); builder.descriptionKey(parameters.descriptionKey()); builder.splitRegex(parameters.split()); builder.hidden(parameters.hidden()); builder.defaultValue(parameters.defaultValue()); builder.converters(DefaultFactory.createConverter(factory, parameters.converter())); builder.showDefaultValue(parameters.showDefaultValue()); if (!NoCompletionCandidates.class.equals(parameters.completionCandidates())) { builder.completionCandidates(DefaultFactory.createCompletionCandidates(factory, parameters.completionCandidates())); } return builder.build(); } static PositionalParamSpec extractUnannotatedPositionalParamSpec(TypedMember member, IFactory factory) {
@Test public void testPositionalInteractiveNotSupportedForMultiValue() { PositionalParamSpec.Builder[] options = new PositionalParamSpec.Builder[]{ PositionalParamSpec.builder().arity("0").interactive(true), PositionalParamSpec.builder().arity("0..1").interactive(true), PositionalParamSpec.builder().arity("2").interactive(true), PositionalParamSpec.builder().arity("3").interactive(true), PositionalParamSpec.builder().arity("1..2").interactive(true), PositionalParamSpec.builder().arity("1..*").interactive(true), PositionalParamSpec.builder().arity("0..*").interactive(true), }; for (PositionalParamSpec.Builder opt : options) { try { opt.build(); fail("Expected exception"); } catch (CommandLine.InitializationException ex) { assertEquals("Interactive options and positional parameters are only supported for arity=1, not for arity=" + opt.arity(), ex.getMessage()); } } }
static PositionalParamSpec extractUnannotatedPositionalParamSpec(TypedMember member, IFactory factory) { PositionalParamSpec.Builder builder = PositionalParamSpec.builder(); initCommon(builder, member); Range arity = Range.parameterArity(member); builder.arity(arity); builder.index(Range.parameterIndex(member)); builder.capacity(Range.parameterCapacity(member)); builder.required(arity.min > 0); builder.interactive(false); Class<?>[] elementTypes = inferTypes(member.getType(), new Class<?>[] {}, member.getGenericType()); builder.auxiliaryTypes(elementTypes); builder.paramLabel(inferLabel(null, member.name(), member.getType(), elementTypes)); builder.hideParamSyntax(false); builder.description(new String[0]); builder.splitRegex(""); builder.hidden(false); builder.defaultValue(null); builder.converters(); builder.showDefaultValue(Help.Visibility.ON_DEMAND); return builder.build(); } private static void initCommon(ArgSpec.Builder<?> builder, TypedMember member) {
@Test public void testPositionalInteractiveFalseByDefault() { assertFalse(PositionalParamSpec.builder().interactive()); assertFalse(PositionalParamSpec.builder().build().interactive()); }
@Test public void testPositionalInteractiveIfSet() { assertTrue(PositionalParamSpec.builder().interactive(true).interactive()); assertTrue(PositionalParamSpec.builder().interactive(true).build().interactive()); }
@Test public void testPositionalInteractiveNotSupportedForMultiValue() { PositionalParamSpec.Builder[] options = new PositionalParamSpec.Builder[]{ PositionalParamSpec.builder().arity("0").interactive(true), PositionalParamSpec.builder().arity("0..1").interactive(true), PositionalParamSpec.builder().arity("2").interactive(true), PositionalParamSpec.builder().arity("3").interactive(true), PositionalParamSpec.builder().arity("1..2").interactive(true), PositionalParamSpec.builder().arity("1..*").interactive(true), PositionalParamSpec.builder().arity("0..*").interactive(true), }; for (PositionalParamSpec.Builder opt : options) { try { opt.build(); fail("Expected exception"); } catch (CommandLine.InitializationException ex) { assertEquals("Interactive options and positional parameters are only supported for arity=1, not for arity=" + opt.arity(), ex.getMessage()); } } }
@Test public void testPositionalInteractiveFalseByDefault() { assertFalse(PositionalParamSpec.builder().interactive()); assertFalse(PositionalParamSpec.builder().build().interactive()); }
@Test public void testPositionalInteractiveIfSet() { assertTrue(PositionalParamSpec.builder().interactive(true).interactive()); assertTrue(PositionalParamSpec.builder().interactive(true).build().interactive()); }