You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by gb...@apache.org on 2009/06/02 00:34:09 UTC
svn commit: r780857 - in /incubator/pivot/trunk/core: src/pivot/collections/
src/pivot/collections/concurrent/ src/pivot/serialization/ src/pivot/util/
test/pivot/collections/test/
Author: gbrown
Date: Mon Jun 1 22:34:09 2009
New Revision: 780857
URL: http://svn.apache.org/viewvc?rev=780857&view=rev
Log:
Update collections unit tests; eliminate raw type references in core classes; add varargs constructors to ArrayList and LinkedList; add equals() and hashCode() overrides to ArrayList and LinkedList; fix EnumSet iterator.
Added:
incubator/pivot/trunk/core/test/pivot/collections/test/EnumMapTest.java
Modified:
incubator/pivot/trunk/core/src/pivot/collections/ArrayList.java
incubator/pivot/trunk/core/src/pivot/collections/EnumList.java
incubator/pivot/trunk/core/src/pivot/collections/EnumSet.java
incubator/pivot/trunk/core/src/pivot/collections/LinkedList.java
incubator/pivot/trunk/core/src/pivot/collections/Sequence.java
incubator/pivot/trunk/core/src/pivot/collections/concurrent/SynchronizedQueue.java
incubator/pivot/trunk/core/src/pivot/serialization/CSVSerializer.java
incubator/pivot/trunk/core/src/pivot/serialization/JSONSerializer.java
incubator/pivot/trunk/core/src/pivot/util/Resources.java
incubator/pivot/trunk/core/test/pivot/collections/test/ArrayListTest.java
incubator/pivot/trunk/core/test/pivot/collections/test/LinkedListTest.java
Modified: incubator/pivot/trunk/core/src/pivot/collections/ArrayList.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/core/src/pivot/collections/ArrayList.java?rev=780857&r1=780856&r2=780857&view=diff
==============================================================================
--- incubator/pivot/trunk/core/src/pivot/collections/ArrayList.java (original)
+++ incubator/pivot/trunk/core/src/pivot/collections/ArrayList.java Mon Jun 1 22:34:09 2009
@@ -84,7 +84,7 @@
items = new Object[capacity];
}
- public ArrayList(T[] items) {
+ public ArrayList(T... items) {
this(items, 0, items.length);
}
@@ -366,10 +366,44 @@
return listListeners;
}
+ @Override
+ @SuppressWarnings("unchecked")
+ public boolean equals(Object o) {
+ boolean equals = false;
+
+ if (o instanceof ArrayList<?>) {
+ ArrayList<T> arrayList = (ArrayList<T>)o;
+
+ Iterator<T> iterator = iterator();
+ Iterator<T> arrayListIterator = arrayList.iterator();
+
+ while (iterator.hasNext()
+ && arrayListIterator.hasNext()
+ && iterator.next().equals(arrayListIterator.next()));
+
+ equals = (!iterator.hasNext()
+ && !arrayListIterator.hasNext());
+ }
+
+ return equals;
+ }
+
+ @Override
+ public int hashCode() {
+ int hashCode = 1;
+ for (T item : this) {
+ hashCode = 31 * hashCode + (item == null ? 0 : item.hashCode());
+ }
+
+ return hashCode;
+ }
+
+ @Override
public String toString() {
StringBuilder sb = new StringBuilder();
- sb.append("[");
+ sb.append(getClass().getName());
+ sb.append(" [");
for (int i = 0; i < items.length; i++) {
if (i > 0) {
Modified: incubator/pivot/trunk/core/src/pivot/collections/EnumList.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/core/src/pivot/collections/EnumList.java?rev=780857&r1=780856&r2=780857&view=diff
==============================================================================
--- incubator/pivot/trunk/core/src/pivot/collections/EnumList.java (original)
+++ incubator/pivot/trunk/core/src/pivot/collections/EnumList.java Mon Jun 1 22:34:09 2009
@@ -133,10 +133,12 @@
return listListeners;
}
+ @Override
public String toString() {
StringBuilder sb = new StringBuilder();
- sb.append("[");
+ sb.append(getClass().getName());
+ sb.append(" [");
for (int i = 0; i < items.length; i++) {
if (i > 0) {
@@ -150,4 +152,16 @@
return sb.toString();
}
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public boolean equals(Object o) {
+ return (o instanceof EnumList<?>
+ && ((EnumList<E>)o).enumClass == enumClass);
+ }
+
+ @Override
+ public int hashCode() {
+ return enumClass.hashCode();
+ }
}
Modified: incubator/pivot/trunk/core/src/pivot/collections/EnumSet.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/core/src/pivot/collections/EnumSet.java?rev=780857&r1=780856&r2=780857&view=diff
==============================================================================
--- incubator/pivot/trunk/core/src/pivot/collections/EnumSet.java (original)
+++ incubator/pivot/trunk/core/src/pivot/collections/EnumSet.java Mon Jun 1 22:34:09 2009
@@ -30,28 +30,34 @@
public class EnumSet<E extends Enum<E>> implements Set<E>, Serializable {
private class ElementIterator implements Iterator<E> {
private int i = 0;
- private E next;
-
- private ElementIterator() {
- next();
- }
+ private E next = null;
public boolean hasNext() {
+ if (next == null) {
+ while (i < elements.length
+ && !members[i]) {
+ i++;
+ }
+
+ if (i < elements.length) {
+ next = elements[i];
+ } else {
+ next = null;
+ }
+ }
+
return (next != null);
}
public E next() {
- while (i < elements.length
- && !members[i]) {
- i++;
- }
-
- if (i < elements.length) {
- next = elements[i];
- } else {
+ if (!hasNext()) {
throw new NoSuchElementException();
}
+ E next = this.next;
+ this.next = null;
+ i++;
+
return next;
}
Modified: incubator/pivot/trunk/core/src/pivot/collections/LinkedList.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/core/src/pivot/collections/LinkedList.java?rev=780857&r1=780856&r2=780857&view=diff
==============================================================================
--- incubator/pivot/trunk/core/src/pivot/collections/LinkedList.java (original)
+++ incubator/pivot/trunk/core/src/pivot/collections/LinkedList.java Mon Jun 1 22:34:09 2009
@@ -96,6 +96,22 @@
this.comparator = comparator;
}
+ public LinkedList(T... items) {
+ for (int i = 0; i < items.length; i++) {
+ add(items[i]);
+ }
+ }
+
+ public LinkedList(Sequence<T> items) {
+ if (items == null) {
+ throw new IllegalArgumentException();
+ }
+
+ for (int i = 0, n = items.getLength(); i < n; i++) {
+ add(items.get(i));
+ }
+ }
+
public int add(T item) {
int index;
if (comparator == null) {
@@ -386,4 +402,57 @@
public ListenerList<ListListener<T>> getListListeners() {
return listListeners;
}
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public boolean equals(Object o) {
+ boolean equals = false;
+
+ if (o instanceof LinkedList<?>) {
+ LinkedList<T> linkedList = (LinkedList<T>)o;
+
+ Iterator<T> iterator = iterator();
+ Iterator<T> linkedListIterator = linkedList.iterator();
+
+ while (iterator.hasNext()
+ && linkedListIterator.hasNext()
+ && iterator.next().equals(linkedListIterator.next()));
+
+ equals = (!iterator.hasNext()
+ && !linkedListIterator.hasNext());
+ }
+
+ return equals;
+ }
+
+ @Override
+ public int hashCode() {
+ int hashCode = 1;
+ for (T item : this) {
+ hashCode = 31 * hashCode + (item == null ? 0 : item.hashCode());
+ }
+
+ return hashCode;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append(getClass().getName());
+ sb.append(" [");
+
+ int i = 0;
+ for (T item : this) {
+ if (i > 0) {
+ sb.append(", ");
+ }
+
+ sb.append(item);
+ }
+
+ sb.append("]");
+
+ return sb.toString();
+ }
}
Modified: incubator/pivot/trunk/core/src/pivot/collections/Sequence.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/core/src/pivot/collections/Sequence.java?rev=780857&r1=780856&r2=780857&view=diff
==============================================================================
--- incubator/pivot/trunk/core/src/pivot/collections/Sequence.java (original)
+++ incubator/pivot/trunk/core/src/pivot/collections/Sequence.java Mon Jun 1 22:34:09 2009
@@ -287,7 +287,7 @@
path = new Path();
path.add(i);
} else {
- if (t instanceof Sequence) {
+ if (t instanceof Sequence<?>) {
path = pathOf((Sequence<T>)t, item);
if (path != null) {
Modified: incubator/pivot/trunk/core/src/pivot/collections/concurrent/SynchronizedQueue.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/core/src/pivot/collections/concurrent/SynchronizedQueue.java?rev=780857&r1=780856&r2=780857&view=diff
==============================================================================
--- incubator/pivot/trunk/core/src/pivot/collections/concurrent/SynchronizedQueue.java (original)
+++ incubator/pivot/trunk/core/src/pivot/collections/concurrent/SynchronizedQueue.java Mon Jun 1 22:34:09 2009
@@ -63,14 +63,6 @@
notify();
}
- /**
- * Removes an item from the head of the queue, blocking if the queue is
- * empty.
- *
- * @return
- * The item at the head of the queue, or null if the removing thread
- * was interrupted.
- */
public synchronized T dequeue() {
T item = null;
try {
Modified: incubator/pivot/trunk/core/src/pivot/serialization/CSVSerializer.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/core/src/pivot/serialization/CSVSerializer.java?rev=780857&r1=780856&r2=780857&view=diff
==============================================================================
--- incubator/pivot/trunk/core/src/pivot/serialization/CSVSerializer.java (original)
+++ incubator/pivot/trunk/core/src/pivot/serialization/CSVSerializer.java Mon Jun 1 22:34:09 2009
@@ -279,7 +279,7 @@
try {
item = itemClass.newInstance();
- if (item instanceof Dictionary) {
+ if (item instanceof Dictionary<?, ?>) {
itemDictionary = (Dictionary<String, Object>)item;
} else {
itemDictionary = new BeanDictionary(item);
@@ -401,7 +401,7 @@
for (Object item : items) {
Dictionary<String, Object> itemDictionary;
- if (item instanceof Dictionary) {
+ if (item instanceof Dictionary<?, ?>) {
itemDictionary = (Dictionary<String, Object>)item;
} else {
itemDictionary = new BeanDictionary(item);
Modified: incubator/pivot/trunk/core/src/pivot/serialization/JSONSerializer.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/core/src/pivot/serialization/JSONSerializer.java?rev=780857&r1=780856&r2=780857&view=diff
==============================================================================
--- incubator/pivot/trunk/core/src/pivot/serialization/JSONSerializer.java (original)
+++ incubator/pivot/trunk/core/src/pivot/serialization/JSONSerializer.java Mon Jun 1 22:34:09 2009
@@ -30,6 +30,7 @@
import java.nio.charset.Charset;
import pivot.collections.ArrayList;
+import pivot.collections.Dictionary;
import pivot.collections.HashMap;
import pivot.collections.List;
import pivot.collections.Map;
@@ -669,10 +670,10 @@
for (int i = 0, n = keys.getLength(); i < n; i++) {
String key = keys.get(i);
- if (value instanceof Map) {
+ if (value instanceof Dictionary<?, ?>) {
Map<String, Object> map = (Map<String, Object>)value;
value = map.get(key);
- } else if (value instanceof Sequence) {
+ } else if (value instanceof Sequence<?>) {
List<Object> list = (List<Object>)value;
value = list.get(Integer.parseInt(key));
} else {
@@ -834,10 +835,10 @@
String key = keys.remove(keys.getLength() - 1, 1).get(0);
Object parent = get(root, keys);
- if (parent instanceof Map) {
- Map<String, Object> map = (Map<String, Object>)parent;
- previousValue = map.put(key, value);
- } else if (parent instanceof Sequence) {
+ if (parent instanceof Dictionary<?, ?>) {
+ Dictionary<String, Object> dictionary = (Dictionary<String, Object>)parent;
+ previousValue = dictionary.put(key, value);
+ } else if (parent instanceof Sequence<?>) {
List<Object> list = (List<Object>)parent;
previousValue = list.update(Integer.parseInt(key), value);
} else {
@@ -876,10 +877,10 @@
String key = keys.remove(keys.getLength() - 1, 1).get(0);
Object parent = get(root, keys);
- if (parent instanceof Map) {
- Map<String, Object> map = (Map<String, Object>)parent;
- previousValue = map.remove(key);
- } else if (parent instanceof Sequence) {
+ if (parent instanceof Dictionary<?, ?>) {
+ Dictionary<String, Object> dictionary = (Dictionary<String, Object>)parent;
+ previousValue = dictionary.remove(key);
+ } else if (parent instanceof Sequence<?>) {
List<Object> list = (List<Object>)parent;
previousValue = list.remove(Integer.parseInt(key), 1).get(0);
} else {
@@ -918,10 +919,10 @@
String key = keys.remove(keys.getLength() - 1, 1).get(0);
Object parent = get(root, keys);
- if (parent instanceof Map) {
- Map<String, Object> map = (Map<String, Object>)parent;
- containsKey = map.containsKey(key);
- } else if (parent instanceof Sequence) {
+ if (parent instanceof Dictionary<?, ?>) {
+ Dictionary<String, Object> dictionary = (Dictionary<String, Object>)parent;
+ containsKey = dictionary.containsKey(key);
+ } else if (parent instanceof Sequence<?>) {
List<Object> list = (List<Object>)parent;
containsKey = (list.getLength() > Integer.parseInt(key));
} else {
Modified: incubator/pivot/trunk/core/src/pivot/util/Resources.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/core/src/pivot/util/Resources.java?rev=780857&r1=780856&r2=780857&view=diff
==============================================================================
--- incubator/pivot/trunk/core/src/pivot/util/Resources.java (original)
+++ incubator/pivot/trunk/core/src/pivot/util/Resources.java Mon Jun 1 22:34:09 2009
@@ -171,7 +171,8 @@
Object source = sourceMap.get(key);
Object override = overridesMap.get(key);
- if (source instanceof Map && override instanceof Map) {
+ if (source instanceof Map<?, ?>
+ && override instanceof Map<?, ?>) {
applyOverrides((Map<String, Object>) source,
(Map<String, Object>) override);
} else {
Modified: incubator/pivot/trunk/core/test/pivot/collections/test/ArrayListTest.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/core/test/pivot/collections/test/ArrayListTest.java?rev=780857&r1=780856&r2=780857&view=diff
==============================================================================
--- incubator/pivot/trunk/core/test/pivot/collections/test/ArrayListTest.java (original)
+++ incubator/pivot/trunk/core/test/pivot/collections/test/ArrayListTest.java Mon Jun 1 22:34:09 2009
@@ -27,6 +27,7 @@
public class ArrayListTest {
@Test
+ @SuppressWarnings("unchecked")
public void basicTest() {
ArrayList<String> list = new ArrayList<String>();
list.insert("B", 0);
@@ -53,5 +54,7 @@
assertEquals(list.getLength(), 3);
assertNotNull(list.get(1));
assertTrue(list.get(1).equals("E"));
+
+ assertEquals(list, new ArrayList<String>("B", "E", "C"));
}
}
Added: incubator/pivot/trunk/core/test/pivot/collections/test/EnumMapTest.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/core/test/pivot/collections/test/EnumMapTest.java?rev=780857&view=auto
==============================================================================
--- incubator/pivot/trunk/core/test/pivot/collections/test/EnumMapTest.java (added)
+++ incubator/pivot/trunk/core/test/pivot/collections/test/EnumMapTest.java Mon Jun 1 22:34:09 2009
@@ -0,0 +1,55 @@
+/*
+ * 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 pivot.collections.test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+import pivot.collections.EnumMap;
+
+public class EnumMapTest {
+ public enum TestEnum {
+ A,
+ B,
+ C
+ }
+
+ @Test
+ public void basicTest() {
+ EnumMap<TestEnum, String> enumMap = new EnumMap<TestEnum, String>(TestEnum.class);
+
+ enumMap.put(TestEnum.A, "a");
+ assertTrue(enumMap.containsKey(TestEnum.A));
+ assertEquals(enumMap.get(TestEnum.A), "a");
+
+ enumMap.put(TestEnum.C, "c");
+ assertTrue(enumMap.containsKey(TestEnum.C));
+ assertEquals(enumMap.get(TestEnum.C), "c");
+
+ for (TestEnum key : enumMap) {
+ assertEquals(key.toString().toLowerCase(), enumMap.get(key));
+ }
+
+ enumMap.remove(TestEnum.A);
+ assertTrue(!enumMap.containsKey(TestEnum.A));
+
+ enumMap.remove(TestEnum.C);
+ assertTrue(enumMap.isEmpty());
+ }
+}
Modified: incubator/pivot/trunk/core/test/pivot/collections/test/LinkedListTest.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/core/test/pivot/collections/test/LinkedListTest.java?rev=780857&r1=780856&r2=780857&view=diff
==============================================================================
--- incubator/pivot/trunk/core/test/pivot/collections/test/LinkedListTest.java (original)
+++ incubator/pivot/trunk/core/test/pivot/collections/test/LinkedListTest.java Mon Jun 1 22:34:09 2009
@@ -24,10 +24,10 @@
import pivot.collections.LinkedList;
import pivot.collections.Sequence;
-import pivot.serialization.JSONSerializer;
public class LinkedListTest {
@Test
+ @SuppressWarnings("unchecked")
public void basicTest() {
LinkedList<String> list = new LinkedList<String>();
list.insert("B", 0);
@@ -56,6 +56,6 @@
assertTrue(list.get(1).equals("F"));
list.insert("G", 0);
- assertEquals(JSONSerializer.toString(list), "[\"G\", \"B\", \"F\", \"D\"]");
+ assertEquals(list, new LinkedList<String>("G", "B", "F", "D"));
}
}