@Test public void testParameterCapacity() throws Exception { PositionalParamSpec paramSpec = PositionalParamSpec.builder().index(Range.valueOf("1..2")).arity(Range.valueOf("*")).build(); Method capacity = PositionalParamSpec.class.getDeclaredMethod("capacity"); capacity.setAccessible(true); Range c = (Range) capacity.invoke(paramSpec); assertEquals(Range.valueOf("*"), c); }
@Test public void testMultiValuePositionalParamWithMapWithoutAuxTypes() { CommandSpec spec = CommandSpec.create(); PositionalParamSpec positional = PositionalParamSpec.builder().index("0").arity("3").type(Map.class).build(); assertTrue(positional.isMultiValue()); spec.addPositional(positional); CommandLine commandLine = new CommandLine(spec); commandLine.parse("1=1.0", "2=2.0", "3=3.0"); Map<String, String> expected = new LinkedHashMap<String, String>(); expected.put("1", "1.0"); expected.put("2", "2.0"); expected.put("3", "3.0"); assertEquals(expected, spec.positionalParameters().get(0).getValue()); }
@Test public void testMultiValuePositionalParamWithMapAndAuxTypes() { CommandSpec spec = CommandSpec.create(); PositionalParamSpec positional = PositionalParamSpec.builder().index("0").arity("3").type(Map.class).auxiliaryTypes(Integer.class, Double.class).build(); assertTrue(positional.isMultiValue()); spec.addPositional(positional); CommandLine commandLine = new CommandLine(spec); commandLine.parse("1=1.0", "2=2.0", "3=3.0"); Map<Integer, Double> expected = new LinkedHashMap<Integer, Double>(); expected.put(1, 1.0); expected.put(2, 2.0); expected.put(3, 3.0); assertEquals(expected, spec.positionalParameters().get(0).getValue()); }
@Test public void testMultiValuePositionalParamWithListWithoutAuxTypes() { CommandSpec spec = CommandSpec.create(); PositionalParamSpec positional = PositionalParamSpec.builder().index("0").arity("3").type(List.class).build(); assertTrue(positional.isMultiValue()); spec.addPositional(positional); CommandLine commandLine = new CommandLine(spec); commandLine.parse("1", "2", "3"); assertEquals(Arrays.asList("1", "2", "3"), spec.positionalParameters().get(0).getValue()); }
@Test public void testMultiValuePositionalParamWithArray() { CommandSpec spec = CommandSpec.create(); PositionalParamSpec positional = PositionalParamSpec.builder().index("0").arity("3").type(int[].class).build(); assertTrue(positional.isMultiValue()); spec.addPositional(positional); CommandLine commandLine = new CommandLine(spec); commandLine.parse("1", "2", "3"); assertArrayEquals(new int[] {1, 2, 3}, (int[]) spec.positionalParameters().get(0).getValue()); }
@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); }
@Test public void testMultiValuePositionalParamArityAloneIsInsufficient() throws Exception { CommandLine.Model.CommandSpec spec = CommandLine.Model.CommandSpec.create(); CommandLine.Model.PositionalParamSpec positional = CommandLine.Model.PositionalParamSpec.builder().index("0").arity("3").type(int.class).build(); assertFalse(positional.isMultiValue()); spec.addPositional(positional); spec.parser().collectErrors(true); CommandLine commandLine = new CommandLine(spec); commandLine.parse("1", "2", "3"); assertEquals(1, commandLine.getParseResult().errors().size()); assertEquals("Unmatched arguments: 2, 3", commandLine.getParseResult().errors().get(0).getMessage()); } @Test
@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 testParameterCapacity() throws Exception { PositionalParamSpec paramSpec = PositionalParamSpec.builder().index(Range.valueOf("1..2")).arity(Range.valueOf("*")).build(); Method capacity = PositionalParamSpec.class.getDeclaredMethod("capacity"); capacity.setAccessible(true); Range c = (Range) capacity.invoke(paramSpec); assertEquals(Range.valueOf("*"), c); }
@Test public void testMultiValuePositionalParamWithListAndAuxTypes() { CommandSpec spec = CommandSpec.create(); PositionalParamSpec positional = PositionalParamSpec.builder().index("0").arity("3").type(List.class).auxiliaryTypes(Integer.class).build(); assertTrue(positional.isMultiValue()); spec.addPositional(positional); CommandLine commandLine = new CommandLine(spec); commandLine.parse("1", "2", "3"); assertEquals(Arrays.asList(1, 2, 3), spec.positionalParameters().get(0).getValue()); }
.initialValue("ABC") .showDefaultValue(Visibility.NEVER) .index("3..4") .withToString("TOSTRING"); assertArrayEquals(new Class[]{Integer.class, Integer.TYPE}, builder.auxiliaryTypes()); assertEquals(Visibility.NEVER, builder.showDefaultValue()); assertEquals("TOSTRING", builder.toString()); assertEquals(Range.valueOf("3..4"), builder.index());
@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()); } }
/** Sets the index or range specifying which of the command line arguments should be assigned to this positional parameter, and returns this builder. */ public Builder index(String range) { return index(Range.valueOf(range)); }
@Test public void testMultiValuePositionalParamArityAloneIsInsufficient() throws Exception { CommandLine.Model.CommandSpec spec = CommandLine.Model.CommandSpec.create(); CommandLine.Model.PositionalParamSpec positional = CommandLine.Model.PositionalParamSpec.builder().index("0").arity("3").type(int.class).build(); assertFalse(positional.isMultiValue()); spec.addPositional(positional); spec.parser().collectErrors(true); CommandLine commandLine = new CommandLine(spec); commandLine.parse("1", "2", "3"); assertEquals(1, commandLine.getParseResult().errors().size()); assertEquals("Unmatched arguments: 2, 3", commandLine.getParseResult().errors().get(0).getMessage()); } @Test
@Test public void testMultiValuePositionalParamArityAloneIsInsufficient() { CommandSpec spec = CommandSpec.create(); PositionalParamSpec positional = PositionalParamSpec.builder().index("0").arity("3").type(int.class).build(); assertFalse(positional.isMultiValue()); spec.addPositional(positional); CommandLine commandLine = new CommandLine(spec); try { commandLine.parse("1", "2", "3"); fail("Expected exception"); } catch (UnmatchedArgumentException ex) { assertEquals("Unmatched arguments: 2, 3", ex.getMessage()); } }
@Test public void testMultiValuePositionalParamWithListAndAuxTypes() { CommandSpec spec = CommandSpec.create(); PositionalParamSpec positional = PositionalParamSpec.builder().index("0").arity("3").type(List.class).auxiliaryTypes(Integer.class).build(); assertTrue(positional.isMultiValue()); spec.addPositional(positional); CommandLine commandLine = new CommandLine(spec); commandLine.parse("1", "2", "3"); assertEquals(Arrays.asList(1, 2, 3), spec.positionalParameters().get(0).getValue()); }
@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 testMultiValuePositionalParamWithArray() { CommandSpec spec = CommandSpec.create(); PositionalParamSpec positional = PositionalParamSpec.builder().index("0").arity("3").type(int[].class).build(); assertTrue(positional.isMultiValue()); spec.addPositional(positional); CommandLine commandLine = new CommandLine(spec); commandLine.parse("1", "2", "3"); assertArrayEquals(new int[] {1, 2, 3}, (int[]) spec.positionalParameters().get(0).getValue()); }
@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); }
@Test public void testMultiValuePositionalParamWithListWithoutAuxTypes() { CommandSpec spec = CommandSpec.create(); PositionalParamSpec positional = PositionalParamSpec.builder().index("0").arity("3").type(List.class).build(); assertTrue(positional.isMultiValue()); spec.addPositional(positional); CommandLine commandLine = new CommandLine(spec); commandLine.parse("1", "2", "3"); assertEquals(Arrays.asList("1", "2", "3"), spec.positionalParameters().get(0).getValue()); }