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]

Reply via email to