diff options
author | Cedric Beust <cedric@beust.com> | 2017-03-05 06:42:40 -0800 |
---|---|---|
committer | Cedric Beust <cedric@beust.com> | 2017-03-05 06:42:40 -0800 |
commit | cc5a8e341e7ac9df6b7dcd05519d8ac9f44dedeb (patch) | |
tree | cbb700f17d3070598fe35998aee2257537f3b7d5 | |
parent | 0dc65959b1ed71f36e5b2d7ed0e44e2791a5fee8 (diff) | |
parent | 483e219f79d21d5ad7b256650525ac773f479c68 (diff) | |
download | jcommander-cc5a8e341e7ac9df6b7dcd05519d8ac9f44dedeb.tar.gz |
Merge branch 'master' of github.com:cbeust/jcommander
-rw-r--r-- | CHANGELOG.md | 3 | ||||
-rw-r--r-- | doc/index.adoc | 8 | ||||
-rw-r--r-- | doc/index.html | 8 | ||||
-rw-r--r-- | src/main/java/com/beust/jcommander/JCommander.java | 15 | ||||
-rw-r--r-- | src/test/java/com/beust/jcommander/JCommanderTest.java | 67 |
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<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; } }</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 |