11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2008 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.testing.IteratorFeature.UNMODIFIABLE; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static java.util.Arrays.asList; 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static org.junit.contrib.truth.Truth.ASSERT; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtIncompatible; 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.Helpers; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.IteratorTester; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.MinimalCollection; 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.MinimalIterable; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestCase; 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collection; 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collections; 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Iterator; 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.List; 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Set; 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Base class for {@link ImmutableSet} and {@link ImmutableSortedSet} tests. 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Kevin Bourrillion 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Jared Levy 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true) 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic abstract class AbstractImmutableSetTest extends TestCase { 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected abstract Set<String> of(); 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected abstract Set<String> of(String e); 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected abstract Set<String> of(String e1, String e2); 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected abstract Set<String> of(String e1, String e2, String e3); 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected abstract Set<String> of(String e1, String e2, String e3, String e4); 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected abstract Set<String> of(String e1, String e2, String e3, String e4, 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String e5); 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected abstract Set<String> of(String e1, String e2, String e3, String e4, 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String e5, String e6, String... rest); 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected abstract Set<String> copyOf(String[] elements); 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected abstract Set<String> copyOf(Collection<String> elements); 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected abstract Set<String> copyOf(Iterable<String> elements); 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected abstract Set<String> copyOf(Iterator<String> elements); 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreation_noArgs() { 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> set = of(); 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.<String>emptySet(), set); 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(of(), set); 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreation_oneElement() { 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> set = of("a"); 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.singleton("a"), set); 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreation_twoElements() { 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> set = of("a", "b"); 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Sets.newHashSet("a", "b"), set); 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreation_threeElements() { 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> set = of("a", "b", "c"); 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Sets.newHashSet("a", "b", "c"), set); 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreation_fourElements() { 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> set = of("a", "b", "c", "d"); 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Sets.newHashSet("a", "b", "c", "d"), set); 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreation_fiveElements() { 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> set = of("a", "b", "c", "d", "e"); 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Sets.newHashSet("a", "b", "c", "d", "e"), set); 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreation_sixElements() { 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> set = of("a", "b", "c", "d", "e", "f"); 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Sets.newHashSet("a", "b", "c", "d", "e", "f"), set); 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreation_sevenElements() { 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> set = of("a", "b", "c", "d", "e", "f", "g"); 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Sets.newHashSet("a", "b", "c", "d", "e", "f", "g"), set); 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreation_eightElements() { 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> set = of("a", "b", "c", "d", "e", "f", "g", "h"); 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Sets.newHashSet("a", "b", "c", "d", "e", "f", "g", "h"), set); 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_emptyArray() { 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] array = new String[0]; 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> set = copyOf(array); 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.<String>emptySet(), set); 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(of(), set); 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_arrayOfOneElement() { 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] array = new String[] { "a" }; 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> set = copyOf(array); 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.singleton("a"), set); 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_nullArray() { 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert copyOf((String[]) null); 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch(NullPointerException expected) { 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_arrayContainingOnlyNull() { 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] array = new String[] { null }; 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert copyOf(array); 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_collection_empty() { 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // "<String>" is required to work around a javac 1.5 bug. 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> c = MinimalCollection.<String>of(); 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> set = copyOf(c); 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.<String>emptySet(), set); 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(of(), set); 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_collection_oneElement() { 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> c = MinimalCollection.of("a"); 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> set = copyOf(c); 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.singleton("a"), set); 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_collection_oneElementRepeated() { 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> c = MinimalCollection.of("a", "a", "a"); 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> set = copyOf(c); 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.singleton("a"), set); 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_collection_general() { 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> c = MinimalCollection.of("a", "b", "a"); 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> set = copyOf(c); 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, set.size()); 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.contains("a")); 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.contains("b")); 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_collectionContainingNull() { 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> c = MinimalCollection.of("a", null, "b"); 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert copyOf(c); 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_iterator_empty() { 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = Iterators.emptyIterator(); 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> set = copyOf(iterator); 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.<String>emptySet(), set); 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(of(), set); 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_iterator_oneElement() { 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = Iterators.singletonIterator("a"); 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> set = copyOf(iterator); 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.singleton("a"), set); 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_iterator_oneElementRepeated() { 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = Iterators.forArray("a", "a", "a"); 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> set = copyOf(iterator); 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.singleton("a"), set); 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_iterator_general() { 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = Iterators.forArray("a", "b", "a"); 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> set = copyOf(iterator); 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, set.size()); 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.contains("a")); 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.contains("b")); 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_iteratorContainingNull() { 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> c = Iterators.forArray("a", null, "b"); 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert copyOf(c); 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static class CountingIterable implements Iterable<String> { 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int count = 0; 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Iterator<String> iterator() { 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert count++; 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Iterators.forArray("a", "b", "a"); 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_plainIterable() { 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CountingIterable iterable = new CountingIterable(); 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> set = copyOf(iterable); 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, set.size()); 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.contains("a")); 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.contains("b")); 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_plainIterable_iteratesOnce() { 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CountingIterable iterable = new CountingIterable(); 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert copyOf(iterable); 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, iterable.count); 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_shortcut_empty() { 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> c = of(); 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.<String>emptySet(), copyOf(c)); 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(c, copyOf(c)); 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_shortcut_singleton() { 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> c = of("a"); 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.singleton("a"), copyOf(c)); 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(c, copyOf(c)); 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_shortcut_sameType() { 2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> c = of("a", "b", "c"); 2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(c, copyOf(c)); 2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testToString() { 2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> set = of("a", "b", "c", "d", "e", "f", "g"); 2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[a, b, c, d, e, f, g]", set.toString()); 2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("slow (~40s)") 2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIterator_oneElement() { 2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<String>(5, UNMODIFIABLE, Collections.singleton("a"), 2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester.KnownOrder.KNOWN_ORDER) { 2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<String> newTargetIterator() { 2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return of("a").iterator(); 2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("slow (~30s)") 2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIterator_general() { 2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<String>(5, UNMODIFIABLE, asList("a", "b", "c"), 2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester.KnownOrder.KNOWN_ORDER) { 2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<String> newTargetIterator() { 2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return of("a", "b", "c").iterator(); 2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testContainsAll_sameType() { 2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> c = of("a", "b", "c"); 2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(c.containsAll(of("a", "b", "c", "d"))); 2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(c.containsAll(of("a", "d"))); 2791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(c.containsAll(of("a", "c"))); 2801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(c.containsAll(of("a", "b", "c"))); 2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEquals_sameType() { 2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> c = of("a", "b", "c"); 2851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(c.equals(of("a", "b", "c"))); 2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(c.equals(of("a", "b", "d"))); 2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert abstract <E extends Comparable<E>> ImmutableSet.Builder<E> builder(); 2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderWithNonDuplicateElements() { 2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSet<String> set = this.<String>builder() 2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .add("a") 2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .add("b", "c") 2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .add("d", "e", "f") 2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .add("g", "h", "i", "j") 2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 2981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set).hasContentsInOrder( 2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "a", "b", "c", "d", "e", "f", "g", "h", "i", "j"); 3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderWithDuplicateElements() { 3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSet<String> set = this.<String>builder() 3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .add("a") 3051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .add("a", "a") 3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .add("a", "a", "a") 3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .add("a", "a", "a", "a") 3081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 3091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.contains("a")); 3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(set.contains("b")); 3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, set.size()); 3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderAddAll() { 3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> a = asList("a", "b", "c"); 3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> b = asList("c", "d", "e"); 3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSet<String> set = this.<String>builder() 3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addAll(a) 3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addAll(b) 3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set).hasContentsInOrder("a", "b", "c", "d", "e"); 3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert static final int LAST_COLOR_ADDED = 0x00BFFF; 3251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testComplexBuilder() { 3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> colorElem = asList(0x00, 0x33, 0x66, 0x99, 0xCC, 0xFF); 3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // javac won't compile this without "this.<Integer>" 3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSet.Builder<Integer> webSafeColorsBuilder 3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = this.<Integer>builder(); 3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Integer red : colorElem) { 3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Integer green : colorElem) { 3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Integer blue : colorElem) { 3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert webSafeColorsBuilder.add((red << 16) + (green << 8) + blue); 3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSet<Integer> webSafeColors = webSafeColorsBuilder.build(); 3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(216, webSafeColors.size()); 3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Integer[] webSafeColorArray = 3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert webSafeColors.toArray(new Integer[webSafeColors.size()]); 3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0x000000, (int) webSafeColorArray[0]); 3431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0x000033, (int) webSafeColorArray[1]); 3441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0x000066, (int) webSafeColorArray[2]); 3451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0x003300, (int) webSafeColorArray[6]); 3461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0x330000, (int) webSafeColorArray[36]); 3471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSet<Integer> addedColor 3481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = webSafeColorsBuilder.add(LAST_COLOR_ADDED).build(); 3491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals( 3501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "Modifying the builder should not have changed any already built sets", 3511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 216, webSafeColors.size()); 3521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("the new array should be one bigger than webSafeColors", 3531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 217, addedColor.size()); 3541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Integer[] appendColorArray = 3551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert addedColor.toArray(new Integer[addedColor.size()]); 3561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals( 3571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert getComplexBuilderSetLastElement(), (int) appendColorArray[216]); 3581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert abstract int getComplexBuilderSetLastElement(); 3611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderAddHandlesNullsCorrectly() { 3631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSet.Builder<String> builder = this.<String>builder(); 3641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.add((String) null); 3661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("expected NullPointerException"); // COV_NF_LINE 3671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 3681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder = this.<String>builder(); 3711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.add((String[]) null); 3731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("expected NullPointerException"); // COV_NF_LINE 3741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 3751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder = this.<String>builder(); 3781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.add("a", (String) null); 3801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("expected NullPointerException"); // COV_NF_LINE 3811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 3821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder = this.<String>builder(); 3851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.add("a", "b", (String) null); 3871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("expected NullPointerException"); // COV_NF_LINE 3881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 3891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder = this.<String>builder(); 3921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.add("a", "b", "c", null); 3941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("expected NullPointerException"); // COV_NF_LINE 3951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 3961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder = this.<String>builder(); 3991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.add("a", "b", null, "c"); 4011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("expected NullPointerException"); // COV_NF_LINE 4021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 4031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderAddAllHandlesNullsCorrectly() { 4071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSet.Builder<String> builder = this.<String>builder(); 4081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.addAll((Iterable<String>) null); 4101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("expected NullPointerException"); // COV_NF_LINE 4111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 4121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.addAll((Iterator<String>) null); 4161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("expected NullPointerException"); // COV_NF_LINE 4171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 4181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder = this.<String>builder(); 4211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> listWithNulls = asList("a", null, "b"); 4221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.addAll(listWithNulls); 4241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("expected NullPointerException"); // COV_NF_LINE 4251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 4261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterableWithNulls = MinimalIterable.of("a", null, "b"); 4291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.addAll(iterableWithNulls); 4311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("expected NullPointerException"); // COV_NF_LINE 4321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 4331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 4371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Verify thread safety by using a collection whose size() may be inconsistent 4381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * with the actual number of elements. Tests using this method might fail in 4391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * GWT because the GWT emulations might count on size() during copy. It is 4401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * safe to do so in GWT because javascript is single-threaded. 4411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 4421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // TODO(benyu): turn this into a test once all copyOf(Collection) are 4431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // thread-safe 4441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("GWT is single threaded") 4451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert void verifyThreadSafe() { 4461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> sample = Lists.newArrayList("a", "b", "c"); 4471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int delta : new int[] {-1, 0, 1}) { 4481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 0; i < sample.size(); i++) { 4491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> misleading = Helpers.misleadingSizeCollection(delta); 4501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> expected = sample.subList(0, i); 4511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert misleading.addAll(expected); 4521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("delta: " + delta + " sample size: " + i, 4531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Sets.newHashSet(expected), copyOf(misleading)); 4541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 458