/* * Copyright (C) 2007 The Guava Authors * * Licensed 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 com.google.common.collect; import static java.util.Arrays.asList; import static org.junit.contrib.truth.Truth.ASSERT; import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; import com.google.common.testing.NullPointerTester; import junit.framework.TestCase; import java.util.Collection; import java.util.Collections; /** * Common tests for a {@code Collection}. * * @author Kevin Bourrillion * @author Mike Bostock */ @GwtCompatible(emulated = true) public abstract class AbstractCollectionTest extends TestCase { protected abstract Collection create(); protected Collection c; // public for GWT @Override public void setUp() throws Exception { super.setUp(); c = create(); } public void testIsEmptyYes() { assertTrue(c.isEmpty()); } public void testIsEmptyNo() { c.add("a"); assertFalse(c.isEmpty()); } public void testAddOne() { assertTrue(c.add("a")); assertContents("a"); } public void testAddSeveralTimes() { assertTrue(c.add("a")); assertTrue(c.add("b")); c.add("a"); c.add("b"); assertTrue(c.contains("a")); assertTrue(c.contains("b")); } public void testRemoveOneFromNoneStandard() { assertFalse(c.remove("a")); assertContents(); } public void testRemoveOneFromOneStandard() { c.add("a"); assertTrue(c.remove("a")); assertContents(); } public void testContainsNo() { c.add("a"); assertFalse(c.contains("b")); } public void testContainsOne() { c.add("a"); assertTrue(c.contains(new String("a"))); } public void testContainsAfterRemoval() { c.add("a"); c.remove("a"); assertFalse(c.contains("a")); } public void testContainsAllVacuous() { assertTrue(c.containsAll(Collections.emptySet())); } public void testRemoveAllVacuous() { assertFalse(c.removeAll(Collections.emptySet())); } public void testRetainAllVacuous() { assertFalse(c.retainAll(asList("a"))); assertContents(); } public void testRetainAllOfNothing() { c.add("a"); assertTrue(c.retainAll(Collections.emptySet())); assertContents(); } public void testClearNothing() { c.clear(); assertContents(); } public void testClear() { c = createSample(); c.clear(); assertContents(); } public void testEqualsNo() { c.add("a"); Collection c2 = create(); c2.add("b"); assertFalse(c.equals(c2)); } public void testEqualsYes() { c.add("a"); c.add("b"); c.add("b"); Collection c2 = create(); c2.add("a"); c2.add("b"); c2.add("b"); assertEquals(c, c2); } public void testEqualsSelf() { c.add("a"); c.add("b"); c.add("b"); assertEquals(c, c); } public void testEqualsTricky() { c.add("a"); c.add("a"); Collection c2 = create(); c2.add("a"); c2.add("a"); c2.add("b"); c2.add("b"); c2.remove("b"); c2.remove("b"); assertEquals(c, c2); } public void testEqualsPartial() { c.add("a"); c.add("b"); Collection c2 = create(); c2.add("a"); c2.add("c"); assertFalse(c.equals(c2)); Collection c3 = create(); c2.add("b"); c2.add("c"); assertFalse(c2.equals(c3)); } public void testEqualsDifferentTypes() { c.add("a"); assertFalse(c.equals("a")); } public void testToArrayOne() { c.add("a"); String[] array = new String[3]; assertSame(array, c.toArray(array)); assertEquals("a", array[0]); assertNull(array[1]); } @GwtIncompatible("NullPointerTester") public void testNullPointerExceptions() throws Exception { NullPointerTester tester = new NullPointerTester(); tester.testAllPublicInstanceMethods(c); } protected Collection createSample() { Collection c = create(); c.add("a"); c.add("b"); c.add("b"); c.add("c"); c.add("d"); c.add("d"); c.add("d"); return c; } protected void assertContents(String... expected) { ASSERT.that(c).hasContentsAnyOrder(expected); } }