You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by eb...@apache.org on 2010/06/16 02:14:27 UTC

svn commit: r955099 - in /commons/proper/cli/trunk/src: java/org/apache/commons/cli/DefaultParser.java test/org/apache/commons/cli/ParserTestCase.java test/org/apache/commons/cli/ValueTest.java

Author: ebourg
Date: Wed Jun 16 00:14:26 2010
New Revision: 955099

URL: http://svn.apache.org/viewvc?rev=955099&view=rev
Log:
Added the missing parse methods accepting a map with the default options to DefaultParser
Moved the related tests from ValueTest to ParserTestCase

Modified:
    commons/proper/cli/trunk/src/java/org/apache/commons/cli/DefaultParser.java
    commons/proper/cli/trunk/src/test/org/apache/commons/cli/ParserTestCase.java
    commons/proper/cli/trunk/src/test/org/apache/commons/cli/ValueTest.java

Modified: commons/proper/cli/trunk/src/java/org/apache/commons/cli/DefaultParser.java
URL: http://svn.apache.org/viewvc/commons/proper/cli/trunk/src/java/org/apache/commons/cli/DefaultParser.java?rev=955099&r1=955098&r2=955099&view=diff
==============================================================================
--- commons/proper/cli/trunk/src/java/org/apache/commons/cli/DefaultParser.java (original)
+++ commons/proper/cli/trunk/src/java/org/apache/commons/cli/DefaultParser.java Wed Jun 16 00:14:26 2010
@@ -18,8 +18,10 @@
 package org.apache.commons.cli;
 
 import java.util.ArrayList;
-import java.util.List;
+import java.util.Enumeration;
 import java.util.Iterator;
