diff options
author | Cedric Beust <cedric@beust.com> | 2012-05-02 11:52:39 -0700 |
---|---|---|
committer | Cedric Beust <cedric@beust.com> | 2012-05-02 11:52:39 -0700 |
commit | fb38f40b769781cb2cd00763865bc0aef59f392a (patch) | |
tree | e9aa1a48ded24e7ec5a6450de486ac69215114e1 /src | |
parent | 8f046527914cec812c9b26314469525618988ac6 (diff) | |
download | platform_external_jcommander-fb38f40b769781cb2cd00763865bc0aef59f392a.tar.gz platform_external_jcommander-fb38f40b769781cb2cd00763865bc0aef59f392a.tar.bz2 platform_external_jcommander-fb38f40b769781cb2cd00763865bc0aef59f392a.zip |
Fixed: bug with several multiple arity parameters (VariableArityTest).
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/com/beust/jcommander/JCommander.java | 17 | ||||
-rw-r--r-- | src/test/java/com/beust/jcommander/VariableArityTest.java | 66 | ||||
-rw-r--r-- | src/test/resources/testng.xml | 1 |
3 files changed, 77 insertions, 7 deletions
diff --git a/src/main/java/com/beust/jcommander/JCommander.java b/src/main/java/com/beust/jcommander/JCommander.java index 6b712f7..0017bd1 100644 --- a/src/main/java/com/beust/jcommander/JCommander.java +++ b/src/main/java/com/beust/jcommander/JCommander.java @@ -588,9 +588,10 @@ public class JCommander { while (i < args.length && ! commandParsed) { String arg = args[i]; String a = trim(arg); - p("Parsing arg:" + a); + p("Parsing arg: " + a); JCommander jc = findCommandByAlias(arg); + int increment = 1; if (isOption(args, a) && jc == null) { // // Option @@ -610,7 +611,7 @@ public class JCommander { // // Variable arity? // - i += processVariableArity(args, i, pd); + increment = processVariableArity(args, i, pd); } else { // // Regular option @@ -624,7 +625,7 @@ public class JCommander { pd.addValue("true"); m_requiredFields.remove(pd.getField()); } else { - i = processFixedArity(args, i, pd, fieldType); + increment = processFixedArity(args, i, pd, fieldType); } } } @@ -675,7 +676,7 @@ public class JCommander { } } } - i++; + i += increment; } // Mark the parameter descriptions held in m_fields as assigned @@ -733,7 +734,8 @@ public class JCommander { int arity = va.processVariableArity(pd.getParameter().names()[0], currentArgs.toArray(new String[0])); - return processFixedArity(args, index, pd, List.class, arity); + int result = processFixedArity(args, index, pd, List.class, arity); + return result; } private int processFixedArity(String[] args, int index, ParameterDescription pd, @@ -746,8 +748,9 @@ public class JCommander { return processFixedArity(args, index, pd, fieldType, n); } - private int processFixedArity(String[] args, int index, ParameterDescription pd, + private int processFixedArity(String[] args, int originalIndex, ParameterDescription pd, Class<?> fieldType, int arity) { + int index = originalIndex; String arg = args[index]; // Special case for boolean parameters of arity 0 if (arity == 0 && @@ -771,7 +774,7 @@ public class JCommander { throw new ParameterException("Expected a value after parameter " + arg); } - return index; + return arity + 1; } /** diff --git a/src/test/java/com/beust/jcommander/VariableArityTest.java b/src/test/java/com/beust/jcommander/VariableArityTest.java new file mode 100644 index 0000000..a90392f --- /dev/null +++ b/src/test/java/com/beust/jcommander/VariableArityTest.java @@ -0,0 +1,66 @@ +package com.beust.jcommander; + +import org.testng.Assert; +import org.testng.annotations.Test; + +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; + +public class VariableArityTest { + + public static class ModelGenerationConfig { + + @Parameter(names = { "-m", "--matrixData" }, variableArity = true, + description = "File containing a list of instances and their runtimes on various configurations", required = false) + public List<String> modelMatrixFile = new LinkedList<String>(); + + @Parameter(names = { "-f", "--featureData" }, variableArity = true, + description = "File containing a list of instances and their corresponding features", required = true) + public List<String> featureFile = new LinkedList<String>(); + + @Parameter(names = { "-c", "--configData" }, variableArity = true, + description = "File containing a list of configuration parameter values") + public List<String> configFile = new LinkedList<String>(); + + @Parameter(names = { "-o", "--outputFile" }, + description = "File to output the resulting data to. Defaults to ./matrix-generation.zip", required = false) + public String outputFile = "matrix-generation.zip"; + + @Parameter(names = { "--seed" }, description = "Seed used for PRNG [0 means don't use a Seed]") + public long seed = 0; + + public void print() { + System.out.println("modelMatrixFile: " + modelMatrixFile); + System.out.println("featureData: " + featureFile); + System.out.println("configFile: " + configFile); + System.out.println("output: " + outputFile); + System.out.println("seed: " + seed); + + } + } + + @Test + public void verifyVariableArity() { + String input = "-m foo --seed 1024 -c foo -o foo -f foo "; + + String[] split = input.split("\\s+"); + + ModelGenerationConfig config = new ModelGenerationConfig(); + JCommander com = new JCommander(config); + com.setProgramName("modelgen"); + + com.parse(split); + +// config.print(); + Assert.assertNotEquals(config.seed, 0); + Assert.assertEquals(config.modelMatrixFile, Arrays.asList(new String[] { "foo" })); + Assert.assertEquals(config.featureFile, Arrays.asList(new String[] { "foo" })); + Assert.assertEquals(config.seed, 1024); + Assert.assertEquals(config.outputFile, "foo"); + } + + public static void main(String[] args) { + new VariableArityTest().verifyVariableArity(); + } +}
\ No newline at end of file diff --git a/src/test/resources/testng.xml b/src/test/resources/testng.xml index a99ad0d..2ccd4ef 100644 --- a/src/test/resources/testng.xml +++ b/src/test/resources/testng.xml @@ -12,6 +12,7 @@ <class name="com.beust.jcommander.JCommanderTest" /> <class name="com.beust.jcommander.ParametersDelegateTest" /> <class name="com.beust.jcommander.dynamic.DynamicParameterTest" /> + <class name="com.beust.jcommander.VariableArityTest" /> </classes> </test> |