001/* 002 * Copyright (C) 2013 The Guava Authors 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017package com.google.common.collect.testing.google; 018 019import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD; 020import static java.util.Arrays.asList; 021import static java.util.Collections.emptySet; 022import static org.junit.Assert.assertThrows; 023 024import com.google.common.annotations.GwtCompatible; 025import com.google.common.collect.testing.features.CollectionFeature; 026 027/** 028 * Tests for {@code Multiset.add}. 029 * 030 * @author Jared Levy 031 */ 032@GwtCompatible 033public class MultisetAddTester<E> extends AbstractMultisetTester<E> { 034 @CollectionFeature.Require(absent = SUPPORTS_ADD) 035 public void testAddUnsupported() { 036 assertThrows(UnsupportedOperationException.class, () -> getMultiset().add(e0())); 037 } 038 039 @CollectionFeature.Require(SUPPORTS_ADD) 040 public void testAddMeansAddOne() { 041 int originalCount = getMultiset().count(e0()); 042 assertTrue(getMultiset().add(e0())); 043 assertEquals(originalCount + 1, getMultiset().count(e0())); 044 } 045 046 @CollectionFeature.Require(SUPPORTS_ADD) 047 public void testAddOccurrencesZero() { 048 int originalCount = getMultiset().count(e0()); 049 assertEquals("old count", originalCount, getMultiset().add(e0(), 0)); 050 expectUnchanged(); 051 } 052 053 @CollectionFeature.Require(SUPPORTS_ADD) 054 public void testAddOccurrences() { 055 int originalCount = getMultiset().count(e0()); 056 assertEquals("old count", originalCount, getMultiset().add(e0(), 2)); 057 assertEquals("old count", originalCount + 2, getMultiset().count(e0())); 058 } 059 060 @CollectionFeature.Require(SUPPORTS_ADD) 061 public void testAddSeveralTimes() { 062 int originalCount = getMultiset().count(e0()); 063 assertEquals(originalCount, getMultiset().add(e0(), 2)); 064 assertTrue(getMultiset().add(e0())); 065 assertEquals(originalCount + 3, getMultiset().add(e0(), 1)); 066 assertEquals(originalCount + 4, getMultiset().count(e0())); 067 } 068 069 @CollectionFeature.Require(absent = SUPPORTS_ADD) 070 public void testAddOccurrences_unsupported() { 071 assertThrows(UnsupportedOperationException.class, () -> getMultiset().add(e0(), 2)); 072 } 073 074 @CollectionFeature.Require(SUPPORTS_ADD) 075 public void testAddOccurrencesNegative() { 076 assertThrows(IllegalArgumentException.class, () -> getMultiset().add(e0(), -1)); 077 } 078 079 @CollectionFeature.Require(SUPPORTS_ADD) 080 public void testAddTooMany() { 081 getMultiset().add(e3(), Integer.MAX_VALUE); 082 assertThrows(IllegalArgumentException.class, () -> getMultiset().add(e3())); 083 assertEquals(Integer.MAX_VALUE, getMultiset().count(e3())); 084 assertEquals(Integer.MAX_VALUE, getMultiset().size()); 085 } 086 087 @CollectionFeature.Require(SUPPORTS_ADD) 088 public void testAddAll_emptySet() { 089 assertFalse(getMultiset().addAll(emptySet())); 090 expectUnchanged(); 091 } 092 093 @CollectionFeature.Require(SUPPORTS_ADD) 094 public void testAddAll_emptyMultiset() { 095 assertFalse(getMultiset().addAll(getSubjectGenerator().create())); 096 expectUnchanged(); 097 } 098 099 @CollectionFeature.Require(SUPPORTS_ADD) 100 public void testAddAll_nonEmptyList() { 101 assertTrue(getMultiset().addAll(asList(e3(), e4(), e3()))); 102 expectAdded(e3(), e4(), e3()); 103 } 104 105 @CollectionFeature.Require(SUPPORTS_ADD) 106 public void testAddAll_nonEmptyMultiset() { 107 assertTrue(getMultiset().addAll(getSubjectGenerator().create(e3(), e4(), e3()))); 108 expectAdded(e3(), e4(), e3()); 109 } 110}