You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by tn...@apache.org on 2014/03/25 23:01:08 UTC

svn commit: r1581553 [2/2] - in /commons/proper/collections/trunk/src: main/java/org/apache/commons/collections4/ main/java/org/apache/commons/collections4/multimap/ test/java/org/apache/commons/collections4/multimap/ test/resources/data/test/

Added: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/multimap/AbstractMultiValuedMapTest.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/multimap/AbstractMultiValuedMapTest.java?rev=1581553&view=auto
==============================================================================
--- commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/multimap/AbstractMultiValuedMapTest.java (added)
+++ commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/multimap/AbstractMultiValuedMapTest.java Tue Mar 25 22:01:07 2014
@@ -0,0 +1,494 @@
+/*
+ * 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.collections4.multimap;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.apache.commons.collections4.AbstractObjectTest;
+import org.apache.commons.collections4.Bag;
+import org.apache.commons.collections4.MultiValuedMap;
+import org.apache.commons.collections4.bag.HashBag;
+
+/**
+ * Abstract test class for {@link MultiValuedMap} contract and methods.
+ * <p>
+ * To use, extend this class and implement the {@link #makeObject} method and if
+ * necessary override the {@link #makeFullMap()} method.
+ * 
+ * @since 4.1
+ * @version $Id$
+ */
+public abstract class AbstractMultiValuedMapTest<K, V> extends AbstractObjectTest {
+
+    public AbstractMultiValuedMapTest(String testName) {
+        super(testName);
+    }
+
+    @Override
+    abstract public MultiValuedMap<K, V> makeObject();
+
+    @Override
+    public String getCompatibilityVersion() {
+        return "4.1"; // MultiValuedMap has been added in version 4.1
+    }
+
+    /**
+     * Returns true if the maps produced by {@link #makeObject()} and
+     * {@link #makeFullMap()} support the <code>put</code> and
+     * <code>putAll</code> operations adding new mappings.
+     * <p>
+     * Default implementation returns true. Override if your collection class
+     * does not support put adding.
+     */
+    public boolean isAddSupported() {
+        return true;
+    }
+
+    /**
+     * Returns true if the maps produced by {@link #makeObject()} and
+     * {@link #makeFullMap()} support the <code>remove</code> and
+     * <code>clear</code> operations.
+     * <p>
+     * Default implementation returns true. Override if your collection class
+     * does not support removal operations.
+     */
+    public boolean isRemoveSupported() {
+        return true;
+    }
+
+    protected MultiValuedMap<K, V> makeFullMap() {
+        final MultiValuedMap<K, V> map = makeObject();
+        addSampleMappings(map);
+        return map;
+    }
+
+    @SuppressWarnings("unchecked")
+    protected void addSampleMappings(MultiValuedMap<? super K, ? super V> map) {
+        map.put((K) "one", (V) "uno");
+        map.put((K) "one", (V) "un");
+        map.put((K) "two", (V) "dos");
+        map.put((K) "two", (V) "deux");
+        map.put((K) "three", (V) "tres");
+        map.put((K) "three", (V) "trois");
+    }
+
+    public void testNoMappingReturnsNull() {
+        final MultiValuedMap<K, V> map = makeFullMap();
+        assertNull(map.get("whatever"));
+    }
+
+    public void testMultipleValues() {
+        final MultiValuedMap<K, V> map = makeFullMap();
+        Collection<V> col = map.get("one");
+        assertTrue(col.contains("uno"));
+        assertTrue(col.contains("un"));
+    }
+
+    public void testGet() {
+        final MultiValuedMap<K, V> map = makeFullMap();
+        assertTrue(map.get("one").contains("uno"));
+        assertTrue(map.get("one").contains("un"));
+        assertTrue(map.get("two").contains("dos"));
+        assertTrue(map.get("two").contains("deux"));
+        assertTrue(map.get("three").contains("tres"));
+        assertTrue(map.get("three").contains("trois"));
+    }
+
+    public void testContainsValue() {
+        final MultiValuedMap<K, V> map = makeFullMap();
+        assertTrue(map.containsValue("uno"));
+        assertTrue(map.containsValue("un"));
+        assertTrue(map.containsValue("dos"));
+        assertTrue(map.containsValue("deux"));
+        assertTrue(map.containsValue("tres"));
+        assertTrue(map.containsValue("trois"));
+        assertFalse(map.containsValue("quatro"));
+    }
+
+    public void testKeyContainsValue() {
+        final MultiValuedMap<K, V> map = makeFullMap();
+        assertTrue(map.containsMapping("one", "uno"));
+        assertTrue(map.containsMapping("one", "un"));
+        assertTrue(map.containsMapping("two", "dos"));
+        assertTrue(map.containsMapping("two", "deux"));
+        assertTrue(map.containsMapping("three", "tres"));
+        assertTrue(map.containsMapping("three", "trois"));
+        assertFalse(map.containsMapping("four", "quatro"));
+    }
+
+    @SuppressWarnings("unchecked")
+    public void testValues() {
+        final MultiValuedMap<K, V> map = makeFullMap();
+        final HashSet<V> expected = new HashSet<V>();
+        expected.add((V) "uno");
+        expected.add((V) "dos");
+        expected.add((V) "tres");
+        expected.add((V) "un");
+        expected.add((V) "deux");
+        expected.add((V) "trois");
+        final Collection<V> c = map.values();
+        assertEquals(6, c.size());
+        assertEquals(expected, new HashSet<V>(c));
+    }
+
+//    public void testKeyedIterator() {
+//        final MultiValuedMap<K, V> map = makeFullMap();
+//        final ArrayList<Object> actual = new ArrayList<Object>(IteratorUtils.toList(map.iterator("one")));
+//        final ArrayList<Object> expected = new ArrayList<Object>(Arrays.asList("uno", "un"));
+//        assertEquals(expected, actual);
+//    }
+
+    public void testRemoveAllViaIterator() {
+        if (!isRemoveSupported()) {
+            return;
+        }
+        final MultiValuedMap<K, V> map = makeFullMap();
+        for (final Iterator<?> i = map.values().iterator(); i.hasNext();) {
+            i.next();
+            i.remove();
+        }
+        assertNull(map.get("one"));
+        assertTrue(map.isEmpty());
+    }
+
+//    public void testRemoveAllViaKeyedIterator() {
+//        if (!isRemoveSupported()) {
+//            return;
+//        }
+//        final MultiValuedMap<K, V> map = makeFullMap();
+//        for (final Iterator<?> i = map.iterator("one"); i.hasNext();) {
+//            i.next();
+//            i.remove();
+//        }
+//        assertNull(map.get("one"));
+//        assertEquals(4, map.size());
+//    }
+
+    public void testEntriesCollectionIterator() {
+        final MultiValuedMap<K, V> map = makeFullMap();
+        Collection<V> values = new ArrayList<V>(map.values());
+        Iterator<Map.Entry<K, V>> iterator = map.entries().iterator();
+        while (iterator.hasNext()) {
+            Map.Entry<K, V> entry = iterator.next();
+            assertTrue(map.containsMapping(entry.getKey(), entry.getValue()));
+            assertTrue(values.contains(entry.getValue()));
+            if (isRemoveSupported()) {
+                assertTrue(values.remove(entry.getValue()));
+            }
+        }
+        if (isRemoveSupported()) {
+            assertTrue(values.isEmpty());
+        }
+    }
+
+    public void testRemoveAllViaEntriesIterator() {
+        if (!isRemoveSupported()) {
+            return;
+        }
+        final MultiValuedMap<K, V> map = makeFullMap();
+        for (final Iterator<?> i = map.entries().iterator(); i.hasNext();) {
+            i.next();
+            i.remove();
+        }
+        assertNull(map.get("one"));
+        assertEquals(0, map.size());
+    }
+
+    public void testSize() {
+        assertEquals(6, makeFullMap().size());
+    }
+
+    // -----------------------------------------------------------------------
+    @SuppressWarnings("unchecked")
+    public void testMapEquals() {
+        if (!isAddSupported()) {
+            return;
+        }
+        final MultiValuedMap<K, V> one = makeObject();
+        final Integer value = Integer.valueOf(1);
+        one.put((K) "One", (V) value);
+        one.removeMapping((K) "One", (V) value);
+
+        final MultiValuedMap<K, V> two = makeObject();
+        assertEquals(two, one);
+    }
+
+    @SuppressWarnings("unchecked")
+    public void testSizeWithPutRemove() {
+        if (!isRemoveSupported() || !isAddSupported()) {
+            return;
+        }
+        final MultiValuedMap<K, V> map = makeObject();
+        assertEquals(0, map.size());
+        map.put((K) "A", (V) "AA");
+        assertEquals(1, map.size());
+        map.put((K) "B", (V) "BA");
+        assertEquals(2, map.size());
+        map.put((K) "B", (V) "BB");
+        assertEquals(3, map.size());
+        map.put((K) "B", (V) "BC");
+        assertEquals(4, map.size());
+        map.remove("A");
+        assertEquals(3, map.size());
+        map.removeMapping((K) "B", (V) "BC");
+        assertEquals(2, map.size());
+    }
+
+    public void testKeySetSize() {
+        final MultiValuedMap<K, V> map = makeFullMap();
+        assertEquals(3, map.keySet().size());
+    }
+
+    @SuppressWarnings("unchecked")
+    public void testSize_Key() {
+        final MultiValuedMap<K, V> map = makeFullMap();
+        assertEquals(2, map.get("one").size());
+        assertEquals(2, map.get("two").size());
+        assertEquals(2, map.get("three").size());
+        if (!isAddSupported()) {
+            return;
+        }
+        map.put((K) "A", (V) "AA");
+        assertEquals(1, map.get("A").size());
+        //assertEquals(0, map.get("B").size());
+        map.put((K) "B", (V) "BA");
+        assertEquals(1, map.get("A").size());
+        assertEquals(1, map.get("B").size());
+        map.put((K) "B", (V) "BB");
+        assertEquals(1, map.get("A").size());
+        assertEquals(2, map.get("B").size());
+        map.put((K) "B", (V) "BC");
+        assertEquals(1, map.get("A").size());
+        assertEquals(3, map.get("B").size());
+        if (!isRemoveSupported()) {
+            return;
+        }
+        map.remove("A");
+        //assertEquals(0, map.get("A").size());
+        assertEquals(3, map.get("B").size());
+        map.removeMapping((K) "B", (V) "BC");
+        //assertEquals(0, map.get("A").size());
+        assertEquals(2, map.get("B").size());
+    }
+
+//    @SuppressWarnings("unchecked")
+//    public void testIterator_Key() {
+//        final MultiValuedMap<K, V> map = makeFullMap();
+//        Iterator<V> it = map.iterator("one");
+//        assertEquals(true, it.hasNext());
+//        Set<V> values = new HashSet<V>();
+//        while (it.hasNext()) {
+//            values.add(it.next());
+//        }
+//        assertEquals(true, values.contains("un"));
+//        assertEquals(true, values.contains("uno"));
+//        assertEquals(false, map.iterator("A").hasNext());
+//        assertEquals(false, map.iterator("A").hasNext());
+//        if (!isAddSupported()) {
+//            return;
+//        }
+//        map.put((K) "A", (V) "AA");
+//        it = map.iterator("A");
+//        assertEquals(true, it.hasNext());
+//        it.next();
+//        assertEquals(false, it.hasNext());
+//    }
+
+    @SuppressWarnings("unchecked")
+    public void testContainsValue_Key() {
+        final MultiValuedMap<K, V> map = makeFullMap();
+        assertEquals(true, map.containsMapping("one", (V) "uno"));
+        assertEquals(false, map.containsMapping("two", (V) "2"));
+        if (!isAddSupported()) {
+            return;
+        }
+        map.put((K) "A", (V) "AA");
+        assertEquals(true, map.containsMapping("A", (V) "AA"));
+        assertEquals(false, map.containsMapping("A", (V) "AB"));
+    }
+
+    @SuppressWarnings("unchecked")
+    public void testPutAll_Map1() {
+        if (!isAddSupported()) {
+            return;
+        }
+        final MultiValuedMap<K, V> original = makeObject();
+        original.put((K) "key", (V) "object1");
+        original.put((K) "key", (V) "object2");
+
+        final MultiValuedMap<K, V> test = makeObject();
+        test.put((K) "keyA", (V) "objectA");
+        test.put((K) "key", (V) "object0");
+        test.putAll(original);
+
+        assertEquals(2, test.keySet().size());
+        assertEquals(4, test.size());
+        assertEquals(1, test.get("keyA").size());
+        assertEquals(3, test.get("key").size());
+        assertEquals(true, test.containsValue("objectA"));
+        assertEquals(true, test.containsValue("object0"));
+        assertEquals(true, test.containsValue("object1"));
+        assertEquals(true, test.containsValue("object2"));
+    }
+
+    @SuppressWarnings("unchecked")
+    public void testPutAll_Map2() {
+        if (!isAddSupported()) {
+            return;
+        }
+        final Map<K, V> original = new HashMap<K, V>();
+        original.put((K) "keyX", (V) "object1");
+        original.put((K) "keyY", (V) "object2");
+
+        final MultiValuedMap<K, V> test = makeObject();
+        test.put((K) "keyA", (V) "objectA");
+        test.put((K) "keyX", (V) "object0");
+        test.putAll(original);
+
+        assertEquals(3, test.keySet().size());
+        assertEquals(4, test.size());
+        assertEquals(1, test.get("keyA").size());
+        assertEquals(2, test.get("keyX").size());
+        assertEquals(1, test.get("keyY").size());
+        assertEquals(true, test.containsValue("objectA"));
+        assertEquals(true, test.containsValue("object0"));
+        assertEquals(true, test.containsValue("object1"));
+        assertEquals(true, test.containsValue("object2"));
+    }
+
+    @SuppressWarnings("unchecked")
+    public void testPutAll_KeyIterable() {
+        if (!isAddSupported()) {
+            return;
+        }
+        final MultiValuedMap<K, V> map = makeObject();
+        Collection<V> coll = (Collection<V>) Arrays.asList("X", "Y", "Z");
+
+        assertEquals(true, map.putAll((K) "A", coll));
+        assertEquals(3, map.get("A").size());
+        assertEquals(true, map.containsMapping("A", (V) "X"));
+        assertEquals(true, map.containsMapping("A", (V) "Y"));
+        assertEquals(true, map.containsMapping("A", (V) "Z"));
+
+        assertEquals(false, map.putAll((K) "A", null));
+        assertEquals(3, map.get("A").size());
+        assertEquals(true, map.containsMapping("A", (V) "X"));
+        assertEquals(true, map.containsMapping("A", (V) "Y"));
+        assertEquals(true, map.containsMapping("A", (V) "Z"));
+
+        assertEquals(false, map.putAll((K) "A", new ArrayList<V>()));
+        assertEquals(3, map.get("A").size());
+        assertEquals(true, map.containsMapping("A", (V) "X"));
+        assertEquals(true, map.containsMapping("A", (V) "Y"));
+        assertEquals(true, map.containsMapping("A", (V) "Z"));
+
+        coll = (Collection<V>) Arrays.asList("M");
+        assertEquals(true, map.putAll((K) "A", coll));
+        assertEquals(4, map.get("A").size());
+        assertEquals(true, map.containsMapping("A", (V) "X"));
+        assertEquals(true, map.containsMapping("A", (V) "Y"));
+        assertEquals(true, map.containsMapping("A", (V) "Z"));
+        assertEquals(true, map.containsMapping("A", (V) "M"));
+    }
+
+    @SuppressWarnings("unchecked")
+    public void testRemove_KeyItem() {
+        if (!isRemoveSupported() || !isAddSupported()) {
+            return;
+        }
+        final MultiValuedMap<K, V> map = makeObject();
+        map.put((K) "A", (V) "AA");
+        map.put((K) "A", (V) "AB");
+        map.put((K) "A", (V) "AC");
+        assertEquals(false, map.removeMapping((K) "C", (V) "CA"));
+        assertEquals(false, map.removeMapping((K) "A", (V) "AD"));
+        assertEquals(true, map.removeMapping((K) "A", (V) "AC"));
+        assertEquals(true, map.removeMapping((K) "A", (V) "AB"));
+        assertEquals(true, map.removeMapping((K) "A", (V) "AA"));
+        //assertEquals(new MultiValuedHashMap<K, V>(), map);
+    }
+
+    public void testKeysBag() {
+        MultiValuedMap<K, V> map = makeFullMap();
+        Bag<K> keyBag = map.keys();
+        assertEquals(2, keyBag.getCount("one"));
+        assertEquals(2, keyBag.getCount("two"));
+        assertEquals(2, keyBag.getCount("three"));
+        assertEquals(6, keyBag.size());
+    }
+
+    public void testKeysBagIterator() {
+        MultiValuedMap<K, V> map = makeFullMap();
+        Collection<K> col = new ArrayList<K>();
+        Iterator<K> it = map.keys().iterator();
+        while (it.hasNext()) {
+            col.add(it.next());
+        }
+        Bag<K> bag = new HashBag<K>(col);
+        assertEquals(2, bag.getCount("one"));
+        assertEquals(2, bag.getCount("two"));
+        assertEquals(2, bag.getCount("three"));
+        assertEquals(6, bag.size());
+    }
+
+    @SuppressWarnings("unchecked")
+    public void testKeysBagContainsAll() {
+        MultiValuedMap<K, V> map = makeFullMap();
+        Bag<K> keyBag = map.keys();
+        Collection<K> col = (Collection<K>) Arrays.asList("one", "two", "three", "one", "two", "three");
+        assertTrue(keyBag.containsAll(col));
+    }
+
+//    public void testMapEqulas() {
+//        MultiValuedMap<K, V> map1 = makeFullMap();
+//        MultiValuedMap<K, V> map2 = makeFullMap();
+//        assertEquals(true, map1.equals(map2));
+//    }
+
+    // -----------------------------------------------------------------------
+    // Manual serialization testing as this class cannot easily
+    // extend the AbstractTestMap
+    // -----------------------------------------------------------------------
+
+    public void testEmptyMapCompatibility() throws Exception {
+        final MultiValuedMap<?, ?> map = makeObject();
+        final MultiValuedMap<?, ?> map2 = (MultiValuedMap<?, ?>) readExternalFormFromDisk(getCanonicalEmptyCollectionName(map));
+        assertEquals("Map is empty", 0, map2.size());
+    }
+
+    public void testFullMapCompatibility() throws Exception {
+        final MultiValuedMap<?, ?> map = (MultiValuedMap<?, ?>) makeFullMap();
+        final MultiValuedMap<?, ?> map2 = (MultiValuedMap<?, ?>) readExternalFormFromDisk(getCanonicalFullCollectionName(map));
+        assertEquals("Map is the right size", map.size(), map2.size());
+        for (final Object key : map.keySet()) {
+            assertEquals("Map had inequal elements", map.get(key), map2.get(key));
+            if (isRemoveSupported()) {
+                map2.remove(key);
+            }
+        }
+        if (isRemoveSupported()) {
+            assertEquals("Map had extra values", 0, map2.size());
+        }
+    }
+
+}

