Added: jakarta/commons/proper/cli/trunk/src/test/org/apache/commons/cli/avalon/ClutilTestCase.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/cli/trunk/src/test/org/apache/commons/cli/avalon/ClutilTestCase.java?rev=179898&view=auto ============================================================================== --- jakarta/commons/proper/cli/trunk/src/test/org/apache/commons/cli/avalon/ClutilTestCase.java (added) +++ jakarta/commons/proper/cli/trunk/src/test/org/apache/commons/cli/avalon/ClutilTestCase.java Fri Jun 3 14:57:28 2005 @@ -0,0 +1,1022 @@ +/* + * Copyright 2002-2005 The Apache Software Foundation + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.cli.avalon; +//Renamed from org.apache.avalon.excalibur.cli + +import java.util.List; + +import junit.framework.TestCase; + +/** + * + */ +public final class ClutilTestCase + extends TestCase +{ + private static final String[] ARGLIST1 = new String[] + { + "--you", "are", "--all", "-cler", "kid" + }; + + private static final String[] ARGLIST2 = new String[] + { + "-Dstupid=idiot", "are", "--all", "here", "-d" + }; + + private static final String[] ARGLIST3 = new String[] + { + //duplicates + "-Dstupid=idiot", "are", "--all", "--all", "here" + }; + + private static final String[] ARGLIST4 = new String[] + { + //incompatable (blee/all) + "-Dstupid","idiot", "are", "--all", "--blee", "here" + }; + + private static final String[] ARGLIST5 = new String[] + { + "-f", "myfile.txt" + }; + + private static final int DEFINE_OPT = 'D'; + private static final int CASE_CHECK_OPT = 'd'; + private static final int YOU_OPT = 'y'; + private static final int ALL_OPT = 'a'; + private static final int CLEAR1_OPT = 'c'; + private static final int CLEAR2_OPT = 'l'; + private static final int CLEAR3_OPT = 'e'; + private static final int CLEAR5_OPT = 'r'; + private static final int BLEE_OPT = 'b'; + private static final int FILE_OPT = 'f'; + private static final int TAINT_OPT = 'T'; + + private static final CLOptionDescriptor DEFINE = + new CLOptionDescriptor( "define", + CLOptionDescriptor.ARGUMENTS_REQUIRED_2, + DEFINE_OPT, + "define" ); + private static final CLOptionDescriptor DEFINE_MANY = + new CLOptionDescriptor( "define", + CLOptionDescriptor.ARGUMENTS_REQUIRED_2|CLOptionDescriptor.DUPLICATES_ALLOWED, + DEFINE_OPT, + "define" ); + + private static final CLOptionDescriptor CASE_CHECK = + new CLOptionDescriptor( "charCheck", + CLOptionDescriptor.ARGUMENT_DISALLOWED, + CASE_CHECK_OPT, + "check character case sensitivity" ); + private static final CLOptionDescriptor YOU = + new CLOptionDescriptor( "you", CLOptionDescriptor.ARGUMENT_DISALLOWED, YOU_OPT, "you" ); + + private static final CLOptionDescriptor CLEAR1 = + new CLOptionDescriptor( "c", CLOptionDescriptor.ARGUMENT_DISALLOWED, CLEAR1_OPT, "c" ); + private static final CLOptionDescriptor CLEAR2 = + new CLOptionDescriptor( "l", CLOptionDescriptor.ARGUMENT_DISALLOWED, CLEAR2_OPT, "l" ); + private static final CLOptionDescriptor CLEAR3 = + new CLOptionDescriptor( "e", CLOptionDescriptor.ARGUMENT_DISALLOWED, CLEAR3_OPT, "e" ); + private static final CLOptionDescriptor CLEAR5 = + new CLOptionDescriptor( "r", CLOptionDescriptor.ARGUMENT_DISALLOWED, CLEAR5_OPT, "r" ); + private static final CLOptionDescriptor BLEE = + new CLOptionDescriptor( "blee", + CLOptionDescriptor.ARGUMENT_DISALLOWED, + BLEE_OPT, + "blee" ); + + private static final CLOptionDescriptor ALL = + new CLOptionDescriptor( "all", + CLOptionDescriptor.ARGUMENT_DISALLOWED, + ALL_OPT, + "all", + new CLOptionDescriptor[]{BLEE} ); + + private static final CLOptionDescriptor FILE = + new CLOptionDescriptor( "file", + CLOptionDescriptor.ARGUMENT_REQUIRED, + FILE_OPT, + "the build file." ); + private static final CLOptionDescriptor TAINT = + new CLOptionDescriptor( "taint", + CLOptionDescriptor.ARGUMENT_OPTIONAL, + TAINT_OPT, + "turn on tainting checks (optional level)." ); + + public ClutilTestCase() + { + this( "Command Line Interpreter Test Case" ); + } + + public ClutilTestCase( String name ) + { + super( name ); + } + + public void testOptionalArgWithSpace() + { + final CLOptionDescriptor[] options = new CLOptionDescriptor[] + { + ALL, TAINT + }; + + final String[] args = new String[]{"-T", "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", 3, 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 ), + null, option0.getArgument( 0 ) ); + + final CLOption option1 = (CLOption)clOptions.get( 1 ); + assertEquals( option1.getDescriptor().getId(), CLOption.TEXT_ARGUMENT ); + assertEquals( option1.getArgument( 0 ), "param" ); + + final CLOption option2 = (CLOption)clOptions.get( 2 ); + assertEquals( option2.getDescriptor().getId(), ALL_OPT ); + assertEquals( option2.getArgument( 0 ), null ); + } + + public void testOptionalArgLong() + { + 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", 3, 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 ), + null, option0.getArgument( 0 ) ); + + final CLOption option1 = (CLOption)clOptions.get( 1 ); + assertEquals( CLOption.TEXT_ARGUMENT , option1.getDescriptor().getId()); + assertEquals( "param" , option1.getArgument( 0 ) ); + + final CLOption option2 = (CLOption)clOptions.get( 2 ); + assertEquals( option2.getDescriptor().getId(), ALL_OPT ); + assertEquals( option2.getArgument( 0 ), null ); + } + + public void testShortOptArgUnenteredBeforeOtherOpt() + { + final CLOptionDescriptor[] options = new CLOptionDescriptor[] + { + ALL, TAINT + }; + + final String[] args = new String[]{"-T", "-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 ), null, option0.getArgument( 0 ) ); + + final CLOption option1 = (CLOption)clOptions.get( 1 ); + assertEquals( option1.getDescriptor().getId(), ALL_OPT ); + assertEquals( option1.getArgument( 0 ), null ); + } + + 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(), parser.getErrorString() ); + + final List clOptions = parser.getArguments(); + final int size = clOptions.size(); + + assertEquals( size, 2 ); + final CLOption option0 = (CLOption)clOptions.get( 0 ); + assertEquals( option0.getDescriptor().getId(), TAINT_OPT ); + assertEquals( option0.getArgument( 0 ), "3" ); + + final CLOption option1 = (CLOption)clOptions.get( 1 ); + assertEquals( ALL_OPT, option1.getDescriptor().getId() ); + assertEquals( null, 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(), parser.getErrorString() ); + + final List clOptions = parser.getArguments(); + final int size = clOptions.size(); + + assertEquals( size, 2 ); + final CLOption option0 = (CLOption)clOptions.get( 0 ); + assertEquals( TAINT_OPT, option0.getDescriptor().getId() ); + assertEquals( null, option0.getArgument( 0 ) ); + + final CLOption option1 = (CLOption)clOptions.get( 1 ); + assertEquals( ALL_OPT, option1.getDescriptor().getId() ); + assertEquals( null, option1.getArgument( 0 ) ); + } + + public void testFullParse() + { + final CLOptionDescriptor[] options = new CLOptionDescriptor[] + { + YOU, ALL, CLEAR1, CLEAR2, CLEAR3, CLEAR5 + }; + + final CLArgsParser parser = new CLArgsParser( ARGLIST1, options ); + + assertNull( parser.getErrorString(), parser.getErrorString() ); + + final List clOptions = parser.getArguments(); + final int size = clOptions.size(); + + assertEquals( size, 8 ); + assertEquals( ((CLOption)clOptions.get( 0 )).getDescriptor().getId(), YOU_OPT ); + assertEquals( ((CLOption)clOptions.get( 1 )).getDescriptor().getId(), 0 ); + assertEquals( ((CLOption)clOptions.get( 2 )).getDescriptor().getId(), ALL_OPT ); + assertEquals( ((CLOption)clOptions.get( 3 )).getDescriptor().getId(), CLEAR1_OPT ); + assertEquals( ((CLOption)clOptions.get( 4 )).getDescriptor().getId(), CLEAR2_OPT ); + assertEquals( ((CLOption)clOptions.get( 5 )).getDescriptor().getId(), CLEAR3_OPT ); + assertEquals( ((CLOption)clOptions.get( 6 )).getDescriptor().getId(), CLEAR5_OPT ); + assertEquals( ((CLOption)clOptions.get( 7 )).getDescriptor().getId(), 0 ); + } + + public void testDuplicateOptions() + { + //"-Dstupid=idiot","are","--all","--all","here" + final CLOptionDescriptor[] options = new CLOptionDescriptor[] + { + DEFINE, ALL, CLEAR1 + }; + + final CLArgsParser parser = new CLArgsParser( ARGLIST3, options ); + + assertNull( parser.getErrorString(), parser.getErrorString() ); + + final List clOptions = parser.getArguments(); + final int size = clOptions.size(); + + assertEquals( size, 5 ); + assertEquals( ((CLOption)clOptions.get( 0 )).getDescriptor().getId(), DEFINE_OPT ); + assertEquals( ((CLOption)clOptions.get( 1 )).getDescriptor().getId(), 0 ); + assertEquals( ((CLOption)clOptions.get( 2 )).getDescriptor().getId(), ALL_OPT ); + assertEquals( ((CLOption)clOptions.get( 3 )).getDescriptor().getId(), ALL_OPT ); + assertEquals( ((CLOption)clOptions.get( 4 )).getDescriptor().getId(), 0 ); + } + + public void testIncompatableOptions() + { + final CLOptionDescriptor[] options = new CLOptionDescriptor[] + { + DEFINE, ALL, CLEAR1, BLEE + }; + + final CLArgsParser parser = new CLArgsParser( ARGLIST4, options ); + + assertNotNull( parser.getErrorString() ); + + final List clOptions = parser.getArguments(); + final int size = clOptions.size(); + + assertEquals( size, 5 ); + assertEquals( ((CLOption)clOptions.get( 0 )).getDescriptor().getId(), DEFINE_OPT ); + assertEquals( ((CLOption)clOptions.get( 1 )).getDescriptor().getId(), 0 ); + assertEquals( ((CLOption)clOptions.get( 2 )).getDescriptor().getId(), ALL_OPT ); + assertEquals( ((CLOption)clOptions.get( 3 )).getDescriptor().getId(), BLEE_OPT ); + assertEquals( ((CLOption)clOptions.get( 4 )).getDescriptor().getId(), 0 ); + } + + public void testSingleArg() + { + final CLOptionDescriptor[] options = new CLOptionDescriptor[] + { + FILE + }; + + final CLArgsParser parser = new CLArgsParser( ARGLIST5, options ); + + assertNull( parser.getErrorString(), parser.getErrorString() ); + + final List clOptions = parser.getArguments(); + final int size = clOptions.size(); + + assertEquals( size, 1 ); + assertEquals( ((CLOption)clOptions.get( 0 )).getDescriptor().getId(), FILE_OPT ); + assertEquals( ((CLOption)clOptions.get( 0 )).getArgument(), "myfile.txt" ); + } + public void testSingleArg2() + { + final CLOptionDescriptor[] options = new CLOptionDescriptor[] + { + FILE + }; + + final CLArgsParser parser = new CLArgsParser( + new String[]{"-f-=,=-"} // Check delimiters are allowed + , options ); + + assertNull( parser.getErrorString(), parser.getErrorString() ); + + final List clOptions = parser.getArguments(); + final int size = clOptions.size(); + + assertEquals( 1, size ); + assertEquals( FILE_OPT ,((CLOption)clOptions.get( 0 )).getDescriptor().getId() ); + assertEquals( "-=,=-", ((CLOption)clOptions.get( 0 )).getArgument() ); + } + + public void testSingleArg3() + { + final CLOptionDescriptor[] options = new CLOptionDescriptor[] + { + FILE + }; + + final CLArgsParser parser = new CLArgsParser( + new String[]{"--file=-=,-"} // Check delimiters are allowed + , options ); + + assertNull( parser.getErrorString(), parser.getErrorString() ); + + final List clOptions = parser.getArguments(); + final int size = clOptions.size(); + + assertEquals( 1, size ); + assertEquals( FILE_OPT, ((CLOption)clOptions.get( 0 )).getDescriptor().getId() ); + assertEquals( "-=,-" , ((CLOption)clOptions.get( 0 )).getArgument() ); + } + + public void testSingleArg4() + { + final CLOptionDescriptor[] options = new CLOptionDescriptor[] + { + FILE + }; + + final CLArgsParser parser = new CLArgsParser( + new String[]{"--file","myfile.txt"} + , options ); + + assertNull( parser.getErrorString(), parser.getErrorString() ); + + final List clOptions = parser.getArguments(); + final int size = clOptions.size(); + + assertEquals( 1, size ); + assertEquals( FILE_OPT, ((CLOption)clOptions.get( 0 )).getDescriptor().getId() ); + assertEquals( "myfile.txt", ((CLOption)clOptions.get( 0 )).getArgument() ); + } + + public void testSingleArg5() + { + final CLOptionDescriptor[] options = new CLOptionDescriptor[] + { + FILE + }; + + final CLArgsParser parser = new CLArgsParser( + new String[]{"-f","myfile.txt"} + , options ); + + assertNull( parser.getErrorString(), parser.getErrorString() ); + + final List clOptions = parser.getArguments(); + final int size = clOptions.size(); + + assertEquals( 1, size ); + assertEquals( FILE_OPT, ((CLOption)clOptions.get( 0 )).getDescriptor().getId() ); + assertEquals( "myfile.txt", ((CLOption)clOptions.get( 0 )).getArgument() ); + } + + public void testSingleArg6() + { + final CLOptionDescriptor[] options = new CLOptionDescriptor[] + { + FILE + }; + + final CLArgsParser parser = new CLArgsParser( + new String[]{"-f","-=-"} + , options ); + + assertNull( parser.getErrorString(), parser.getErrorString() ); + + final List clOptions = parser.getArguments(); + final int size = clOptions.size(); + + assertEquals( 1, size ); + assertEquals( FILE_OPT, ((CLOption)clOptions.get( 0 )).getDescriptor().getId() ); + assertEquals( "-=-", ((CLOption)clOptions.get( 0 )).getArgument() ); + } + + public void testSingleArg7() + { + final CLOptionDescriptor[] options = new CLOptionDescriptor[] + { + FILE + }; + + final CLArgsParser parser = new CLArgsParser( + new String[]{"--file=-=-"} + , options ); + + assertNull( parser.getErrorString(), parser.getErrorString() ); + + final List clOptions = parser.getArguments(); + final int size = clOptions.size(); + + assertEquals( 1, size ); + assertEquals( FILE_OPT, ((CLOption)clOptions.get( 0 )).getDescriptor().getId() ); + assertEquals( "-=-", ((CLOption)clOptions.get( 0 )).getArgument() ); + } + + public void testSingleArg8() + { + final CLOptionDescriptor[] options = new CLOptionDescriptor[] + { + FILE + }; + + final CLArgsParser parser = new CLArgsParser( + new String[]{"--file","-=-"} + , options ); + + assertNull( parser.getErrorString(), parser.getErrorString() ); + + final List clOptions = parser.getArguments(); + final int size = clOptions.size(); + + assertEquals( 1, size ); + assertEquals( FILE_OPT, ((CLOption)clOptions.get( 0 )).getDescriptor().getId() ); + assertEquals( "-=-", ((CLOption)clOptions.get( 0 )).getArgument() ); + } + + public void testSingleArg9() + { + final CLOptionDescriptor[] options = new CLOptionDescriptor[] + { + FILE + }; + + final CLArgsParser parser = new CLArgsParser( + new String[]{"--file","-=-"} + , options ); + + assertNull( parser.getErrorString(), parser.getErrorString() ); + + final List clOptions = parser.getArguments(); + final int size = clOptions.size(); + + assertEquals( 1, size ); + assertEquals( FILE_OPT, ((CLOption)clOptions.get( 0 )).getDescriptor().getId() ); + assertEquals( "-=-", ((CLOption)clOptions.get( 0 )).getArgument() ); + } + + public void testCombinedArgs1() + { + final CLOptionDescriptor[] options = new CLOptionDescriptor[] + { + BLEE, TAINT + }; + + final CLArgsParser parser = new CLArgsParser( + new String[]{"-bT","rest"} + , options ); + + assertNull( parser.getErrorString(), parser.getErrorString() ); + + final List clOptions = parser.getArguments(); + final int size = clOptions.size(); + assertEquals( 3, size); + assertEquals( BLEE_OPT, ((CLOption)clOptions.get( 0 )).getDescriptor().getId()); + assertEquals( TAINT_OPT, ((CLOption)clOptions.get( 1 )).getDescriptor().getId()); + assertEquals( 0, ((CLOption)clOptions.get( 2 )).getDescriptor().getId()); + assertEquals( "rest", ((CLOption)clOptions.get( 2 )).getArgument()); + } + + public void testCombinedArgs2() + { + final CLOptionDescriptor[] options = new CLOptionDescriptor[] + { + BLEE, TAINT, FILE + }; + + final CLArgsParser parser = new CLArgsParser( + new String[]{"-bT","-fa"} + , options ); + + assertNull( parser.getErrorString(), parser.getErrorString() ); + + final List clOptions = parser.getArguments(); + final int size = clOptions.size(); + assertEquals( 3, size); + assertEquals( BLEE_OPT, ((CLOption)clOptions.get( 0 )).getDescriptor().getId()); + assertEquals( TAINT_OPT, ((CLOption)clOptions.get( 1 )).getDescriptor().getId()); + assertEquals( FILE_OPT, ((CLOption)clOptions.get( 2 )).getDescriptor().getId()); + assertEquals( "a", ((CLOption)clOptions.get( 2 )).getArgument()); + } + + public void testCombinedArgs3() + { + final CLOptionDescriptor[] options = new CLOptionDescriptor[] + { + BLEE, TAINT, FILE + }; + + final CLArgsParser parser = new CLArgsParser( + new String[]{"-bT","--","-fa"}// Should not detect trailing option + , options ); + + assertNull( parser.getErrorString(), parser.getErrorString() ); + + final List clOptions = parser.getArguments(); + final int size = clOptions.size(); + assertEquals( 3, size); + assertEquals( BLEE_OPT, ((CLOption)clOptions.get( 0 )).getDescriptor().getId()); + assertEquals( TAINT_OPT, ((CLOption)clOptions.get( 1 )).getDescriptor().getId()); + assertEquals( 0, ((CLOption)clOptions.get( 2 )).getDescriptor().getId()); + assertEquals( "-fa", ((CLOption)clOptions.get( 2 )).getArgument()); + } + + public void testCombinedArgs4() + { + final CLOptionDescriptor[] options = new CLOptionDescriptor[] + { + BLEE, TAINT, FILE + }; + + final CLArgsParser parser = new CLArgsParser( + new String[]{"-bT","rest","-fa"} // should detect trailing option + , options ); + + assertNull( parser.getErrorString(), parser.getErrorString() ); + + final List clOptions = parser.getArguments(); + final int size = clOptions.size(); + assertEquals( 4, size); + assertEquals( BLEE_OPT, ((CLOption)clOptions.get( 0 )).getDescriptor().getId()); + assertEquals( TAINT_OPT, ((CLOption)clOptions.get( 1 )).getDescriptor().getId()); + assertEquals( 0, ((CLOption)clOptions.get( 2 )).getDescriptor().getId()); + assertEquals( "rest", ((CLOption)clOptions.get( 2 )).getArgument()); + assertEquals( FILE_OPT, ((CLOption)clOptions.get( 3 )).getDescriptor().getId()); + assertEquals( "a", ((CLOption)clOptions.get( 3 )).getArgument()); + } + + public void test2ArgsParse() + { + //"-Dstupid=idiot","are","--all","here" + final CLOptionDescriptor[] options = new CLOptionDescriptor[] + { + DEFINE, ALL, CLEAR1, CASE_CHECK + }; + + final CLArgsParser parser = new CLArgsParser( ARGLIST2, options ); + + assertNull( parser.getErrorString(), parser.getErrorString() ); + + final List clOptions = parser.getArguments(); + final int size = clOptions.size(); + + assertEquals( size, 5 ); + assertEquals( ((CLOption)clOptions.get( 0 )).getDescriptor().getId(), DEFINE_OPT ); + assertEquals( ((CLOption)clOptions.get( 1 )).getDescriptor().getId(), 0 ); + assertEquals( ((CLOption)clOptions.get( 2 )).getDescriptor().getId(), ALL_OPT ); + assertEquals( ((CLOption)clOptions.get( 3 )).getDescriptor().getId(), 0 ); + assertEquals( ((CLOption)clOptions.get( 4 )).getDescriptor().getId(), CASE_CHECK_OPT ); + + final CLOption option = (CLOption)clOptions.get( 0 ); + assertEquals( "stupid", option.getArgument( 0 ) ); + assertEquals( "idiot", option.getArgument( 1 ) ); + } + + public void test2ArgsParse2() + { + final CLOptionDescriptor[] options = new CLOptionDescriptor[] + { + DEFINE + }; + + final CLArgsParser parser = new CLArgsParser( + new String[] {"--define","a-b,c=d-e,f"}, // Check "-" is allowed in arg2 + options ); + + assertNull( parser.getErrorString(), parser.getErrorString() ); + + final List clOptions = parser.getArguments(); + final int size = clOptions.size(); + + assertEquals( 1, size ); + assertEquals( DEFINE_OPT, ((CLOption)clOptions.get( 0 )).getDescriptor().getId() ); + + final CLOption option = (CLOption)clOptions.get( 0 ); + assertEquals( "a-b,c", option.getArgument( 0 ) ); + assertEquals( "d-e,f", option.getArgument( 1 ) ); + } + + public void test2ArgsParse3() + { + final CLOptionDescriptor[] options = new CLOptionDescriptor[] + { + DEFINE + }; + + final CLArgsParser parser = new CLArgsParser( + new String[] {"-D","A-b,c","G-e,f"}, + options ); + + assertNull( parser.getErrorString(), parser.getErrorString() ); + + final List clOptions = parser.getArguments(); + final int size = clOptions.size(); + + assertEquals( 1, size ); + assertEquals( DEFINE_OPT, ((CLOption)clOptions.get( 0 )).getDescriptor().getId() ); + + final CLOption option = (CLOption)clOptions.get( 0 ); + assertEquals( "A-b,c", option.getArgument( 0 ) ); + assertEquals( "G-e,f", option.getArgument( 1 ) ); + } + + public void test2ArgsParse4() + { + final CLOptionDescriptor[] options = new CLOptionDescriptor[] + { + DEFINE_MANY + }; + + final CLArgsParser parser = new CLArgsParser( + new String[] {"-Dval1=-1","-D","val2=-2", + "--define=val-3=-3","--define","val4-=-4"}, + options ); + + assertNull( parser.getErrorString(), parser.getErrorString() ); + + final List clOptions = parser.getArguments(); + final int size = clOptions.size(); + + assertEquals( 4, size ); + for (int i=0;i<size;i++){ + assertEquals( DEFINE_OPT, ((CLOption)clOptions.get( i )).getDescriptor().getId() ); + } + + CLOption option; + option = (CLOption)clOptions.get( 0 ); + assertEquals( "val1", option.getArgument( 0 ) ); + assertEquals( "-1", option.getArgument( 1 ) ); + + option = (CLOption)clOptions.get( 1 ); + assertEquals( "val2", option.getArgument( 0 ) ); + assertEquals( "-2", option.getArgument( 1 ) ); + + option = (CLOption)clOptions.get( 2 ); + assertEquals( "val-3", option.getArgument( 0 ) ); + assertEquals( "-3", option.getArgument( 1 ) ); + + option = (CLOption)clOptions.get( 3 ); + assertEquals( "val4-", option.getArgument( 0 ) ); + assertEquals( "-4", option.getArgument( 1 ) ); + } + + public void testPartParse() + { + final CLOptionDescriptor[] options = new CLOptionDescriptor[] + { + YOU + }; + + final ParserControl control = new AbstractParserControl() + { + public boolean isFinished( int lastOptionCode ) + { + return (lastOptionCode == YOU_OPT); + } + }; + + final CLArgsParser parser = new CLArgsParser( ARGLIST1, options, control ); + + assertNull( parser.getErrorString(), parser.getErrorString() ); + + final List clOptions = parser.getArguments(); + final int size = clOptions.size(); + + assertEquals( size, 1 ); + assertEquals( ((CLOption)clOptions.get( 0 )).getDescriptor().getId(), YOU_OPT ); + } + + public void test2PartParse() + { + final CLOptionDescriptor[] options1 = new CLOptionDescriptor[] + { + YOU + }; + + final CLOptionDescriptor[] options2 = new CLOptionDescriptor[] + { + ALL, CLEAR1, CLEAR2, CLEAR3, CLEAR5 + }; + + final ParserControl control1 = new AbstractParserControl() + { + public boolean isFinished( int lastOptionCode ) + { + return (lastOptionCode == YOU_OPT); + } + }; + + final CLArgsParser parser1 = new CLArgsParser( ARGLIST1, options1, control1 ); + + assertNull( parser1.getErrorString(), parser1.getErrorString() ); + + final List clOptions1 = parser1.getArguments(); + final int size1 = clOptions1.size(); + + assertEquals( size1, 1 ); + assertEquals( ((CLOption)clOptions1.get( 0 )).getDescriptor().getId(), YOU_OPT ); + + final CLArgsParser parser2 = + new CLArgsParser( parser1.getUnparsedArgs(), options2 ); + + assertNull( parser2.getErrorString(), parser2.getErrorString() ); + + final List clOptions2 = parser2.getArguments(); + final int size2 = clOptions2.size(); + + assertEquals( size2, 7 ); + assertEquals( ((CLOption)clOptions2.get( 0 )).getDescriptor().getId(), 0 ); + assertEquals( ((CLOption)clOptions2.get( 1 )).getDescriptor().getId(), ALL_OPT ); + assertEquals( ((CLOption)clOptions2.get( 2 )).getDescriptor().getId(), CLEAR1_OPT ); + assertEquals( ((CLOption)clOptions2.get( 3 )).getDescriptor().getId(), CLEAR2_OPT ); + assertEquals( ((CLOption)clOptions2.get( 4 )).getDescriptor().getId(), CLEAR3_OPT ); + assertEquals( ((CLOption)clOptions2.get( 5 )).getDescriptor().getId(), CLEAR5_OPT ); + assertEquals( ((CLOption)clOptions2.get( 6 )).getDescriptor().getId(), 0 ); + } + + public void test2PartPartialParse() + { + final CLOptionDescriptor[] options1 = new CLOptionDescriptor[] + { + YOU, ALL, CLEAR1 + }; + + final CLOptionDescriptor[] options2 = new CLOptionDescriptor[]{}; + + final ParserControl control1 = new AbstractParserControl() + { + public boolean isFinished( final int lastOptionCode ) + { + return (lastOptionCode == CLEAR1_OPT); + } + }; + + final CLArgsParser parser1 = new CLArgsParser( ARGLIST1, options1, control1 ); + + assertNull( parser1.getErrorString(), parser1.getErrorString() ); + + final List clOptions1 = parser1.getArguments(); + final int size1 = clOptions1.size(); + + assertEquals( size1, 4 ); + assertEquals( ((CLOption)clOptions1.get( 0 )).getDescriptor().getId(), YOU_OPT ); + assertEquals( ((CLOption)clOptions1.get( 1 )).getDescriptor().getId(), 0 ); + assertEquals( ((CLOption)clOptions1.get( 2 )).getDescriptor().getId(), ALL_OPT ); + assertEquals( ((CLOption)clOptions1.get( 3 )).getDescriptor().getId(), CLEAR1_OPT ); + + assertTrue( parser1.getUnparsedArgs()[0].equals( "ler" ) ); + + final CLArgsParser parser2 = + new CLArgsParser( parser1.getUnparsedArgs(), options2 ); + + assertNull( parser2.getErrorString(), parser2.getErrorString() ); + + final List clOptions2 = parser2.getArguments(); + final int size2 = clOptions2.size(); + + assertEquals( size2, 2 ); + assertEquals( ((CLOption)clOptions2.get( 0 )).getDescriptor().getId(), 0 ); + assertEquals( ((CLOption)clOptions2.get( 1 )).getDescriptor().getId(), 0 ); + } + + public void testDuplicatesFail() + { + final CLOptionDescriptor[] options = new CLOptionDescriptor[] + { + YOU, ALL, CLEAR1, CLEAR2, CLEAR3, CLEAR5 + }; + + final CLArgsParser parser = new CLArgsParser( ARGLIST1, options ); + + assertNull( parser.getErrorString(), parser.getErrorString() ); + } + + public void testIncomplete2Args() + { + //"-Dstupid=" + final CLOptionDescriptor[] options = new CLOptionDescriptor[] + { + DEFINE + }; + + final CLArgsParser parser = new CLArgsParser( new String[]{"-Dstupid="}, options ); + + assertNull( parser.getErrorString(), parser.getErrorString() ); + + final List clOptions = parser.getArguments(); + final int size = clOptions.size(); + + assertEquals( size, 1 ); + final CLOption option = (CLOption)clOptions.get( 0 ); + assertEquals( option.getDescriptor().getId(), DEFINE_OPT ); + assertEquals( option.getArgument( 0 ), "stupid" ); + assertEquals( option.getArgument( 1 ), "" ); + } + + public void testIncomplete2ArgsMixed() + { + //"-Dstupid=","-c" + final CLOptionDescriptor[] options = new CLOptionDescriptor[] + { + DEFINE, CLEAR1 + }; + + final String[] args = new String[]{"-Dstupid=", "-c"}; + + final CLArgsParser parser = new CLArgsParser( args, options ); + + assertNull( parser.getErrorString(), parser.getErrorString() ); + + final List clOptions = parser.getArguments(); + final int size = clOptions.size(); + + assertEquals( size, 2 ); + assertEquals( ((CLOption)clOptions.get( 1 )).getDescriptor().getId(), CLEAR1_OPT ); + final CLOption option = (CLOption)clOptions.get( 0 ); + assertEquals( option.getDescriptor().getId(), DEFINE_OPT ); + assertEquals( option.getArgument( 0 ), "stupid" ); + assertEquals( option.getArgument( 1 ), "" ); + } + + public void testIncomplete2ArgsMixedNoEq() + { + //"-Dstupid","-c" + final CLOptionDescriptor[] options = new CLOptionDescriptor[] + { + DEFINE, CLEAR1 + }; + + final String[] args = new String[]{"-DStupid", "-c"}; + + final CLArgsParser parser = new CLArgsParser( args, options ); + + assertNull( parser.getErrorString(), parser.getErrorString() ); + + final List clOptions = parser.getArguments(); + final int size = clOptions.size(); + + assertEquals( size, 2 ); + assertEquals( ((CLOption)clOptions.get( 1 )).getDescriptor().getId(), CLEAR1_OPT ); + final CLOption option = (CLOption)clOptions.get( 0 ); + assertEquals( option.getDescriptor().getId(), DEFINE_OPT ); + assertEquals( option.getArgument( 0 ), "Stupid" ); + assertEquals( option.getArgument( 1 ), "" ); + } + + /** + * Test the getArgumentById and getArgumentByName lookup methods. + */ + public void testArgumentLookup() + { + final String[] args = {"-f", "testarg"}; + final CLOptionDescriptor[] options = {FILE}; + final CLArgsParser parser = new CLArgsParser( args, options ); + + CLOption optionById = parser.getArgumentById( FILE_OPT ); + assertNotNull( optionById ); + assertEquals( FILE_OPT, optionById.getDescriptor().getId() ); + + CLOption optionByName = parser.getArgumentByName( FILE.getName() ); + assertNotNull( optionByName ); + assertEquals( FILE_OPT, optionByName.getDescriptor().getId() ); + } + + /** + * Test that you can have null long forms. + */ + public void testNullLongForm() + { + final CLOptionDescriptor test = + new CLOptionDescriptor( null, + CLOptionDescriptor.ARGUMENT_DISALLOWED, + 'n', + "test null long form" ); + + final String[] args = {"-n", "testarg"}; + final CLOptionDescriptor[] options = {test}; + final CLArgsParser parser = new CLArgsParser( args, options ); + + final CLOption optionByID = parser.getArgumentById( 'n' ); + assertNotNull( optionByID ); + assertEquals( 'n', optionByID.getDescriptor().getId() ); + + final CLOption optionByName = parser.getArgumentByName( FILE.getName() ); + assertNull( "Looking for non-existent option by name", optionByName ); + } + + /** + * Test that you can have null descriptions. + */ + public void testNullDescription() + { + final CLOptionDescriptor test = + new CLOptionDescriptor( "nulltest", + CLOptionDescriptor.ARGUMENT_DISALLOWED, + 'n', + null ); + + final String[] args = {"-n", "testarg"}; + final CLOptionDescriptor[] options = {test}; + final CLArgsParser parser = new CLArgsParser( args, options ); + + final CLOption optionByID = parser.getArgumentById( 'n' ); + assertNotNull( optionByID ); + assertEquals( 'n', optionByID.getDescriptor().getId() ); + + final StringBuffer sb = CLUtil.describeOptions( options ); + final String lineSeparator = System.getProperty( "line.separator" ); + assertEquals( "Testing display of null description", + "\t-n, --nulltest" + lineSeparator, + sb.toString() ); + } + /* + * TODO add tests to check for: + * - name clash + * - long option abbreviations (match shortest unique abbreviation) + */ + +}
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
