Author: bayard
Date: Fri Jun 15 08:51:35 2007
New Revision: 547721
URL: http://svn.apache.org/viewvc?view=rev&rev=547721
Log:
Applying Brian Egge's patch to CLI-21 that resurrects the clone() method
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/test/org/apache/commons/cli/OptionTest.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=547721&r1=547720&r2=547721
==============================================================================
---
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
Fri Jun 15 08:51:35 2007
@@ -33,7 +33,7 @@
* @author <a href="mailto:[EMAIL PROTECTED]">James Strachan</a>
* @version $Revision$
*/
-public class Option {
+public class Option implements Cloneable {
/** constant that specifies the number of argument values has
not been specified */
@@ -630,6 +630,12 @@
result = ( opt != null ? opt.hashCode() : 0 );
result = 31 * result + ( longOpt != null ? longOpt.hashCode() : 0 );
return result;
+ }
+
+ protected Object clone() throws CloneNotSupportedException {
+ Option option = (Option) super.clone();
+ option.values = new ArrayList(values);
+ return option;
}
/**
Modified:
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=diff&rev=547721&r1=547720&r2=547721
==============================================================================
---
jakarta/commons/proper/cli/branches/cli-1.0.x/src/test/org/apache/commons/cli/OptionTest.java
(original)
+++
jakarta/commons/proper/cli/branches/cli-1.0.x/src/test/org/apache/commons/cli/OptionTest.java
Fri Jun 15 08:51:35 2007
@@ -31,5 +31,42 @@
option.clearValues();
assertEquals(0, option.getValuesList().size());
}
-
+
+ // See http://issues.apache.org/jira/browse/CLI-21
+ public void testClone() throws CloneNotSupportedException {
+ Option a = new Option("a", true, "");
+ Option b = (Option) a.clone();
+ assertEquals(a, b);
+ assertNotSame(a, b);
+ a.setDescription("a");
+ assertEquals("", b.getDescription());
+ b.setArgs(2);
+ b.addValue("b1");
+ b.addValue("b2");
+ assertEquals(1, a.getArgs());
+ assertEquals(0, a.getValuesList().size());
+ assertEquals(2, b.getValues().length);
+ }
+
+ private static class DefaultOption extends Option {
+
+ private final String defaultValue;
+
+ public DefaultOption(String opt, String description, String
defaultValue) throws IllegalArgumentException {
+ super(opt, true, description);
+ this.defaultValue = defaultValue;
+ }
+
+ public String getValue() {
+ return super.getValue() != null ? super.getValue() : defaultValue;
+ }
+ }
+
+ public void testSubclass() throws CloneNotSupportedException {
+ Option option = new DefaultOption("f", "file", "myfile.txt");
+ Option clone = (Option) option.clone();
+ assertEquals("myfile.txt", clone.getValue());
+ assertEquals(DefaultOption.class, clone.getClass());
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]