You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by br...@apache.org on 2016/09/08 05:36:59 UTC
svn commit: r1759745 - in /commons/proper/cli/trunk/src: changes/changes.xml
main/java/org/apache/commons/cli/DefaultParser.java
test/java/org/apache/commons/cli/bug/BugCLI265Test.java
Author: britter
Date: Thu Sep 8 05:36:59 2016
New Revision: 1759745
URL: http://svn.apache.org/viewvc?rev=1759745&view=rev
Log:
CLI-265: Optional argument picking up next regular option as its argument. Extend fix to address problems identified by Martin Sandiford who also submitted the extended patch.
Modified:
commons/proper/cli/trunk/src/changes/changes.xml
commons/proper/cli/trunk/src/main/java/org/apache/commons/cli/DefaultParser.java
commons/proper/cli/trunk/src/test/java/org/apache/commons/cli/bug/BugCLI265Test.java
Modified: commons/proper/cli/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/cli/trunk/src/changes/changes.xml?rev=1759745&r1=1759744&r2=1759745&view=diff
==============================================================================
--- commons/proper/cli/trunk/src/changes/changes.xml (original)
+++ commons/proper/cli/trunk/src/changes/changes.xml Thu Sep 8 05:36:59 2016
@@ -23,7 +23,7 @@
<body>
<release version="1.4" date="tba" description="tba">
- <action type="fix" dev="britter" issue="CLI-265">
+ <action type="fix" dev="britter" issue="CLI-265" due-to="Martin Sandiford">
Optional argument picking up next regular option as its argument
</action>
<action type="add" dev="britter" issue="CLI-267" due-to="Ricardo Ribeiro">
Modified: commons/proper/cli/trunk/src/main/java/org/apache/commons/cli/DefaultParser.java
URL: http://svn.apache.org/viewvc/commons/proper/cli/trunk/src/main/java/org/apache/commons/cli/DefaultParser.java?rev=1759745&r1=1759744&r2=1759745&view=diff
==============================================================================
--- commons/proper/cli/trunk/src/main/java/org/apache/commons/cli/DefaultParser.java (original)
+++ commons/proper/cli/trunk/src/main/java/org/apache/commons/cli/DefaultParser.java Thu Sep 8 05:36:59 2016
@@ -307,7 +307,12 @@ public class DefaultParser implements Co
// remove leading "-" and "=value"
int pos = token.indexOf("=");
String optName = pos == -1 ? token.substring(1) : token.substring(1, pos);
- return options.hasShortOption(optName);
+ if (options.hasShortOption(optName))
+ {
+ return true;
+ }
+ // check for several concatenated short options
+ return optName.length() > 0 && options.hasShortOption(String.valueOf(optName.charAt(0)));
}
/**
Modified: commons/proper/cli/trunk/src/test/java/org/apache/commons/cli/bug/BugCLI265Test.java
URL: http://svn.apache.org/viewvc/commons/proper/cli/trunk/src/test/java/org/apache/commons/cli/bug/BugCLI265Test.java?rev=1759745&r1=1759744&r2=1759745&view=diff
==============================================================================
--- commons/proper/cli/trunk/src/test/java/org/apache/commons/cli/bug/BugCLI265Test.java (original)
+++ commons/proper/cli/trunk/src/test/java/org/apache/commons/cli/bug/BugCLI265Test.java Thu Sep 8 05:36:59 2016
@@ -27,6 +27,7 @@ import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
/**
@@ -43,10 +44,12 @@ public class BugCLI265Test {
public void setUp() throws Exception {
parser = new DefaultParser();
- Option TYPE1 = Option.builder("t1").hasArg().numberOfArgs(1).optionalArg(true).argName("t1_path").build();
- Option LAST = Option.builder("last").hasArg(false).build();
+ Option optionT1 = Option.builder("t1").hasArg().numberOfArgs(1).optionalArg(true).argName("t1_path").build();
+ Option optionA = Option.builder("a").hasArg(false).build();
+ Option optionB = Option.builder("b").hasArg(false).build();
+ Option optionLast = Option.builder("last").hasArg(false).build();
- options = new Options().addOption(TYPE1).addOption(LAST);
+ options = new Options().addOption(optionT1).addOption(optionA).addOption(optionB).addOption(optionLast);
}
@Test
@@ -70,4 +73,16 @@ public class BugCLI265Test {
assertTrue("Second option has not been detected", commandLine.hasOption("last"));
}
+ @Test
+ public void shouldParseConcatenatedShortOptions() throws Exception {
+ String[] concatenatedShortOptions = new String[] { "-t1", "-ab" };
+
+ final CommandLine commandLine = parser.parse(options, concatenatedShortOptions);
+
+ assertTrue(commandLine.hasOption("t1"));
+ assertNull(commandLine.getOptionValue("t1"));
+ assertTrue(commandLine.hasOption("a"));
+ assertTrue(commandLine.hasOption("b"));
+ assertFalse(commandLine.hasOption("last"));
+ }
}