+import java.util.List;
+import java.util.Properties;
 
 /**
  * Default parser.
@@ -54,11 +56,47 @@ public class DefaultParser implements Co
     
     public CommandLine parse(Options options, String[] arguments) throws ParseException
     {
-        return parse(options, arguments, false);
+        return parse(options, arguments, null);
+    }
+
+    /**
+     * Parse the arguments according to the specified options and properties.
+     *
+     * @param options    the specified Options
+     * @param arguments  the command line arguments
+     * @param properties command line option name-value pairs
+     * @return the list of atomic option and value tokens
+     *
+     * @throws ParseException if there are any problems encountered
+     * while parsing the command line tokens.
+     */
+    public CommandLine parse(Options options, String[] arguments, Properties properties) throws ParseException
+    {
+        return parse(options, arguments, properties, false);
     }
 
     public CommandLine parse(Options options, String[] arguments, boolean stopAtNonOption) throws ParseException
     {
+        return parse(options, arguments, null, stopAtNonOption);
+    }
+
+    /**
+     * Parse the arguments according to the specified options and properties.
+     *
+     * @param options         the specified Options
+     * @param arguments       the command line arguments
+     * @param properties      command line option name-value pairs
+     * @param stopAtNonOption if <tt>true</tt> an unrecognized argument stops
+     *     the parsing and the remaining arguments are added to the 
+     *     {@link CommandLine}s args list. If <tt>false</tt> an unrecognized
+     *     argument triggers a ParseException.
+     *
+     * @return the list of atomic option and value tokens
+     * @throws ParseException if there are any problems encountered
+     * while parsing the command line tokens.
+     */
+    public CommandLine parse(Options options, String[] arguments, Properties properties, boolean stopAtNonOption) throws ParseException
+    {
         this.options = options;
         this.stopAtNonOption = stopAtNonOption;
         skipParsing = false;
@@ -85,12 +123,58 @@ public class DefaultParser implements Co
         // check the arguments of the last option
         checkRequiredArgs();
         
+        // add the default options
+        handleProperties(properties);
+        
         checkRequiredOptions();
         
         return cmd;
     }
 
     /**
+     * Sets the values of Options using the values in <code>properties</code>.
+     *
+     * @param properties The value properties to be processed.
+     */
+    private void handleProperties(Properties properties)
+    {
+        if (properties == null)
+        {
+            return;
+        }
+        
+        for (Enumeration e = properties.propertyNames(); e.hasMoreElements();)
+        {
+            String option = e.nextElement().toString();
+            
+            if (!cmd.hasOption(option))
+            {
+                Option opt = options.getOption(option);
+                
+                // get the value from the properties
+                String value = properties.getProperty(option);
+                
+                if (opt.hasArg())
+                {
+                    if (opt.getValues() == null || opt.getValues().length == 0)
+                    {
+                        opt.addValueForProcessing(value);
+                    }
+                }
+                else if (!("yes".equalsIgnoreCase(value)
+                        || "true".equalsIgnoreCase(value)
+                        || "1".equalsIgnoreCase(value)))
+                {
+                    // if the value is not yes, true or 1 then don't add the option to the CommandLine
+                    continue;
+                }
+                
+                cmd.addOption(opt);
+            }
+        }
+    }
+
+    /**
      * Throws a {@link MissingOptionException} if all of the required options
      * are not present.
      *

Modified: commons/proper/cli/trunk/src/test/org/apache/commons/cli/ParserTestCase.java
URL: http://svn.apache.org/viewvc/commons/proper/cli/trunk/src/test/org/apache/commons/cli/ParserTestCase.java?rev=955099&r1=955098&r2=955099&view=diff
==============================================================================
--- commons/proper/cli/trunk/src/test/org/apache/commons/cli/ParserTestCase.java (original)
+++ commons/proper/cli/trunk/src/test/org/apache/commons/cli/ParserTestCase.java Wed Jun 16 00:14:26 2010
@@ -869,4 +869,121 @@ public abstract class ParserTestCase ext
         assertTrue("Confirm -f is set", cl.hasOption("f"));
         assertEquals("number of arg for -f", 1, cl.getOptionValues("f").length);
     }
+
+    private CommandLine parse(CommandLineParser parser, Options opts, String[] args, Properties properties) throws ParseException {
+        if (parser instanceof Parser) {
+            return ((Parser) parser).parse(opts, args, properties);
+        } else if (parser instanceof DefaultParser) {
+            return ((DefaultParser) parser).parse(opts, args, properties);
+        } else {
+            throw new UnsupportedOperationException("Default options not supported by this parser");
+        }
+    }
+
+    public void testPropertyOptionSingularValue() throws Exception
+    {
+        Options opts = new Options();
+        opts.addOption(OptionBuilder.hasOptionalArgs(2).withLongOpt("hide").create());        
+        
+        Properties properties = new Properties();
+        properties.setProperty( "hide", "seek" );
+
+        CommandLine cmd = parse(parser, opts, null, properties);
+        assertTrue( cmd.hasOption("hide") );
+        assertEquals( "seek", cmd.getOptionValue("hide") );
+        assertTrue( !cmd.hasOption("fake") );
+    }
+
+    public void testPropertyOptionFlags() throws Exception
+    {
+        Options opts = new Options();
+        opts.addOption("a", false, "toggle -a");
+        opts.addOption("c", "c", false, "toggle -c");
+        opts.addOption(OptionBuilder.hasOptionalArg().create('e'));
+        
+        Properties properties = new Properties();
+        properties.setProperty("a", "true");
+        properties.setProperty("c", "yes");
+        properties.setProperty("e", "1");
+        
+        CommandLine cmd = parse(parser, opts, null, properties);
+        assertTrue(cmd.hasOption("a"));
+        assertTrue(cmd.hasOption("c"));
+        assertTrue(cmd.hasOption("e"));
+        
+        
+        properties = new Properties();
+        properties.setProperty("a", "false");
+        properties.setProperty("c", "no");
+        properties.setProperty("e", "0");
+        
+        cmd = parse(parser, opts, null, properties);
+        assertTrue(!cmd.hasOption("a"));
+        assertTrue(!cmd.hasOption("c"));
+        assertTrue(cmd.hasOption("e")); // this option accepts an argument
+        
+        
+        properties = new Properties();
+        properties.setProperty("a", "TRUE");
+        properties.setProperty("c", "nO");
+        properties.setProperty("e", "TrUe");
+        
+        cmd = parse(parser, opts, null, properties);
+        assertTrue(cmd.hasOption("a"));
+        assertTrue(!cmd.hasOption("c"));
+        assertTrue(cmd.hasOption("e"));
+        
+        
+        properties = new Properties();
+        properties.setProperty("a", "just a string");
+        properties.setProperty("e", "");
+        
+        cmd = parse(parser, opts, null, properties);
+        assertTrue(!cmd.hasOption("a"));
+        assertTrue(!cmd.hasOption("c"));
+        assertTrue(cmd.hasOption("e"));
+        
+        
+        properties = new Properties();
+        properties.setProperty("a", "0");
+        properties.setProperty("c", "1");
+        
+        cmd = parse(parser, opts, null, properties);
+        assertTrue(!cmd.hasOption("a"));
+        assertTrue(cmd.hasOption("c"));
+    } 
+
+    public void testPropertyOptionMultipleValues() throws Exception
+    {
+        Options opts = new Options();
+        opts.addOption(OptionBuilder.hasArgs().withValueSeparator(',').create('k'));
+        
+        Properties properties = new Properties();
+        properties.setProperty( "k", "one,two" );
+
+        String[] values = new String[] { "one", "two" };
+
+        CommandLine cmd = parse(parser, opts, null, properties);
+        assertTrue( cmd.hasOption("k") );
+        assertTrue( Arrays.equals( values, cmd.getOptionValues('k') ) );
+    }
+
+    public void testPropertyOverrideValues() throws Exception
+    {
+        Options opts = new Options();
+        opts.addOption(OptionBuilder.hasOptionalArgs(2).create('i'));
+        opts.addOption(OptionBuilder.hasOptionalArgs().create('j'));
+        
+        String[] args = new String[] { "-j", "found", "-i", "ink" };
+
+        Properties properties = new Properties();
+        properties.setProperty( "j", "seek" );
+
+        CommandLine cmd = parse(parser, opts, args, properties);
+        assertTrue( cmd.hasOption("j") );
+        assertEquals( "found", cmd.getOptionValue("j") );
+        assertTrue( cmd.hasOption("i") );
+        assertEquals( "ink", cmd.getOptionValue("i") );
+        assertTrue( !cmd.hasOption("fake") );
+    }
 }

Modified: commons/proper/cli/trunk/src/test/org/apache/commons/cli/ValueTest.java
URL: http://svn.apache.org/viewvc/commons/proper/cli/trunk/src/test/org/apache/commons/cli/ValueTest.java?rev=955099&r1=955098&r2=955099&view=diff
==============================================================================
--- commons/proper/cli/trunk/src/test/org/apache/commons/cli/ValueTest.java (original)
+++ commons/proper/cli/trunk/src/test/org/apache/commons/cli/ValueTest.java Wed Jun 16 00:14:26 2010
@@ -17,9 +17,6 @@
 
 package org.apache.commons.cli;
 
-import java.util.Arrays;
-import java.util.Properties;
-
 import junit.framework.TestCase;
 
 public class ValueTest extends TestCase
@@ -40,7 +37,6 @@ public class ValueTest extends TestCase
         opts.addOption(OptionBuilder.hasOptionalArgs(2).withLongOpt("hide").create());
         opts.addOption(OptionBuilder.hasOptionalArgs(2).create('i'));
         opts.addOption(OptionBuilder.hasOptionalArgs().create('j'));
-        opts.addOption(OptionBuilder.hasArgs().withValueSeparator(',').create('k'));
 
         String[] args = new String[] { "-a",
             "-b", "foo",
@@ -175,102 +171,4 @@ public class ValueTest extends TestCase
         assertEquals( cmd.getArgs().length, 1 );
         assertEquals( "head", cmd.getArgs()[0] );
     }
-
-    public void testPropertyOptionSingularValue() throws Exception
-    {
-        Properties properties = new Properties();
-        properties.setProperty( "hide", "seek" );
-
-        Parser parser = new PosixParser();
-        
-        CommandLine cmd = parser.parse(opts, null, properties);
-        assertTrue( cmd.hasOption("hide") );
-        assertEquals( "seek", cmd.getOptionValue("hide") );
-        assertTrue( !cmd.hasOption("fake") );
-    }
-
-    public void testPropertyOptionFlags() throws Exception
-    {
-        Properties properties = new Properties();
-        properties.setProperty( "a", "true" );
-        properties.setProperty( "c", "yes" );
-        properties.setProperty( "e", "1" );
-
-        Parser parser = new PosixParser();
-
-        CommandLine cmd = parser.parse(opts, null, properties);
-        assertTrue( cmd.hasOption("a") );
-        assertTrue( cmd.hasOption("c") );
-        assertTrue( cmd.hasOption("e") );
-
-
-        properties = new Properties();
-        properties.setProperty( "a", "false" );
-        properties.setProperty( "c", "no" );
-        properties.setProperty( "e", "0" );
-
-        cmd = parser.parse(opts, null, properties);
-        assertTrue( !cmd.hasOption("a") );
-        assertTrue( !cmd.hasOption("c") );
-        assertTrue( cmd.hasOption("e") ); // this option accepts as argument
-
-
-        properties = new Properties();
-        properties.setProperty( "a", "TRUE" );
-        properties.setProperty( "c", "nO" );
-        properties.setProperty( "e", "TrUe" );
-
-        cmd = parser.parse(opts, null, properties);
-        assertTrue( cmd.hasOption("a") );
-        assertTrue( !cmd.hasOption("c") );
-        assertTrue( cmd.hasOption("e") );
-
-        
-        properties = new Properties();
-        properties.setProperty( "a", "just a string" );
-        properties.setProperty( "e", "" );
-
-        cmd = parser.parse(opts, null, properties);
-        assertTrue( !cmd.hasOption("a") );
-        assertTrue( !cmd.hasOption("c") );
-        assertTrue( cmd.hasOption("e") );
-    } 
-
-    public void testPropertyOptionMultipleValues() throws Exception
-    {
-        Properties properties = new Properties();
-        properties.setProperty( "k", "one,two" );
-
-        Parser parser = new PosixParser();
-        
-        String[] values = new String[] {
-            "one", "two"
-        };
-
-        CommandLine cmd = parser.parse(opts, null, properties);
-        assertTrue( cmd.hasOption("k") );
-        assertTrue( Arrays.equals( values, cmd.getOptionValues('k') ) );
-    }
-
-    public void testPropertyOverrideValues() throws Exception
-    {
-        String[] args = new String[] { 
-            "-j",
-            "found",
-            "-i",
-            "ink"
-        };
-
-        Properties properties = new Properties();
-        properties.setProperty( "j", "seek" );
-
-        Parser parser = new PosixParser();
-        CommandLine cmd = parser.parse(opts, args, properties);
-        assertTrue( cmd.hasOption("j") );
-        assertEquals( "found", cmd.getOptionValue("j") );
-        assertTrue( cmd.hasOption("i") );
-        assertEquals( "ink", cmd.getOptionValue("i") );
-        assertTrue( !cmd.hasOption("fake") );
-    }
-
 }