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;
020
021import com.google.common.annotations.GwtCompatible;
022import com.google.common.collect.testing.features.CollectionFeature;
023import java.util.Arrays;
024import java.util.Collections;
025
026/**
027 * Tests for {@code Multiset.add}.
028 *
029 * @author Jared Levy
030 */
031@GwtCompatible
032public class MultisetAddTester<E> extends AbstractMultisetTester<E> {
033  @CollectionFeature.Require(absent = SUPPORTS_ADD)
034  public void testAddUnsupported() {
035    try {
036      getMultiset().add(e0());
037      fail("Expected UnsupportedOperationException");
038    } catch (UnsupportedOperationException expected) {
039    }
040  }
041
042  @CollectionFeature.Require(SUPPORTS_ADD)
043  public void testAddMeansAddOne() {
044    int originalCount = getMultiset().count(e0());
045    assertTrue(getMultiset().add(e0()));
046    assertEquals(originalCount + 1, getMultiset().count(e0()));
047  }
048
049  @CollectionFeature.Require(SUPPORTS_ADD)
050  public void testAddOccurrencesZero() {
051    int originalCount = getMultiset().count(e0());
052    assertEquals("old count", originalCount, getMultiset().add(e0(), 0));
053    expectUnchanged();
054  }
055
056  @CollectionFeature.Require(SUPPORTS_ADD)
057  public void testAddOccurrences() {
058    int originalCount = getMultiset().count(e0());
059    assertEquals("old count", originalCount, getMultiset().add(e0(), 2));
060    assertEquals("old count", originalCount + 2, getMultiset().count(e0()));
061  }
062
063  @CollectionFeature.Require(SUPPORTS_ADD)
064  public void testAddSeveralTimes() {
065    int originalCount = getMultiset().count(e0());
066    assertEquals(originalCount, getMultiset().add(e0(), 2));
067    assertTrue(getMultiset().add(e0()));
068    assertEquals(originalCount + 3, getMultiset().add(e0(), 1));
069    assertEquals(originalCount + 4, getMultiset().count(e0()));
070  }
071
072  @CollectionFeature.Require(absent = SUPPORTS_ADD)
073  public void testAddOccurrences_unsupported() {
074    try {
075      getMultiset().add(e0(), 2);
076      fail("unsupported multiset.add(E, int) didn't throw exception");
077    } catch (UnsupportedOperationException required) {
078    }
079  }
080
081  @CollectionFeature.Require(SUPPORTS_ADD)
082  public void testAddOccurrencesNegative() {
083    try {
084      getMultiset().add(e0(), -1);
085      fail("multiset.add(E, -1) didn't throw an exception");
086    } catch (IllegalArgumentException required) {
087    }
088  }
089
090  @CollectionFeature.Require(SUPPORTS_ADD)
091  public void testAddTooMany() {
092    getMultiset().add(e3(), Integer.MAX_VALUE);
093    try {
094      getMultiset().add(e3());
095      fail();
096    } catch (IllegalArgumentException expected) {
097    }
098    assertEquals(Integer.MAX_VALUE, getMultiset().count(e3()));
099    assertEquals(Integer.MAX_VALUE, getMultiset().size());
100  }
101
102  @CollectionFeature.Require(SUPPORTS_ADD)
103  public void testAddAll_emptySet() {
104    assertFalse(getMultiset().addAll(Collections.<E>emptySet()));
105    expectUnchanged();
106  }
107
108  @CollectionFeature.Require(SUPPORTS_ADD)
109  public void testAddAll_emptyMultiset() {
110    assertFalse(getMultiset().addAll(getSubjectGenerator().create()));
111    expectUnchanged();
112  }
113
114  @CollectionFeature.Require(SUPPORTS_ADD)
115  public void testAddAll_nonEmptyList() {
116    assertTrue(getMultiset().addAll(Arrays.asList(e3(), e4(), e3())));
117    expectAdded(e3(), e4(), e3());
118  }
119
120  @CollectionFeature.Require(SUPPORTS_ADD)
121  public void testAddAll_nonEmptyMultiset() {
122    assertTrue(getMultiset().addAll(getSubjectGenerator().create(e3(), e4(), e3())));
123    expectAdded(e3(), e4(), e3());
124  }
125}