Propchange: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/multimap/AbstractMultiValuedMapTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/multimap/AbstractMultiValuedMapTest.java
------------------------------------------------------------------------------
    svn:keywords = Id Revision HeadURL

Propchange: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/multimap/AbstractMultiValuedMapTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/multimap/MultiValuedHashMapTest.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/multimap/MultiValuedHashMapTest.java?rev=1581553&view=auto
==============================================================================
--- commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/multimap/MultiValuedHashMapTest.java (added)
+++ commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/multimap/MultiValuedHashMapTest.java Tue Mar 25 22:01:07 2014
@@ -0,0 +1,85 @@
+/*
+ * 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.collections4.multimap;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.LinkedList;
+
+import org.apache.commons.collections4.MultiValuedMap;
+
+/**
+ * Test MultValuedHashMap
+ * 
+ * @since 4.1
+ * @version $Id$
+ */
+public class MultiValuedHashMapTest<K, V> extends AbstractMultiValuedMapTest<K, V> {
+
+    public MultiValuedHashMapTest(String testName) {
+        super(testName);
+    }
+
+    @Override
+    public MultiValuedMap<K, V> makeObject() {
+        final MultiValuedMap<K, V> m = new MultiValuedHashMap<K, V>();
+        return m;
+    }
+
+    private <C extends Collection<V>> MultiValuedHashMap<K, V> createTestMap(final Class<C> collectionClass) {
+        final MultiValuedHashMap<K, V> map =
+                (MultiValuedHashMap<K, V>) MultiValuedHashMap.<K, V, C> multiValuedMap(collectionClass);
+        addSampleMappings(map);
+        return map;
+    }
+
+    @SuppressWarnings("unchecked")
+    public void testValueCollectionType() {
+        final MultiValuedHashMap<K, V> map = createTestMap(LinkedList.class);
+        assertTrue(map.get("one") instanceof LinkedList);
+    }
+
+    @SuppressWarnings("unchecked")
+    public void testPutWithList() {
+        final MultiValuedHashMap<K, V> test = (MultiValuedHashMap<K, V>) MultiValuedHashMap.multiValuedMap(ArrayList.class);
+        assertEquals("a", test.put((K) "A", (V) "a"));
+        assertEquals("b", test.put((K) "A", (V) "b"));
+        assertEquals(1, test.keySet().size());
+        assertEquals(2, test.size("A"));
+        assertEquals(2, test.size());
+    }
+
+    @SuppressWarnings("unchecked")
+    public void testPutWithSet() {
+        final MultiValuedHashMap<K, V> test = (MultiValuedHashMap<K, V>) MultiValuedHashMap.multiValuedMap(HashSet.class);
+        assertEquals("a", test.put((K) "A", (V) "a"));
+        assertEquals("b", test.put((K) "A", (V) "b"));
+        assertEquals(null, test.put((K) "A", (V) "a"));
+        assertEquals(1, test.keySet().size());
+        assertEquals(2, test.size("A"));
+        assertEquals(2, test.size());
+    }
+
+//    public void testCreate() throws Exception {
+//        writeExternalFormToDisk((java.io.Serializable) makeObject(),
+//                "src/test/resources/data/test/MultiValuedHashMap.emptyCollection.version4.1.obj");
+//        writeExternalFormToDisk((java.io.Serializable) makeFullMap(),
+//                "src/test/resources/data/test/MultiValuedHashMap.fullCollection.version4.1.obj");
+//    }
+
+}

