[BUILD] removed picocli tests from core tests; they do not add value here and occasionally fail when building Log4j on a console that supports ANSI colors
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/dd8ded97 Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/dd8ded97 Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/dd8ded97 Branch: refs/heads/release-2.x Commit: dd8ded97adc3fb2422eadc6c67a2da9c327f4497 Parents: ec10b16 Author: rpopma <rpo...@apache.org> Authored: Wed Mar 21 20:07:40 2018 +0900 Committer: rpopma <rpo...@apache.org> Committed: Wed Mar 21 20:07:40 2018 +0900 ---------------------------------------------------------------------- .../tools/picocli/CommandLineArityTest.java | 898 ----- .../core/tools/picocli/CommandLineHelpTest.java | 2536 -------------- .../core/tools/picocli/CommandLineTest.java | 3188 ------------------ .../core/tools/picocli/CustomLayoutDemo.java | 264 -- .../logging/log4j/core/tools/picocli/Demo.java | 719 ---- 5 files changed, 7605 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/dd8ded97/log4j-core/src/test/java/org/apache/logging/log4j/core/tools/picocli/CommandLineArityTest.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/tools/picocli/CommandLineArityTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/tools/picocli/CommandLineArityTest.java deleted file mode 100644 index e35b593..0000000 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/tools/picocli/CommandLineArityTest.java +++ /dev/null @@ -1,898 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache license, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the license for the specific language governing permissions and - * limitations under the license. - */ -package org.apache.logging.log4j.core.tools.picocli; - -import java.io.File; -import java.net.InetAddress; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.TimeUnit; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.apache.logging.log4j.core.tools.picocli.CommandLine.*; - -import static org.junit.Assert.*; - -public class CommandLineArityTest { - @Before public void setUp() { System.clearProperty("picocli.trace"); } - @After public void tearDown() { System.clearProperty("picocli.trace"); } - - private static void setTraceLevel(String level) { - System.setProperty("picocli.trace", level); - } - @Test - public void testArityConstructor_fixedRange() { - Range arity = new Range(1, 23, false, false, null); - assertEquals("min", 1, arity.min); - assertEquals("max", 23, arity.max); - assertEquals("1..23", arity.toString()); - assertEquals(Range.valueOf("1..23"), arity); - } - @Test - public void testArityConstructor_variableRange() { - Range arity = new Range(1, Integer.MAX_VALUE, true, false, null); - assertEquals("min", 1, arity.min); - assertEquals("max", Integer.MAX_VALUE, arity.max); - assertEquals("1..*", arity.toString()); - assertEquals(Range.valueOf("1..*"), arity); - } - @Test - public void testArityForOption_booleanFieldImplicitArity0() throws Exception { - Range arity = Range.optionArity(CommandLineTest.SupportedTypes.class.getDeclaredField("booleanField")); - assertEquals(Range.valueOf("0"), arity); - assertEquals("0", arity.toString()); - } - @Test - public void testArityForOption_intFieldImplicitArity1() throws Exception { - Range arity = Range.optionArity(CommandLineTest.SupportedTypes.class.getDeclaredField("intField")); - assertEquals(Range.valueOf("1"), arity); - assertEquals("1", arity.toString()); - } - @Test - public void testArityForOption_isExplicitlyDeclaredValue() throws Exception { - class Params { - @Option(names = "-timeUnitList", type = TimeUnit.class, arity = "3") List<TimeUnit> timeUnitList; - } - Range arity = Range.optionArity(Params.class.getDeclaredField("timeUnitList")); - assertEquals(Range.valueOf("3"), arity); - assertEquals("3", arity.toString()); - } - @Test - public void testArityForOption_listFieldImplicitArity1() throws Exception { - class ImplicitList { @Option(names = "-a") List<Integer> listIntegers; } - Range arity = Range.optionArity(ImplicitList.class.getDeclaredField("listIntegers")); - assertEquals(Range.valueOf("1"), arity); - assertEquals("1", arity.toString()); - } - @Test - public void testArityForOption_arrayFieldImplicitArity1() throws Exception { - class ImplicitList { @Option(names = "-a") int[] intArray; } - Range arity = Range.optionArity(ImplicitList.class.getDeclaredField("intArray")); - assertEquals(Range.valueOf("1"), arity); - assertEquals("1", arity.toString()); - } - @Test - public void testArityForParameters_booleanFieldImplicitArity1() throws Exception { - class ImplicitBoolField { @Parameters boolean boolSingleValue; } - Range arity = Range.parameterArity(ImplicitBoolField.class.getDeclaredField("boolSingleValue")); - assertEquals(Range.valueOf("1"), arity); - assertEquals("1", arity.toString()); - } - @Test - public void testArityForParameters_intFieldImplicitArity1() throws Exception { - class ImplicitSingleField { @Parameters int intSingleValue; } - Range arity = Range.parameterArity(ImplicitSingleField.class.getDeclaredField("intSingleValue")); - assertEquals(Range.valueOf("1"), arity); - assertEquals("1", arity.toString()); - } - @Test - public void testArityForParameters_listFieldImplicitArity0_1() throws Exception { - class Params { - @Parameters(type = Integer.class) List<Integer> list; - } - Range arity = Range.parameterArity(Params.class.getDeclaredField("list")); - assertEquals(Range.valueOf("0..1"), arity); - assertEquals("0..1", arity.toString()); - } - @Test - public void testArityForParameters_arrayFieldImplicitArity0_1() throws Exception { - class Args { - @Parameters File[] inputFiles; - } - Range arity = Range.parameterArity(Args.class.getDeclaredField("inputFiles")); - assertEquals(Range.valueOf("0..1"), arity); - assertEquals("0..1", arity.toString()); - } - @Test - public void testArrayOptionsWithArity0_nConsumeAllArguments() { - final double[] DEFAULT_PARAMS = new double[] {1, 2}; - class ArrayOptionsArity0_nAndParameters { - @Parameters double[] doubleParams = DEFAULT_PARAMS; - @Option(names = "-doubles", arity = "0..*") double[] doubleOptions; - } - ArrayOptionsArity0_nAndParameters - params = CommandLine.populateCommand(new ArrayOptionsArity0_nAndParameters(), "-doubles 1.1 2.2 3.3 4.4".split(" ")); - assertArrayEquals(Arrays.toString(params.doubleOptions), - new double[] {1.1, 2.2, 3.3, 4.4}, params.doubleOptions, 0.000001); - assertArrayEquals(DEFAULT_PARAMS, params.doubleParams, 0.000001); - } - - @Test - public void testArrayOptionsWithArity1_nConsumeAllArguments() { - class ArrayOptionsArity1_nAndParameters { - @Parameters double[] doubleParams; - @Option(names = "-doubles", arity = "1..*") double[] doubleOptions; - } - ArrayOptionsArity1_nAndParameters - params = CommandLine.populateCommand(new ArrayOptionsArity1_nAndParameters(), "-doubles 1.1 2.2 3.3 4.4".split(" ")); - assertArrayEquals(Arrays.toString(params.doubleOptions), - new double[] {1.1, 2.2, 3.3, 4.4}, params.doubleOptions, 0.000001); - assertArrayEquals(null, params.doubleParams, 0.000001); - } - - @Test - public void testArrayOptionsWithArity2_nConsumeAllArguments() { - class ArrayOptionsArity2_nAndParameters { - @Parameters double[] doubleParams; - @Option(names = "-doubles", arity = "2..*") double[] doubleOptions; - } - ArrayOptionsArity2_nAndParameters - params = CommandLine.populateCommand(new ArrayOptionsArity2_nAndParameters(), "-doubles 1.1 2.2 3.3 4.4".split(" ")); - assertArrayEquals(Arrays.toString(params.doubleOptions), - new double[] {1.1, 2.2, 3.3, 4.4}, params.doubleOptions, 0.000001); - assertArrayEquals(null, params.doubleParams, 0.000001); - } - - @Test - public void testArrayOptionArity2_nConsumesAllArgumentsUpToClusteredOption() { - class ArrayOptionsArity2_nAndParameters { - @Parameters String[] stringParams; - @Option(names = "-s", arity = "2..*") String[] stringOptions; - @Option(names = "-v") boolean verbose; - @Option(names = "-f") File file; - } - ArrayOptionsArity2_nAndParameters - params = CommandLine.populateCommand(new ArrayOptionsArity2_nAndParameters(), "-s 1.1 2.2 3.3 4.4 -vfFILE 5.5".split(" ")); - assertArrayEquals(Arrays.toString(params.stringOptions), - new String[] {"1.1", "2.2", "3.3", "4.4"}, params.stringOptions); - assertTrue(params.verbose); - assertEquals(new File("FILE"), params.file); - assertArrayEquals(new String[] {"5.5"}, params.stringParams); - } - - @Test - public void testArrayOptionArity2_nConsumesAllArgumentIncludingQuotedSimpleOption() { - class ArrayOptionArity2_nAndParameters { - @Parameters String[] stringParams; - @Option(names = "-s", arity = "2..*") String[] stringOptions; - @Option(names = "-v") boolean verbose; - @Option(names = "-f") File file; - } - ArrayOptionArity2_nAndParameters - params = CommandLine.populateCommand(new ArrayOptionArity2_nAndParameters(), "-s 1.1 2.2 3.3 4.4 \"-v\" \"-f\" \"FILE\" 5.5".split(" ")); - assertArrayEquals(Arrays.toString(params.stringOptions), - new String[] {"1.1", "2.2", "3.3", "4.4", "-v", "-f", "FILE", "5.5"}, params.stringOptions); - assertFalse("verbose", params.verbose); - assertNull("file", params.file); - assertArrayEquals(null, params.stringParams); - } - - @Test - public void testArrayOptionArity2_nConsumesAllArgumentIncludingQuotedClusteredOption() { - class ArrayOptionArity2_nAndParameters { - @Parameters String[] stringParams; - @Option(names = "-s", arity = "2..*") String[] stringOptions; - @Option(names = "-v") boolean verbose; - @Option(names = "-f") File file; - } - ArrayOptionArity2_nAndParameters - params = CommandLine.populateCommand(new ArrayOptionArity2_nAndParameters(), "-s 1.1 2.2 3.3 4.4 \"-vfFILE\" 5.5".split(" ")); - assertArrayEquals(Arrays.toString(params.stringOptions), - new String[] {"1.1", "2.2", "3.3", "4.4", "-vfFILE", "5.5"}, params.stringOptions); - assertFalse("verbose", params.verbose); - assertNull("file", params.file); - assertArrayEquals(null, params.stringParams); - } - - @Test - public void testArrayOptionArity2_nConsumesAllArgumentsUpToNextSimpleOption() { - class ArrayOptionArity2_nAndParameters { - @Parameters double[] doubleParams; - @Option(names = "-s", arity = "2..*") String[] stringOptions; - @Option(names = "-v") boolean verbose; - @Option(names = "-f") File file; - } - ArrayOptionArity2_nAndParameters - params = CommandLine.populateCommand(new ArrayOptionArity2_nAndParameters(), "-s 1.1 2.2 3.3 4.4 -v -f=FILE 5.5".split(" ")); - assertArrayEquals(Arrays.toString(params.stringOptions), - new String[] {"1.1", "2.2", "3.3", "4.4"}, params.stringOptions); - assertTrue(params.verbose); - assertEquals(new File("FILE"), params.file); - assertArrayEquals(new double[] {5.5}, params.doubleParams, 0.000001); - } - - @Test - public void testArrayOptionArity2_nConsumesAllArgumentsUpToNextOptionWithAttachment() { - class ArrayOptionArity2_nAndParameters { - @Parameters double[] doubleParams; - @Option(names = "-s", arity = "2..*") String[] stringOptions; - @Option(names = "-v") boolean verbose; - @Option(names = "-f") File file; - } - ArrayOptionArity2_nAndParameters - params = CommandLine.populateCommand(new ArrayOptionArity2_nAndParameters(), "-s 1.1 2.2 3.3 4.4 -f=FILE -v 5.5".split(" ")); - assertArrayEquals(Arrays.toString(params.stringOptions), - new String[] {"1.1", "2.2", "3.3", "4.4"}, params.stringOptions); - assertTrue(params.verbose); - assertEquals(new File("FILE"), params.file); - assertArrayEquals(new double[] {5.5}, params.doubleParams, 0.000001); - } - - @Test - public void testArrayOptionArityNConsumeAllArguments() { - class ArrayOptionArityNAndParameters { - @Parameters char[] charParams; - @Option(names = "-chars", arity = "*") char[] charOptions; - } - ArrayOptionArityNAndParameters - params = CommandLine.populateCommand(new ArrayOptionArityNAndParameters(), "-chars a b c d".split(" ")); - assertArrayEquals(Arrays.toString(params.charOptions), - new char[] {'a', 'b', 'c', 'd'}, params.charOptions); - assertArrayEquals(null, params.charParams); - } - @Test - public void testMissingRequiredParams() { - class Example { - @Parameters(index = "1", arity = "0..1") String optional; - @Parameters(index = "0") String mandatory; - } - try { CommandLine.populateCommand(new Example(), new String[] {"mandatory"}); } - catch (MissingParameterException ex) { fail(); } - - try { - CommandLine.populateCommand(new Example(), new String[0]); - fail("Should not accept missing mandatory parameter"); - } catch (MissingParameterException ex) { - assertEquals("Missing required parameter: <mandatory>", ex.getMessage()); - } - } - @Test - public void testMissingRequiredParams1() { - class Tricky1 { - @Parameters(index = "2") String anotherMandatory; - @Parameters(index = "1", arity = "0..1") String optional; - @Parameters(index = "0") String mandatory; - } - try { - CommandLine.populateCommand(new Tricky1(), new String[0]); - fail("Should not accept missing mandatory parameter"); - } catch (MissingParameterException ex) { - assertEquals("Missing required parameters: <mandatory>, <anotherMandatory>", ex.getMessage()); - } - try { - CommandLine.populateCommand(new Tricky1(), new String[] {"firstonly"}); - fail("Should not accept missing mandatory parameter"); - } catch (MissingParameterException ex) { - assertEquals("Missing required parameter: <anotherMandatory>", ex.getMessage()); - } - } - @Test - public void testMissingRequiredParams2() { - class Tricky2 { - @Parameters(index = "2", arity = "0..1") String anotherOptional; - @Parameters(index = "1", arity = "0..1") String optional; - @Parameters(index = "0") String mandatory; - } - try { CommandLine.populateCommand(new Tricky2(), new String[] {"mandatory"}); } - catch (MissingParameterException ex) { fail(); } - - try { - CommandLine.populateCommand(new Tricky2(), new String[0]); - fail("Should not accept missing mandatory parameter"); - } catch (MissingParameterException ex) { - assertEquals("Missing required parameter: <mandatory>", ex.getMessage()); - } - } - @Test - public void testMissingRequiredParamsWithOptions() { - class Tricky3 { - @Option(names="-v") boolean more; - @Option(names="-t") boolean any; - @Parameters(index = "1") String alsoMandatory; - @Parameters(index = "0") String mandatory; - } - try { - CommandLine.populateCommand(new Tricky3(), new String[] {"-t", "-v", "mandatory"}); - fail("Should not accept missing mandatory parameter"); - } catch (MissingParameterException ex) { - assertEquals("Missing required parameter: <alsoMandatory>", ex.getMessage()); - } - - try { - CommandLine.populateCommand(new Tricky3(), new String[] { "-t", "-v"}); - fail("Should not accept missing two mandatory parameters"); - } catch (MissingParameterException ex) { - assertEquals("Missing required parameters: <mandatory>, <alsoMandatory>", ex.getMessage()); - } - } - @Test - public void testMissingRequiredParamWithOption() { - class Tricky3 { - @Option(names="-t") boolean any; - @Parameters(index = "0") String mandatory; - } - try { - CommandLine.populateCommand(new Tricky3(), new String[] {"-t"}); - fail("Should not accept missing mandatory parameter"); - } catch (MissingParameterException ex) { - assertEquals("Missing required parameter: <mandatory>", ex.getMessage()); - } - } - @Test - public void testNoMissingRequiredParamErrorIfHelpOptionSpecified() { - class App { - @Parameters(hidden = true) // "hidden": don't show this parameter in usage help message - List<String> allParameters; // no "index" attribute: captures _all_ arguments (as Strings) - - @Parameters(index = "0") InetAddress host; - @Parameters(index = "1") int port; - @Parameters(index = "2..*") File[] files; - - @Option(names = "-?", help = true) boolean help; - } - CommandLine.populateCommand(new App(), new String[] {"-?"}); - try { - CommandLine.populateCommand(new App(), new String[0]); - fail("Should not accept missing mandatory parameter"); - } catch (MissingParameterException ex) { - assertEquals("Missing required parameters: <host>, <port>", ex.getMessage()); - } - } - @Test - public void testNoMissingRequiredParamErrorWithLabelIfHelpOptionSpecified() { - class App { - @Parameters(hidden = true) // "hidden": don't show this parameter in usage help message - List<String> allParameters; // no "index" attribute: captures _all_ arguments (as Strings) - - @Parameters(index = "0", paramLabel = "HOST") InetAddress host; - @Parameters(index = "1", paramLabel = "PORT") int port; - @Parameters(index = "2..*", paramLabel = "FILES") File[] files; - - @Option(names = "-?", help = true) boolean help; - } - CommandLine.populateCommand(new App(), new String[] {"-?"}); - try { - CommandLine.populateCommand(new App(), new String[0]); - fail("Should not accept missing mandatory parameter"); - } catch (MissingParameterException ex) { - assertEquals("Missing required parameters: HOST, PORT", ex.getMessage()); - } - } - - private static class BooleanOptionsArity0_nAndParameters { - @Parameters String[] params; - @Option(names = "-bool", arity = "0..*") boolean bool; - @Option(names = {"-v", "-other"}, arity="0..*") boolean vOrOther; - @Option(names = "-r") boolean rBoolean; - } - @Test - public void testBooleanOptionsArity0_nConsume1ArgumentIfPossible() { // ignores varargs - BooleanOptionsArity0_nAndParameters - params = CommandLine.populateCommand(new BooleanOptionsArity0_nAndParameters(), "-bool false false true".split(" ")); - assertFalse(params.bool); - assertArrayEquals(new String[]{ "false", "true"}, params.params); - } - @Test - public void testBooleanOptionsArity0_nRequiresNoArgument() { // ignores varargs - BooleanOptionsArity0_nAndParameters - params = CommandLine.populateCommand(new BooleanOptionsArity0_nAndParameters(), "-bool".split(" ")); - assertTrue(params.bool); - } - @Test - public void testBooleanOptionsArity0_nConsume0ArgumentsIfNextArgIsOption() { // ignores varargs - BooleanOptionsArity0_nAndParameters - params = CommandLine.populateCommand(new BooleanOptionsArity0_nAndParameters(), "-bool -other".split(" ")); - assertTrue(params.bool); - assertTrue(params.vOrOther); - } - @Test - public void testBooleanOptionsArity0_nConsume0ArgumentsIfNextArgIsParameter() { // ignores varargs - BooleanOptionsArity0_nAndParameters - params = CommandLine.populateCommand(new BooleanOptionsArity0_nAndParameters(), "-bool 123 -other".split(" ")); - assertTrue(params.bool); - assertTrue(params.vOrOther); - assertArrayEquals(new String[]{ "123"}, params.params); - } - @Test - public void testBooleanOptionsArity0_nFailsIfAttachedParamNotABoolean() { // ignores varargs - try { - CommandLine.populateCommand(new BooleanOptionsArity0_nAndParameters(), "-bool=123 -other".split(" ")); - fail("was able to assign 123 to boolean"); - } catch (CommandLine.ParameterException ex) { - assertEquals("'123' is not a boolean for option '-bool'", ex.getMessage()); - } - } - @Test - public void testBooleanOptionsArity0_nShortFormFailsIfAttachedParamNotABoolean() { // ignores varargs - try { - CommandLine.populateCommand(new BooleanOptionsArity0_nAndParameters(), "-rv234 -bool".split(" ")); - fail("Expected exception"); - } catch (UnmatchedArgumentException ok) { - assertEquals("Unmatched argument [-234]", ok.getMessage()); - } - } - @Test - public void testBooleanOptionsArity0_nShortFormFailsIfAttachedParamNotABooleanWithUnmatchedArgsAllowed() { // ignores varargs - setTraceLevel("OFF"); - CommandLine cmd = new CommandLine(new BooleanOptionsArity0_nAndParameters()).setUnmatchedArgumentsAllowed(true); - cmd.parse("-rv234 -bool".split(" ")); - assertEquals(Arrays.asList("-234"), cmd.getUnmatchedArguments()); - } - @Test - public void testBooleanOptionsArity0_nShortFormFailsIfAttachedWithSepParamNotABoolean() { // ignores varargs - try { - CommandLine.populateCommand(new BooleanOptionsArity0_nAndParameters(), "-rv=234 -bool".split(" ")); - fail("was able to assign 234 to boolean"); - } catch (CommandLine.ParameterException ex) { - assertEquals("'234' is not a boolean for option '-v'", ex.getMessage()); - } - } - - private static class BooleanOptionsArity1_nAndParameters { - @Parameters boolean[] boolParams; - @Option(names = "-bool", arity = "1..*") boolean aBoolean; - } - @Test - public void testBooleanOptionsArity1_nConsume1Argument() { // ignores varargs - BooleanOptionsArity1_nAndParameters - params = CommandLine.populateCommand(new BooleanOptionsArity1_nAndParameters(), "-bool false false true".split(" ")); - assertFalse(params.aBoolean); - assertArrayEquals(new boolean[]{ false, true}, params.boolParams); - - params = CommandLine.populateCommand(new BooleanOptionsArity1_nAndParameters(), "-bool true false true".split(" ")); - assertTrue(params.aBoolean); - assertArrayEquals(new boolean[]{ false, true}, params.boolParams); - } - @Test - public void testBooleanOptionsArity1_nCaseInsensitive() { // ignores varargs - BooleanOptionsArity1_nAndParameters - params = CommandLine.populateCommand(new BooleanOptionsArity1_nAndParameters(), "-bool fAlsE false true".split(" ")); - assertFalse(params.aBoolean); - assertArrayEquals(new boolean[]{ false, true}, params.boolParams); - - params = CommandLine.populateCommand(new BooleanOptionsArity1_nAndParameters(), "-bool FaLsE false true".split(" ")); - assertFalse(params.aBoolean); - assertArrayEquals(new boolean[]{ false, true}, params.boolParams); - - params = CommandLine.populateCommand(new BooleanOptionsArity1_nAndParameters(), "-bool tRuE false true".split(" ")); - assertTrue(params.aBoolean); - assertArrayEquals(new boolean[]{ false, true}, params.boolParams); - } - @Test - public void testBooleanOptionsArity1_nErrorIfValueNotTrueOrFalse() { // ignores varargs - try { - CommandLine.populateCommand(new BooleanOptionsArity1_nAndParameters(), "-bool abc".split(" ")); - fail("Invalid format abc was accepted for boolean"); - } catch (CommandLine.ParameterException expected) { - assertEquals("'abc' is not a boolean for option '-bool'", expected.getMessage()); - } - } - @Test - public void testBooleanOptionsArity1_nErrorIfValueMissing() { - try { - CommandLine.populateCommand(new BooleanOptionsArity1_nAndParameters(), "-bool".split(" ")); - fail("Missing param was accepted for boolean with arity=1"); - } catch (CommandLine.ParameterException expected) { - assertEquals("Missing required parameter for option '-bool' at index 0 (<aBoolean>)", expected.getMessage()); - } - } - - @Test - public void testBooleanOptionArity0Consumes0Arguments() { - class BooleanOptionArity0AndParameters { - @Parameters boolean[] boolParams; - @Option(names = "-bool", arity = "0") boolean aBoolean; - } - BooleanOptionArity0AndParameters - params = CommandLine.populateCommand(new BooleanOptionArity0AndParameters(), "-bool true false true".split(" ")); - assertTrue(params.aBoolean); - assertArrayEquals(new boolean[]{true, false, true}, params.boolParams); - } - @Test(expected = MissingParameterException.class) - public void testSingleValueFieldDefaultMinArityIs1() { - CommandLine.populateCommand(new CommandLineTest.SupportedTypes(), "-Long"); - } - @Test - public void testSingleValueFieldDefaultMinArityIsOne() { - try { - CommandLine.populateCommand(new CommandLineTest.SupportedTypes(), "-Long", "-boolean"); - fail("should fail"); - } catch (CommandLine.ParameterException ex) { - assertEquals("Could not convert '-boolean' to Long for option '-Long'" + - ": java.lang.NumberFormatException: For input string: \"-boolean\"", ex.getMessage()); - } - } - - @Test - public void testIntOptionArity1_nConsumes1Argument() { // ignores varargs - class IntOptionArity1_nAndParameters { - @Parameters int[] intParams; - @Option(names = "-int", arity = "1..*") int anInt; - } - IntOptionArity1_nAndParameters - params = CommandLine.populateCommand(new IntOptionArity1_nAndParameters(), "-int 23 42 7".split(" ")); - assertEquals(23, params.anInt); - assertArrayEquals(new int[]{ 42, 7}, params.intParams); - } - - @Test - public void testArrayOptionsWithArity0Consume0Arguments() { - class OptionsArray0ArityAndParameters { - @Parameters double[] doubleParams; - @Option(names = "-doubles", arity = "0") double[] doubleOptions; - } - OptionsArray0ArityAndParameters - params = CommandLine.populateCommand(new OptionsArray0ArityAndParameters(), "-doubles 1.1 2.2 3.3 4.4".split(" ")); - assertArrayEquals(Arrays.toString(params.doubleOptions), - new double[0], params.doubleOptions, 0.000001); - assertArrayEquals(new double[]{1.1, 2.2, 3.3, 4.4}, params.doubleParams, 0.000001); - } - - @Test - public void testArrayOptionWithArity1Consumes1Argument() { - class Options1ArityAndParameters { - @Parameters double[] doubleParams; - @Option(names = "-doubles", arity = "1") double[] doubleOptions; - } - Options1ArityAndParameters - params = CommandLine.populateCommand(new Options1ArityAndParameters(), "-doubles 1.1 2.2 3.3 4.4".split(" ")); - assertArrayEquals(Arrays.toString(params.doubleOptions), - new double[] {1.1}, params.doubleOptions, 0.000001); - assertArrayEquals(new double[]{2.2, 3.3, 4.4}, params.doubleParams, 0.000001); - - // repeated occurrence - params = CommandLine.populateCommand(new Options1ArityAndParameters(), "-doubles 1.1 -doubles 2.2 -doubles 3.3 4.4".split(" ")); - assertArrayEquals(Arrays.toString(params.doubleOptions), - new double[] {1.1, 2.2, 3.3}, params.doubleOptions, 0.000001); - assertArrayEquals(new double[]{4.4}, params.doubleParams, 0.000001); - - } - - private static class ArrayOptionArity2AndParameters { - @Parameters double[] doubleParams; - @Option(names = "-doubles", arity = "2") double[] doubleOptions; - } - @Test - public void testArrayOptionWithArity2Consumes2Arguments() { - ArrayOptionArity2AndParameters - params = CommandLine.populateCommand(new ArrayOptionArity2AndParameters(), "-doubles 1.1 2.2 3.3 4.4".split(" ")); - assertArrayEquals(Arrays.toString(params.doubleOptions), - new double[] {1.1, 2.2, }, params.doubleOptions, 0.000001); - assertArrayEquals(new double[]{3.3, 4.4}, params.doubleParams, 0.000001); - - // repeated occurrence - params = CommandLine.populateCommand(new ArrayOptionArity2AndParameters(), "-doubles 1.1 2.2 -doubles 3.3 4.4 0".split(" ")); - assertArrayEquals(Arrays.toString(params.doubleOptions), - new double[] {1.1, 2.2, 3.3, 4.4 }, params.doubleOptions, 0.000001); - assertArrayEquals(new double[]{ 0.0 }, params.doubleParams, 0.000001); - } - @Test - public void testArrayOptionsWithArity2Consume2ArgumentsEvenIfFirstIsAttached() { - ArrayOptionArity2AndParameters - params = CommandLine.populateCommand(new ArrayOptionArity2AndParameters(), "-doubles=1.1 2.2 3.3 4.4".split(" ")); - assertArrayEquals(Arrays.toString(params.doubleOptions), - new double[] {1.1, 2.2, }, params.doubleOptions, 0.000001); - assertArrayEquals(new double[]{3.3, 4.4}, params.doubleParams, 0.000001); - - // repeated occurrence - params = CommandLine.populateCommand(new ArrayOptionArity2AndParameters(), "-doubles=1.1 2.2 -doubles=3.3 4.4 0".split(" ")); - assertArrayEquals(Arrays.toString(params.doubleOptions), - new double[] {1.1, 2.2, 3.3, 4.4}, params.doubleOptions, 0.000001); - assertArrayEquals(new double[]{0}, params.doubleParams, 0.000001); - } - /** Arity should not limit the total number of values put in an array or collection #191 */ - @Test - public void testArrayOptionsWithArity2MayContainMoreThan2Values() { - ArrayOptionArity2AndParameters - params = CommandLine.populateCommand(new ArrayOptionArity2AndParameters(), "-doubles=1 2 -doubles 3 4 -doubles 5 6".split(" ")); - assertArrayEquals(Arrays.toString(params.doubleOptions), - new double[] {1, 2, 3, 4, 5, 6 }, params.doubleOptions, 0.000001); - assertArrayEquals(null, params.doubleParams, 0.000001); - } - - @Test - public void testArrayOptionWithoutArityConsumesOneArgument() { // #192 - class OptionsNoArityAndParameters { - @Parameters char[] charParams; - @Option(names = "-chars") char[] charOptions; - } - OptionsNoArityAndParameters - params = CommandLine.populateCommand(new OptionsNoArityAndParameters(), "-chars a b c d".split(" ")); - assertArrayEquals(Arrays.toString(params.charOptions), - new char[] {'a', }, params.charOptions); - assertArrayEquals(Arrays.toString(params.charParams), new char[] {'b', 'c', 'd'}, params.charParams); - - // repeated occurrence - params = CommandLine.populateCommand(new OptionsNoArityAndParameters(), "-chars a -chars b c d".split(" ")); - assertArrayEquals(Arrays.toString(params.charOptions), - new char[] {'a', 'b', }, params.charOptions); - assertArrayEquals(Arrays.toString(params.charParams), new char[] {'c', 'd'}, params.charParams); - - try { - CommandLine.populateCommand(new OptionsNoArityAndParameters(), "-chars".split(" ")); - fail("expected MissingParameterException"); - } catch (MissingParameterException ok) { - assertEquals("Missing required parameter for option '-chars' (<charOptions>)", ok.getMessage()); - } - } - - @Test - public void testArrayParametersWithDefaultArity() { - class ArrayParamsDefaultArity { - @Parameters - List<String> params; - } - ArrayParamsDefaultArity params = CommandLine.populateCommand(new ArrayParamsDefaultArity(), "a", "b", "c"); - assertEquals(Arrays.asList("a", "b", "c"), params.params); - - params = CommandLine.populateCommand(new ArrayParamsDefaultArity(), "a"); - assertEquals(Arrays.asList("a"), params.params); - - params = CommandLine.populateCommand(new ArrayParamsDefaultArity()); - assertEquals(null, params.params); - } - - @Test - public void testArrayParametersWithArityMinusOneToN() { - class ArrayParamsNegativeArity { - @Parameters(arity = "-1..*") - List<String> params; - } - ArrayParamsNegativeArity params = CommandLine.populateCommand(new ArrayParamsNegativeArity(), "a", "b", "c"); - assertEquals(Arrays.asList("a", "b", "c"), params.params); - - params = CommandLine.populateCommand(new ArrayParamsNegativeArity(), "a"); - assertEquals(Arrays.asList("a"), params.params); - - params = CommandLine.populateCommand(new ArrayParamsNegativeArity()); - assertEquals(null, params.params); - } - - @Test - public void testArrayParametersArity0_n() { - class ArrayParamsArity0_n { - @Parameters(arity = "0..*") - List<String> params; - } - ArrayParamsArity0_n params = CommandLine.populateCommand(new ArrayParamsArity0_n(), "a", "b", "c"); - assertEquals(Arrays.asList("a", "b", "c"), params.params); - - params = CommandLine.populateCommand(new ArrayParamsArity0_n(), "a"); - assertEquals(Arrays.asList("a"), params.params); - - params = CommandLine.populateCommand(new ArrayParamsArity0_n()); - assertEquals(null, params.params); - } - - @Test - public void testArrayParametersArity1_n() { - class ArrayParamsArity1_n { - @Parameters(arity = "1..*") - List<String> params; - } - ArrayParamsArity1_n params = CommandLine.populateCommand(new ArrayParamsArity1_n(), "a", "b", "c"); - assertEquals(Arrays.asList("a", "b", "c"), params.params); - - params = CommandLine.populateCommand(new ArrayParamsArity1_n(), "a"); - assertEquals(Arrays.asList("a"), params.params); - - try { - params = CommandLine.populateCommand(new ArrayParamsArity1_n()); - fail("Should not accept input with missing parameter"); - } catch (MissingParameterException ex) { - assertEquals("Missing required parameters at positions 0..*: <params>", ex.getMessage()); - } - } - - @Test - public void testArrayParametersArity2_n() { - class ArrayParamsArity2_n { - @Parameters(arity = "2..*") - List<String> params; - } - ArrayParamsArity2_n params = CommandLine.populateCommand(new ArrayParamsArity2_n(), "a", "b", "c"); - assertEquals(Arrays.asList("a", "b", "c"), params.params); - - try { - params = CommandLine.populateCommand(new ArrayParamsArity2_n(), "a"); - fail("Should not accept input with missing parameter"); - } catch (MissingParameterException ex) { - assertEquals("positional parameter at index 0..* (<params>) requires at least 2 values, but only 1 were specified: [a]", ex.getMessage()); - } - - try { - params = CommandLine.populateCommand(new ArrayParamsArity2_n()); - fail("Should not accept input with missing parameter"); - } catch (MissingParameterException ex) { - assertEquals("positional parameter at index 0..* (<params>) requires at least 2 values, but none were specified.", ex.getMessage()); - } - } - - @Test - public void testNonVarargArrayParametersWithNegativeArityConsumesZeroArguments() { - class NonVarArgArrayParamsNegativeArity { - @Parameters(arity = "-1") - List<String> params; - } - try { - CommandLine.populateCommand(new NonVarArgArrayParamsNegativeArity(), "a", "b", "c"); - fail("Expected UnmatchedArgumentException"); - } catch (UnmatchedArgumentException ex) { - assertEquals("Unmatched arguments [a, b, c]", ex.getMessage()); - } - try { - CommandLine.populateCommand(new NonVarArgArrayParamsNegativeArity(), "a"); - fail("Expected UnmatchedArgumentException"); - } catch (UnmatchedArgumentException ex) { - assertEquals("Unmatched argument [a]", ex.getMessage()); - } - NonVarArgArrayParamsNegativeArity params = CommandLine.populateCommand(new NonVarArgArrayParamsNegativeArity()); - assertEquals(null, params.params); - } - - @Test - public void testNonVarargArrayParametersWithArity0() { - class NonVarArgArrayParamsZeroArity { - @Parameters(arity = "0") - List<String> params; - } - try { - CommandLine.populateCommand(new NonVarArgArrayParamsZeroArity(), "a", "b", "c"); - fail("Expected UnmatchedArgumentException"); - } catch (UnmatchedArgumentException ex) { - assertEquals("Unmatched arguments [a, b, c]", ex.getMessage()); - } - try { - CommandLine.populateCommand(new NonVarArgArrayParamsZeroArity(), "a"); - fail("Expected UnmatchedArgumentException"); - } catch (UnmatchedArgumentException ex) { - assertEquals("Unmatched argument [a]", ex.getMessage()); - } - NonVarArgArrayParamsZeroArity params = CommandLine.populateCommand(new NonVarArgArrayParamsZeroArity()); - assertEquals(null, params.params); - } - - @Test - public void testNonVarargArrayParametersWithArity1() { - class NonVarArgArrayParamsArity1 { - @Parameters(arity = "1") - List<String> params; - } - NonVarArgArrayParamsArity1 actual = CommandLine.populateCommand(new NonVarArgArrayParamsArity1(), "a", "b", "c"); - assertEquals(Arrays.asList("a", "b", "c"), actual.params); - - NonVarArgArrayParamsArity1 params = CommandLine.populateCommand(new NonVarArgArrayParamsArity1(), "a"); - assertEquals(Arrays.asList("a"), params.params); - - try { - params = CommandLine.populateCommand(new NonVarArgArrayParamsArity1()); - fail("Should not accept input with missing parameter"); - } catch (MissingParameterException ex) { - assertEquals("Missing required parameter: <params>", ex.getMessage()); - } - } - - @Test - public void testNonVarargArrayParametersWithArity2() { - class NonVarArgArrayParamsArity2 { - @Parameters(arity = "2") - List<String> params; - } - NonVarArgArrayParamsArity2 params = null; - try { - CommandLine.populateCommand(new NonVarArgArrayParamsArity2(), "a", "b", "c"); - fail("expected MissingParameterException"); - } catch (MissingParameterException ex) { - assertEquals("positional parameter at index 0..* (<params>) requires at least 2 values, but only 1 were specified: [c]", ex.getMessage()); - } - - try { - params = CommandLine.populateCommand(new NonVarArgArrayParamsArity2(), "a"); - fail("Should not accept input with missing parameter"); - } catch (MissingParameterException ex) { - assertEquals("positional parameter at index 0..* (<params>) requires at least 2 values, but only 1 were specified: [a]", ex.getMessage()); - } - - try { - params = CommandLine.populateCommand(new NonVarArgArrayParamsArity2()); - fail("Should not accept input with missing parameter"); - } catch (MissingParameterException ex) { - assertEquals("positional parameter at index 0..* (<params>) requires at least 2 values, but none were specified.", ex.getMessage()); - } - } - @Test - public void testMixPositionalParamsWithOptions_ParamsUnboundedArity_isGreedy() { - class Arg { - @Parameters(arity = "1..*") List<String> parameters; - @Option(names = "-o") List<String> options; - } - Arg result = CommandLine.populateCommand(new Arg(), "-o", "v1", "p1", "p2", "-o", "v2", "p3", "p4"); - assertEquals(Arrays.asList("p1", "p2", "-o", "v2", "p3", "p4"), result.parameters); - assertEquals(Arrays.asList("v1"), result.options); - - Arg result2 = CommandLine.populateCommand(new Arg(), "-o", "v1", "p1", "-o", "v2", "p3"); - assertEquals(Arrays.asList("p1", "-o", "v2", "p3"), result2.parameters); - assertEquals(Arrays.asList("v1"), result2.options); - - try { - CommandLine.populateCommand(new Arg(), "-o", "v1", "-o", "v2"); - fail("Expected MissingParameterException"); - } catch (MissingParameterException ex) { - assertEquals("Missing required parameters at positions 0..*: <parameters>", ex.getMessage()); - } - } - - @Test - public void test130MixPositionalParamsWithOptions() { - @CommandLine.Command(name = "test-command", description = "tests help from a command script") - class Arg { - - @Parameters(description = "some parameters") - List<String> parameters; - - @Option(names = {"-cp", "--codepath"}, description = "the codepath") - List<String> codepath; - } - Arg result = CommandLine.populateCommand(new Arg(), "--codepath", "/usr/x.jar", "placeholder", "-cp", "/bin/y.jar", "another"); - assertEquals(Arrays.asList("/usr/x.jar", "/bin/y.jar"), result.codepath); - assertEquals(Arrays.asList("placeholder", "another"), result.parameters); - } - - @Test - public void test130MixPositionalParamsWithOptions1() { - class Arg { - @Parameters List<String> parameters; - @Option(names = "-o") List<String> options; - } - Arg result = CommandLine.populateCommand(new Arg(), "-o", "v1", "p1", "p2", "-o", "v2", "p3"); - assertEquals(Arrays.asList("v1", "v2"), result.options); - assertEquals(Arrays.asList("p1", "p2", "p3"), result.parameters); - } - - @Test - public void test130MixPositionalParamsWithOptionsArity() { - class Arg { - @Parameters(arity = "2") List<String> parameters; - @Option(names = "-o") List<String> options; - } - Arg result = CommandLine.populateCommand(new Arg(), "-o", "v1", "p1", "p2", "-o", "v2", "p3", "p4"); - assertEquals(Arrays.asList("v1", "v2"), result.options); - assertEquals(Arrays.asList("p1", "p2", "p3", "p4"), result.parameters); - - Arg result2 = CommandLine.populateCommand(new Arg(), "-o", "v1", "p1", "-o", "v2", "p3"); - assertEquals(Arrays.asList("v1"), result2.options); - assertEquals(Arrays.asList("p1", "-o", "v2", "p3"), result2.parameters); - - try { - CommandLine.populateCommand(new Arg(), "-o", "v1", "p1", "p2", "-o", "v2", "p3"); - fail("Expected MissingParameterException"); - } catch (MissingParameterException ex) { - assertEquals("positional parameter at index 0..* (<parameters>) requires at least 2 values, but only 1 were specified: [p3]", ex.getMessage()); - } - } -}