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"));
     }
 }