Propchange: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/multimap/MultiValuedHashMapTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/multimap/MultiValuedHashMapTest.java
------------------------------------------------------------------------------
    svn:keywords = Id Revision HeadURL

Propchange: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/multimap/MultiValuedHashMapTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/multimap/TransformedMultiValuedMapTest.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/multimap/TransformedMultiValuedMapTest.java?rev=1581553&view=auto
==============================================================================
--- commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/multimap/TransformedMultiValuedMapTest.java (added)
+++ commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/multimap/TransformedMultiValuedMapTest.java Tue Mar 25 22:01:07 2014
@@ -0,0 +1,132 @@
+/*
+ * 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.collections4.multimap;
+
+import org.apache.commons.collections4.MultiValuedMap;
+import org.apache.commons.collections4.Transformer;
+import org.apache.commons.collections4.TransformerUtils;
+import org.apache.commons.collections4.collection.TransformedCollectionTest;
+import org.apache.commons.collections4.multimap.TransformedMultiValuedMap;
+
+/**
+ * Tests for TransformedMultiValuedMap
+ * 
+ * @since 4.1
+ * @version $Id$
+ */
+public class TransformedMultiValuedMapTest<K, V> extends AbstractMultiValuedMapTest<K, V> {
+
+    public TransformedMultiValuedMapTest(String testName) {
+        super(testName);
+    }
+
+    @Override
+    public MultiValuedMap<K, V> makeObject() {
+        return TransformedMultiValuedMap.transformingMap(new MultiValuedHashMap<K, V>(),
+                TransformerUtils.<K> nopTransformer(), TransformerUtils.<V> nopTransformer());
+    }
+
+    @SuppressWarnings("unchecked")
+    public void testKeyTransformedMap() {
+        final Object[] els = new Object[] { "1", "3", "5", "7", "2", "4", "6" };
+
+        MultiValuedMap<K, V> map = TransformedMultiValuedMap.transformingMap(
+                new MultiValuedHashMap<K, V>(),
+                (Transformer<? super K, ? extends K>) TransformedCollectionTest.STRING_TO_INTEGER_TRANSFORMER,
+                null);
+        assertEquals(0, map.size());
+        for (int i = 0; i < els.length; i++) {
+            map.put((K) els[i], (V) els[i]);
+            assertEquals(i + 1, map.size());
+            assertEquals(true, map.containsKey(Integer.valueOf((String) els[i])));
+            assertEquals(false, map.containsKey(els[i]));
+            assertEquals(true, map.containsValue(els[i]));
+            assertEquals(true, map.get(Integer.valueOf((String) els[i])).contains(els[i]));
+        }
+
+        assertEquals(null, map.remove(els[0]));
+        assertEquals(true, map.remove(Integer.valueOf((String) els[0])).contains(els[0]));
+    }
+
+    @SuppressWarnings("unchecked")
+    public void testValueTransformedMap() {
+        final Object[] els = new Object[] { "1", "3", "5", "7", "2", "4", "6" };
+
+        MultiValuedMap<K, V> map = TransformedMultiValuedMap.transformingMap(
+                new MultiValuedHashMap<K, V>(), null,
+                (Transformer<? super V, ? extends V>) TransformedCollectionTest.STRING_TO_INTEGER_TRANSFORMER);
+        assertEquals(0, map.size());
+        for (int i = 0; i < els.length; i++) {
+            map.put((K) els[i], (V) els[i]);
+            assertEquals(i + 1, map.size());
+            assertEquals(true, map.containsValue(Integer.valueOf((String) els[i])));
+            assertEquals(false, map.containsValue(els[i]));
+            assertEquals(true, map.containsKey(els[i]));
+            assertEquals(true, map.get(els[i]).contains(Integer.valueOf((String) els[i])));
+        }
+        assertEquals(true, map.remove(els[0]).contains(Integer.valueOf((String) els[0])));
+    }
+
+    // -----------------------------------------------------------------------
+    @SuppressWarnings("unchecked")
+    public void testFactory_Decorate() {
+        final MultiValuedMap<K, V> base = new MultiValuedHashMap<K, V>();
+        base.put((K) "A", (V) "1");
+        base.put((K) "B", (V) "2");
+        base.put((K) "C", (V) "3");
+
+        final MultiValuedMap<K, V> trans = TransformedMultiValuedMap
+                .transformingMap(
+                        base,
+                        null,
+                        (Transformer<? super V, ? extends V>) TransformedCollectionTest.STRING_TO_INTEGER_TRANSFORMER);
+        assertEquals(3, trans.size());
+        assertEquals(true, trans.get("A").contains("1"));
+        assertEquals(true, trans.get("B").contains("2"));
+        assertEquals(true, trans.get("C").contains("3"));
+        trans.put((K) "D", (V) "4");
+        assertEquals(true, trans.get("D").contains(Integer.valueOf(4)));
+    }
+
+    @SuppressWarnings("unchecked")
+    public void testFactory_decorateTransform() {
+        final MultiValuedMap<K, V> base = new MultiValuedHashMap<K, V>();
+        base.put((K) "A", (V) "1");
+        base.put((K) "B", (V) "2");
+        base.put((K) "C", (V) "3");
+
+        final MultiValuedMap<K, V> trans = TransformedMultiValuedMap
+                .transformedMap(
+                        base,
+                        null,
+                        (Transformer<? super V, ? extends V>) TransformedCollectionTest.STRING_TO_INTEGER_TRANSFORMER);
+        assertEquals(3, trans.size());
+        assertEquals(true, trans.get("A").contains(Integer.valueOf(1)));
+        assertEquals(true, trans.get("B").contains(Integer.valueOf(2)));
+        assertEquals(true, trans.get("C").contains(Integer.valueOf(3)));
+        trans.put((K) "D", (V) "4");
+        assertEquals(true, trans.get("D").contains(Integer.valueOf(4)));
+    }
+
+//    public void testCreate() throws Exception {
+//        writeExternalFormToDisk((java.io.Serializable) makeObject(),
+//                "src/test/resources/data/test/TransformedMultiValuedMap.emptyCollection.version4.1.obj");
+//        writeExternalFormToDisk((java.io.Serializable) makeFullMap(),
+//                "src/test/resources/data/test/TransformedMultiValuedMap.fullCollection.version4.1.obj");
+//    }
+
+}

