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