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]