Fix long optional args to require "=" as per documentation

git-svn-id: 
https://svn.apache.org/repos/asf/jakarta/commons/proper/cli/branches/avalon-implementation@539978
 13f79535-47bb-0310-9956-ffa450edef68


Project: http://git-wip-us.apache.org/repos/asf/commons-cli/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-cli/commit/3c221ef1
Tree: http://git-wip-us.apache.org/repos/asf/commons-cli/tree/3c221ef1
Diff: http://git-wip-us.apache.org/repos/asf/commons-cli/diff/3c221ef1

Branch: refs/heads/avalon-implementation
Commit: 3c221ef1b40313bcfa3b102984df23ad34ff9d33
Parents: 01de7d4
Author: Sebastian Bazley <[email protected]>
Authored: Sun May 20 23:07:14 2007 +0000
Committer: Sebastian Bazley <[email protected]>
Committed: Sun May 20 23:07:14 2007 +0000

----------------------------------------------------------------------
 .../apache/commons/cli/avalon/CLArgsParser.java | 16 +++++++++----
 .../commons/cli/avalon/ClutilTestCase.java      | 24 ++++++++++++++++++++
 2 files changed, 35 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-cli/blob/3c221ef1/src/java/org/apache/commons/cli/avalon/CLArgsParser.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/commons/cli/avalon/CLArgsParser.java 
b/src/java/org/apache/commons/cli/avalon/CLArgsParser.java
index 7eb7e2f..36e8919 100644
--- a/src/java/org/apache/commons/cli/avalon/CLArgsParser.java
+++ b/src/java/org/apache/commons/cli/avalon/CLArgsParser.java
@@ -450,11 +450,6 @@ public final class CLArgsParser
                 //should never get to here when stringIndex != 0
                 addOption( new CLOption( m_args[m_argIndex++] ) );
             }
-            else if( STATE_OPTIONAL_ARG == m_state && m_isLong && m_ch != 0)
-            {
-                m_state = STATE_NORMAL;
-                addOption( m_option );
-            }
             else
             {
                 parseArguments();
@@ -560,12 +555,15 @@ public final class CLArgsParser
         return m_args[m_argIndex].charAt( m_stringIndex++ );
     }
 
+    private char m_tokesep; // Keep track of token separator
+
     private final Token nextToken( final char[] separators )
     {
         m_ch = getChar();
 
         if( isSeparator( m_ch, separators ) )
         {
+            m_tokesep = m_ch;
             m_ch = getChar();
             return new Token( TOKEN_SEPARATOR, null );
         }
@@ -579,6 +577,7 @@ public final class CLArgsParser
         }
         while( !isSeparator( m_ch, separators ) );
 
+        m_tokesep = m_ch;
         return new Token( TOKEN_STRING, sb.toString() );
     }
 
@@ -660,6 +659,13 @@ public final class CLArgsParser
                 return;
             }
 
+            if (m_isLong && '=' != m_tokesep) // Long optional arg must have = 
as separator
+            {
+                addOption(m_option);
+                m_state = STATE_NORMAL;
+                return;                
+            }
+
             if( '=' == m_ch ) // $NON-NLS-1$
             {
                 getChar();

http://git-wip-us.apache.org/repos/asf/commons-cli/blob/3c221ef1/src/test/org/apache/commons/cli/avalon/ClutilTestCase.java
----------------------------------------------------------------------
diff --git a/src/test/org/apache/commons/cli/avalon/ClutilTestCase.java 
b/src/test/org/apache/commons/cli/avalon/ClutilTestCase.java
index 2bf2983..1e7f2ee 100644
--- a/src/test/org/apache/commons/cli/avalon/ClutilTestCase.java
+++ b/src/test/org/apache/commons/cli/avalon/ClutilTestCase.java
@@ -196,6 +196,30 @@ public final class ClutilTestCase
         assertEquals( option2.getArgument( 0 ), null );
     }
 
+    public void testOptionalArgLongEquals() {
+        final CLOptionDescriptor[] options = new CLOptionDescriptor[] { ALL, 
TAINT };
+
+        // Check that optional args work woth long options
+        final String[] args = new String[] { "--taint=param", "-a" };
+
+        final CLArgsParser parser = new CLArgsParser(args, options);
+
+        assertNull(parser.getErrorString(), parser.getErrorString());
+
+        final List clOptions = parser.getArguments();
+        final int size = clOptions.size();
+
+        assertEquals("Option count", 2, size);
+
+        final CLOption option0 = (CLOption) clOptions.get(0);
+        assertEquals("Option Code: " + option0.getDescriptor().getId(), 
TAINT_OPT, option0.getDescriptor().getId());
+        assertEquals("Option Arg: " + option0.getArgument(0), "param", 
option0.getArgument(0));
+
+        final CLOption option2 = (CLOption) clOptions.get(1);
+        assertEquals(option2.getDescriptor().getId(), ALL_OPT);
+        assertEquals(option2.getArgument(0), null);
+    }
+
     public void testShortOptArgUnenteredBeforeOtherOpt()
     {
         final CLOptionDescriptor[] options = new CLOptionDescriptor[]

Reply via email to