Propchange: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/multimap/TransformedMultiValuedMapTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/multimap/TransformedMultiValuedMapTest.java
------------------------------------------------------------------------------
    svn:keywords = Id Revision HeadURL

Propchange: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/multimap/TransformedMultiValuedMapTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/multimap/UnmodifiableMultiValuedMapTest.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/multimap/UnmodifiableMultiValuedMapTest.java?rev=1581553&view=auto
==============================================================================
--- commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/multimap/UnmodifiableMultiValuedMapTest.java (added)
+++ commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/multimap/UnmodifiableMultiValuedMapTest.java Tue Mar 25 22:01:07 2014
@@ -0,0 +1,88 @@
+/*
+ * 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.collections4.multimap;
+
+import org.apache.commons.collections4.MultiValuedMap;
+import org.apache.commons.collections4.Unmodifiable;
+
+/**
+ * Tests for UnmodifiableMultiValuedMap
+ * 
+ * @since 4.1
+ * @version $Id$
+ */
+public class UnmodifiableMultiValuedMapTest<K, V> extends AbstractMultiValuedMapTest<K, V> {
+
+    public UnmodifiableMultiValuedMapTest(String testName) {
+        super(testName);
+    }
+
+    public boolean isAddSupported() {
+        return false;
+    }
+
+    public boolean isRemoveSupported() {
+        return false;
+    }
+
+    @Override
+    public MultiValuedMap<K, V> makeObject() {
+        return UnmodifiableMultiValuedMap.<K, V> unmodifiableMultiValuedMap(new MultiValuedHashMap<K, V>());
+    }
+
+    protected MultiValuedMap<K, V> makeFullMap() {
+        final MultiValuedMap<K, V> map = new MultiValuedHashMap<K, V>();
+        addSampleMappings(map);
+        return UnmodifiableMultiValuedMap.<K, V> unmodifiableMultiValuedMap(map);
+    }
+
+    public void testUnmodifiable() {
+        assertTrue(makeObject() instanceof Unmodifiable);
+        assertTrue(makeFullMap() instanceof Unmodifiable);
+    }
+
+    public void testDecorateFactory() {
+        final MultiValuedMap<K, V> map = makeFullMap();
+        assertSame(map, UnmodifiableMultiValuedMap.unmodifiableMultiValuedMap(map));
+    }
+
+    public void testDecoratorFactoryNullMap() {
+        try {
+            UnmodifiableMultiValuedMap.unmodifiableMultiValuedMap(null);
+            fail();
+        } catch (IllegalArgumentException e) {
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    public void testAddException() {
+        MultiValuedMap<K, V> map = makeObject();
+        try {
+            map.put((K) "one", (V) "uno");
+            fail();
+        } catch (UnsupportedOperationException e) {
+        }
+    }
+
+//    public void testCreate() throws Exception {
+//        writeExternalFormToDisk((java.io.Serializable) makeObject(),
+//                "src/test/resources/data/test/UnmodifiableMultiValuedMap.emptyCollection.version4.1.obj");
+//        writeExternalFormToDisk((java.io.Serializable) makeFullMap(),
+//                "src/test/resources/data/test/UnmodifiableMultiValuedMap.fullCollection.version4.1.obj");
+//    }
+
+}

Propchange: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/multimap/UnmodifiableMultiValuedMapTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/multimap/UnmodifiableMultiValuedMapTest.java
------------------------------------------------------------------------------
    svn:keywords = Id Revision HeadURL

Propchange: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/multimap/UnmodifiableMultiValuedMapTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/proper/collections/trunk/src/test/resources/data/test/MultiValuedHashMap.emptyCollection.version4.1.obj
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/test/resources/data/test/MultiValuedHashMap.emptyCollection.version4.1.obj?rev=1581553&view=auto
==============================================================================
Binary file - no diff available.

Propchange: commons/proper/collections/trunk/src/test/resources/data/test/MultiValuedHashMap.emptyCollection.version4.1.obj
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: commons/proper/collections/trunk/src/test/resources/data/test/MultiValuedHashMap.fullCollection.version4.1.obj
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/test/resources/data/test/MultiValuedHashMap.fullCollection.version4.1.obj?rev=1581553&view=auto
==============================================================================
Binary file - no diff available.

Propchange: commons/proper/collections/trunk/src/test/resources/data/test/MultiValuedHashMap.fullCollection.version4.1.obj
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: commons/proper/collections/trunk/src/test/resources/data/test/TransformedMultiValuedMap.emptyCollection.version4.1.obj
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/test/resources/data/test/TransformedMultiValuedMap.emptyCollection.version4.1.obj?rev=1581553&view=auto
==============================================================================
Binary file - no diff available.

Propchange: commons/proper/collections/trunk/src/test/resources/data/test/TransformedMultiValuedMap.emptyCollection.version4.1.obj
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: commons/proper/collections/trunk/src/test/resources/data/test/TransformedMultiValuedMap.fullCollection.version4.1.obj
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/test/resources/data/test/TransformedMultiValuedMap.fullCollection.version4.1.obj?rev=1581553&view=auto
==============================================================================
Binary file - no diff available.

Propchange: commons/proper/collections/trunk/src/test/resources/data/test/TransformedMultiValuedMap.fullCollection.version4.1.obj
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: commons/proper/collections/trunk/src/test/resources/data/test/UnmodifiableMultiValuedMap.emptyCollection.version4.1.obj
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/test/resources/data/test/UnmodifiableMultiValuedMap.emptyCollection.version4.1.obj?rev=1581553&view=auto
==============================================================================
Binary file - no diff available.

Propchange: commons/proper/collections/trunk/src/test/resources/data/test/UnmodifiableMultiValuedMap.emptyCollection.version4.1.obj
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: commons/proper/collections/trunk/src/test/resources/data/test/UnmodifiableMultiValuedMap.fullCollection.version4.1.obj
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/test/resources/data/test/UnmodifiableMultiValuedMap.fullCollection.version4.1.obj?rev=1581553&view=auto
==============================================================================
Binary file - no diff available.

Propchange: commons/proper/collections/trunk/src/test/resources/data/test/UnmodifiableMultiValuedMap.fullCollection.version4.1.obj
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream