summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorCedric Beust <cedric@beust.com>2012-05-02 11:52:39 -0700
committerCedric Beust <cedric@beust.com>2012-05-02 11:52:39 -0700
commitfb38f40b769781cb2cd00763865bc0aef59f392a (patch)
treee9aa1a48ded24e7ec5a6450de486ac69215114e1 /src
parent8f046527914cec812c9b26314469525618988ac6 (diff)
downloadplatform_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.java17
-rw-r--r--src/test/java/com/beust/jcommander/VariableArityTest.java66
-rw-r--r--src/test/resources/testng.xml1
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>