@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 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 testUseSimplifiedAtFilesFromSystemPropertyCaseInsensitive() { ParserSpec parser = new ParserSpec(); assertFalse(parser.useSimplifiedAtFiles()); System.setProperty("picocli.useSimplifiedAtFiles", "TRUE"); assertTrue(parser.useSimplifiedAtFiles()); }
@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); }
@Test public void testUseSimplifiedAtFilesFromEmptySystemProperty() { ParserSpec parser = new ParserSpec(); assertFalse(parser.useSimplifiedAtFiles()); System.setProperty("picocli.useSimplifiedAtFiles", ""); assertTrue(parser.useSimplifiedAtFiles()); }
@Test public void testCommandSpecParserSetter() { CommandSpec spec = CommandSpec.wrapWithoutInspection(null); ParserSpec old = spec.parser(); assertSame(old, spec.parser()); assertFalse(spec.parser().collectErrors()); assertFalse(spec.parser().caseInsensitiveEnumValuesAllowed()); ParserSpec update = new ParserSpec().collectErrors(true).caseInsensitiveEnumValuesAllowed(true); spec.parser(update); assertSame(old, spec.parser()); assertTrue(spec.parser().collectErrors()); assertTrue(spec.parser().caseInsensitiveEnumValuesAllowed()); }
@Test public void testUseSimplifiedAtFilesIsOverriddenBySystemProperty() { ParserSpec parser = new ParserSpec(); assertFalse(parser.useSimplifiedAtFiles()); parser.useSimplifiedAtFiles(true); System.setProperty("picocli.useSimplifiedAtFiles", "false"); assertFalse(parser.useSimplifiedAtFiles()); }
@Test public void testUseSimplifiedAtFilesFromEmptySystemProperty() { ParserSpec parser = new ParserSpec(); assertFalse(parser.useSimplifiedAtFiles()); System.setProperty("picocli.useSimplifiedAtFiles", ""); assertTrue(parser.useSimplifiedAtFiles()); }
@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 testUseSimplifiedAtFilesFromSystemPropertyCaseInsensitive() { ParserSpec parser = new ParserSpec(); assertFalse(parser.useSimplifiedAtFiles()); System.setProperty("picocli.useSimplifiedAtFiles", "TRUE"); assertTrue(parser.useSimplifiedAtFiles()); }
@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 testUseSimplifiedAtFilesCanBeSetProgrammatically() { ParserSpec parser = new ParserSpec(); assertFalse(parser.useSimplifiedAtFiles()); parser.useSimplifiedAtFiles(true); assertTrue(parser.useSimplifiedAtFiles()); }
@Test public void testUseSimplifiedAtFilesFromSystemProperty() { ParserSpec parser = new ParserSpec(); assertFalse(parser.useSimplifiedAtFiles()); System.setProperty("picocli.useSimplifiedAtFiles", "true"); assertTrue(parser.useSimplifiedAtFiles()); }
@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); }
@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); }