summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/beust/jcommander/JCommander.java34
-rw-r--r--src/main/java/com/beust/jcommander/ParameterDescription.java16
-rw-r--r--src/test/java/com/beust/jcommander/CommandLineArgs.java101
-rw-r--r--src/test/java/com/beust/jcommander/JCommanderTest.java6
4 files changed, 141 insertions, 16 deletions
diff --git a/src/main/java/com/beust/jcommander/JCommander.java b/src/main/java/com/beust/jcommander/JCommander.java
index 07a451a..80fa60c 100644
--- a/src/main/java/com/beust/jcommander/JCommander.java
+++ b/src/main/java/com/beust/jcommander/JCommander.java
@@ -10,6 +10,8 @@ import java.io.IOException;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
@@ -116,7 +118,7 @@ public class JCommander {
if (! m_requiredFields.isEmpty()) {
StringBuilder missingFields = new StringBuilder();
for (ParameterDescription pd : m_requiredFields.values()) {
- missingFields.append(pd.getNames()[0]).append(" ");
+ missingFields.append(pd.getNames()).append(" ");
}
throw new ParameterException("The following options are required: " + missingFields);
}
@@ -246,10 +248,9 @@ public class JCommander {
if (pd.getParameter().password()) {
Console console = System.console();
if (console == null) {
- throw new ParameterException("No console is available to get parameter "
- + pd.getNames()[0]);
+ throw new ParameterException("No console is available to get parameter " + a);
}
- System.out.print("Value for " + pd.getNames()[0] + " (" + pd.getDescription() + "):");
+ System.out.print("Value for " + a + " (" + pd.getDescription() + "):");
char[] password = console.readPassword();
pd.addValue(new String(password));
} else {
@@ -317,12 +318,29 @@ public class JCommander {
*/
public void usage() {
System.out.println("Usage:");
+ int longestName = 0;
+ List<ParameterDescription> sorted = Lists.newArrayList();
for (ParameterDescription pd : m_fields.values()) {
- StringBuilder sb = new StringBuilder();
- for (String n : pd.getParameter().names()) {
- sb.append(n).append(" ");
+ sorted.add(pd);
+ int length = pd.getNames().length();
+ if (length > longestName) {
+ longestName = length;
}
- System.out.println("\t" + sb.toString() + "\t" + pd.getDescription());
+ }
+ int target = longestName %8 != 0 ? (((longestName + 8) / 8) * 8): longestName;
+ Collections.sort(sorted, new Comparator<ParameterDescription>() {
+ @Override
+ public int compare(ParameterDescription arg0, ParameterDescription arg1) {
+ return arg0.getNames().compareTo(arg1.getNames());
+ }
+ });
+
+ for (ParameterDescription pd : sorted) {
+ int l = target - pd.getNames().length();
+ int tabCount = l / 8 + (l % 8 == 0 ? 0 : 1);
+ StringBuilder tabs = new StringBuilder();
+ for (int i = 0; i < tabCount; i++) tabs.append("\t");
+ System.out.println("\t" + pd.getNames() + tabs + pd.getDescription());
}
}
diff --git a/src/main/java/com/beust/jcommander/ParameterDescription.java b/src/main/java/com/beust/jcommander/ParameterDescription.java
index 85daf8e..b1aea92 100644
--- a/src/main/java/com/beust/jcommander/ParameterDescription.java
+++ b/src/main/java/com/beust/jcommander/ParameterDescription.java
@@ -70,14 +70,19 @@ public class ParameterDescription {
}
}
- public String[] getNames() {
- return m_parameterAnnotation.names();
- }
-
public String getDescription() {
return m_description;
}
+ public String getNames() {
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < m_parameterAnnotation.names().length; i++) {
+ if (i > 0) sb.append(", ");
+ sb.append(m_parameterAnnotation.names()[i]);
+ }
+ return sb.toString();
+ }
+
public Parameter getParameter() {
return m_parameterAnnotation;
}
@@ -99,7 +104,8 @@ public class ParameterDescription {
log("Adding value:" + value + " to parameter:" + m_field);
boolean arity = false;
if (m_added && ! isMultiOption()) {
- throw new ParameterException("Can only specify option " + getNames()[0] + " once.");
+ throw new ParameterException("Can only specify option " + m_parameterAnnotation.names()[0]
+ + " once.");
}
Class<? extends IStringConverter> converterClass = m_parameterAnnotation.converter();
if (converterClass == NoConverter.class) {
diff --git a/src/test/java/com/beust/jcommander/CommandLineArgs.java b/src/test/java/com/beust/jcommander/CommandLineArgs.java
new file mode 100644
index 0000000..5adae0f
--- /dev/null
+++ b/src/test/java/com/beust/jcommander/CommandLineArgs.java
@@ -0,0 +1,101 @@
+package com.beust.jcommander;
+
+import com.beust.jcommander.internal.Lists;
+
+import java.util.List;
+
+public class CommandLineArgs {
+
+ @Parameter(description = "The XML suite files to run")
+ public List<String> suiteFiles = Lists.newArrayList();
+
+ @Parameter(names = { "-log", "-verbose" }, description = "Level of verbosity")
+ public Integer verbose;
+
+ @Parameter(names = "-groups", description = "Comma-separated list of group names to be run")
+ public String groups;
+
+ @Parameter(names = "-excludedgroups", description ="Comma-separated list of group names to be " +
+ "run")
+ public String excludedGroups;
+
+ @Parameter(names = "-d", description ="Output directory")
+ public String outputDirectory;
+
+ @Parameter(names = "-junit", description ="JUnit mode")
+ public Boolean junit = Boolean.FALSE;
+
+ @Parameter(names = "-listener", description = "List of .class files or list of class names" +
+ " implementing ITestListener or ISuiteListener")
+ public String listener;
+
+ @Parameter(names = "-methodselectors", description = "List of .class files or list of class " +
+ "names implementing IMethodSelector")
+ public String methodSelectors;
+
+ @Parameter(names = "-objectfactory", description = "List of .class files or list of class " +
+ "names implementing ITestRunnerFactory")
+ public String objectFactory;
+
+ @Parameter(names = "-parallel", description = "Parallel mode (methods, tests or classes)")
+ public String parallelMode;
+
+ @Parameter(names = "-configfailurepolicy", description = "Configuration failure policy (skip or continue)")
+ public String configFailurePolicy;
+
+ @Parameter(names = "-threadcount", description = "Number of threads to use when running tests " +
+ "in parallel")
+ public Integer threadCount;
+
+ @Parameter(names = "-dataproviderthreadcount", description = "Number of threads to use when " +
+ "running data providers")
+ public Integer dataProviderThreadCount;
+
+ @Parameter(names = "-suitename", description = "Default name of test suite, if not specified " +
+ "in suite definition file or source code")
+ public String suiteName;
+
+ @Parameter(names = "-testname", description = "Default name of test, if not specified in suite" +
+ "definition file or source code")
+ public String testName;
+
+ @Parameter(names = "-reporter", description = "Extended configuration for custom report listener")
+ public String reporter;
+
+ /**
+ * Used as map key for the complete list of report listeners provided with the above argument
+ */
+ @Parameter(names = "-reporterslist")
+ public String reportersList;
+
+ @Parameter(names = "-usedefaultlisteners", description = "Whether to use the default listeners")
+ public String useDefaultListeners = "true";
+
+ @Parameter(names = "-skipfailedinvocationcounts")
+ public Boolean skipFailedInvocationCounts;
+
+ @Parameter(names = "-testclass", description = "The list of test classes")
+ public String testClass;
+
+ @Parameter(names = "-testnames", description = "The list of test names to run")
+ public String testNames;
+
+ @Parameter(names = "-testjar", description = "")
+ public String testJar;
+
+ @Parameter(names = "-testRunFactory", description = "")
+ public String testRunFactory;
+
+ @Parameter(names = "-port", description = "The port")
+ public Integer port;
+
+ @Parameter(names = "-host", description = "The host")
+ public String host;
+
+ @Parameter(names = "-master", description ="Host where the master is")
+ public String master;
+
+ @Parameter(names = "-slave", description ="Host where the slave is")
+ public String slave;
+
+}
diff --git a/src/test/java/com/beust/jcommander/JCommanderTest.java b/src/test/java/com/beust/jcommander/JCommanderTest.java
index da66a0f..7c71fc9 100644
--- a/src/test/java/com/beust/jcommander/JCommanderTest.java
+++ b/src/test/java/com/beust/jcommander/JCommanderTest.java
@@ -192,9 +192,9 @@ public class JCommanderTest {
// Assert.assertEquals(args.getVerbose().intValue(), 3);
// new JCommanderTest().i18nWithResourceAnnotation();
// new JCommanderTest().multipleUnparsedFail();
- ArgsI18N2 i18n = new ArgsI18N2();
- String[] argv = { "-host", "localhost" };
- JCommander jc = new JCommander(i18n, argv);
+ Object a1 = new CommandLineArgs();
+ String[] argv = { "-log", "3" };
+ JCommander jc = new JCommander(a1, argv);
jc.usage();
}