Index: trunk/test/unit/org/openstreetmap/josm/tools/MultiMapTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/tools/MultiMapTest.java	(revision 15869)
+++ trunk/test/unit/org/openstreetmap/josm/tools/MultiMapTest.java	(revision 15870)
@@ -3,8 +3,13 @@
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
 
 import org.junit.Test;
@@ -40,19 +45,27 @@
         assertEquals(new HashSet<>(Arrays.asList("foo", "alpha")), map.keySet());
         assertEquals(new HashSet<>(Arrays.asList("bar", "baz")), map.get("foo"));
+        assertEquals(new HashSet<>(Arrays.asList("bar", "baz")), map.getValues("foo"));
         assertEquals(new HashSet<>(), map.get("alpha"));
-        assertEquals(null, map.get("beta"));
+        assertEquals(Collections.emptySet(), map.getValues("alpha"));
+        assertNull(map.get("beta"));
+        assertEquals(Collections.emptySet(), map.getValues("beta"));
         assertEquals(new HashSet<>(), map.getValues("alpha"));
         assertEquals(new HashSet<>(), map.getValues("beta"));
         map.put("foo", "baz2");
         map.put("foo", "baz");
+        assertTrue(map.containsKey("foo"));
+        assertTrue(map.contains("foo", "bar"));
         assertEquals(new HashSet<>(Arrays.asList("bar", "baz", "baz2")), map.get("foo"));
-        map.remove("foo", "baz");
+        assertFalse(map.contains("foo", "xxx"));
+        assertFalse(map.remove("foo", "xxx"));
+        assertTrue(map.remove("foo", "baz"));
         assertEquals(new HashSet<>(Arrays.asList("bar", "baz2")), map.get("foo"));
-        map.remove("foo");
-        assertEquals(null, map.get("foo"));
+        assertEquals(new HashSet<>(Arrays.asList("bar", "baz2")), map.remove("foo"));
+        assertFalse(map.containsKey("foo"));
+        assertNull(map.get("foo"));
         assertEquals("(alpha->[])", map.toString());
-        map.remove("alpha");
+        assertEquals(Collections.emptySet(), map.remove("alpha"));
         assertTrue(map.isEmpty());
-        map.remove("omega", null);
+        assertFalse(map.remove("omega", null));
         assertTrue(map.isEmpty());
         map.clear();
@@ -60,4 +73,13 @@
         map.putAll("foo", Arrays.asList("bar", "baz"));
         assertEquals(new HashSet<>(Arrays.asList("bar", "baz")), map.get("foo"));
+        assertFalse(map.isEmpty());
+        map.clear();
+        assertTrue(map.isEmpty());
+        assertEquals(0, new MultiMap<String, String>(null).size());
+        final Map<String, Set<String>> asMap = Collections.singletonMap("foo", Collections.singleton("bar"));
+        assertEquals(asMap, new MultiMap<>(asMap).toMap());
+        assertEquals("[foo=[bar]]", new MultiMap<>(asMap).entrySet().toString());
+        assertEquals("[foo]", new MultiMap<>(asMap).keySet().toString());
+        assertEquals("[[bar]]", new MultiMap<>(asMap).values().toString());
     }
 }
