summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCedric Beust <cedric@beust.com>2017-03-05 06:42:40 -0800
committerCedric Beust <cedric@beust.com>2017-03-05 06:42:40 -0800
commitcc5a8e341e7ac9df6b7dcd05519d8ac9f44dedeb (patch)
treecbb700f17d3070598fe35998aee2257537f3b7d5
parent0dc65959b1ed71f36e5b2d7ed0e44e2791a5fee8 (diff)
parent483e219f79d21d5ad7b256650525ac773f479c68 (diff)
downloadjcommander-cc5a8e341e7ac9df6b7dcd05519d8ac9f44dedeb.tar.gz
Merge branch 'master' of github.com:cbeust/jcommander
-rw-r--r--CHANGELOG.md3
-rw-r--r--doc/index.adoc8
-rw-r--r--doc/index.html8
-rw-r--r--src/main/java/com/beust/jcommander/JCommander.java15
-rw-r--r--src/test/java/com/beust/jcommander/JCommanderTest.java67
5 files changed, 75 insertions, 26 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2be2b0f..d90c905 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,8 +1,9 @@
## Changelog
### Current
-2017-01-14
+2017-03-04
+* Added: Add `getProgramName` to `JCommander`, #247
* Added: Documentation for `listConverter` and `splitter`, #253, (@jeremysolarz)
* Fixed: Return right parameter name in exception, #227, (@jeremysolarz)
* Fixed: `JCommander#getParameters` returning nothing, #315, (@simon04)
diff --git a/doc/index.adoc b/doc/index.adoc
index b515af1..533828e 100644
--- a/doc/index.adoc
+++ b/doc/index.adoc
@@ -365,13 +365,13 @@ For example, here is a list converter that turns a string into a `List<File>`:
----
public class FileListConverter implements IStringConverter<List<File>> {
@Override
- public File convert(String files) {
+ public List<File> convert(String files) {
String [] paths = files.split(",");
- List<File> files = new ArrayList<>();
+ List<File> fileList = new ArrayList<>();
for(String path : paths){
- files.add(new File(path));
+ fileList.add(new File(path));
}
- return files;
+ return fileList;
}
}
----
diff --git a/doc/index.html b/doc/index.html
index 3f5ba89..8f1dfdc 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -1194,13 +1194,13 @@ Assert.assertEquals(a.hostPort.port.intValue(), 8080);</code></pre>
<div class="content">
<pre class="prettyprint highlight"><code class="language-java" data-lang="java">public class FileListConverter implements IStringConverter&lt;List&lt;File&gt;&gt; {
@Override
- public File convert(String files) {
+ public List&lt;File&gt; convert(String files) {
String [] paths = files.split(",");
- List&lt;File&gt; files = new ArrayList&lt;&gt;();
+ List&lt;File&gt; fileList = new ArrayList&lt;&gt;();
for(String path : paths){
- files.add(new File(path));
+ fileList.add(new File(path));
}
- return files;
+ return fileList;
}
}</code></pre>
</div>
diff --git a/src/main/java/com/beust/jcommander/JCommander.java b/src/main/java/com/beust/jcommander/JCommander.java
index 1736ef5..9656ab0 100644
--- a/src/main/java/com/beust/jcommander/JCommander.java
+++ b/src/main/java/com/beust/jcommander/JCommander.java
@@ -888,6 +888,13 @@ public class JCommander {
}
/**
+ * Get the program name (used only in the usage).
+ */
+ public String getProgramName(){
+ return programName == null ? null : programName.getName();
+ }
+
+ /**
* Set the program name
*
* @param name program name
@@ -993,7 +1000,7 @@ public class JCommander {
* Adds the provided arg object to the set of objects that this commander
* will parse arguments into.
*
- * @param object The arg object expected to contain {@link Parameter}
+ * @param o The arg object expected to contain {@link Parameter}
* annotations. If <code>object</code> is an array or is {@link Iterable},
* the child objects will be added instead.
*/
@@ -1050,7 +1057,7 @@ public class JCommander {
/**
* Adds a factory to lookup string converters. The added factory is used prior to previously added factories.
- * @param converterFactory the factory determining string converters
+ * @param factory the factory determining string converters
*/
public Builder addConverterFactory(IStringConverterFactory factory) {
jCommander.addConverterFactory(factory);
@@ -1194,7 +1201,7 @@ public class JCommander {
// If commands were specified, show them as well
//
if (hasCommands) {
- out.append(" Commands:\n");
+ out.append(indent + " Commands:\n");
// The magic value 3 is the number of spaces between the name of the option
// and its description
for (Map.Entry<ProgramName, JCommander> commands : this.commands.entrySet()) {
@@ -1210,7 +1217,7 @@ public class JCommander {
// Options for this command
JCommander jc = findCommandByAlias(progName.getName());
- jc.usage(out, " ");
+ jc.usage(out, indent + " ");
out.append("\n");
}
}
diff --git a/src/test/java/com/beust/jcommander/JCommanderTest.java b/src/test/java/com/beust/jcommander/JCommanderTest.java
index 839b28a..9cec462 100644
--- a/src/test/java/com/beust/jcommander/JCommanderTest.java
+++ b/src/test/java/com/beust/jcommander/JCommanderTest.java
@@ -1208,19 +1208,49 @@ public class JCommanderTest {
Assert.assertTrue(sb.toString().contains("command a parameters\n\n b"));
}
- public void partialValidation() {
- class Arg {
- @Parameter(names = {"-h", "--host"})
- String host;
- }
- Arg a = new Arg();
- JCommander jc = new JCommander();
- jc.setAcceptUnknownOptions(true);
- jc.addObject(a);
- jc.parse("-a", "foo", "-h", "host");
- Assert.assertEquals(a.host, "host");
- Assert.assertEquals(jc.getUnknownOptions(), Lists.newArrayList("-a", "foo"));
- }
+ public void usageWithSubCommands() {
+ class Arg {
+ }
+ @Parameters(commandDescription = "command a")
+ class ArgCommandA {
+ @Parameter(description = "command a parameters")
+ List<String> parameters;
+ }
+ @Parameters(commandDescription = "command b")
+ class ArgCommandB {
+ @Parameter(description = "command b parameters")
+ List<String> parameters;
+ }
+
+ Arg a = new Arg();
+
+ JCommander c = new JCommander(a);
+ c.setColumnSize(100);
+ c.addCommand("a", new ArgCommandA());
+
+ // b is a sub-command of a
+ JCommander aCommand = c.getCommands().get("a");
+ aCommand.addCommand("b", new ArgCommandB());
+
+ StringBuilder sb = new StringBuilder();
+ c.usage(sb);
+ Assert.assertTrue(sb.toString().contains("command a parameters\n Commands:"));
+ Assert.assertTrue(sb.toString().contains("command b\n Usage:"));
+ }
+
+ public void partialValidation() {
+ class Arg {
+ @Parameter(names = { "-h", "--host" })
+ String host;
+ }
+ Arg a = new Arg();
+ JCommander jc = new JCommander();
+ jc.setAcceptUnknownOptions(true);
+ jc.addObject(a);
+ jc.parse("-a", "foo", "-h", "host");
+ Assert.assertEquals(a.host, "host");
+ Assert.assertEquals(jc.getUnknownOptions(), Lists.newArrayList("-a", "foo"));
+ }
/**
* GITHUB-137.
@@ -1385,6 +1415,17 @@ public class JCommanderTest {
Assert.assertEquals(args.mvParameters.to, "to");
}
+ public void programName() {
+ JCommander jcommander = new JCommander();
+ String programName = "main";
+ jcommander.setProgramName(programName);
+ StringBuilder sb = new StringBuilder();
+ jcommander.usage(sb);
+
+ Assert.assertTrue(sb.toString().contains(programName));
+ Assert.assertEquals(jcommander.getProgramName(), programName);
+ }
+
public void dontShowOptionUsageIfThereAreNoOptions() {
class CommandTemplate {
@Parameter