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}