You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by se...@apache.org on 2007/05/21 01:07:14 UTC

svn commit: r539978 - in /jakarta/commons/proper/cli/branches/avalon-implementation/src: java/org/apache/commons/cli/avalon/CLArgsParser.java test/org/apache/commons/cli/avalon/ClutilTestCase.java

Author: sebb
Date: Sun May 20 16:07:14 2007
New Revision: 539978

URL: http://svn.apache.org/viewvc?view=rev&rev=539978
Log:
Fix long optional args to require "=" as per documentation

Modified:
    jakarta/commons/proper/cli/branches/avalon-implementation/src/java/org/apache/commons/cli/avalon/CLArgsParser.java
    jakarta/commons/proper/cli/branches/avalon-implementation/src/test/org/apache/commons/cli/avalon/ClutilTestCase.java

Modified: jakarta/commons/proper/cli/branches/avalon-implementation/src/java/org/apache/commons/cli/avalon/CLArgsParser.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/cli/branches/avalon-implementation/src/java/org/apache/commons/cli/avalon/CLArgsParser.java?view=diff&rev=539978&r1=539977&r2=539978
==============================================================================
--- jakarta/commons/proper/cli/branches/avalon-implementation/src/java/org/apache/commons/cli/avalon/CLArgsParser.java (original)
+++ jakarta/commons/proper/cli/branches/avalon-implementation/src/java/org/apache/commons/cli/avalon/CLArgsParser.java Sun May 20 16:07:14 2007
@@ -450,11 +450,6 @@
                 //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 @@
         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 @@
         }
         while( !isSeparator( m_ch, separators ) );
 
+        m_tokesep = m_ch;
         return new Token( TOKEN_STRING, sb.toString() );
     }
 
@@ -658,6 +657,13 @@
                 addOption( m_option );
                 m_state = STATE_NORMAL;
                 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$

Modified: jakarta/commons/proper/cli/branches/avalon-implementation/src/test/org/apache/commons/cli/avalon/ClutilTestCase.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/cli/branches/avalon-implementation/src/test/org/apache/commons/cli/avalon/ClutilTestCase.java?view=diff&rev=539978&r1=539977&r2=539978
==============================================================================
--- jakarta/commons/proper/cli/branches/avalon-implementation/src/test/org/apache/commons/cli/avalon/ClutilTestCase.java (original)
+++ jakarta/commons/proper/cli/branches/avalon-implementation/src/test/org/apache/commons/cli/avalon/ClutilTestCase.java Sun May 20 16:07:14 2007
@@ -196,6 +196,30 @@
         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[]



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org