You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by eb...@apache.org on 2009/05/30 04:31:22 UTC
svn commit: r780163 - in /commons/proper/cli/trunk:
src/java/org/apache/commons/cli/OptionGroup.java
src/java/org/apache/commons/cli/Parser.java
src/test/org/apache/commons/cli/ParserTestCase.java xdocs/changes.xml
Author: ebourg
Date: Sat May 30 02:31:22 2009
New Revision: 780163
URL: http://svn.apache.org/viewvc?rev=780163&view=rev
Log:
OptionGroup now selects properly an option with no short name (CLI-182)
OptionGroups no longer throw an AlreadySelectedException when reused for several parsings (CLI-183)
Modified:
commons/proper/cli/trunk/src/java/org/apache/commons/cli/OptionGroup.java
commons/proper/cli/trunk/src/java/org/apache/commons/cli/Parser.java
commons/proper/cli/trunk/src/test/org/apache/commons/cli/ParserTestCase.java
commons/proper/cli/trunk/xdocs/changes.xml
Modified: commons/proper/cli/trunk/src/java/org/apache/commons/cli/OptionGroup.java
URL: http://svn.apache.org/viewvc/commons/proper/cli/trunk/src/java/org/apache/commons/cli/OptionGroup.java?rev=780163&r1=780162&r2=780163&view=diff
==============================================================================
--- commons/proper/cli/trunk/src/java/org/apache/commons/cli/OptionGroup.java (original)
+++ commons/proper/cli/trunk/src/java/org/apache/commons/cli/OptionGroup.java Sat May 30 02:31:22 2009
@@ -85,12 +85,19 @@
*/
public void setSelected(Option option) throws AlreadySelectedException
{
+ if (option == null)
+ {
+ // reset the option previously selected
+ selected = null;
+ return;
+ }
+
// if no option has already been selected or the
// same option is being reselected then set the
// selected member variable
- if (selected == null || selected.equals(option.getOpt()))
+ if (selected == null || selected.equals(option.getKey()))
{
- selected = option.getOpt();
+ selected = option.getKey();
}
else
{
Modified: commons/proper/cli/trunk/src/java/org/apache/commons/cli/Parser.java
URL: http://svn.apache.org/viewvc/commons/proper/cli/trunk/src/java/org/apache/commons/cli/Parser.java?rev=780163&r1=780162&r2=780163&view=diff
==============================================================================
--- commons/proper/cli/trunk/src/java/org/apache/commons/cli/Parser.java (original)
+++ commons/proper/cli/trunk/src/java/org/apache/commons/cli/Parser.java Sat May 30 02:31:22 2009
@@ -145,6 +145,13 @@
Option opt = (Option) it.next();
opt.clearValues();
}
+
+ // clear the data from the groups
+ for (Iterator it = options.getOptionGroups().iterator(); it.hasNext();)
+ {
+ OptionGroup group = (OptionGroup) it.next();
+ group.setSelected(null);
+ }
// initialise members
setOptions(options);
Modified: commons/proper/cli/trunk/src/test/org/apache/commons/cli/ParserTestCase.java
URL: http://svn.apache.org/viewvc/commons/proper/cli/trunk/src/test/org/apache/commons/cli/ParserTestCase.java?rev=780163&r1=780162&r2=780163&view=diff
==============================================================================
--- commons/proper/cli/trunk/src/test/org/apache/commons/cli/ParserTestCase.java (original)
+++ commons/proper/cli/trunk/src/test/org/apache/commons/cli/ParserTestCase.java Sat May 30 02:31:22 2009
@@ -144,7 +144,7 @@
assertTrue( "Confirm MissingArgumentException caught", caught );
}
- public void testDoubleDash() throws Exception
+ public void testDoubleDash1() throws Exception
{
String[] args = new String[] { "--copt",
"--",
@@ -574,7 +574,63 @@
fail("expected to catch MissingOptionException");
}
}
+
+ public void testMissingRequiredGroup() throws Exception
+ {
+ OptionGroup group = new OptionGroup();
+ group.addOption(OptionBuilder.create("a"));
+ group.addOption(OptionBuilder.create("b"));
+ group.setRequired(true);
+
+ Options options = new Options();
+ options.addOptionGroup(group);
+ options.addOption(OptionBuilder.isRequired().create("c"));
+
+ try
+ {
+ parser.parse(options, new String[] { "-c" });
+ fail("MissingOptionException not thrown");
+ }
+ catch (MissingOptionException e)
+ {
+ assertEquals(1, e.getMissingOptions().size());
+ assertTrue(e.getMissingOptions().get(0) instanceof OptionGroup);
+ }
+ catch (ParseException e)
+ {
+ fail("Expected to catch MissingOptionException");
+ }
+ }
+
+ public void testOptionGroup() throws Exception
+ {
+ OptionGroup group = new OptionGroup();
+ group.addOption(OptionBuilder.create("a"));
+ group.addOption(OptionBuilder.create("b"));
+
+ Options options = new Options();
+ options.addOptionGroup(group);
+
+ parser.parse(options, new String[] { "-b" });
+
+ assertEquals("selected option", "b", group.getSelected());
+ }
+ public void testOptionGroupLong() throws Exception
+ {
+ OptionGroup group = new OptionGroup();
+ group.addOption(OptionBuilder.withLongOpt("foo").create());
+ group.addOption(OptionBuilder.withLongOpt("bar").create());
+
+ Options options = new Options();
+ options.addOptionGroup(group);
+
+ CommandLine cl = parser.parse(options, new String[] { "--bar" });
+
+ assertTrue(cl.hasOption("bar"));
+ assertEquals("selected option", "bar", group.getSelected());
+ }
+
public void testReuseOptionsTwice() throws Exception
{
Options opts = new Options();
Modified: commons/proper/cli/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/cli/trunk/xdocs/changes.xml?rev=780163&r1=780162&r2=780163&view=diff
==============================================================================
--- commons/proper/cli/trunk/xdocs/changes.xml (original)
+++ commons/proper/cli/trunk/xdocs/changes.xml Sat May 30 02:31:22 2009
@@ -23,8 +23,14 @@
<body>
<release version="1.3" date="in SVN">
+ <action type="fix" dev="ebourg" issue="CLI-183">
+ OptionGroups no longer throw an AlreadySelectedException when reused for several parsings.
+ </action>
+ <action type="fix" dev="ebourg" issue="CLI-182">
+ OptionGroup now selects properly an option with no short name.
+ </action>
<action type="add" dev="ebourg" issue="CLI-160">
- PosixParser now supports partial long options (--ver instead of --version)
+ PosixParser now supports partial long options (--ver instead of --version).
</action>
</release>