http://nagoya.apache.org/bugzilla/show_bug.cgi?id=3255
Summary: CLArgsParser loops infinitely on OPTIONAL options
Product: Avalon
Version: 4.0b3
Platform: All
URL:
OS/Version: All
Status: NEW
Status Whiteboard:
Keywords:
Resolution:
Severity: Normal
Priority: Other
Component: Excalibur
AssignedTo: [email protected]
ReportedBy: [EMAIL PROTECTED]
To reproduce, add the following to
org.apache.avalon.excalibur.cli.test.ClutilTestCase:
private static final int TAINT_OPT = 'T';
protected final static CLOptionDescriptor TAINT =
new CLOptionDescriptor( "taint",
CLOptionDescriptor.ARGUMENT_OPTIONAL,
TAINT_OPT,
"turn on tainting checks (optional level)." );
public void testOptionalArgsWithArgShortBeforeOtherOpt()
{
//"-T3","-a"
final CLOptionDescriptor[] options = new CLOptionDescriptor[]
{
ALL, TAINT
};
final String[] args = new String[] { "-T3", "-a" };
System.out.println("[before parsing]");
final CLArgsParser parser = new CLArgsParser( args, options );
System.out.println("[after parsing]");
assertNull( parser.getErrorString() );
final List clOptions = parser.getArguments();
final int size = clOptions.size();
assertEquals( size, 2 );
final CLOption option0 = (CLOption)clOptions.get( 0 );
assertEquals( option0.getId(), TAINT_OPT );
assertEquals( option0.getArgument( 0 ), "3" );
final CLOption option1 = (CLOption)clOptions.get( 1 );
assertEquals( option1.getId(), ALL_OPT );
assertEquals( option1.getArgument( 0 ), "" );
}
public void testOptionalArgsNoArgShortBeforeOtherOpt()
{
//"-T","-a"
final CLOptionDescriptor[] options = new CLOptionDescriptor[]
{
ALL, TAINT
};
final String[] args = new String[] { "-T", "-a" };
System.out.println("[before parsing]");
final CLArgsParser parser = new CLArgsParser( args, options );
System.out.println("[after parsing]");
assertNull( parser.getErrorString() );
final List clOptions = parser.getArguments();
final int size = clOptions.size();
assertEquals( size, 2 );
final CLOption option0 = (CLOption)clOptions.get( 0 );
assertEquals( option0.getId(), TAINT_OPT );
assertEquals( option0.getArgument( 0 ), "" );
final CLOption option1 = (CLOption)clOptions.get( 1 );
assertEquals( option1.getId(), ALL_OPT );
assertEquals( option1.getArgument( 0 ), "" );
}
Both tests will hang after printing "[before parsing]". Note that, if the
arguments were reversed ("-a" "-T"), the test would complete.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]