@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 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 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 testPositionalDefaultDescriptionIsEmptyArray() { assertArrayEquals(new String[0], CommandLine.Model.PositionalParamSpec.builder().build().description()); } @Test
@Test public void testPositionalDefaultSplitRegexIsEmptyString() { assertEquals("", CommandLine.Model.PositionalParamSpec.builder().build().splitRegex()); } @Test
@Test public void testPositionalDefaultAuxiliaryTypesIsDerivedFromType() { assertArrayEquals(new Class[] {String.class}, CommandLine.Model.PositionalParamSpec.builder().build().auxiliaryTypes()); assertArrayEquals(new Class[] {int.class}, CommandLine.Model.PositionalParamSpec.builder().type(int.class).build().auxiliaryTypes()); }
@Test public void testPositionalAuxiliaryTypeOverridesDefaultType() { assertEquals(int.class, CommandLine.Model.PositionalParamSpec.builder().auxiliaryTypes(int.class).build().type()); assertEquals(int.class, CommandLine.Model.PositionalParamSpec.builder().arity("0").auxiliaryTypes(int.class).build().type()); assertEquals(int.class, CommandLine.Model.PositionalParamSpec.builder().arity("1").auxiliaryTypes(int.class).build().type()); assertEquals(int.class, CommandLine.Model.PositionalParamSpec.builder().arity("0..1").auxiliaryTypes(int.class).build().type()); assertEquals(int.class, CommandLine.Model.PositionalParamSpec.builder().arity("2").auxiliaryTypes(int.class).build().type()); assertEquals(int.class, CommandLine.Model.PositionalParamSpec.builder().arity("0..2").auxiliaryTypes(int.class).build().type()); assertEquals(int.class, CommandLine.Model.PositionalParamSpec.builder().arity("*").auxiliaryTypes(int.class).build().type()); } @Test
@Test public void testMinimalParameterRenderer() { Help.MinimalParameterRenderer renderer = new Help.MinimalParameterRenderer(); Text[][] texts = renderer.render(PositionalParamSpec.builder().build(), Help.createMinimalParamLabelRenderer(), new ColorScheme()); assertEquals("", texts[0][1].plainString()); }
@SuppressWarnings("unchecked") @Test(expected = UnsupportedOperationException.class) public void testNoDefaultProviderThrowsUnsupportedOperation() throws Exception { Class<IDefaultValueProvider> c = (Class<IDefaultValueProvider>) Class.forName("picocli.CommandLine$NoDefaultProvider"); IDefaultValueProvider provider = CommandLine.defaultFactory().create(c); assertNotNull(provider); provider.defaultValue(CommandLine.Model.PositionalParamSpec.builder().build()); }
@Test public void testPositionalDefaultArityIsOneIfTypeBoolean() { assertEquals(Range.valueOf("1"), CommandLine.Model.PositionalParamSpec.builder().type(boolean.class).build().arity()); assertEquals(Range.valueOf("1"), CommandLine.Model.PositionalParamSpec.builder().type(Boolean.class).build().arity()); }
@Test public void testPositionalDefaultRequiredIsFalse() { assertFalse(CommandLine.Model.PositionalParamSpec.builder().build().required()); } @Test
@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 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 testUsageHelpPositional_empty() { CommandSpec spec = CommandSpec.create(); spec.addPositional(PositionalParamSpec.builder().build()); CommandLine commandLine = new CommandLine(spec); String actual = usageString(commandLine, Ansi.OFF); String expected = String.format("" + "Usage: <main class> PARAM...%n" + " PARAM...%n"); assertEquals(expected, actual); }
@Test public void testArgSpecBuilderHasInitialValue() { PositionalParamSpec.Builder positional = PositionalParamSpec.builder() .hasInitialValue(true); assertEquals(true, positional.hasInitialValue()); assertEquals(false, positional.hasInitialValue(false).hasInitialValue()); }
@SuppressWarnings("deprecation") @Test public void testArgSpecSetValueWithCommandLineCallsSetter() { final Object[] newVal = new Object[1]; ISetter setter = new ISetter() { public <T> T set(T value) { newVal[0] = value; return null; } }; PositionalParamSpec positional = PositionalParamSpec.builder().setter(setter).build(); positional.setValue("abc", new CommandLine(CommandLine.Model.CommandSpec.create())); assertEquals("abc", newVal[0]); }
@Test public void testArgSpecGetter() { IGetter getter = new IGetter() { public <T> T get() { return null; } }; PositionalParamSpec positional = PositionalParamSpec.builder().getter(getter).build(); assertSame(getter, positional.getter()); }
@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); }