@Test public void testPositionalParamSpec_DefaultValue_map_replacedByCommandLineValue() { CommandSpec cmd = CommandSpec.create().add(PositionalParamSpec .builder().defaultValue("1=A,2=B,3=C").splitRegex(",").type(Map.class).auxiliaryTypes(Integer.class, String.class).build()); ParseResult parseResult = new CommandLine(cmd).parseArgs("4=X,5=Y,6=Z"); Map<Integer, String> expected = new HashMap<Integer, String>(); expected.put(4, "X"); expected.put(5, "Y"); expected.put(6, "Z"); assertEquals(expected, parseResult.matchedPositionalValue(0, Collections.emptyMap())); }
@Test public void testArgSpecSplitWithEscapedBackslashInsideQuote() { PositionalParamSpec positional = PositionalParamSpec.builder().splitRegex(";").build(); System.setProperty("picocli.trace", "DEBUG"); String value = "\"abc\\\\\\\";def\""; String[] values = positional.splitValue(value, new CommandLine.Model.ParserSpec().splitQuotedStrings(false), CommandLine.Range.valueOf("1"), 1); System.clearProperty("picocli.trace"); assertArrayEquals(new String[] {"\"abc\\\\\\\";def\""}, values); }
@Test public void testArgSpecSplitWithEscapedBackslashOutsideQuote() { PositionalParamSpec positional = PositionalParamSpec.builder().splitRegex(";").build(); System.setProperty("picocli.trace", "DEBUG"); String value = "\\\\\"abc\\\";def\";\\\"a\\"; String[] values = positional.splitValue(value, new CommandLine.Model.ParserSpec().splitQuotedStrings(false), CommandLine.Range.valueOf("1"), 1); System.clearProperty("picocli.trace"); assertArrayEquals(new String[] {"\\\\\"abc\\\";def\"", "\\\"a\\"}, values); }
@Test public void testArgSpecSplitValue_RespectsQuotedValuesByDefault() { ParserSpec parser = new ParserSpec(); ArgSpec spec = PositionalParamSpec.builder().splitRegex(",").build(); String[] actual = spec.splitValue("a,b,\"c,d,e\",f", parser, Range.valueOf("0"), 0); assertArrayEquals(new String[]{"a", "b", "\"c,d,e\"", "f"}, actual); }
@Test public void testPositionalParamSpec_DefaultValue_array_replacedByCommandLineValue() { CommandSpec cmd = CommandSpec.create().add(PositionalParamSpec .builder().defaultValue("1,2,3").splitRegex(",").type(int[].class).build()); ParseResult parseResult = new CommandLine(cmd).parseArgs("4,5,6"); assertArrayEquals(new int[]{4, 5, 6}, parseResult.matchedPositionalValue(0, new int[0])); }
@Test public void testArgSpecSplitWithEscapedBackslashOutsideQuote() { PositionalParamSpec positional = PositionalParamSpec.builder().splitRegex(";").build(); System.setProperty("picocli.trace", "DEBUG"); String value = "\\\\\"abc\\\";def\";\\\"a\\"; String[] values = positional.splitValue(value, new CommandLine.Model.ParserSpec().splitQuotedStrings(false), CommandLine.Range.valueOf("1"), 1); System.clearProperty("picocli.trace"); assertArrayEquals(new String[] {"\\\\\"abc\\\";def\"", "\\\"a\\"}, values); }
@Test public void testArgSpecSplitValue_MultipleQuotedValues() { ParserSpec parser = new ParserSpec(); ArgSpec spec = PositionalParamSpec.builder().splitRegex(",").build(); String[] actual = spec.splitValue("a,b,\"c,d,e\",f,\"xxx,yyy\"", parser, Range.valueOf("0"), 0); assertArrayEquals(new String[]{"a", "b", "\"c,d,e\"", "f", "\"xxx,yyy\""}, actual); }
builder.auxiliaryTypes(Integer.class, Integer.TYPE) .type(Double.TYPE) .splitRegex(",,,") .required(true) .defaultValue("DEF") assertArrayEquals(new Class[]{Integer.class, Integer.TYPE}, builder.auxiliaryTypes()); assertEquals(Double.TYPE, builder.type()); assertEquals(",,,", builder.splitRegex()); assertTrue(builder.required()); assertEquals("DEF", builder.defaultValue());
@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 testPositionalParamSpec_defaultValue_overwritesInitialValue() { @Command(showDefaultValues = true) class Params { @Parameters(paramLabel = "INT", description = "the array") int[] value = {1, 5, 11, 23}; } CommandLine cmd = new CommandLine(new Params()); PositionalParamSpec x = cmd.getCommandSpec().positionalParameters().get(0).toBuilder().defaultValue("5,4,3,2,1").splitRegex(",").build(); cmd = new CommandLine(CommandSpec.create().add(x)); cmd.getCommandSpec().usageMessage().showDefaultValues(true); String result = usageString(cmd, Help.Ansi.OFF); assertEquals(format("" + "Usage: <main class> [INT[,INT...]...]%n" + " [INT[,INT...]...] the array%n" + " Default: 5,4,3,2,1%n"), result); }
@Test public void testArgSpecSplitUnbalancedQuotedValueDebug() { PositionalParamSpec positional = PositionalParamSpec.builder().splitRegex(";").build(); System.setProperty("picocli.trace", "DEBUG"); String value = "\"abc\\\";def"; String[] values = positional.splitValue(value, new CommandLine.Model.ParserSpec().splitQuotedStrings(false), CommandLine.Range.valueOf("1"), 1); System.clearProperty("picocli.trace"); assertArrayEquals(new String[] {"\"abc\\\"", "def"}, values); } @Test
@Test public void testArgSpecSplitBalancedQuotedValueDebug() { PositionalParamSpec positional = PositionalParamSpec.builder().splitRegex(";").build(); System.setProperty("picocli.trace", "DEBUG"); String value = "\"abc\\\";def\""; String[] values = positional.splitValue(value, new CommandLine.Model.ParserSpec().splitQuotedStrings(false), CommandLine.Range.valueOf("1"), 1); System.clearProperty("picocli.trace"); assertArrayEquals(new String[] {"\"abc\\\";def\""}, values); }
@Test public void testArgSpecSplitValueDebug() { PositionalParamSpec positional = PositionalParamSpec.builder().splitRegex("b").build(); System.setProperty("picocli.trace", "DEBUG"); String[] values = positional.splitValue("abc", new CommandLine.Model.ParserSpec().splitQuotedStrings(true), CommandLine.Range.valueOf("1"), 1); System.clearProperty("picocli.trace"); assertArrayEquals(new String[] {"a", "c"}, values); }
@Test public void testArgSpecSplitValue_MultipleQuotedValues_QuotesTrimmedIfRequested() { ParserSpec parser = new ParserSpec().trimQuotes(true); ArgSpec spec = PositionalParamSpec.builder().splitRegex(",").build(); String[] actual = spec.splitValue("a,b,\"c,d,e\",f,\"xxx,yyy\"", parser, Range.valueOf("0"), 0); assertArrayEquals(new String[]{"a", "b", "c,d,e", "f", "xxx,yyy"}, actual); }
@Test public void testArgSpecSplitValue_RespectsQuotedValuesByDefault() { ParserSpec parser = new ParserSpec(); ArgSpec spec = PositionalParamSpec.builder().splitRegex(",").build(); String[] actual = spec.splitValue("a,b,\"c,d,e\",f", parser, Range.valueOf("0"), 0); assertArrayEquals(new String[]{"a", "b", "\"c,d,e\"", "f"}, actual); }
@Test public void testPositionalParamSpec_DefaultValue_list_replacedByCommandLineValue() { CommandSpec cmd = CommandSpec.create().add(PositionalParamSpec .builder().defaultValue("1,2,3").splitRegex(",").type(List.class).auxiliaryTypes(Integer.class).build()); ParseResult parseResult = new CommandLine(cmd).parseArgs("4,5,6"); assertEquals(Arrays.asList(4, 5, 6), parseResult.matchedPositionalValue(0, Collections.emptyList())); }
@Test public void testPositionalParamSpec_DefaultValue_array_replacedByCommandLineValue() { CommandSpec cmd = CommandSpec.create().add(PositionalParamSpec .builder().defaultValue("1,2,3").splitRegex(",").type(int[].class).build()); ParseResult parseResult = new CommandLine(cmd).parseArgs("4,5,6"); assertArrayEquals(new int[]{4, 5, 6}, parseResult.matchedPositionalValue(0, new int[0])); }
@Test public void testArgSpecSplitValue_MultipleQuotedValues() { ParserSpec parser = new ParserSpec(); ArgSpec spec = PositionalParamSpec.builder().splitRegex(",").build(); String[] actual = spec.splitValue("a,b,\"c,d,e\",f,\"xxx,yyy\"", parser, Range.valueOf("0"), 0); assertArrayEquals(new String[]{"a", "b", "\"c,d,e\"", "f", "\"xxx,yyy\""}, actual); }
@Test public void testArgSpecSplitValue_SplitsQuotedValuesIfConfigured() { ParserSpec parser = new ParserSpec().splitQuotedStrings(true); ArgSpec spec = PositionalParamSpec.builder().splitRegex(",").build(); String[] actual = spec.splitValue("a,b,\"c,d,e\",f", parser, Range.valueOf("0"), 0); assertArrayEquals(new String[]{"a", "b", "\"c", "d" , "e\"", "f"}, actual); }