11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/*
21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2009 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 com.google.common.collect.testing.SetTestSuiteBuilder;
201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.TestStringSetGenerator;
211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionFeature;
221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionSize;
231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.google.MultisetTestSuiteBuilder;
241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.google.TestStringMultisetGenerator;
251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.Test;
271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestSuite;
281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Arrays;
301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collection;
311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collections;
321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Iterator;
331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Set;
341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/**
361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Tests for {@link ForwardingMultiset}.
371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Hayward Chan
391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Louis Wasserman
401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */
411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class ForwardingMultisetTest extends ForwardingTestCase {
421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  static final class StandardImplForwardingMultiset<T>
441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      extends ForwardingMultiset<T> {
451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    private final Multiset<T> backingCollection;
461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    StandardImplForwardingMultiset(Multiset<T> backingMultiset) {
481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      this.backingCollection = backingMultiset;
491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override protected Multiset<T> delegate() {
521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return backingCollection;
531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public boolean addAll(Collection<? extends T> collection) {
561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return standardAddAll(collection);
571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public boolean add(T element) {
601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return standardAdd(element);
611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public void clear() {
641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      standardClear();
651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public int count(Object element) {
681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return standardCount(element);
691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public boolean contains(Object object) {
721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return standardContains(object);
731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public boolean containsAll(Collection<?> collection) {
761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return standardContainsAll(collection);
771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public boolean remove(Object object) {
801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return standardRemove(object);
811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public boolean removeAll(Collection<?> collection) {
841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return standardRemoveAll(collection);
851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public boolean retainAll(Collection<?> collection) {
881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return standardRetainAll(collection);
891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public Object[] toArray() {
921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return standardToArray();
931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public <T> T[] toArray(T[] array) {
961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return standardToArray(array);
971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public String toString() {
1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return standardToString();
1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public boolean equals(Object object) {
1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return standardEquals(object);
1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public int hashCode() {
1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return standardHashCode();
1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public boolean setCount(T element, int oldCount, int newCount) {
1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return standardSetCount(element, oldCount, newCount);
1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public int setCount(T element, int count) {
1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return standardSetCount(element, count);
1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public Set<T> elementSet() {
1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return new StandardElementSet();
1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public Iterator<T> iterator() {
1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return standardIterator();
1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public boolean isEmpty() {
1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return standardIsEmpty();
1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public int size() {
1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return standardSize();
1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  private static final Collection<String> EMPTY_COLLECTION =
1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Collections.emptyList();
1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  protected Multiset<String> forward;
1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static Test suite() {
1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    TestSuite suite = new TestSuite();
1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    suite.addTestSuite(ForwardingMultisetTest.class);
1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    suite.addTest(
1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        MultisetTestSuiteBuilder.using(new TestStringMultisetGenerator() {
1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          @Override protected Multiset<String> create(String[] elements) {
1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            return new StandardImplForwardingMultiset<String>(
1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                LinkedHashMultiset.create(Arrays.asList(elements)));
1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          }
1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        }).named("ForwardingMultiset[LinkedHashMultiset] with standard "
1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            + "implementations").withFeatures(CollectionSize.ANY,
1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            CollectionFeature.ALLOWS_NULL_VALUES,
1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            CollectionFeature.GENERAL_PURPOSE).createTestSuite());
1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    suite.addTest(
1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        MultisetTestSuiteBuilder.using(new TestStringMultisetGenerator() {
1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          @Override protected Multiset<String> create(String[] elements) {
1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            return new StandardImplForwardingMultiset<String>(
1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                ImmutableMultiset.copyOf(elements));
1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          }
1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        }).named("ForwardingMultiset[ImmutableMultiset] with standard "
1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            + "implementations")
1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            .withFeatures(CollectionSize.ANY,
1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                CollectionFeature.ALLOWS_NULL_QUERIES)
1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            .createTestSuite());
1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      /**
1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert       * Returns a Multiset that throws an exception on any attempt to use a
1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert       * method not specifically authorized by the elementSet() or hashCode()
1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert       * docs.
1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert       */
1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      @Override protected Set<String> create(String[] elements) {
1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        final Multiset<String> inner =
1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            LinkedHashMultiset.create(Arrays.asList(elements));
1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        return new ForwardingMultiset<String>() {
1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          @Override protected Multiset<String> delegate() {
1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            return inner;
1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          }
1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          @Override public Set<String> elementSet() {
1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            return new StandardElementSet();
1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          }
1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          @Override public int add(String element, int occurrences) {
1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            throw new UnsupportedOperationException();
1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          }
1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          @Override public Set<Entry<String>> entrySet() {
1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            final Set<Entry<String>> backingSet = super.entrySet();
1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            return new ForwardingSet<Entry<String>>() {
1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              @Override protected Set<Entry<String>> delegate() {
1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                return backingSet;
1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              }
1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              @Override public boolean add(Entry<String> element) {
1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                throw new UnsupportedOperationException();
1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              }
1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              @Override public boolean addAll(
2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                  Collection<? extends Entry<String>> collection) {
2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                throw new UnsupportedOperationException();
2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              }
2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              @Override public void clear() {
2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                throw new UnsupportedOperationException();
2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              }
2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              @Override public boolean contains(Object object) {
2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                throw new UnsupportedOperationException();
2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              }
2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              @Override public boolean containsAll(Collection<?> collection) {
2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                throw new UnsupportedOperationException();
2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              }
2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              @Override public boolean isEmpty() {
2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                throw new UnsupportedOperationException();
2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              }
2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              @Override public boolean remove(Object object) {
2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                throw new UnsupportedOperationException();
2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              }
2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              @Override public boolean removeAll(Collection<?> collection) {
2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                throw new UnsupportedOperationException();
2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              }
2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              @Override public boolean retainAll(Collection<?> collection) {
2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                throw new UnsupportedOperationException();
2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              }
2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            };
2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          }
2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          @Override public boolean equals(Object object) {
2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            throw new UnsupportedOperationException();
2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          }
2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          @Override public boolean remove(Object element) {
2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            throw new UnsupportedOperationException();
2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          }
2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          @Override public boolean setCount(
2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              String element, int oldCount, int newCount) {
2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            throw new UnsupportedOperationException();
2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          }
2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          @Override public int setCount(String element, int count) {
2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            throw new UnsupportedOperationException();
2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          }
2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          @Override public boolean add(String element) {
2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            throw new UnsupportedOperationException();
2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          }
2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          @Override public boolean addAll(
2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              Collection<? extends String> collection) {
2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            throw new UnsupportedOperationException();
2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          }
2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          @Override public Iterator<String> iterator() {
2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            throw new UnsupportedOperationException();
2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          }
2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          @Override public boolean removeAll(Collection<?> collection) {
2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            throw new UnsupportedOperationException();
2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          }
2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          @Override public boolean retainAll(Collection<?> collection) {
2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            throw new UnsupportedOperationException();
2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          }
2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          @Override public int size() {
2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            throw new UnsupportedOperationException();
2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          }
2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        }.elementSet();
2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      }
2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }).named("standardElementSet tripwire").withFeatures(CollectionSize.ANY,
2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        CollectionFeature.ALLOWS_NULL_VALUES,
2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        CollectionFeature.REMOVE_OPERATIONS).createTestSuite());
2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return suite;
2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Override public void setUp() throws Exception {
2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    super.setUp();
2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    /*
2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     * Class parameters must be raw, so we can't create a proxy with generic
2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     * type arguments. The created proxy only records calls and returns null, so
2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     * the type is irrelevant at runtime.
2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     */
2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @SuppressWarnings("unchecked")
2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    final Multiset<String> multiset = createProxyInstance(Multiset.class);
2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    forward = new ForwardingMultiset<String>() {
2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      @Override protected Multiset<String> delegate() {
2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        return multiset;
2791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      }
2801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    };
2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testAdd_T() {
2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    forward().add("asdf");
2851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("[add(Object)]", getCalls());
2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testAddAll_Collection() {
2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    forward().addAll(EMPTY_COLLECTION);
2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("[addAll(Collection)]", getCalls());
2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testClear() {
2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    forward().clear();
2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("[clear]", getCalls());
2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testContains_Object() {
2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    forward().contains(null);
3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("[contains(Object)]", getCalls());
3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testContainsAll_Collection() {
3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    forward().containsAll(EMPTY_COLLECTION);
3051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("[containsAll(Collection)]", getCalls());
3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIsEmpty() {
3091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    forward().isEmpty();
3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("[isEmpty]", getCalls());
3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIterator() {
3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    forward().iterator();
3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("[iterator]", getCalls());
3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testRemove_Object() {
3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    forward().remove(null);
3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("[remove(Object)]", getCalls());
3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testRemoveAll_Collection() {
3241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    forward().removeAll(EMPTY_COLLECTION);
3251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("[removeAll(Collection)]", getCalls());
3261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testRetainAll_Collection() {
3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    forward().retainAll(EMPTY_COLLECTION);
3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("[retainAll(Collection)]", getCalls());
3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testSize() {
3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    forward().size();
3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("[size]", getCalls());
3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testToArray() {
3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    forward().toArray();
3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("[toArray]", getCalls());
3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testToArray_TArray() {
3441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    forward().toArray(new String[0]);
3451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("[toArray(Object[])]", getCalls());
3461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testToString() {
3491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    forward().toString();
3501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("[toString]", getCalls());
3511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testEquals_Object() {
3541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    forward().equals("asdf");
3551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("[equals(Object)]", getCalls());
3561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testHashCode() {
3591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    forward().hashCode();
3601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("[hashCode]", getCalls());
3611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCount_Object() {
3641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    forward().count(null);
3651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("[count(Object)]", getCalls());
3661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testAdd_Object_int() {
3691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    forward().add("asd", 23);
3701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("[add(Object,int)]", getCalls());
3711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testRemove_Object_int() {
3741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    forward().remove("asd", 23);
3751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("[remove(Object,int)]", getCalls());
3761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testSetCount_Object_int() {
3791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    forward().setCount("asdf", 233);
3801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("[setCount(Object,int)]", getCalls());
3811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testSetCount_Object_oldCount_newCount() {
3841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    forward().setCount("asdf", 4552, 1233);
3851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("[setCount(Object,int,int)]", getCalls());
3861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testElementSet() {
3891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    forward().elementSet();
3901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("[elementSet]", getCalls());
3911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testEntrySet() {
3941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    forward().entrySet();
3951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("[entrySet]", getCalls());
3961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  protected Multiset<String> forward() {
3991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return forward;
4001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
4011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert}
402