diff options
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(); } |