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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]