diff options
author | Cedric Beust <cedric@beust.com> | 2012-09-17 23:01:04 -0700 |
---|---|---|
committer | Cedric Beust <cedric@beust.com> | 2012-09-17 23:01:04 -0700 |
commit | c421118d3104c0594dbe207c8443e51022422d32 (patch) | |
tree | 5b458560266ffd8800a719b312a3f47decc93363 /src | |
parent | 8a4c3d11d8d74628fbe55dce61771810a841723e (diff) | |
download | platform_external_jcommander-c421118d3104c0594dbe207c8443e51022422d32.tar.gz platform_external_jcommander-c421118d3104c0594dbe207c8443e51022422d32.tar.bz2 platform_external_jcommander-c421118d3104c0594dbe207c8443e51022422d32.zip |
Added JCommander#setNoThrow() and JCommander#getUnknownArgs().
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/com/beust/jcommander/JCommander.java | 46 | ||||
-rw-r--r-- | src/main/java/com/beust/jcommander/internal/Lists.java | 5 | ||||
-rw-r--r-- | src/test/java/com/beust/jcommander/JCommanderTest.java | 65 | ||||
-rw-r--r-- | src/test/resources/testng-single.xml | 5 |
4 files changed, 82 insertions, 39 deletions
diff --git a/src/main/java/com/beust/jcommander/JCommander.java b/src/main/java/com/beust/jcommander/JCommander.java index 8965f3b..f1717be 100644 --- a/src/main/java/com/beust/jcommander/JCommander.java +++ b/src/main/java/com/beust/jcommander/JCommander.java @@ -18,18 +18,6 @@ package com.beust.jcommander; -import com.beust.jcommander.FuzzyMap.IKey; -import com.beust.jcommander.converters.IParameterSplitter; -import com.beust.jcommander.converters.NoConverter; -import com.beust.jcommander.converters.StringConverter; -import com.beust.jcommander.internal.Console; -import com.beust.jcommander.internal.DefaultConsole; -import com.beust.jcommander.internal.DefaultConverterFactory; -import com.beust.jcommander.internal.JDK6Console; -import com.beust.jcommander.internal.Lists; -import com.beust.jcommander.internal.Maps; -import com.beust.jcommander.internal.Nullable; - import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; @@ -50,6 +38,18 @@ import java.util.Locale; import java.util.Map; import java.util.ResourceBundle; +import com.beust.jcommander.FuzzyMap.IKey; +import com.beust.jcommander.converters.IParameterSplitter; +import com.beust.jcommander.converters.NoConverter; +import com.beust.jcommander.converters.StringConverter; +import com.beust.jcommander.internal.Console; +import com.beust.jcommander.internal.DefaultConsole; +import com.beust.jcommander.internal.DefaultConverterFactory; +import com.beust.jcommander.internal.JDK6Console; +import com.beust.jcommander.internal.Lists; +import com.beust.jcommander.internal.Maps; +import com.beust.jcommander.internal.Nullable; + /** * The main class for JCommander. It's responsible for parsing the object that contains * all the annotated fields, parse the command line and assign the fields with the correct @@ -149,6 +149,9 @@ public class JCommander { private int m_columnSize = 79; private boolean m_helpWasSpecified; + + private List<String> m_unknownArgs = Lists.newArrayList(); + private boolean m_noThrow; private static Console m_console; @@ -721,7 +724,16 @@ public class JCommander { } } } else { - throw new ParameterException("Unknown option: " + arg); + if (m_noThrow) { + m_unknownArgs.add(arg); + i++; + while (i < args.length && ! isOption(args, args[i])) { + m_unknownArgs.add(args[i++]); + } + increment = 0; + } else { + throw new ParameterException("Unknown option: " + arg); + } } } else { @@ -1545,6 +1557,14 @@ public class JCommander { m_allowAbbreviatedOptions = b; } + public void setNoThrow(boolean b) { + m_noThrow = b; + } + + public List<String> getUnknownArgs() { + return m_unknownArgs; + } + // public void setCaseSensitiveCommands(boolean b) { // m_caseSensitiveCommands = b; // } diff --git a/src/main/java/com/beust/jcommander/internal/Lists.java b/src/main/java/com/beust/jcommander/internal/Lists.java index c4017c0..fdbee55 100644 --- a/src/main/java/com/beust/jcommander/internal/Lists.java +++ b/src/main/java/com/beust/jcommander/internal/Lists.java @@ -19,6 +19,7 @@ package com.beust.jcommander.internal; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.LinkedList; import java.util.List; @@ -33,6 +34,10 @@ public class Lists { return new ArrayList<K>(c); } + public static <K> List<K> newArrayList(K... c) { + return new ArrayList<K>(Arrays.asList(c)); + } + public static <K> List<K> newArrayList(int size) { return new ArrayList<K>(size); } diff --git a/src/test/java/com/beust/jcommander/JCommanderTest.java b/src/test/java/com/beust/jcommander/JCommanderTest.java index 22c5082..ff001e3 100644 --- a/src/test/java/com/beust/jcommander/JCommanderTest.java +++ b/src/test/java/com/beust/jcommander/JCommanderTest.java @@ -18,6 +18,28 @@ package com.beust.jcommander; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.math.BigDecimal; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.EnumSet; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.ResourceBundle; +import java.util.TreeSet; + +import org.testng.Assert; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; + import com.beust.jcommander.args.Args1; import com.beust.jcommander.args.Args1Setter; import com.beust.jcommander.args.Args2; @@ -52,30 +74,8 @@ import com.beust.jcommander.args.VariableArity; import com.beust.jcommander.command.CommandAdd; import com.beust.jcommander.command.CommandCommit; import com.beust.jcommander.command.CommandMain; - -import org.testng.Assert; -import org.testng.annotations.DataProvider; -import org.testng.annotations.Test; -import org.testng.collections.Lists; -import org.testng.collections.Maps; - -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.math.BigDecimal; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.EnumSet; -import java.util.Iterator; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.ResourceBundle; -import java.util.TreeSet; +import com.beust.jcommander.internal.Lists; +import com.beust.jcommander.internal.Maps; @Test public class JCommanderTest { @@ -891,11 +891,26 @@ public class JCommanderTest { Arg a = new Arg(); V2.names.clear(); V2.validateCalled = false; - new JCommander(a, "--host", "h"); + JCommander jc = new JCommander(a, "--host", "h"); + jc.setNoThrow(true); Assert.assertEquals(V2.names, Arrays.asList(new String[] { "-h", "--host" })); Assert.assertTrue(V2.validateCalled); } + public void partialValidation() { + class Arg { + @Parameter(names = { "-h", "--host" }) + String host; + } + Arg a = new Arg(); + JCommander jc = new JCommander(); + jc.setNoThrow(true); + jc.addObject(a); + jc.parse("-a", "foo", "-h", "host"); + Assert.assertEquals(a.host, "host"); + Assert.assertEquals(jc.getUnknownArgs(), Lists.newArrayList("-a", "foo")); + } + @Test(enabled = false) public static void main(String[] args) throws Exception { new JCommanderTest().parameterWithOneDoubleQuote(); diff --git a/src/test/resources/testng-single.xml b/src/test/resources/testng-single.xml index db8497b..cc0602c 100644 --- a/src/test/resources/testng-single.xml +++ b/src/test/resources/testng-single.xml @@ -7,7 +7,10 @@ <!-- <class name="com.beust.jcommander.FinderTest" /> --> - <class name="com.beust.jcommander.CmdTest"> + <class name="com.beust.jcommander.JCommanderTest"> + <methods> + <include name="partialValidation"></include> + </methods> </class> </classes> </test> |