You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by jk...@apache.org on 2002/09/10 23:35:58 UTC

cvs commit: jakarta-commons/cli/src/test/org/apache/commons/cli ValueTest.java

jkeyes      2002/09/10 14:35:57

  Modified:    cli/src/java/org/apache/commons/cli Option.java
                        OptionBuilder.java
               cli/src/test/org/apache/commons/cli ValueTest.java
  Log:
  support for Options with optional argument values
  
  Revision  Changes    Path
  1.13      +0 -3      jakarta-commons/cli/src/java/org/apache/commons/cli/Option.java
  
  Index: Option.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/cli/src/java/org/apache/commons/cli/Option.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- Option.java	1 Sep 2002 22:54:56 -0000	1.12
  +++ Option.java	10 Sep 2002 21:35:57 -0000	1.13
  @@ -314,9 +314,6 @@
        * an optional argument.
        */
       public void setOptionalArg( boolean optionalArg ) {
  -        if( optionalArg ) {
  -            this.numberOfArgs = 1;
  -        }
           this.optionalArg = optionalArg;
       }
   
  
  
  
  1.9       +48 -21    jakarta-commons/cli/src/java/org/apache/commons/cli/OptionBuilder.java
  
  Index: OptionBuilder.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/cli/src/java/org/apache/commons/cli/OptionBuilder.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- OptionBuilder.java	9 Sep 2002 19:48:13 -0000	1.8
  +++ OptionBuilder.java	10 Sep 2002 21:35:57 -0000	1.9
  @@ -234,6 +234,33 @@
        * @return the OptionBuilder instance
        */
       public static OptionBuilder hasOptionalArg( ) {
  +        instance.numberOfArgs = 1;
  +        instance.optionalArg = true;
  +        return instance;
  +    }
  +
  +    /**
  +     * <p>The next Option can have an unlimited number of
  +     * optional arguments.</p>
  +     *
  +     * @return the OptionBuilder instance
  +     */
  +    public static OptionBuilder hasOptionalArgs( ) {
  +        instance.numberOfArgs = Option.UNLIMITED_VALUES;
  +        instance.optionalArg = true;
  +        return instance;
  +    }
  +
  +    /**
  +     * <p>The next Option can have the specified number of 
  +     * optional arguments.</p>
  +     *
  +     * @param numArgs - the maximum number of optional arguments
  +     * the next Option created can have.
  +     * @return the OptionBuilder instance
  +     */
  +    public static OptionBuilder hasOptionalArgs( int numArgs ) {
  +        instance.numberOfArgs = numArgs;
           instance.optionalArg = true;
           return instance;
       }
  @@ -277,6 +304,24 @@
       }
   
       /**
  +     * <p>Create an Option using the current settings</p>
  +     *
  +     * @return the Option instance
  +     * @throws IllegalArgumentException if <code>longOpt</code> has
  +     * not been set.  
  +     * @see Option.
  +     */
  +    public static Option create() 
  +    throws IllegalArgumentException
  +    {
  +        if( longopt == null ) {
  +            throw new IllegalArgumentException( "must specify longopt" );
  +        }
  +
  +        return create( " " );
  +    }
  +
  +    /**
        * <p>Create an Option using the current settings and with 
        * the specified Option <code>char</code>.</p>
        *
  @@ -304,23 +349,5 @@
   
           // return the Option instance
           return option;
  -    }
  -
  -    /**
  -     * <p>Create an Option using the current settings</p>
  -     *
  -     * @return the Option instance
  -     * @throws IllegalArgumentException if <code>longOpt</code> has
  -     * not been set.  
  -     * @see Option.
  -     */
  -    public static Option create() 
  -    throws IllegalArgumentException
  -    {
  -        if( longopt == null ) {
  -            throw new IllegalArgumentException( "must specify longopt" );
  -        }
  -
  -        return create( " " );
       }
   }
  
  
  
  1.4       +178 -12   jakarta-commons/cli/src/test/org/apache/commons/cli/ValueTest.java
  
  Index: ValueTest.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/cli/src/test/org/apache/commons/cli/ValueTest.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ValueTest.java	4 Jul 2002 22:32:12 -0000	1.3
  +++ ValueTest.java	10 Sep 2002 21:35:57 -0000	1.4
  @@ -19,17 +19,11 @@
   
       public static Test suite() { 
           return new TestSuite(ValueTest.class); 
  -        /*
  -        TestSuite suite = new TestSuite();
  -
  -        suite.addTest( new ValueTest("testLongNoArg") );
  -
  -        return suite;
  -        */
       }
   
       private CommandLine _cl = null;
  -
  +    private CommandLine _clOptional = null;
  +    private Options opts = new Options();
   
       public ValueTest(String name)
       {
  @@ -38,7 +32,6 @@
   
       public void setUp()
       {
  -        Options opts = new Options();
           opts.addOption("a",
                          false,
                          "toggle -a");
  @@ -57,10 +50,32 @@
                          true,
                          "set -d");
   
  +        opts.addOption( OptionBuilder.hasOptionalArg()
  +                        .create( 'e') );
  +
  +        opts.addOption( OptionBuilder.hasOptionalArg()
  +                        .withLongOpt( "fish" )
  +                        .create( ) );
  +
  +        opts.addOption( OptionBuilder.hasOptionalArgs()
  +                        .withLongOpt( "gravy" )
  +                        .create( ) );
  +
  +        opts.addOption( OptionBuilder.hasOptionalArgs( 2 )
  +                        .withLongOpt( "hide" )
  +                        .create( ) );
  +
  +        opts.addOption( OptionBuilder.hasOptionalArgs( 2 )
  +                        .create( 'i' ) );
  +
  +        opts.addOption( OptionBuilder.hasOptionalArgs( )
  +                        .create( 'j' ) );
  +
           String[] args = new String[] { "-a",
  -                                       "-b", "foo",
  -                                       "--c",
  -                                       "--d", "bar" };
  +            "-b", "foo",
  +            "--c",
  +            "--d", "bar" 
  +        };
   
           try
           {
  @@ -102,5 +117,156 @@
           assertTrue( _cl.hasOption("d") );
           assertNotNull( _cl.getOptionValue("d") );
           assertEquals( _cl.getOptionValue("d"), "bar");
  +    }
  +
  +    public void testShortOptionalArgNoValue()
  +    {
  +        String[] args = new String[] { "-e"
  +        };
  +        try
  +        {
  +            CommandLineParser parser = CommandLineParserFactory.newParser();
  +            CommandLine cmd = parser.parse(opts,args);
  +            assertTrue( cmd.hasOption("e") );
  +            assertNull( cmd.getOptionValue("e") );
  +        }
  +        catch (ParseException e)
  +        {
  +            fail("Cannot setUp() CommandLine: " + e.toString());
  +        }
  +    }
  +
  +    public void testShortOptionalArgValue()
  +    {
  +        String[] args = new String[] { "-e", "everything"
  +        };
  +        try
  +        {
  +            CommandLineParser parser = CommandLineParserFactory.newParser();
  +            CommandLine cmd = parser.parse(opts,args);
  +            assertTrue( cmd.hasOption("e") );
  +            assertEquals( "everything", cmd.getOptionValue("e") );
  +        }
  +        catch (ParseException e)
  +        {
  +            fail("Cannot setUp() CommandLine: " + e.toString());
  +        }
  +    }
  +
  +    public void testLongOptionalNoValue()
  +    {
  +        String[] args = new String[] { "--fish"
  +        };
  +        try
  +        {
  +            CommandLineParser parser = CommandLineParserFactory.newParser();
  +            CommandLine cmd = parser.parse(opts,args);
  +            assertTrue( cmd.hasOption("fish") );
  +            assertNull( cmd.getOptionValue("fish") );
  +        }
  +        catch (ParseException e)
  +        {
  +            fail("Cannot setUp() CommandLine: " + e.toString());
  +        }
  +    }
  +
  +    public void testLongOptionalArgValue()
  +    {
  +        String[] args = new String[] { "--fish", "face"
  +        };
  +        try
  +        {
  +            CommandLineParser parser = CommandLineParserFactory.newParser();
  +            CommandLine cmd = parser.parse(opts,args);
  +            assertTrue( cmd.hasOption("fish") );
  +            assertEquals( "face", cmd.getOptionValue("fish") );
  +        }
  +        catch (ParseException e)
  +        {
  +            fail("Cannot setUp() CommandLine: " + e.toString());
  +        }
  +    }
  +
  +    public void testShortOptionalArgValues()
  +    {
  +        String[] args = new String[] { "-j", "ink", "idea"
  +        };
  +        try
  +        {
  +            CommandLineParser parser = CommandLineParserFactory.newParser();
  +            CommandLine cmd = parser.parse(opts,args);
  +            assertTrue( cmd.hasOption("j") );
  +            assertEquals( "ink", cmd.getOptionValue("j") );
  +            assertEquals( "ink", cmd.getOptionValues("j")[0] );
  +            assertEquals( "idea", cmd.getOptionValues("j")[1] );
  +            assertEquals( cmd.getArgs().length, 0 );
  +        }
  +        catch (ParseException e)
  +        {
  +            fail("Cannot setUp() CommandLine: " + e.toString());
  +        }
  +    }
  +
  +    public void testLongOptionalArgValues()
  +    {
  +        String[] args = new String[] { "--gravy", "gold", "garden"
  +        };
  +        try
  +        {
  +            CommandLineParser parser = CommandLineParserFactory.newParser();
  +            CommandLine cmd = parser.parse(opts,args);
  +            assertTrue( cmd.hasOption("gravy") );
  +            assertEquals( "gold", cmd.getOptionValue("gravy") );
  +            assertEquals( "gold", cmd.getOptionValues("gravy")[0] );
  +            assertEquals( "garden", cmd.getOptionValues("gravy")[1] );
  +            assertEquals( cmd.getArgs().length, 0 );
  +        }
  +        catch (ParseException e)
  +        {
  +            fail("Cannot setUp() CommandLine: " + e.toString());
  +        }
  +    }
  +
  +    public void testShortOptionalNArgValues()
  +    {
  +        String[] args = new String[] { "-i", "ink", "idea", "isotope", "ice"
  +        };
  +        try
  +        {
  +            CommandLineParser parser = CommandLineParserFactory.newParser();
  +            CommandLine cmd = parser.parse(opts,args);
  +            assertTrue( cmd.hasOption("i") );
  +            assertEquals( "ink", cmd.getOptionValue("i") );
  +            assertEquals( "ink", cmd.getOptionValues("i")[0] );
  +            assertEquals( "idea", cmd.getOptionValues("i")[1] );
  +            assertEquals( cmd.getArgs().length, 2 );
  +            assertEquals( "isotope", cmd.getArgs()[0] );
  +            assertEquals( "ice", cmd.getArgs()[1] );
  +        }
  +        catch (ParseException e)
  +        {
  +            fail("Cannot setUp() CommandLine: " + e.toString());
  +        }
  +    }
  +
  +    public void testLongOptionalNArgValues()
  +    {
  +        String[] args = new String[] { "--hide", "house", "hair", "head"
  +        };
  +        try
  +        {
  +            CommandLineParser parser = CommandLineParserFactory.newParser();
  +            CommandLine cmd = parser.parse(opts,args);
  +            assertTrue( cmd.hasOption("hide") );
  +            assertEquals( "house", cmd.getOptionValue("hide") );
  +            assertEquals( "house", cmd.getOptionValues("hide")[0] );
  +            assertEquals( "hair", cmd.getOptionValues("hide")[1] );
  +            assertEquals( cmd.getArgs().length, 1 );
  +            assertEquals( "head", cmd.getArgs()[0] );
  +        }
  +        catch (ParseException e)
  +        {
  +            fail("Cannot setUp() CommandLine: " + e.toString());
  +        }
       }
   }
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>