.type(List.class) .auxiliaryTypes(File.class) .description("The files to process").build()); CommandLine commandLine = new CommandLine(spec);
@Test public void testPositionalConvertersOverridesRegisteredTypeConverter() { CommandSpec spec = CommandSpec.create(); spec.addPositional(PositionalParamSpec.builder().paramLabel("COUNT").index("0").type(int.class).description("number of times to execute").build()); spec.addPositional(PositionalParamSpec.builder().paramLabel("SQLTYPE").index("1").type(int.class).converters( new CommandLineTypeConversionTest.SqlTypeConverter()).description("sql type converter").build()); CommandLine commandLine = new CommandLine(spec); commandLine.parse("33", "BLOB"); assertEquals(Integer.valueOf(33), spec.positionalParameters().get(0).getValue()); assertEquals(Integer.valueOf(Types.BLOB), spec.positionalParameters().get(1).getValue()); }
@Test public void testUsageHelpPositional_withDescription() { CommandSpec spec = CommandSpec.create(); spec.addPositional(PositionalParamSpec.builder().description("positional param").build()); CommandLine commandLine = new CommandLine(spec); String actual = usageString(commandLine, Ansi.OFF); String expected = String.format("" + "Usage: <main class> PARAM...%n" + " PARAM... positional param%n"); assertEquals(expected, actual); }
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 testPositionalParamSpecEquals() { PositionalParamSpec.Builder positional = PositionalParamSpec.builder() .arity("1") .hideParamSyntax(true) .required(true) .splitRegex(";") .description("desc") .descriptionKey("key") .auxiliaryTypes(Integer.class, Double.class) .index("1..3"); PositionalParamSpec p1 = positional.build(); assertEquals(p1, p1); assertEquals(p1, positional.build()); assertNotEquals(p1, positional.arity("2").build()); assertNotEquals(p1, positional.arity("1").hideParamSyntax(false).build()); assertNotEquals(p1, positional.hideParamSyntax(true).required(false).build()); assertNotEquals(p1, positional.required(true).splitRegex(",").build()); assertNotEquals(p1, positional.splitRegex(";").description("xyz").build()); assertNotEquals(p1, positional.description("desc").descriptionKey("XX").build()); assertNotEquals(p1, positional.descriptionKey("key").auxiliaryTypes(Short.class).build()); assertEquals(p1, positional.auxiliaryTypes(Integer.class, Double.class).build()); assertNotEquals(p1, positional.index("0..*").build()); assertEquals(p1, positional.index("1..3").build()); } }
@Test public void testArgSpecEquals() { PositionalParamSpec.Builder positional = PositionalParamSpec.builder() .arity("1") .hideParamSyntax(true) .required(true) .splitRegex(";") .description("desc") .descriptionKey("key") .auxiliaryTypes(Integer.class, Double.class); PositionalParamSpec p1 = positional.build(); assertEquals(p1, p1); assertEquals(p1, positional.build()); assertNotEquals(p1, positional.arity("2").build()); assertNotEquals(p1, positional.arity("1").hideParamSyntax(false).build()); assertNotEquals(p1, positional.hideParamSyntax(true).required(false).build()); assertNotEquals(p1, positional.required(true).splitRegex(",").build()); assertNotEquals(p1, positional.splitRegex(";").description("xyz").build()); assertNotEquals(p1, positional.description("desc").descriptionKey("XX").build()); assertNotEquals(p1, positional.descriptionKey("key").auxiliaryTypes(Short.class).build()); assertEquals(p1, positional.auxiliaryTypes(Integer.class, Double.class).build()); }
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 testUsageHelp_abbreviateSynopsisWithPositional() throws UnsupportedEncodingException { CommandSpec spec = CommandSpec.create(); spec.usageMessage().abbreviateSynopsis(true).requiredOptionMarker('!').sortOptions(false); spec.addOption(OptionSpec.builder("-x").required(true).description("required").build()); spec.addPositional(PositionalParamSpec.builder().arity("1").paramLabel("POSITIONAL").description("positional").build()); CommandLine commandLine = new CommandLine(spec); String actual = usageString(commandLine, Ansi.OFF); String expected = String.format("" + "Usage: <main class> [OPTIONS] POSITIONAL...%n" + "! POSITIONAL... positional%n" + "! -x required%n"); assertEquals(expected, actual); }
@Test public void testPositionalConvertersOverridesRegisteredTypeConverter() { CommandSpec spec = CommandSpec.create(); spec.addPositional(PositionalParamSpec.builder().paramLabel("COUNT").index("0").type(int.class).description("number of times to execute").build()); spec.addPositional(PositionalParamSpec.builder().paramLabel("SQLTYPE").index("1").type(int.class).converters( new CommandLineTypeConversionTest.SqlTypeConverter()).description("sql type converter").build()); CommandLine commandLine = new CommandLine(spec); commandLine.parse("33", "BLOB"); assertEquals(Integer.valueOf(33), spec.positionalParameters().get(0).getValue()); assertEquals(Integer.valueOf(Types.BLOB), spec.positionalParameters().get(1).getValue()); }
@Test public void testArgSpecRenderedDescriptionInitial() { PositionalParamSpec positional = PositionalParamSpec.builder().build(); assertArrayEquals(new String[0], positional.renderedDescription()); PositionalParamSpec positional2 = PositionalParamSpec.builder().description(new String[0]).build(); assertArrayEquals(new String[0], positional2.renderedDescription()); }
@Test public void testUsageHelpPositional_withDescription() { CommandSpec spec = CommandSpec.create(); spec.addPositional(PositionalParamSpec.builder().description("positional param").build()); CommandLine commandLine = new CommandLine(spec); String actual = usageString(commandLine, Ansi.OFF); String expected = String.format("" + "Usage: <main class> PARAM...%n" + " PARAM... positional param%n"); assertEquals(expected, actual); }
@Test public void testPositionalCopyBuilder() { PositionalParamSpec option = PositionalParamSpec.builder().index("0..34").arity("1").type(int.class).description("abc").paramLabel("ABC").build(); PositionalParamSpec copy = option.toBuilder().build(); assertEquals(option, copy); assertNotSame(option, copy); }
.required(true) .defaultValue("DEF") .description("Description") .paramLabel("param") .arity("1") assertTrue(builder.required()); assertEquals("DEF", builder.defaultValue()); assertArrayEquals(new String[]{"Description"}, builder.description()); assertEquals("param", builder.paramLabel()); assertEquals(Range.valueOf("1"), builder.arity());
.optionListHeading("Options%n") .parameterListHeading("Positional Parameters%n"); spec.addPositional(PositionalParamSpec.builder().description("positional param").build()); CommandLine commandLine = new CommandLine(spec); String actual = usageString(commandLine, Ansi.OFF);
.type(List.class) .auxiliaryTypes(File.class) .description("The files to process").build()); CommandLine commandLine = new CommandLine(spec);
@Test public void testPositionalParamSpecEquals() { PositionalParamSpec.Builder positional = PositionalParamSpec.builder() .arity("1") .hideParamSyntax(true) .required(true) .splitRegex(";") .description("desc") .descriptionKey("key") .auxiliaryTypes(Integer.class, Double.class) .index("1..3"); PositionalParamSpec p1 = positional.build(); assertEquals(p1, p1); assertEquals(p1, positional.build()); assertNotEquals(p1, positional.arity("2").build()); assertNotEquals(p1, positional.arity("1").hideParamSyntax(false).build()); assertNotEquals(p1, positional.hideParamSyntax(true).required(false).build()); assertNotEquals(p1, positional.required(true).splitRegex(",").build()); assertNotEquals(p1, positional.splitRegex(";").description("xyz").build()); assertNotEquals(p1, positional.description("desc").descriptionKey("XX").build()); assertNotEquals(p1, positional.descriptionKey("key").auxiliaryTypes(Short.class).build()); assertEquals(p1, positional.auxiliaryTypes(Integer.class, Double.class).build()); assertNotEquals(p1, positional.index("0..*").build()); assertEquals(p1, positional.index("1..3").build()); } }
@Test public void testArgSpecEquals() { PositionalParamSpec.Builder positional = PositionalParamSpec.builder() .arity("1") .hideParamSyntax(true) .required(true) .splitRegex(";") .description("desc") .descriptionKey("key") .auxiliaryTypes(Integer.class, Double.class); PositionalParamSpec p1 = positional.build(); assertEquals(p1, p1); assertEquals(p1, positional.build()); assertNotEquals(p1, positional.arity("2").build()); assertNotEquals(p1, positional.arity("1").hideParamSyntax(false).build()); assertNotEquals(p1, positional.hideParamSyntax(true).required(false).build()); assertNotEquals(p1, positional.required(true).splitRegex(",").build()); assertNotEquals(p1, positional.splitRegex(";").description("xyz").build()); assertNotEquals(p1, positional.description("desc").descriptionKey("XX").build()); assertNotEquals(p1, positional.descriptionKey("key").auxiliaryTypes(Short.class).build()); assertEquals(p1, positional.auxiliaryTypes(Integer.class, Double.class).build()); }
@Test public void testUsageHelp_abbreviateSynopsisWithPositional() throws UnsupportedEncodingException { CommandSpec spec = CommandSpec.create(); spec.usageMessage().abbreviateSynopsis(true).requiredOptionMarker('!').sortOptions(false); spec.addOption(OptionSpec.builder("-x").required(true).description("required").build()); spec.addPositional(PositionalParamSpec.builder().arity("1").paramLabel("POSITIONAL").description("positional").build()); CommandLine commandLine = new CommandLine(spec); String actual = usageString(commandLine, Ansi.OFF); String expected = String.format("" + "Usage: <main class> [OPTIONS] POSITIONAL...%n" + "! POSITIONAL... positional%n" + "! -x required%n"); assertEquals(expected, actual); }
@Test public void testArgSpecRenderedDescriptionInitial() { PositionalParamSpec positional = PositionalParamSpec.builder().build(); assertArrayEquals(new String[0], positional.renderedDescription()); PositionalParamSpec positional2 = PositionalParamSpec.builder().description(new String[0]).build(); assertArrayEquals(new String[0], positional2.renderedDescription()); }
@Test public void testPositionalCopyBuilder() { PositionalParamSpec option = PositionalParamSpec.builder().index("0..34").arity("1").type(int.class).description("abc").paramLabel("ABC").build(); PositionalParamSpec copy = option.toBuilder().build(); assertEquals(option, copy); assertNotSame(option, copy); }