You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by sc...@apache.org on 2004/06/07 23:42:13 UTC
cvs commit: jakarta-commons/collections/src/java/org/apache/commons/collections/set ListOrderedSet.java
scolebourne 2004/06/07 14:42:13
Modified: collections RELEASE-NOTES.html
collections/src/test/org/apache/commons/collections/set
TestAll.java TestListOrderedSet.java
collections/src/java/org/apache/commons/collections/set
ListOrderedSet.java
Added: collections/src/test/org/apache/commons/collections/set
TestListOrderedSet2.java
Log:
Fix ListOrderedSet to add new factory and direct constructor
Revision Changes Path
1.57 +3 -0 jakarta-commons/collections/RELEASE-NOTES.html
Index: RELEASE-NOTES.html
===================================================================
RCS file: /home/cvs/jakarta-commons/collections/RELEASE-NOTES.html,v
retrieving revision 1.56
retrieving revision 1.57
diff -u -r1.56 -r1.57
--- RELEASE-NOTES.html 3 Jun 2004 22:59:56 -0000 1.56
+++ RELEASE-NOTES.html 7 Jun 2004 21:42:12 -0000 1.57
@@ -62,6 +62,8 @@
<li>LRUMap - Add boolean flag, scanUntilRemovable, giving the removeLRU() method more power [28887]</li>
<li>InvokerTransformer - Add additional getInstance() method</li>
<li>Reduced inter-class and inter-package dependencies, especially via *Utils classes</li>
+<li>ListOrderedSet - Add new factory method decorate(Set,List)</li>
+<li>ListOrderedSet - Add constructor that uses a HashSet and ArrayList</li>
</ul>
<h4>Made Serializable</h4>
@@ -93,6 +95,7 @@
<li>EnumIterator/MapUtils - Changed enum references to enable JDK 1.5 compliance</li>
<li>UnmodifiableSortedBag - Fix to ensure unmodifiable</li>
<li>MultiHashMap - Fix copy constructor and clone to work properly [28972]</li>
+<li>ListOrderedSet - Fix to throw IllegalArgumentException instead of NPE on null factory decorate(List)</li>
</ul>
<center><h3>JAVADOC</h3></center>
1.9 +2 -1 jakarta-commons/collections/src/test/org/apache/commons/collections/set/TestAll.java
Index: TestAll.java
===================================================================
RCS file: /home/cvs/jakarta-commons/collections/src/test/org/apache/commons/collections/set/TestAll.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- TestAll.java 2 Jun 2004 22:12:14 -0000 1.8
+++ TestAll.java 7 Jun 2004 21:42:12 -0000 1.9
@@ -43,6 +43,7 @@
suite.addTest(TestCompositeSet.suite());
suite.addTest(TestListOrderedSet.suite());
+ suite.addTest(TestListOrderedSet2.suite());
suite.addTest(TestMapBackedSet.suite());
suite.addTest(TestMapBackedSet2.suite());
suite.addTest(TestPredicatedSet.suite());
1.7 +25 -2 jakarta-commons/collections/src/test/org/apache/commons/collections/set/TestListOrderedSet.java
Index: TestListOrderedSet.java
===================================================================
RCS file: /home/cvs/jakarta-commons/collections/src/test/org/apache/commons/collections/set/TestListOrderedSet.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- TestListOrderedSet.java 2 Jun 2004 22:12:14 -0000 1.6
+++ TestListOrderedSet.java 7 Jun 2004 21:42:12 -0000 1.7
@@ -165,7 +165,30 @@
assertSame(TWO, set.get(2));
assertSame(ONE, set.get(3));
}
-
+
+ public void testDecorator() {
+ try {
+ ListOrderedSet.decorate((List) null);
+ fail();
+ } catch (IllegalArgumentException ex) {}
+ try {
+ ListOrderedSet.decorate((Set) null);
+ fail();
+ } catch (IllegalArgumentException ex) {}
+ try {
+ ListOrderedSet.decorate(null, null);
+ fail();
+ } catch (IllegalArgumentException ex) {}
+ try {
+ ListOrderedSet.decorate(new HashSet(), null);
+ fail();
+ } catch (IllegalArgumentException ex) {}
+ try {
+ ListOrderedSet.decorate(null, new ArrayList());
+ fail();
+ } catch (IllegalArgumentException ex) {}
+ }
+
public String getCompatibilityVersion() {
return "3.1";
}
1.1 jakarta-commons/collections/src/test/org/apache/commons/collections/set/TestListOrderedSet2.java
Index: TestListOrderedSet2.java
===================================================================
/*
* Copyright 2004 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.collections.set;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import junit.framework.Test;
import junit.framework.TestSuite;
/**
* Extension of {@link TestSet} for exercising the {@link ListOrderedSet}
* implementation.
*
* @since Commons Collections 3.1
* @version $Revision: 1.1 $ $Date: 2004/06/07 21:42:12 $
*
* @author Henning P. Schmiedehausen
* @author Stephen Colebourne
*/
public class TestListOrderedSet2 extends AbstractTestSet {
public TestListOrderedSet2(String testName) {
super(testName);
}
public static Test suite() {
return new TestSuite(TestListOrderedSet2.class);
}
public static void main(String args[]) {
String[] testCaseName = { TestListOrderedSet2.class.getName()};
junit.textui.TestRunner.main(testCaseName);
}
public Set makeEmptySet() {
return new ListOrderedSet();
}
protected Set setupSet() {
Set set = makeEmptySet();
for (int i = 0; i < 10; i++) {
set.add(Integer.toString(i));
}
return set;
}
public void testOrdering() {
Set set = setupSet();
Iterator it = set.iterator();
for (int i = 0; i < 10; i++) {
assertEquals("Sequence is wrong", Integer.toString(i), it.next());
}
for (int i = 0; i < 10; i += 2) {
assertTrue("Must be able to remove int", set.remove(Integer.toString(i)));
}
it = set.iterator();
for (int i = 1; i < 10; i += 2) {
assertEquals("Sequence is wrong after remove ", Integer.toString(i), it.next());
}
for (int i = 0; i < 10; i++) {
set.add(Integer.toString(i));
}
assertEquals("Size of set is wrong!", 10, set.size());
it = set.iterator();
for (int i = 1; i < 10; i += 2) {
assertEquals("Sequence is wrong", Integer.toString(i), it.next());
}
for (int i = 0; i < 10; i += 2) {
assertEquals("Sequence is wrong", Integer.toString(i), it.next());
}
}
private static final Integer ZERO = new Integer(0);
private static final Integer ONE = new Integer(1);
private static final Integer TWO = new Integer(2);
private static final Integer THREE = new Integer(3);
public void testListAddRemove() {
ListOrderedSet set = (ListOrderedSet) makeEmptySet();
List view = set.asList();
set.add(ZERO);
set.add(ONE);
set.add(TWO);
assertEquals(3, set.size());
assertSame(ZERO, set.get(0));
assertSame(ONE, set.get(1));
assertSame(TWO, set.get(2));
assertEquals(3, view.size());
assertSame(ZERO, view.get(0));
assertSame(ONE, view.get(1));
assertSame(TWO, view.get(2));
assertEquals(0, set.indexOf(ZERO));
assertEquals(1, set.indexOf(ONE));
assertEquals(2, set.indexOf(TWO));
set.remove(1);
assertEquals(2, set.size());
assertSame(ZERO, set.get(0));
assertSame(TWO, set.get(1));
assertEquals(2, view.size());
assertSame(ZERO, view.get(0));
assertSame(TWO, view.get(1));
}
public void testListAddIndexed() {
ListOrderedSet set = (ListOrderedSet) makeEmptySet();
List view = set.asList();
set.add(ZERO);
set.add(TWO);
set.add(1, ONE);
assertEquals(3, set.size());
assertSame(ZERO, set.get(0));
assertSame(ONE, set.get(1));
assertSame(TWO, set.get(2));
set.add(0, ONE);
assertEquals(3, set.size());
assertSame(ZERO, set.get(0));
assertSame(ONE, set.get(1));
assertSame(TWO, set.get(2));
List list = new ArrayList();
list.add(ZERO);
list.add(TWO);
set.addAll(0, list);
assertEquals(3, set.size());
assertSame(ZERO, set.get(0));
assertSame(ONE, set.get(1));
assertSame(TWO, set.get(2));
list.add(0, THREE); // list = [3,0,2]
set.remove(TWO); // set = [0,1]
set.addAll(1, list);
assertEquals(4, set.size());
assertSame(ZERO, set.get(0));
assertSame(THREE, set.get(1));
assertSame(TWO, set.get(2));
assertSame(ONE, set.get(3));
}
public String getCompatibilityVersion() {
return "3.1";
}
// public void testCreate() throws Exception {
// resetEmpty();
// writeExternalFormToDisk((java.io.Serializable) collection, "D:/dev/collections/data/test/ListOrderedSet.emptyCollection.version3.1.obj");
// resetFull();
// writeExternalFormToDisk((java.io.Serializable) collection, "D:/dev/collections/data/test/ListOrderedSet.fullCollection.version3.1.obj");
// }
}
1.9 +38 -2 jakarta-commons/collections/src/java/org/apache/commons/collections/set/ListOrderedSet.java
Index: ListOrderedSet.java
===================================================================
RCS file: /home/cvs/jakarta-commons/collections/src/java/org/apache/commons/collections/set/ListOrderedSet.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- ListOrderedSet.java 3 Jun 2004 22:02:13 -0000 1.8
+++ ListOrderedSet.java 7 Jun 2004 21:42:12 -0000 1.9
@@ -58,6 +58,28 @@
protected final List setOrder;
/**
+ * Factory method to create an ordered set specifying the list and set to use.
+ *
+ * @param set the set to decorate, must be empty and not null
+ * @param list the list to decorate, must be empty and not null
+ * @throws IllegalArgumentException if set or list is null
+ * @throws IllegalArgumentException if either the set or list is not empty
+ * @since Commons Collections 3.1
+ */
+ public static ListOrderedSet decorate(Set set, List list) {
+ if (set == null) {
+ throw new IllegalArgumentException("Set must not be null");
+ }
+ if (list == null) {
+ throw new IllegalArgumentException("List must not be null");
+ }
+ if (set.size() > 0 || list.size() > 0) {
+ throw new IllegalArgumentException("Set and List must be empty");
+ }
+ return new ListOrderedSet(set, list);
+ }
+
+ /**
* Factory method to create an ordered set.
* <p>
* An <code>ArrayList</code> is used to retain order.
@@ -75,9 +97,12 @@
* A <code>HashSet</code> is used for the set behaviour.
*
* @param list the list to decorate, must not be null
- * @throws IllegalArgumentException if set is null
+ * @throws IllegalArgumentException if list is null
*/
public static ListOrderedSet decorate(List list) {
+ if (list == null) {
+ throw new IllegalArgumentException("List must not be null");
+ }
Set set = new HashSet(list);
list.retainAll(set);
@@ -85,6 +110,17 @@
}
//-----------------------------------------------------------------------
+ /**
+ * Constructs a new empty <code>ListOrderedSet</code> using
+ * a <code>HashSet</code> and an <code>ArrayList</code> internally.
+ *
+ * @since Commons Collections 3.1
+ */
+ public ListOrderedSet() {
+ super(new HashSet());
+ setOrder = new ArrayList();
+ }
+
/**
* Constructor that wraps (not copies).
*
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org