11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2007 The Guava Authors 31d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 41d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); 51d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * you may not use this file except in compliance with the License. 61d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * You may obtain a copy of the License at 71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 81d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 91d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unless required by applicable law or agreed to in writing, software 111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS, 121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * See the License for the specific language governing permissions and 141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * limitations under the License. 151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpackage com.google.common.collect; 181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.Lists.newArrayList; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.Sets.newHashSet; 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.Sets.newLinkedHashSet; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.testing.IteratorFeature.MODIFIABLE; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.testing.IteratorFeature.SUPPORTS_REMOVE; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.testing.IteratorFeature.SUPPORTS_SET; 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static java.util.Arrays.asList; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static org.junit.contrib.truth.Truth.ASSERT; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtIncompatible; 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.IteratorTester; 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.ListIteratorTester; 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Arrays; 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collection; 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collections; 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Iterator; 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.List; 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.ListIterator; 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Map; 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Map.Entry; 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.RandomAccess; 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Set; 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Tests for {@code LinkedListMultimap}. 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Mike Bostock 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true) 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class LinkedListMultimapTest extends AbstractListMultimapTest { 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected LinkedListMultimap<String, Integer> create() { 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return LinkedListMultimap.create(); 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Confirm that get() returns a List that doesn't implement RandomAccess. 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetRandomAccess() { 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = create(); 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 3); 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.get("foo") instanceof RandomAccess); 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.get("bar") instanceof RandomAccess); 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Confirm that removeAll() returns a List that implements RandomAccess, even 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * though get() doesn't. 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveAllRandomAccess() { 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = create(); 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 3); 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.removeAll("foo") instanceof RandomAccess); 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.removeAll("bar") instanceof RandomAccess); 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Confirm that replaceValues() returns a List that implements RandomAccess, 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * even though get() doesn't. 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testReplaceValuesRandomAccess() { 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = create(); 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 3); 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.replaceValues("foo", Arrays.asList(2, 4)) 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert instanceof RandomAccess); 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.replaceValues("bar", Arrays.asList(2, 4)) 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert instanceof RandomAccess); 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreateFromMultimap() { 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = createSample(); 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert LinkedListMultimap<String, Integer> copy = 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert LinkedListMultimap.create(multimap); 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multimap, copy); 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreateFromSize() { 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert LinkedListMultimap<String, Integer> multimap 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = LinkedListMultimap.create(20); 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 2); 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 3); 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableList.of(1, 3), multimap.get("foo")); 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreateFromIllegalSize() { 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert LinkedListMultimap.create(-20); 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) {} 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* "Linked" prefix avoids collision with AbstractMultimapTest. */ 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLinkedToString() { 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{foo=[3, -1, 2, 4, 1], bar=[1, 2, 3, 1]}", 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert createSample().toString()); 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLinkedGetAdd() { 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert LinkedListMultimap<String, Integer> map = create(); 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("bar", 1); 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> foos = map.get("foo"); 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert foos.add(2); 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert foos.add(3); 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("bar", 4); 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("foo", 5); 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{bar=[1, 4], foo=[2, 3, 5]}", map.toString()); 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[bar=1, foo=2, foo=3, bar=4, foo=5]", 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.entries().toString()); 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLinkedGetInsert() { 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ListMultimap<String, Integer> map = create(); 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("bar", 1); 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> foos = map.get("foo"); 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert foos.add(2); 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert foos.add(0, 3); 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("bar", 4); 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("foo", 5); 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{bar=[1, 4], foo=[3, 2, 5]}", map.toString()); 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[bar=1, foo=3, foo=2, bar=4, foo=5]", 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.entries().toString()); 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLinkedPutInOrder() { 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> map = create(); 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("foo", 1); 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("bar", 2); 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("bar", 3); 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{foo=[1], bar=[2, 3]}", map.toString()); 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[foo=1, bar=2, bar=3]", map.entries().toString()); 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLinkedPutOutOfOrder() { 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> map = create(); 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("bar", 1); 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("foo", 2); 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("bar", 3); 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{bar=[1, 3], foo=[2]}", map.toString()); 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[bar=1, foo=2, bar=3]", map.entries().toString()); 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLinkedPutAllMultimap() { 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> src = create(); 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert src.put("bar", 1); 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert src.put("foo", 2); 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert src.put("bar", 3); 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> dst = create(); 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert dst.putAll(src); 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{bar=[1, 3], foo=[2]}", dst.toString()); 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[bar=1, foo=2, bar=3]", src.entries().toString()); 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLinkedReplaceValues() { 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> map = create(); 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("bar", 1); 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("foo", 2); 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("bar", 3); 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("bar", 4); 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{bar=[1, 3, 4], foo=[2]}", map.toString()); 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.replaceValues("bar", asList(1, 2)); 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[bar=1, foo=2, bar=2]", map.entries().toString()); 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{bar=[1, 2], foo=[2]}", map.toString()); 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLinkedClear() { 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ListMultimap<String, Integer> map = create(); 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("foo", 1); 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("foo", 2); 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("bar", 3); 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> foos = map.get("foo"); 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> values = map.values(); 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList(1, 2), foos); 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(values).hasContentsInOrder(1, 2, 3); 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.clear(); 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.emptyList(), foos); 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(values).hasContentsInOrder(); 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[]", map.entries().toString()); 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{}", map.toString()); 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLinkedKeySet() { 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> map = create(); 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("bar", 1); 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("foo", 2); 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("bar", 3); 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("bar", 4); 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[bar, foo]", map.keySet().toString()); 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.keySet().remove("bar"); 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{foo=[2]}", map.toString()); 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLinkedKeys() { 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> map = create(); 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("bar", 1); 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("foo", 2); 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("bar", 3); 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("bar", 4); 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[bar=1, foo=2, bar=3, bar=4]", 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.entries().toString()); 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(map.keys()).hasContentsInOrder("bar", "foo", "bar", "bar"); 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.keys().remove("bar"); // bar is no longer the first key! 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{foo=[2], bar=[3, 4]}", map.toString()); 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLinkedValues() { 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> map = create(); 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("bar", 1); 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("foo", 2); 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("bar", 3); 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("bar", 4); 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[1, 2, 3, 4]", map.values().toString()); 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.values().remove(2); 2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{bar=[1, 3, 4]}", map.toString()); 2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLinkedEntries() { 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> map = create(); 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("bar", 1); 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("foo", 2); 2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("bar", 3); 2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Map.Entry<String, Integer>> entries = map.entries().iterator(); 2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map.Entry<String, Integer> entry = entries.next(); 2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("bar", entry.getKey()); 2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, (int) entry.getValue()); 2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entry = entries.next(); 2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("foo", entry.getKey()); 2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, (int) entry.getValue()); 2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entry.setValue(4); 2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entry = entries.next(); 2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("bar", entry.getKey()); 2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, (int) entry.getValue()); 2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entries.hasNext()); 2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entries.remove(); 2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{bar=[1], foo=[4]}", map.toString()); 2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLinkedAsMapEntries() { 2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> map = create(); 2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("bar", 1); 2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("foo", 2); 2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("bar", 3); 2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Map.Entry<String, Collection<Integer>>> entries 2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = map.asMap().entrySet().iterator(); 2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map.Entry<String, Collection<Integer>> entry = entries.next(); 2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("bar", entry.getKey()); 2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(entry.getValue()).hasContentsInOrder(1, 3); 2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entry.setValue(Arrays.<Integer>asList()); 2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("UnsupportedOperationException expected"); 2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException expected) {} 2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entries.remove(); // clear 2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entry = entries.next(); 2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("foo", entry.getKey()); 2791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(entry.getValue()).hasContentsInOrder(2); 2801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entries.hasNext()); 2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{foo=[2]}", map.toString()); 2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 2851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Test calling setValue() on an entry returned by multimap.entries(). 2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public void testEntrySetValue() { 2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ListMultimap<String, Integer> multimap = create(); 2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 3); 2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Map.Entry<String, Integer>> entries = multimap.entries(); 2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Map.Entry<String, Integer>> iterator = entries.iterator(); 2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map.Entry<String, Integer> entrya = iterator.next(); 2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map.Entry<String, Integer> entryb = iterator.next(); 2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int oldValue = entrya.setValue(2); 2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, oldValue); 2981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsEntry("foo", 1)); 2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("foo", 2)); 3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("bar", 3)); 3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, (int) entrya.getValue()); 3021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, (int) entryb.getValue()); 3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntriesAfterMultimapUpdate() { 3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ListMultimap<String, Integer> multimap = create(); 3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 2); 3081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 3); 3091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Map.Entry<String, Integer>> entries = multimap.entries(); 3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Map.Entry<String, Integer>> iterator = entries.iterator(); 3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map.Entry<String, Integer> entrya = iterator.next(); 3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map.Entry<String, Integer> entryb = iterator.next(); 3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, (int) multimap.get("foo").set(0, 4)); 3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsEntry("foo", 2)); 3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("foo", 4)); 3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("bar", 3)); 3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(4, (int) entrya.getValue()); 3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, (int) entryb.getValue()); 3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.put("foo", 5)); 3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("foo", 5)); 3231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("foo", 4)); 3241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("bar", 3)); 3251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(4, (int) entrya.getValue()); 3261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, (int) entryb.getValue()); 3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("unreasonable slow") 3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntriesIteration() { 3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Entry<String, Integer>> addItems = ImmutableList.of( 3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("foo", 99), 3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("foo", 88), 3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("bar", 77)); 3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (final int startIndex : new int[] {0, 3, 5}) { 3381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Entry<String, Integer>> list = Lists.newArrayList( 3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("foo", 2), 3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("foo", 3), 3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("bar", 4), 3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("bar", 5), 3431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("foo", 6)); 3441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new ListIteratorTester<Entry<String, Integer>>(3, addItems, 3451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableList.of(SUPPORTS_REMOVE), list, startIndex) { 3461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private LinkedListMultimap<String, Integer> multimap; 3471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected ListIterator<Entry<String, Integer>> newTargetIterator() { 3491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap = create(); 3501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(2, 3)); 3511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("bar", asList(4, 5)); 3521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 6); 3531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return multimap.entries().listIterator(startIndex); 3541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected void verify(List<Entry<String, Integer>> elements) { 3571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(elements, multimap.entries()); 3581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 3601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("unreasonable slow") 3641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testKeysIteration() { 3651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<String>(6, MODIFIABLE, newArrayList("foo", "foo", "bar", 3661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "bar", "foo"), IteratorTester.KnownOrder.KNOWN_ORDER) { 3671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Multimap<String, Integer> multimap; 3681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<String> newTargetIterator() { 3701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap = create(); 3711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(2, 3)); 3721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("bar", asList(4, 5)); 3731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(6)); 3741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return multimap.keys().iterator(); 3751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected void verify(List<String> elements) { 3781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(elements, Lists.newArrayList(multimap.keys())); 3791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 3811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("unreasonable slow") 3841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testValuesIteration() { 3851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> addItems = ImmutableList.of(99, 88, 77); 3861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (final int startIndex : new int[] {0, 3, 5}) { 3881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new ListIteratorTester<Integer>(3, addItems, 3891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableList.of(SUPPORTS_REMOVE, SUPPORTS_SET), 3901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Lists.newArrayList(2, 3, 4, 5, 6), startIndex) { 3911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private LinkedListMultimap<String, Integer> multimap; 3921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected ListIterator<Integer> newTargetIterator() { 3941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap = create(); 3951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 2); 3961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", Arrays.asList(3, 4)); 3971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 5); 3981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 6); 3991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return multimap.values().listIterator(startIndex); 4001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected void verify(List<Integer> elements) { 4031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(elements, multimap.values()); 4041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 4061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("unreasonable slow") 4101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testKeySetIteration() { 4111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<String>(6, MODIFIABLE, newLinkedHashSet(asList( 4121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "foo", "bar", "baz", "dog", "cat")), 4131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester.KnownOrder.KNOWN_ORDER) { 4141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Multimap<String, Integer> multimap; 4151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<String> newTargetIterator() { 4171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap = create(); 4181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(2, 3)); 4191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("bar", asList(4, 5)); 4201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(6)); 4211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("baz", asList(7, 8)); 4221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("dog", asList(9)); 4231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("bar", asList(10, 11)); 4241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("cat", asList(12, 13, 14)); 4251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return multimap.keySet().iterator(); 4261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected void verify(List<String> elements) { 4291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newHashSet(elements), multimap.keySet()); 4301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 4321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 4351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("unreasonable slow") 4361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAsSetIteration() { 4371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<Entry<String, Collection<Integer>>> set = Sets.newLinkedHashSet(asList( 4381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("foo", 4391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert (Collection<Integer>) asList(2, 3, 6)), 4401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("bar", 4411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert (Collection<Integer>) asList(4, 5, 10, 11)), 4421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("baz", 4431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert (Collection<Integer>) asList(7, 8)), 4441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("dog", 4451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert (Collection<Integer>) asList(9)), 4461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("cat", 4471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert (Collection<Integer>) asList(12, 13, 14)) 4481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert )); 4491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<Entry<String, Collection<Integer>>>(6, MODIFIABLE, set, 4511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester.KnownOrder.KNOWN_ORDER) { 4521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Multimap<String, Integer> multimap; 4531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<Entry<String, Collection<Integer>>> 4551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert newTargetIterator() { 4561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap = create(); 4571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(2, 3)); 4581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("bar", asList(4, 5)); 4591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(6)); 4601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("baz", asList(7, 8)); 4611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("dog", asList(9)); 4621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("bar", asList(10, 11)); 4631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("cat", asList(12, 13, 14)); 4641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return multimap.asMap().entrySet().iterator(); 4651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected void verify( 4681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Entry<String, Collection<Integer>>> elements) { 4691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newHashSet(elements), multimap.asMap().entrySet()); 4701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 4721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 474