Author: bayard
Date: Thu May 24 13:07:06 2007
New Revision: 541408

URL: http://svn.apache.org/viewvc?view=rev&rev=541408
Log:
Applying Brian Egge and my work from CLI-71 to fix a lingering data problem in 
the parser and to confirm that other bugs have already been fixed

Added:
    
jakarta/commons/proper/cli/branches/cli-1.0.x/src/test/org/apache/commons/cli/OptionTest.java
    
jakarta/commons/proper/cli/branches/cli-1.0.x/src/test/org/apache/commons/cli/bug/BugCLI71Test.java
Modified:
    
jakarta/commons/proper/cli/branches/cli-1.0.x/src/java/org/apache/commons/cli/Option.java
    
jakarta/commons/proper/cli/branches/cli-1.0.x/src/java/org/apache/commons/cli/Parser.java

Modified: 
jakarta/commons/proper/cli/branches/cli-1.0.x/src/java/org/apache/commons/cli/Option.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/cli/branches/cli-1.0.x/src/java/org/apache/commons/cli/Option.java?view=diff&rev=541408&r1=541407&r2=541408
==============================================================================
--- 
jakarta/commons/proper/cli/branches/cli-1.0.x/src/java/org/apache/commons/cli/Option.java
 (original)
+++ 
jakarta/commons/proper/cli/branches/cli-1.0.x/src/java/org/apache/commons/cli/Option.java
 Thu May 24 13:07:06 2007
@@ -631,4 +631,15 @@
         return result;
     }
 
+    /**
+     * <p>Clear the Option values. After a 
+     * parse is complete, these are left with data in them 
+     * and they need clearing if another parse is done. </p>
+     *
+     * See: <a href="https://issues.apache.org/jira/browse/CLI-71";>CLI-71</a>
+     */
+    void clearValues() {
+        this.values.clear();
+    }
+
 }

Modified: 
jakarta/commons/proper/cli/branches/cli-1.0.x/src/java/org/apache/commons/cli/Parser.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/cli/branches/cli-1.0.x/src/java/org/apache/commons/cli/Parser.java?view=diff&rev=541408&r1=541407&r2=541408
==============================================================================
--- 
jakarta/commons/proper/cli/branches/cli-1.0.x/src/java/org/apache/commons/cli/Parser.java
 (original)
+++ 
jakarta/commons/proper/cli/branches/cli-1.0.x/src/java/org/apache/commons/cli/Parser.java
 Thu May 24 13:07:06 2007
@@ -132,6 +132,13 @@
     {
         // initialise members
         this.options = options;
+
+        // clear out the data in options in case it's been used before (CLI-71)
+        for (Iterator it = options.helpOptions().iterator(); it.hasNext();) {
+            Option opt = (Option) it.next();
+            opt.clearValues();
+        }
+
         requiredOptions = options.getRequiredOptions();
         cmd = new CommandLine();
 
@@ -403,4 +410,4 @@
         // set the option on the command line
         cmd.addOption(opt);
     }
-}
\ No newline at end of file
+}

Added: 
jakarta/commons/proper/cli/branches/cli-1.0.x/src/test/org/apache/commons/cli/OptionTest.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/cli/branches/cli-1.0.x/src/test/org/apache/commons/cli/OptionTest.java?view=auto&rev=541408
==============================================================================
--- 
jakarta/commons/proper/cli/branches/cli-1.0.x/src/test/org/apache/commons/cli/OptionTest.java
 (added)
+++ 
jakarta/commons/proper/cli/branches/cli-1.0.x/src/test/org/apache/commons/cli/OptionTest.java
 Thu May 24 13:07:06 2007
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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;
+
+import junit.framework.TestCase;
+
+/**
+ * @author brianegge
+ */
+public class OptionTest extends TestCase {
+
+   public void testClear() {
+       Option option = new Option("x", true, "");
+       assertEquals(0, option.getValuesList().size());
+       option.addValue("a");
+       assertEquals(1, option.getValuesList().size());
+       option.clearValues();
+       assertEquals(0, option.getValuesList().size());
+   }
+    
+}

Added: 
jakarta/commons/proper/cli/branches/cli-1.0.x/src/test/org/apache/commons/cli/bug/BugCLI71Test.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/cli/branches/cli-1.0.x/src/test/org/apache/commons/cli/bug/BugCLI71Test.java?view=auto&rev=541408
==============================================================================
--- 
jakarta/commons/proper/cli/branches/cli-1.0.x/src/test/org/apache/commons/cli/bug/BugCLI71Test.java
 (added)
+++ 
jakarta/commons/proper/cli/branches/cli-1.0.x/src/test/org/apache/commons/cli/bug/BugCLI71Test.java
 Thu May 24 13:07:06 2007
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.bug;
+
+import junit.framework.TestCase;
+
+import org.apache.commons.cli.*;
+
+public class BugCLI71Test extends TestCase {
+
+    private Options options;
+    private CommandLineParser parser;
+
+    public void setUp() {
+        options = new Options();
+
+        Option algorithm = new Option("a" , "algo", true, "the algorithm which 
it to perform executing");
+        algorithm.setArgName("algorithm name");
+        options.addOption(algorithm);
+
+        Option key = new Option("k" , "key", true, "the key the setted 
algorithm uses to process");
+        algorithm.setArgName("value");
+        options.addOption(key);
+
+        parser = new PosixParser();
+    }
+
+    public void testBasic() throws Exception {
+        String[] args = new String[] { "-a", "Caesar", "-k", "A" };
+        CommandLine line = parser.parse( options, args);
+        assertEquals( "Caesar", line.getOptionValue("a") );
+        assertEquals( "A", line.getOptionValue("k") );
+    }
+
+    public void testMistakenArgument() throws Exception {
+        String[] args = new String[] { "-a", "Caesar", "-k", "A" };
+        CommandLine line = parser.parse( options, args);
+        args = new String[] { "-a", "Caesar", "-k", "a" };
+        line = parser.parse( options, args);
+        assertEquals( "Caesar", line.getOptionValue("a") );
+        assertEquals( "a", line.getOptionValue("k") );
+    }
+
+    public void testLackOfError() throws Exception {
+        String[] args = new String[] { "-k", "-a",  "Caesar" };
+        try {
+            CommandLine line = parser.parse( options, args);
+            fail("MissingArgumentException expected");
+        } catch(MissingArgumentException mae) {
+            // expected
+        }
+    }
+
+    public void testGetsDefaultIfOptional() throws Exception {
+        String[] args = new String[] { "-k", "-a", "Caesar" };
+        options.getOption("k").setOptionalArg(true);
+        CommandLine line = parser.parse( options, args);
+        
+        assertEquals( "Caesar", line.getOptionValue("a") );
+        assertEquals( "a", line.getOptionValue("k", "a") );
+    }
+
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to