diff options
Diffstat (limited to 'guava-testlib/src/com/google/common/collect')
196 files changed, 1023 insertions, 7559 deletions
diff --git a/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTestSuiteBuilder.java index e9aac95..32bc3fb 100644 --- a/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTestSuiteBuilder.java @@ -28,7 +28,6 @@ import com.google.common.collect.testing.testers.CollectionIteratorTester; import com.google.common.collect.testing.testers.CollectionRemoveAllTester; import com.google.common.collect.testing.testers.CollectionRemoveTester; import com.google.common.collect.testing.testers.CollectionRetainAllTester; -import com.google.common.collect.testing.testers.CollectionSerializationTester; import com.google.common.collect.testing.testers.CollectionSizeTester; import com.google.common.collect.testing.testers.CollectionToArrayTester; import com.google.common.collect.testing.testers.CollectionToStringTester; @@ -65,15 +64,13 @@ public abstract class AbstractCollectionTestSuiteBuilder< CollectionRemoveAllTester.class, CollectionRemoveTester.class, CollectionRetainAllTester.class, - CollectionSerializationTester.class, CollectionSizeTester.class, CollectionToArrayTester.class, CollectionToStringTester.class ); } - @Override - protected List<TestSuite> createDerivedSuites(FeatureSpecificTestSuiteBuilder< + @Override List<TestSuite> createDerivedSuites(FeatureSpecificTestSuiteBuilder< ?, ? extends OneSizeTestContainerGenerator<Collection<E>, E>> parentBuilder) { DerivedIteratorTestSuiteBuilder<?> iteratorTestSuiteBuilder = diff --git a/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTester.java b/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTester.java index 1ddaf93..f1c7688 100644 --- a/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTester.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; - import java.util.Collection; /** @@ -29,7 +27,6 @@ import java.util.Collection; * * @author Kevin Bourrillion */ -@GwtCompatible public abstract class AbstractCollectionTester<E> extends AbstractContainerTester<Collection<E>, E> { diff --git a/guava-testlib/src/com/google/common/collect/testing/AbstractContainerTester.java b/guava-testlib/src/com/google/common/collect/testing/AbstractContainerTester.java index e79ee5f..fb95223 100644 --- a/guava-testlib/src/com/google/common/collect/testing/AbstractContainerTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/AbstractContainerTester.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; - import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -35,7 +33,6 @@ import java.util.List; * * @author George van den Driessche */ -@GwtCompatible public abstract class AbstractContainerTester<C, E> extends AbstractTester<OneSizeTestContainerGenerator<C, E>> { protected SampleElements<E> samples; @@ -113,7 +110,7 @@ public abstract class AbstractContainerTester<C, E> } protected void expectUnchanged() { - expectContents(getOrderedElements()); + expectContents(getSampleElements()); } /** @@ -124,7 +121,7 @@ public abstract class AbstractContainerTester<C, E> * of each given element has increased by one since the test collection was * created, and the number of occurrences of all other elements has not * changed. - * + * * <p>Note: This means that a test like the following will fail if * {@code collection} is a {@code Set}: * @@ -173,12 +170,6 @@ public abstract class AbstractContainerTester<C, E> return array; } - protected E[] createOrderedArray() { - E[] array = getSubjectGenerator().createArray(getNumElements()); - getOrderedElements().toArray(array); - return array; - } - public static class ArrayWithDuplicate<E> { public final E[] elements; public final E duplicate; diff --git a/guava-testlib/src/com/google/common/collect/testing/AbstractIteratorTester.java b/guava-testlib/src/com/google/common/collect/testing/AbstractIteratorTester.java index d8e52ec..385b92a 100644 --- a/guava-testlib/src/com/google/common/collect/testing/AbstractIteratorTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/AbstractIteratorTester.java @@ -19,8 +19,6 @@ package com.google.common.collect.testing; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.fail; -import com.google.common.annotations.GwtCompatible; - import junit.framework.AssertionFailedError; import java.util.ArrayList; @@ -47,7 +45,6 @@ import java.util.Stack; * @author Kevin Bourrillion * @author Chris Povirk */ -@GwtCompatible abstract class AbstractIteratorTester<E, I extends Iterator<E>> { private boolean whenNextThrowsExceptionStopTestingCallsToRemove; private boolean whenAddThrowsExceptionStopTesting; @@ -425,7 +422,7 @@ abstract class AbstractIteratorTester<E, I extends Iterator<E>> { private static List<Object> subListCopy(Object[] source, int size) { final Object[] copy = new Object[size]; - System.arraycopy(source, 0, copy, 0, size); + Platform.unsafeArrayCopy(source, 0, copy, 0, size); return Arrays.asList(copy); } diff --git a/guava-testlib/src/com/google/common/collect/testing/AbstractMapTester.java b/guava-testlib/src/com/google/common/collect/testing/AbstractMapTester.java index b86c61a..c8c3169 100644 --- a/guava-testlib/src/com/google/common/collect/testing/AbstractMapTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/AbstractMapTester.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; - import java.util.Collection; import java.util.Iterator; import java.util.List; @@ -38,7 +36,6 @@ import java.util.Map.Entry; * * @author George van den Driessche */ -@GwtCompatible public abstract class AbstractMapTester<K, V> extends AbstractContainerTester<Map<K, V>, Map.Entry<K, V>> { protected Map<K, V> getMap() { @@ -175,16 +172,15 @@ public abstract class AbstractMapTester<K, V> extends for (Entry<K, V> entry : entries) { assertFalse("Should not contain entry " + entry, actualContents().contains(entry)); - assertFalse("Should not contain key " + entry.getKey() + " mapped to" - + " value " + entry.getValue(), - equal(getMap().get(entry.getKey()), entry.getValue())); + assertFalse("Should not contain key " + entry.getKey(), + getMap().containsKey(entry.getKey())); + assertFalse("Should not contain value " + entry.getValue(), + getMap().containsValue(entry.getValue())); + assertNull("Should not return a mapping for key " + entry.getKey(), + getMap().get(entry.getKey())); } } - private static boolean equal(Object a, Object b) { - return a == b || (a != null && a.equals(b)); - } - // This one-liner saves us from some ugly casts protected Entry<K, V> entry(K key, V value) { return Helpers.mapEntry(key, value); diff --git a/guava-testlib/src/com/google/common/collect/testing/AbstractTester.java b/guava-testlib/src/com/google/common/collect/testing/AbstractTester.java index e1c8a6f..c141fb4 100644 --- a/guava-testlib/src/com/google/common/collect/testing/AbstractTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/AbstractTester.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; - import junit.framework.TestCase; /** @@ -32,7 +30,6 @@ import junit.framework.TestCase; * * @author George van den Driessche */ -@GwtCompatible public class AbstractTester<G> extends TestCase { private G subjectGenerator; private String suiteName; diff --git a/guava-testlib/src/com/google/common/collect/testing/AnEnum.java b/guava-testlib/src/com/google/common/collect/testing/AnEnum.java index 0c9b98e..3fc1ae3 100644 --- a/guava-testlib/src/com/google/common/collect/testing/AnEnum.java +++ b/guava-testlib/src/com/google/common/collect/testing/AnEnum.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; - /** * A sample enumerated type we use for testing. * @@ -25,7 +23,6 @@ import com.google.common.annotations.GwtCompatible; * * @author Kevin Bourrillion */ -@GwtCompatible public enum AnEnum { A, B, C, D, E, F } diff --git a/guava-testlib/src/com/google/common/collect/testing/BaseComparable.java b/guava-testlib/src/com/google/common/collect/testing/BaseComparable.java index 7ed604d..93f449c 100644 --- a/guava-testlib/src/com/google/common/collect/testing/BaseComparable.java +++ b/guava-testlib/src/com/google/common/collect/testing/BaseComparable.java @@ -16,16 +16,13 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; - import java.io.Serializable; /** * Simple base class to verify that we handle generics correctly. - * + * * @author Kevin Bourrillion */ -@GwtCompatible public class BaseComparable implements Comparable<BaseComparable>, Serializable { private final String s; diff --git a/guava-testlib/src/com/google/common/collect/testing/CollectionTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/CollectionTestSuiteBuilder.java index d4143b5..e05a700 100644 --- a/guava-testlib/src/com/google/common/collect/testing/CollectionTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/CollectionTestSuiteBuilder.java @@ -16,25 +16,12 @@ package com.google.common.collect.testing; -import com.google.common.collect.testing.features.CollectionFeature; -import com.google.common.collect.testing.features.Feature; -import com.google.common.testing.SerializableTester; - -import junit.framework.TestSuite; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - /** * Concrete instantiation of {@link AbstractCollectionTestSuiteBuilder} for * testing collections that do not have a more specific tester like * {@link ListTestSuiteBuilder} or {@link SetTestSuiteBuilder}. * * @author Chris Povirk - * @author Louis Wasserman */ public class CollectionTestSuiteBuilder<E> extends AbstractCollectionTestSuiteBuilder< @@ -43,60 +30,4 @@ public class CollectionTestSuiteBuilder<E> TestCollectionGenerator<E> generator) { return new CollectionTestSuiteBuilder<E>().usingGenerator(generator); } - - @Override - protected - List<TestSuite> - createDerivedSuites( - FeatureSpecificTestSuiteBuilder< - ?, ? extends OneSizeTestContainerGenerator<Collection<E>, E>> parentBuilder) { - List<TestSuite> derivedSuites = new ArrayList<TestSuite>( - super.createDerivedSuites(parentBuilder)); - - if (parentBuilder.getFeatures().contains(CollectionFeature.SERIALIZABLE)) { - derivedSuites.add(CollectionTestSuiteBuilder - .using(new ReserializedCollectionGenerator<E>(parentBuilder.getSubjectGenerator())) - .named(getName() + " reserialized") - .withFeatures(computeReserializedCollectionFeatures(parentBuilder.getFeatures())) - .suppressing(parentBuilder.getSuppressedTests()) - .createTestSuite()); - } - return derivedSuites; - } - - static class ReserializedCollectionGenerator<E> implements TestCollectionGenerator<E> { - final OneSizeTestContainerGenerator<Collection<E>, E> gen; - - private ReserializedCollectionGenerator(OneSizeTestContainerGenerator<Collection<E>, E> gen) { - this.gen = gen; - } - - @Override - public SampleElements<E> samples() { - return gen.samples(); - } - - @Override - public Collection<E> create(Object... elements) { - return SerializableTester.reserialize(gen.create(elements)); - } - - @Override - public E[] createArray(int length) { - return gen.createArray(length); - } - - @Override - public Iterable<E> order(List<E> insertionOrder) { - return gen.order(insertionOrder); - } - } - - private static Set<Feature<?>> computeReserializedCollectionFeatures(Set<Feature<?>> features) { - Set<Feature<?>> derivedFeatures = new HashSet<Feature<?>>(); - derivedFeatures.addAll(features); - derivedFeatures.remove(CollectionFeature.SERIALIZABLE); - derivedFeatures.remove(CollectionFeature.SERIALIZABLE_INCLUDING_VIEWS); - return derivedFeatures; - } } diff --git a/guava-testlib/src/com/google/common/collect/testing/ConcurrentMapInterfaceTest.java b/guava-testlib/src/com/google/common/collect/testing/ConcurrentMapInterfaceTest.java index 55db55c..4ad4230 100644 --- a/guava-testlib/src/com/google/common/collect/testing/ConcurrentMapInterfaceTest.java +++ b/guava-testlib/src/com/google/common/collect/testing/ConcurrentMapInterfaceTest.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; - import java.util.concurrent.ConcurrentMap; /** @@ -33,7 +31,6 @@ import java.util.concurrent.ConcurrentMap; * * @author Jared Levy */ -@GwtCompatible public abstract class ConcurrentMapInterfaceTest<K, V> extends MapInterfaceTest<K, V> { diff --git a/guava-testlib/src/com/google/common/collect/testing/DerivedCollectionGenerators.java b/guava-testlib/src/com/google/common/collect/testing/DerivedCollectionGenerators.java deleted file mode 100644 index e177f9f..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/DerivedCollectionGenerators.java +++ /dev/null @@ -1,401 +0,0 @@ -/* - * Copyright (C) 2008 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.testing; - -import static com.google.common.collect.testing.Helpers.castOrCopyToList; -import static com.google.common.collect.testing.Helpers.equal; -import static com.google.common.collect.testing.Helpers.mapEntry; -import static java.util.Collections.sort; - -import com.google.common.annotations.GwtCompatible; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import java.util.SortedMap; - -/** - * Derived suite generators, split out of the suite builders so that they are available to GWT. - * - * @author George van den Driessche - */ -@GwtCompatible -public final class DerivedCollectionGenerators { - public static class MapEntrySetGenerator<K, V> - implements TestSetGenerator<Map.Entry<K, V>>, DerivedGenerator { - private final OneSizeTestContainerGenerator<Map<K, V>, Map.Entry<K, V>> - mapGenerator; - - public MapEntrySetGenerator( - OneSizeTestContainerGenerator< - Map<K, V>, Map.Entry<K, V>> mapGenerator) { - this.mapGenerator = mapGenerator; - } - - @Override - public SampleElements<Map.Entry<K, V>> samples() { - return mapGenerator.samples(); - } - - @Override - public Set<Map.Entry<K, V>> create(Object... elements) { - return mapGenerator.create(elements).entrySet(); - } - - @Override - public Map.Entry<K, V>[] createArray(int length) { - return mapGenerator.createArray(length); - } - - @Override - public Iterable<Map.Entry<K, V>> order( - List<Map.Entry<K, V>> insertionOrder) { - return mapGenerator.order(insertionOrder); - } - - public OneSizeTestContainerGenerator<Map<K, V>, Map.Entry<K, V>> getInnerGenerator() { - return mapGenerator; - } - } - - // TODO: investigate some API changes to SampleElements that would tidy up - // parts of the following classes. - - public static class MapKeySetGenerator<K, V> - implements TestSetGenerator<K>, DerivedGenerator { - private final OneSizeTestContainerGenerator<Map<K, V>, Map.Entry<K, V>> - mapGenerator; - private final SampleElements<K> samples; - - public MapKeySetGenerator( - OneSizeTestContainerGenerator<Map<K, V>, Map.Entry<K, V>> - mapGenerator) { - this.mapGenerator = mapGenerator; - final SampleElements<Map.Entry<K, V>> mapSamples = - this.mapGenerator.samples(); - this.samples = new SampleElements<K>( - mapSamples.e0.getKey(), - mapSamples.e1.getKey(), - mapSamples.e2.getKey(), - mapSamples.e3.getKey(), - mapSamples.e4.getKey()); - } - - @Override - public SampleElements<K> samples() { - return samples; - } - - @Override - public Set<K> create(Object... elements) { - @SuppressWarnings("unchecked") - K[] keysArray = (K[]) elements; - - // Start with a suitably shaped collection of entries - Collection<Map.Entry<K, V>> originalEntries = - mapGenerator.getSampleElements(elements.length); - - // Create a copy of that, with the desired value for each key - Collection<Map.Entry<K, V>> entries = - new ArrayList<Entry<K, V>>(elements.length); - int i = 0; - for (Map.Entry<K, V> entry : originalEntries) { - entries.add(Helpers.mapEntry(keysArray[i++], entry.getValue())); - } - - return mapGenerator.create(entries.toArray()).keySet(); - } - - @Override - public K[] createArray(int length) { - // TODO: with appropriate refactoring of OneSizeGenerator, we can perhaps - // tidy this up and get rid of the casts here and in - // MapValueCollectionGenerator. - - return ((TestMapGenerator<K, V>) mapGenerator.getInnerGenerator()) - .createKeyArray(length); - } - - @Override - public Iterable<K> order(List<K> insertionOrder) { - V v = ((TestMapGenerator<K, V>) mapGenerator.getInnerGenerator()).samples().e0.getValue(); - List<Entry<K, V>> entries = new ArrayList<Entry<K, V>>(); - for (K element : insertionOrder) { - entries.add(mapEntry(element, v)); - } - - List<K> keys = new ArrayList<K>(); - for (Entry<K, V> entry : mapGenerator.order(entries)) { - keys.add(entry.getKey()); - } - return keys; - } - - public OneSizeTestContainerGenerator<Map<K, V>, Map.Entry<K, V>> getInnerGenerator() { - return mapGenerator; - } - } - - public static class MapValueCollectionGenerator<K, V> - implements TestCollectionGenerator<V>, DerivedGenerator { - private final OneSizeTestContainerGenerator<Map<K, V>, Map.Entry<K, V>> - mapGenerator; - private final SampleElements<V> samples; - - public MapValueCollectionGenerator( - OneSizeTestContainerGenerator< - Map<K, V>, Map.Entry<K, V>> mapGenerator) { - this.mapGenerator = mapGenerator; - final SampleElements<Map.Entry<K, V>> mapSamples = - this.mapGenerator.samples(); - this.samples = new SampleElements<V>( - mapSamples.e0.getValue(), - mapSamples.e1.getValue(), - mapSamples.e2.getValue(), - mapSamples.e3.getValue(), - mapSamples.e4.getValue()); - } - - @Override - public SampleElements<V> samples() { - return samples; - } - - @Override - public Collection<V> create(Object... elements) { - @SuppressWarnings("unchecked") - V[] valuesArray = (V[]) elements; - - // Start with a suitably shaped collection of entries - Collection<Map.Entry<K, V>> originalEntries = - mapGenerator.getSampleElements(elements.length); - - // Create a copy of that, with the desired value for each value - Collection<Map.Entry<K, V>> entries = - new ArrayList<Entry<K, V>>(elements.length); - int i = 0; - for (Map.Entry<K, V> entry : originalEntries) { - entries.add(Helpers.mapEntry(entry.getKey(), valuesArray[i++])); - } - - return mapGenerator.create(entries.toArray()).values(); - } - - @Override - public V[] createArray(int length) { - //noinspection UnnecessaryLocalVariable - final V[] vs = ((TestMapGenerator<K, V>) mapGenerator.getInnerGenerator()) - .createValueArray(length); - return vs; - } - - @Override - public Iterable<V> order(List<V> insertionOrder) { - final List<Entry<K, V>> orderedEntries = - castOrCopyToList(mapGenerator.order(castOrCopyToList( - mapGenerator.getSampleElements(5)))); - sort(insertionOrder, new Comparator<V>() { - @Override public int compare(V left, V right) { - // The indexes are small enough for the subtraction trick to be safe. - return indexOfEntryWithValue(left) - indexOfEntryWithValue(right); - } - - int indexOfEntryWithValue(V value) { - for (int i = 0; i < orderedEntries.size(); i++) { - if (equal(orderedEntries.get(i).getValue(), value)) { - return i; - } - } - throw new IllegalArgumentException("Map.values generator can order only sample values"); - } - }); - return insertionOrder; - } - - public OneSizeTestContainerGenerator<Map<K, V>, Map.Entry<K, V>> getInnerGenerator() { - return mapGenerator; - } - } - - // TODO(cpovirk): could something like this be used elsewhere, e.g., ReserializedListGenerator? - static class ForwardingTestMapGenerator<K, V> implements TestMapGenerator<K, V> { - TestMapGenerator<K, V> delegate; - - ForwardingTestMapGenerator(TestMapGenerator<K, V> delegate) { - this.delegate = delegate; - } - - @Override - public Iterable<Entry<K, V>> order(List<Entry<K, V>> insertionOrder) { - return delegate.order(insertionOrder); - } - - @Override - public K[] createKeyArray(int length) { - return delegate.createKeyArray(length); - } - - @Override - public V[] createValueArray(int length) { - return delegate.createValueArray(length); - } - - @Override - public SampleElements<Entry<K, V>> samples() { - return delegate.samples(); - } - - @Override - public Map<K, V> create(Object... elements) { - return delegate.create(elements); - } - - @Override - public Entry<K, V>[] createArray(int length) { - return delegate.createArray(length); - } - } - - /** - * Two bounds (from and to) define how to build a subMap. - */ - public enum Bound { - INCLUSIVE, - EXCLUSIVE, - NO_BOUND; - } - - /* - * TODO(cpovirk): surely we can find a less ugly solution than a class that accepts 3 parameters, - * exposes as many getters, does work in the constructor, and has both a superclass and a subclass - */ - public static class SortedMapSubmapTestMapGenerator<K, V> - extends ForwardingTestMapGenerator<K, V> implements TestSortedMapGenerator<K, V> { - final Bound to; - final Bound from; - final K firstInclusive; - final K lastInclusive; - private final Comparator<Entry<K, V>> entryComparator; - - public SortedMapSubmapTestMapGenerator( - TestSortedMapGenerator<K, V> delegate, Bound to, Bound from) { - super(delegate); - this.to = to; - this.from = from; - - SortedMap<K, V> emptyMap = delegate.create(); - this.entryComparator = Helpers.entryComparator(emptyMap.comparator()); - - // derive values for inclusive filtering from the input samples - SampleElements<Entry<K, V>> samples = delegate.samples(); - @SuppressWarnings("unchecked") // no elements are inserted into the array - List<Entry<K, V>> samplesList = Arrays.asList( - samples.e0, samples.e1, samples.e2, samples.e3, samples.e4); - Collections.sort(samplesList, entryComparator); - this.firstInclusive = samplesList.get(0).getKey(); - this.lastInclusive = samplesList.get(samplesList.size() - 1).getKey(); - } - - @Override public SortedMap<K, V> create(Object... entries) { - @SuppressWarnings("unchecked") // map generators must past entry objects - List<Entry<K, V>> normalValues = (List) Arrays.asList(entries); - List<Entry<K, V>> extremeValues = new ArrayList<Entry<K, V>>(); - - // prepare extreme values to be filtered out of view - K firstExclusive = getInnerGenerator().belowSamplesGreater().getKey(); - K lastExclusive = getInnerGenerator().aboveSamplesLesser().getKey(); - if (from != Bound.NO_BOUND) { - extremeValues.add(getInnerGenerator().belowSamplesLesser()); - extremeValues.add(getInnerGenerator().belowSamplesGreater()); - } - if (to != Bound.NO_BOUND) { - extremeValues.add(getInnerGenerator().aboveSamplesLesser()); - extremeValues.add(getInnerGenerator().aboveSamplesGreater()); - } - - // the regular values should be visible after filtering - List<Entry<K, V>> allEntries = new ArrayList<Entry<K, V>>(); - allEntries.addAll(extremeValues); - allEntries.addAll(normalValues); - SortedMap<K, V> map = (SortedMap<K, V>) - delegate.create((Object[]) - allEntries.toArray(new Entry[allEntries.size()])); - - return createSubMap(map, firstExclusive, lastExclusive); - } - - /** - * Calls the smallest subMap overload that filters out the extreme values. This method is - * overridden in NavigableMapTestSuiteBuilder. - */ - SortedMap<K, V> createSubMap(SortedMap<K, V> map, K firstExclusive, K lastExclusive) { - if (from == Bound.NO_BOUND && to == Bound.EXCLUSIVE) { - return map.headMap(lastExclusive); - } else if (from == Bound.INCLUSIVE && to == Bound.NO_BOUND) { - return map.tailMap(firstInclusive); - } else if (from == Bound.INCLUSIVE && to == Bound.EXCLUSIVE) { - return map.subMap(firstInclusive, lastExclusive); - } else { - throw new IllegalArgumentException(); - } - } - - public final Bound getTo() { - return to; - } - - public final Bound getFrom() { - return from; - } - - public final TestSortedMapGenerator<K, V> getInnerGenerator() { - return (TestSortedMapGenerator<K, V>) delegate; - } - - @Override - public Entry<K, V> belowSamplesLesser() { - // should never reach here! - throw new UnsupportedOperationException(); - } - - @Override - public Entry<K, V> belowSamplesGreater() { - // should never reach here! - throw new UnsupportedOperationException(); - } - - @Override - public Entry<K, V> aboveSamplesLesser() { - // should never reach here! - throw new UnsupportedOperationException(); - } - - @Override - public Entry<K, V> aboveSamplesGreater() { - // should never reach here! - throw new UnsupportedOperationException(); - } - } - - private DerivedCollectionGenerators() {} -} diff --git a/guava-testlib/src/com/google/common/collect/testing/DerivedComparable.java b/guava-testlib/src/com/google/common/collect/testing/DerivedComparable.java index 5b0d16f..254bd57 100644 --- a/guava-testlib/src/com/google/common/collect/testing/DerivedComparable.java +++ b/guava-testlib/src/com/google/common/collect/testing/DerivedComparable.java @@ -16,14 +16,11 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; - /** * Simple derived class to verify that we handle generics correctly. - * + * * @author Kevin Bourrillion */ -@GwtCompatible public class DerivedComparable extends BaseComparable { public DerivedComparable(String s) { super(s); diff --git a/guava-testlib/src/com/google/common/collect/testing/DerivedGenerator.java b/guava-testlib/src/com/google/common/collect/testing/DerivedGenerator.java deleted file mode 100644 index d80f5a9..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/DerivedGenerator.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2012 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.testing; - -import com.google.common.annotations.GwtCompatible; - -/** - * A generator that relies on a preexisting generator for most of its work. For example, a derived - * iterator generator may delegate the work of creating the underlying collection to an inner - * collection generator. - * - * <p>{@code GwtTestSuiteGenerator} expects every {@code DerivedIterator} implementation to provide - * a one-arg constructor accepting its inner generator as an argument). This requirement enables it - * to generate source code (since GWT cannot use reflection to generate the suites). - * - * @author Chris Povirk - */ -@GwtCompatible -public interface DerivedGenerator { - TestSubjectGenerator<?> getInnerGenerator(); -} diff --git a/guava-testlib/src/com/google/common/collect/testing/DerivedTestIteratorGenerator.java b/guava-testlib/src/com/google/common/collect/testing/DerivedTestIteratorGenerator.java index cd23173..a1ff114 100644 --- a/guava-testlib/src/com/google/common/collect/testing/DerivedTestIteratorGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/DerivedTestIteratorGenerator.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; - import java.util.Iterator; /** @@ -27,9 +25,8 @@ import java.util.Iterator; * * @author George van den Driessche */ -@GwtCompatible public final class DerivedTestIteratorGenerator<E> - implements TestIteratorGenerator<E>, DerivedGenerator { + implements TestIteratorGenerator<E> { private final TestSubjectGenerator<? extends Iterable<E>> collectionGenerator; @@ -38,8 +35,7 @@ public final class DerivedTestIteratorGenerator<E> this.collectionGenerator = collectionGenerator; } - @Override - public TestSubjectGenerator<? extends Iterable<E>> getInnerGenerator() { + public TestSubjectGenerator<? extends Iterable<E>> getCollectionGenerator() { return collectionGenerator; } diff --git a/guava-testlib/src/com/google/common/collect/testing/ExampleIteratorTester.java b/guava-testlib/src/com/google/common/collect/testing/ExampleIteratorTester.java index 92388e6..6fa6d40 100644 --- a/guava-testlib/src/com/google/common/collect/testing/ExampleIteratorTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/ExampleIteratorTester.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; - /** * A non-empty tester for {@link java.util.Iterator}. * @@ -25,7 +23,6 @@ import com.google.common.annotations.GwtCompatible; * * @author George van den Driessche */ -@GwtCompatible public final class ExampleIteratorTester<E> extends AbstractTester<TestIteratorGenerator<E>> { public void testSomethingAboutIterators() { diff --git a/guava-testlib/src/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilder.java index 8163bb5..3cee7ce 100644 --- a/guava-testlib/src/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilder.java @@ -34,9 +34,10 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Enumeration; +import java.util.HashMap; import java.util.HashSet; -import java.util.LinkedHashSet; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.logging.Logger; @@ -76,7 +77,7 @@ public abstract class FeatureSpecificTestSuiteBuilder< return self(); } - public G getSubjectGenerator() { + protected G getSubjectGenerator() { return subjectGenerator; } @@ -100,25 +101,22 @@ public abstract class FeatureSpecificTestSuiteBuilder< // Features - private Set<Feature<?>> features = new LinkedHashSet<Feature<?>>(); + private Set<Feature<?>> features; /** * Configures this builder to produce tests appropriate for the given - * features. This method may be called more than once to add features - * in multiple groups. + * features. */ public B withFeatures(Feature<?>... features) { return withFeatures(Arrays.asList(features)); } public B withFeatures(Iterable<? extends Feature<?>> features) { - for (Feature<?> feature : features) { - this.features.add(feature); - } + this.features = Helpers.copyToSet(features); return self(); } - public Set<Feature<?>> getFeatures() { + protected Set<Feature<?>> getFeatures() { return Collections.unmodifiableSet(features); } @@ -136,7 +134,7 @@ public abstract class FeatureSpecificTestSuiteBuilder< return self(); } - public String getName() { + protected String getName() { return name; } @@ -161,7 +159,7 @@ public abstract class FeatureSpecificTestSuiteBuilder< return self(); } - public Set<Method> getSuppressedTests() { + protected Set<Method> getSuppressedTests() { return suppressedTests; } @@ -274,10 +272,10 @@ public abstract class FeatureSpecificTestSuiteBuilder< private static Method extractMethod(Test test) { if (test instanceof AbstractTester) { AbstractTester<?> tester = (AbstractTester<?>) test; - return Helpers.getMethod(tester.getClass(), tester.getTestMethodName()); + return Platform.getMethod(tester.getClass(), tester.getTestMethodName()); } else if (test instanceof TestCase) { TestCase testCase = (TestCase) test; - return Helpers.getMethod(testCase.getClass(), testCase.getName()); + return Platform.getMethod(testCase.getClass(), testCase.getName()); } else { throw new IllegalArgumentException( "unable to extract method from test: not a TestCase."); @@ -286,7 +284,7 @@ public abstract class FeatureSpecificTestSuiteBuilder< protected TestSuite makeSuiteForTesterClass( Class<? extends AbstractTester<?>> testerClass) { - final TestSuite candidateTests = new TestSuite(testerClass); + final TestSuite candidateTests = getTemplateSuite(testerClass); final TestSuite suite = filterSuite(candidateTests); Enumeration<?> allTests = suite.tests(); @@ -302,6 +300,22 @@ public abstract class FeatureSpecificTestSuiteBuilder< return suite; } + private static final Map<Class<? extends AbstractTester<?>>, TestSuite> + templateSuiteForClass = + new HashMap<Class<? extends AbstractTester<?>>, TestSuite>(); + + private static TestSuite getTemplateSuite( + Class<? extends AbstractTester<?>> testerClass) { + synchronized (templateSuiteForClass) { + TestSuite suite = templateSuiteForClass.get(testerClass); + if (suite == null) { + suite = new TestSuite(testerClass); + templateSuiteForClass.put(testerClass, suite); + } + return suite; + } + } + private TestSuite filterSuite(TestSuite suite) { TestSuite filtered = new TestSuite(suite.getName()); final Enumeration<?> tests = suite.tests(); diff --git a/guava-testlib/src/com/google/common/collect/testing/Helpers.java b/guava-testlib/src/com/google/common/collect/testing/Helpers.java index 277f50d..9c0a5f5 100644 --- a/guava-testlib/src/com/google/common/collect/testing/Helpers.java +++ b/guava-testlib/src/com/google/common/collect/testing/Helpers.java @@ -16,19 +16,13 @@ package com.google.common.collect.testing; -import static java.util.Collections.sort; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertTrue; -import com.google.common.annotations.GwtCompatible; -import com.google.common.annotations.GwtIncompatible; - import junit.framework.Assert; import junit.framework.AssertionFailedError; -import java.io.Serializable; -import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -42,7 +36,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; -@GwtCompatible(emulated = true) +// This class is GWT compatible. public class Helpers { // Clone of Objects.equal static boolean equal(Object a, Object b) { @@ -72,7 +66,7 @@ public class Helpers { } // Would use Maps.immutableEntry - public static <K, V> Entry<K, V> mapEntry(K key, V value) { + static <K, V> Entry<K, V> mapEntry(K key, V value) { return Collections.singletonMap(key, value).entrySet().iterator().next(); } @@ -171,11 +165,8 @@ public class Helpers { final Comparator<? super K> keyComparator) { return new Comparator<Entry<K, V>>() { @Override - @SuppressWarnings("unchecked") // no less safe than putting it in the map! public int compare(Entry<K, V> a, Entry<K, V> b) { - return (keyComparator == null) - ? ((Comparable) a.getKey()).compareTo(b.getKey()) - : keyComparator.compare(a.getKey(), b.getKey()); + return keyComparator.compare(a.getKey(), b.getKey()); } }; } @@ -257,9 +248,9 @@ public class Helpers { * possible to access the raw (modifiable) map entry via a nefarious equals * method. */ - public static <K, V> Map.Entry<K, V> nefariousMapEntry(final K key, + public static <K, V> Map.Entry<K, V> nefariousMapEntry(final K key, final V value) { - return new Map.Entry<K, V>() { + return new Map.Entry<K, V>() { @Override public K getKey() { return key; } @@ -271,10 +262,10 @@ public class Helpers { } @SuppressWarnings("unchecked") @Override public boolean equals(Object o) { - if (o instanceof Map.Entry) { + if (o instanceof Map.Entry<?, ?>) { Map.Entry<K, V> e = (Map.Entry<K, V>) o; e.setValue(value); // muhahaha! - + return equal(this.getKey(), e.getKey()) && equal(this.getValue(), e.getValue()); } @@ -295,120 +286,5 @@ public class Helpers { return getKey() + "=" + getValue(); } }; - } - - static <E> List<E> castOrCopyToList(Iterable<E> iterable) { - if (iterable instanceof List) { - return (List<E>) iterable; - } - List<E> list = new ArrayList<E>(); - for (E e : iterable) { - list.add(e); - } - return list; - } - - private static final Comparator<Comparable> NATURAL_ORDER = new Comparator<Comparable>() { - @SuppressWarnings("unchecked") // assume any Comparable is Comparable<Self> - @Override public int compare(Comparable left, Comparable right) { - return left.compareTo(right); - } - }; - - public static <K extends Comparable, V> Iterable<Entry<K, V>> orderEntriesByKey( - List<Entry<K, V>> insertionOrder) { - sort(insertionOrder, Helpers.<K, V>entryComparator(NATURAL_ORDER)); - return insertionOrder; - } - - /** - * Private replacement for {@link com.google.gwt.user.client.rpc.GwtTransient} to work around - * build-system quirks. - */ - private @interface GwtTransient {} - - /** - * Compares strings in natural order except that null comes immediately before a given value. This - * works better than Ordering.natural().nullsFirst() because, if null comes before all other - * values, it lies outside the submap/submultiset ranges we test, and the variety of tests that - * exercise null handling fail on those subcollections. - */ - public abstract static class NullsBefore implements Comparator<String>, Serializable { - /* - * We don't serialize this class in GWT, so we don't care about whether GWT will serialize this - * field. - */ - @GwtTransient private final String justAfterNull; - - protected NullsBefore(String justAfterNull) { - if (justAfterNull == null) { - throw new NullPointerException(); - } - - this.justAfterNull = justAfterNull; - } - - @Override - public int compare(String lhs, String rhs) { - if (lhs == rhs) { - return 0; - } - if (lhs == null) { - // lhs (null) comes just before justAfterNull. - // If rhs is b, lhs comes first. - if (rhs.equals(justAfterNull)) { - return -1; - } - return justAfterNull.compareTo(rhs); - } - if (rhs == null) { - // rhs (null) comes just before justAfterNull. - // If lhs is b, rhs comes first. - if (lhs.equals(justAfterNull)) { - return 1; - } - return lhs.compareTo(justAfterNull); - } - return lhs.compareTo(rhs); - } - - @Override - public boolean equals(Object obj) { - if (obj instanceof NullsBefore) { - NullsBefore other = (NullsBefore) obj; - return justAfterNull.equals(other.justAfterNull); - } - return false; - } - - @Override - public int hashCode() { - return justAfterNull.hashCode(); - } - } - - public static final class NullsBeforeB extends NullsBefore { - public static final NullsBeforeB INSTANCE = new NullsBeforeB(); - - private NullsBeforeB() { - super("b"); - } - } - - public static final class NullsBeforeTwo extends NullsBefore { - public static final NullsBeforeTwo INSTANCE = new NullsBeforeTwo(); - - private NullsBeforeTwo() { - super("two"); // from TestStringSortedMapGenerator's sample keys - } - } - - @GwtIncompatible("reflection") - public static Method getMethod(Class<?> clazz, String name) { - try { - return clazz.getMethod(name); - } catch (Exception e) { - throw new IllegalArgumentException(e); - } - } + } } diff --git a/guava-testlib/src/com/google/common/collect/testing/IteratorFeature.java b/guava-testlib/src/com/google/common/collect/testing/IteratorFeature.java index 145dfe2..bcf0fdf 100644 --- a/guava-testlib/src/com/google/common/collect/testing/IteratorFeature.java +++ b/guava-testlib/src/com/google/common/collect/testing/IteratorFeature.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; - import java.util.Collections; import java.util.EnumSet; import java.util.Iterator; @@ -32,7 +30,6 @@ import java.util.Set; * * @author Chris Povirk */ -@GwtCompatible public enum IteratorFeature { /** * Support for {@link Iterator#remove()}. diff --git a/guava-testlib/src/com/google/common/collect/testing/IteratorTester.java b/guava-testlib/src/com/google/common/collect/testing/IteratorTester.java index 2fa77fb..2a17dca 100644 --- a/guava-testlib/src/com/google/common/collect/testing/IteratorTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/IteratorTester.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; - import java.util.Collections; import java.util.Iterator; @@ -62,7 +60,6 @@ import java.util.Iterator; * @author Kevin Bourrillion * @author Chris Povirk */ -@GwtCompatible public abstract class IteratorTester<E> extends AbstractIteratorTester<E, Iterator<E>> { /** diff --git a/guava-testlib/src/com/google/common/collect/testing/ListIteratorTester.java b/guava-testlib/src/com/google/common/collect/testing/ListIteratorTester.java index 620b3fd..87d7b71 100644 --- a/guava-testlib/src/com/google/common/collect/testing/ListIteratorTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/ListIteratorTester.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; - import java.util.ArrayList; import java.util.List; import java.util.ListIterator; @@ -39,7 +37,6 @@ import java.util.ListIterator; * * @author Chris Povirk */ -@GwtCompatible public abstract class ListIteratorTester<E> extends AbstractIteratorTester<E, ListIterator<E>> { protected ListIteratorTester(int steps, Iterable<E> elementsToInsert, diff --git a/guava-testlib/src/com/google/common/collect/testing/ListTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/ListTestSuiteBuilder.java index 03f16cf..e8bdf78 100644 --- a/guava-testlib/src/com/google/common/collect/testing/ListTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/ListTestSuiteBuilder.java @@ -18,7 +18,6 @@ package com.google.common.collect.testing; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.Feature; -import com.google.common.collect.testing.testers.CollectionSerializationEqualTester; import com.google.common.collect.testing.testers.ListAddAllAtIndexTester; import com.google.common.collect.testing.testers.ListAddAllTester; import com.google.common.collect.testing.testers.ListAddAtIndexTester; @@ -37,15 +36,10 @@ import com.google.common.collect.testing.testers.ListRetainAllTester; import com.google.common.collect.testing.testers.ListSetTester; import com.google.common.collect.testing.testers.ListSubListTester; import com.google.common.collect.testing.testers.ListToArrayTester; -import com.google.common.testing.SerializableTester; import junit.framework.TestSuite; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashSet; import java.util.List; -import java.util.Set; /** * Creates, based on your criteria, a JUnit test suite that exhaustively tests @@ -64,7 +58,6 @@ public final class ListTestSuiteBuilder<E> extends List<Class<? extends AbstractTester>> testers = Helpers.copyToList(super.getTesters()); - testers.add(CollectionSerializationEqualTester.class); testers.add(ListAddAllAtIndexTester.class); testers.add(ListAddAllTester.class); testers.add(ListAddAtIndexTester.class); @@ -91,64 +84,11 @@ public final class ListTestSuiteBuilder<E> extends * lists have an iteration ordering corresponding to the insertion order. */ @Override public TestSuite createTestSuite() { - withFeatures(CollectionFeature.KNOWN_ORDER); - return super.createTestSuite(); - } - - @Override - protected - List<TestSuite> - createDerivedSuites( - FeatureSpecificTestSuiteBuilder< - ?, ? extends OneSizeTestContainerGenerator<Collection<E>, E>> parentBuilder) { - List<TestSuite> derivedSuites = new ArrayList<TestSuite>( - super.createDerivedSuites(parentBuilder)); - - if (parentBuilder.getFeatures().contains(CollectionFeature.SERIALIZABLE)) { - derivedSuites.add(ListTestSuiteBuilder - .using(new ReserializedListGenerator<E>(parentBuilder.getSubjectGenerator())) - .named(getName() + " reserialized") - .withFeatures(computeReserializedCollectionFeatures(parentBuilder.getFeatures())) - .suppressing(parentBuilder.getSuppressedTests()) - .createTestSuite()); - } - return derivedSuites; - } - - static class ReserializedListGenerator<E> implements TestListGenerator<E>{ - final OneSizeTestContainerGenerator<Collection<E>, E> gen; - - private ReserializedListGenerator(OneSizeTestContainerGenerator<Collection<E>, E> gen) { - this.gen = gen; - } - - @Override - public SampleElements<E> samples() { - return gen.samples(); + if (!getFeatures().contains(CollectionFeature.KNOWN_ORDER)) { + List<Feature<?>> features = Helpers.copyToList(getFeatures()); + features.add(CollectionFeature.KNOWN_ORDER); + withFeatures(features); } - - @Override - public List<E> create(Object... elements) { - return (List<E>) SerializableTester.reserialize(gen.create(elements)); - } - - @Override - public E[] createArray(int length) { - return gen.createArray(length); - } - - @Override - public Iterable<E> order(List<E> insertionOrder) { - return gen.order(insertionOrder); - } - } - - private static Set<Feature<?>> computeReserializedCollectionFeatures( - Set<Feature<?>> features) { - Set<Feature<?>> derivedFeatures = new HashSet<Feature<?>>(); - derivedFeatures.addAll(features); - derivedFeatures.remove(CollectionFeature.SERIALIZABLE); - derivedFeatures.remove(CollectionFeature.SERIALIZABLE_INCLUDING_VIEWS); - return derivedFeatures; + return super.createTestSuite(); } } diff --git a/guava-testlib/src/com/google/common/collect/testing/MapInterfaceTest.java b/guava-testlib/src/com/google/common/collect/testing/MapInterfaceTest.java index d33f49e..e080157 100644 --- a/guava-testlib/src/com/google/common/collect/testing/MapInterfaceTest.java +++ b/guava-testlib/src/com/google/common/collect/testing/MapInterfaceTest.java @@ -18,8 +18,6 @@ package com.google.common.collect.testing; import static java.util.Collections.singleton; -import com.google.common.annotations.GwtCompatible; - import junit.framework.TestCase; import java.util.Arrays; @@ -49,7 +47,6 @@ import java.util.Set; * * @author George van den Driessche */ -@GwtCompatible public abstract class MapInterfaceTest<K, V> extends TestCase { /** A key type that is not assignable to any classes but Object. */ diff --git a/guava-testlib/src/com/google/common/collect/testing/MapTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/MapTestSuiteBuilder.java index aa5b050..dbb7fa2 100644 --- a/guava-testlib/src/com/google/common/collect/testing/MapTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/MapTestSuiteBuilder.java @@ -16,9 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.collect.testing.DerivedCollectionGenerators.MapEntrySetGenerator; -import com.google.common.collect.testing.DerivedCollectionGenerators.MapKeySetGenerator; -import com.google.common.collect.testing.DerivedCollectionGenerators.MapValueCollectionGenerator; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; import com.google.common.collect.testing.features.Feature; @@ -34,16 +31,17 @@ import com.google.common.collect.testing.testers.MapIsEmptyTester; import com.google.common.collect.testing.testers.MapPutAllTester; import com.google.common.collect.testing.testers.MapPutTester; import com.google.common.collect.testing.testers.MapRemoveTester; -import com.google.common.collect.testing.testers.MapSerializationTester; import com.google.common.collect.testing.testers.MapSizeTester; -import com.google.common.testing.SerializableTester; import junit.framework.TestSuite; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; /** @@ -75,13 +73,11 @@ public class MapTestSuiteBuilder<K, V> MapPutTester.class, MapPutAllTester.class, MapRemoveTester.class, - MapSerializationTester.class, MapSizeTester.class ); } - @Override - protected List<TestSuite> createDerivedSuites( + @Override List<TestSuite> createDerivedSuites( FeatureSpecificTestSuiteBuilder< ?, ? extends OneSizeTestContainerGenerator<Map<K, V>, Map.Entry<K, V>>> @@ -92,15 +88,6 @@ public class MapTestSuiteBuilder<K, V> List<TestSuite> derivedSuites = super.createDerivedSuites(parentBuilder); - if (parentBuilder.getFeatures().contains(CollectionFeature.SERIALIZABLE)) { - derivedSuites.add(MapTestSuiteBuilder.using( - new ReserializedMapGenerator<K, V>(parentBuilder.getSubjectGenerator())) - .withFeatures(computeReserializedMapFeatures(parentBuilder.getFeatures())) - .named(parentBuilder.getName() + " reserialized") - .suppressing(parentBuilder.getSuppressedTests()) - .createTestSuite()); - } - derivedSuites.add(SetTestSuiteBuilder.using( new MapEntrySetGenerator<K, V>(parentBuilder.getSubjectGenerator())) .withFeatures(computeEntrySetFeatures(parentBuilder.getFeatures())) @@ -131,17 +118,9 @@ public class MapTestSuiteBuilder<K, V> return SetTestSuiteBuilder.using(keySetGenerator); } - private static Set<Feature<?>> computeReserializedMapFeatures( - Set<Feature<?>> mapFeatures) { - Set<Feature<?>> derivedFeatures = Helpers.copyToSet(mapFeatures); - derivedFeatures.remove(CollectionFeature.SERIALIZABLE); - derivedFeatures.remove(CollectionFeature.SERIALIZABLE_INCLUDING_VIEWS); - return derivedFeatures; - } - private static Set<Feature<?>> computeEntrySetFeatures( Set<Feature<?>> mapFeatures) { - Set<Feature<?>> entrySetFeatures = + Set<Feature<?>> entrySetFeatures = computeCommonDerivedCollectionFeatures(mapFeatures); entrySetFeatures.add(CollectionFeature.ALLOWS_NULL_QUERIES); return entrySetFeatures; @@ -165,9 +144,8 @@ public class MapTestSuiteBuilder<K, V> Set<Feature<?>> mapFeatures) { Set<Feature<?>> valuesCollectionFeatures = computeCommonDerivedCollectionFeatures(mapFeatures); - if (mapFeatures.contains(MapFeature.ALLOWS_NULL_QUERIES)) { - valuesCollectionFeatures.add(CollectionFeature.ALLOWS_NULL_QUERIES); - } + valuesCollectionFeatures.add(CollectionFeature.ALLOWS_NULL_QUERIES); + if (mapFeatures.contains(MapFeature.ALLOWS_NULL_VALUES)) { valuesCollectionFeatures.add(CollectionFeature.ALLOWS_NULL_VALUES); } @@ -178,21 +156,17 @@ public class MapTestSuiteBuilder<K, V> private static Set<Feature<?>> computeCommonDerivedCollectionFeatures( Set<Feature<?>> mapFeatures) { Set<Feature<?>> derivedFeatures = new HashSet<Feature<?>>(); - if (mapFeatures.contains(CollectionFeature.SERIALIZABLE_INCLUDING_VIEWS)) { - derivedFeatures.add(CollectionFeature.SERIALIZABLE); - } if (mapFeatures.contains(MapFeature.SUPPORTS_REMOVE)) { derivedFeatures.add(CollectionFeature.SUPPORTS_REMOVE); + derivedFeatures.add(CollectionFeature.SUPPORTS_REMOVE_ALL); + derivedFeatures.add(CollectionFeature.SUPPORTS_RETAIN_ALL); + } + if (mapFeatures.contains(MapFeature.SUPPORTS_CLEAR)) { + derivedFeatures.add(CollectionFeature.SUPPORTS_CLEAR); } if (mapFeatures.contains(MapFeature.REJECTS_DUPLICATES_AT_CREATION)) { derivedFeatures.add(CollectionFeature.REJECTS_DUPLICATES_AT_CREATION); } - if (mapFeatures.contains(MapFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION)) { - derivedFeatures.add(CollectionFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION); - } - if (mapFeatures.contains(CollectionFeature.KNOWN_ORDER)) { - derivedFeatures.add(CollectionFeature.KNOWN_ORDER); - } // add the intersection of CollectionSize.values() and mapFeatures for (CollectionSize size : CollectionSize.values()) { if (mapFeatures.contains(size)) { @@ -202,12 +176,12 @@ public class MapTestSuiteBuilder<K, V> return derivedFeatures; } - private static class ReserializedMapGenerator<K, V> - implements TestMapGenerator<K, V> { + private static class MapEntrySetGenerator<K, V> + implements TestSetGenerator<Map.Entry<K, V>> { private final OneSizeTestContainerGenerator<Map<K, V>, Map.Entry<K, V>> mapGenerator; - public ReserializedMapGenerator( + public MapEntrySetGenerator( OneSizeTestContainerGenerator< Map<K, V>, Map.Entry<K, V>> mapGenerator) { this.mapGenerator = mapGenerator; @@ -219,6 +193,11 @@ public class MapTestSuiteBuilder<K, V> } @Override + public Set<Map.Entry<K, V>> create(Object... elements) { + return mapGenerator.create(elements).entrySet(); + } + + @Override public Map.Entry<K, V>[] createArray(int length) { return mapGenerator.createArray(length); } @@ -228,22 +207,127 @@ public class MapTestSuiteBuilder<K, V> List<Map.Entry<K, V>> insertionOrder) { return mapGenerator.order(insertionOrder); } + } + + // TODO: investigate some API changes to SampleElements that would tidy up + // parts of the following classes. + + private static class MapKeySetGenerator<K, V> implements TestSetGenerator<K> { + private final OneSizeTestContainerGenerator<Map<K, V>, Map.Entry<K, V>> + mapGenerator; + private final SampleElements<K> samples; + + public MapKeySetGenerator( + OneSizeTestContainerGenerator<Map<K, V>, Map.Entry<K, V>> + mapGenerator) { + this.mapGenerator = mapGenerator; + final SampleElements<Map.Entry<K, V>> mapSamples = + this.mapGenerator.samples(); + this.samples = new SampleElements<K>( + mapSamples.e0.getKey(), + mapSamples.e1.getKey(), + mapSamples.e2.getKey(), + mapSamples.e3.getKey(), + mapSamples.e4.getKey()); + } @Override - public Map<K, V> create(Object... elements) { - return SerializableTester.reserialize(mapGenerator.create(elements)); + public SampleElements<K> samples() { + return samples; } @Override - public K[] createKeyArray(int length) { + public Set<K> create(Object... elements) { + @SuppressWarnings("unchecked") + K[] keysArray = (K[]) elements; + + // Start with a suitably shaped collection of entries + Collection<Map.Entry<K, V>> originalEntries = + mapGenerator.getSampleElements(elements.length); + + // Create a copy of that, with the desired value for each key + Collection<Map.Entry<K, V>> entries = + new ArrayList<Entry<K, V>>(elements.length); + int i = 0; + for (Map.Entry<K, V> entry : originalEntries) { + entries.add(Helpers.mapEntry(keysArray[i++], entry.getValue())); + } + + return mapGenerator.create(entries.toArray()).keySet(); + } + + @Override + public K[] createArray(int length) { + // TODO: with appropriate refactoring of OneSizeGenerator, we can perhaps + // tidy this up and get rid of the casts here and in + // MapValueCollectionGenerator. + return ((TestMapGenerator<K, V>) mapGenerator.getInnerGenerator()) .createKeyArray(length); } @Override - public V[] createValueArray(int length) { - return ((TestMapGenerator<K, V>) mapGenerator.getInnerGenerator()) - .createValueArray(length); + public Iterable<K> order(List<K> insertionOrder) { + return insertionOrder; + } + } + + private static class MapValueCollectionGenerator<K, V> + implements TestCollectionGenerator<V> { + private final OneSizeTestContainerGenerator<Map<K, V>, Map.Entry<K, V>> + mapGenerator; + private final SampleElements<V> samples; + + public MapValueCollectionGenerator( + OneSizeTestContainerGenerator< + Map<K, V>, Map.Entry<K, V>> mapGenerator) { + this.mapGenerator = mapGenerator; + final SampleElements<Map.Entry<K, V>> mapSamples = + this.mapGenerator.samples(); + this.samples = new SampleElements<V>( + mapSamples.e0.getValue(), + mapSamples.e1.getValue(), + mapSamples.e2.getValue(), + mapSamples.e3.getValue(), + mapSamples.e4.getValue()); + } + + @Override + public SampleElements<V> samples() { + return samples; + } + + @Override + public Collection<V> create(Object... elements) { + @SuppressWarnings("unchecked") + V[] valuesArray = (V[]) elements; + + // Start with a suitably shaped collection of entries + Collection<Map.Entry<K, V>> originalEntries = + mapGenerator.getSampleElements(elements.length); + + // Create a copy of that, with the desired value for each value + Collection<Map.Entry<K, V>> entries = + new ArrayList<Entry<K, V>>(elements.length); + int i = 0; + for (Map.Entry<K, V> entry : originalEntries) { + entries.add(Helpers.mapEntry(entry.getKey(), valuesArray[i++])); + } + + return mapGenerator.create(entries.toArray()).values(); + } + + @Override + public V[] createArray(int length) { + //noinspection UnnecessaryLocalVariable + final V[] vs = ((TestMapGenerator<K, V>) mapGenerator.getInnerGenerator()) + .createValueArray(length); + return vs; + } + + @Override + public Iterable<V> order(List<V> insertionOrder) { + return insertionOrder; } } } diff --git a/guava-testlib/src/com/google/common/collect/testing/MinimalCollection.java b/guava-testlib/src/com/google/common/collect/testing/MinimalCollection.java index 6c30ab9..20c9db9 100644 --- a/guava-testlib/src/com/google/common/collect/testing/MinimalCollection.java +++ b/guava-testlib/src/com/google/common/collect/testing/MinimalCollection.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; - import java.util.AbstractCollection; import java.util.Arrays; import java.util.Collection; @@ -29,7 +27,6 @@ import java.util.Iterator; * * @author Kevin Bourrillion */ -@GwtCompatible public class MinimalCollection<E> extends AbstractCollection<E> { // TODO: expose allow nulls parameter? @@ -96,7 +93,7 @@ public class MinimalCollection<E> extends AbstractCollection<E> { @Override public Object[] toArray() { Object[] result = new Object[contents.length]; - System.arraycopy(contents, 0, result, 0, contents.length); + Platform.unsafeArrayCopy(contents, 0, result, 0, contents.length); return result; } diff --git a/guava-testlib/src/com/google/common/collect/testing/MinimalIterable.java b/guava-testlib/src/com/google/common/collect/testing/MinimalIterable.java index 587e3d3..2d2cf10 100644 --- a/guava-testlib/src/com/google/common/collect/testing/MinimalIterable.java +++ b/guava-testlib/src/com/google/common/collect/testing/MinimalIterable.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; - import java.util.Arrays; import java.util.Collection; import java.util.Iterator; @@ -50,7 +48,6 @@ import java.util.Iterator; * * @author Kevin Bourrillion */ -@GwtCompatible public final class MinimalIterable<E> implements Iterable<E> { /** * Returns an iterable whose iterator returns the given elements in order. diff --git a/guava-testlib/src/com/google/common/collect/testing/MinimalSet.java b/guava-testlib/src/com/google/common/collect/testing/MinimalSet.java index 06e4519..e8270dd 100644 --- a/guava-testlib/src/com/google/common/collect/testing/MinimalSet.java +++ b/guava-testlib/src/com/google/common/collect/testing/MinimalSet.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; - import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -33,7 +31,6 @@ import java.util.Set; * * @author Regina O'Dell */ -@GwtCompatible public class MinimalSet<E> extends MinimalCollection<E> implements Set<E> { @SuppressWarnings("unchecked") // empty Object[] as E[] diff --git a/guava-testlib/src/com/google/common/collect/testing/NavigableMapTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/NavigableMapTestSuiteBuilder.java index 64df720..1d38601 100644 --- a/guava-testlib/src/com/google/common/collect/testing/NavigableMapTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/NavigableMapTestSuiteBuilder.java @@ -16,30 +16,28 @@ package com.google.common.collect.testing; -import static com.google.common.collect.testing.Helpers.castOrCopyToList; -import static java.util.Collections.reverse; - -import com.google.common.collect.testing.DerivedCollectionGenerators.Bound; -import com.google.common.collect.testing.DerivedCollectionGenerators.SortedMapSubmapTestMapGenerator; import com.google.common.collect.testing.features.Feature; -import com.google.common.collect.testing.testers.NavigableMapNavigationTester; +import com.google.common.collect.testing.testers.MapNavigationTester; import junit.framework.TestSuite; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.NavigableMap; -import java.util.SortedMap; +import java.util.Set; /** * Creates, based on your criteria, a JUnit test suite that exhaustively tests * a NavigableMap implementation. */ -public class NavigableMapTestSuiteBuilder<K, V> extends SortedMapTestSuiteBuilder<K, V> { +public class NavigableMapTestSuiteBuilder<K, V> extends MapTestSuiteBuilder<K, V> { public static <K, V> NavigableMapTestSuiteBuilder<K, V> using( - TestSortedMapGenerator<K, V> generator) { + TestMapGenerator<K, V> generator) { NavigableMapTestSuiteBuilder<K, V> result = new NavigableMapTestSuiteBuilder<K, V>(); result.usingGenerator(generator); return result; @@ -47,12 +45,11 @@ public class NavigableMapTestSuiteBuilder<K, V> extends SortedMapTestSuiteBuilde @Override protected List<Class<? extends AbstractTester>> getTesters() { List<Class<? extends AbstractTester>> testers = Helpers.copyToList(super.getTesters()); - testers.add(NavigableMapNavigationTester.class); + testers.add(MapNavigationTester.class); return testers; } - @Override - protected List<TestSuite> createDerivedSuites(FeatureSpecificTestSuiteBuilder<?, + @Override List<TestSuite> createDerivedSuites(FeatureSpecificTestSuiteBuilder<?, ? extends OneSizeTestContainerGenerator<Map<K, V>, Entry<K, V>>> parentBuilder) { List<TestSuite> derivedSuites = super.createDerivedSuites(parentBuilder); @@ -61,52 +58,148 @@ public class NavigableMapTestSuiteBuilder<K, V> extends SortedMapTestSuiteBuilde } if (!parentBuilder.getFeatures().contains(NoRecurse.SUBMAP)) { - // Other combinations are inherited from SortedMapTestSuiteBuilder. + derivedSuites.add(createSubmapSuite(parentBuilder, Bound.NO_BOUND, Bound.EXCLUSIVE)); derivedSuites.add(createSubmapSuite(parentBuilder, Bound.NO_BOUND, Bound.INCLUSIVE)); derivedSuites.add(createSubmapSuite(parentBuilder, Bound.EXCLUSIVE, Bound.NO_BOUND)); derivedSuites.add(createSubmapSuite(parentBuilder, Bound.EXCLUSIVE, Bound.EXCLUSIVE)); derivedSuites.add(createSubmapSuite(parentBuilder, Bound.EXCLUSIVE, Bound.INCLUSIVE)); + derivedSuites.add(createSubmapSuite(parentBuilder, Bound.INCLUSIVE, Bound.NO_BOUND)); + derivedSuites.add(createSubmapSuite(parentBuilder, Bound.INCLUSIVE, Bound.EXCLUSIVE)); derivedSuites.add(createSubmapSuite(parentBuilder, Bound.INCLUSIVE, Bound.INCLUSIVE)); } return derivedSuites; } - @Override protected NavigableSetTestSuiteBuilder<K> createDerivedKeySetSuite( + @Override protected SetTestSuiteBuilder<K> createDerivedKeySetSuite( TestSetGenerator<K> keySetGenerator) { return NavigableSetTestSuiteBuilder.using(keySetGenerator); } - public static final class NavigableMapSubmapTestMapGenerator<K, V> - extends SortedMapSubmapTestMapGenerator<K, V> { - public NavigableMapSubmapTestMapGenerator( - TestSortedMapGenerator<K, V> delegate, Bound to, Bound from) { - super(delegate, to, from); - } + /** + * To avoid infinite recursion, test suites with these marker features won't + * have derived suites created for them. + */ + enum NoRecurse implements Feature<Void> { + SUBMAP, + DESCENDING; - @Override NavigableMap<K, V> createSubMap(SortedMap<K, V> sortedMap, K firstExclusive, - K lastExclusive) { - NavigableMap<K, V> map = (NavigableMap<K, V>) sortedMap; - if (from == Bound.NO_BOUND && to == Bound.INCLUSIVE) { - return map.headMap(lastInclusive, true); - } else if (from == Bound.EXCLUSIVE && to == Bound.NO_BOUND) { - return map.tailMap(firstExclusive, false); - } else if (from == Bound.EXCLUSIVE && to == Bound.EXCLUSIVE) { - return map.subMap(firstExclusive, false, lastExclusive, false); - } else if (from == Bound.EXCLUSIVE && to == Bound.INCLUSIVE) { - return map.subMap(firstExclusive, false, lastInclusive, true); - } else if (from == Bound.INCLUSIVE && to == Bound.INCLUSIVE) { - return map.subMap(firstInclusive, true, lastInclusive, true); - } else { - return (NavigableMap<K, V>) super.createSubMap(map, firstExclusive, lastExclusive); - } + @Override + public Set<Feature<? super Void>> getImpliedFeatures() { + return Collections.emptySet(); } } - @Override - public NavigableMapTestSuiteBuilder<K, V> newBuilderUsing( - TestSortedMapGenerator<K, V> delegate, Bound to, Bound from) { - return using(new NavigableMapSubmapTestMapGenerator<K, V>(delegate, to, from)); + /** + * Two bounds (from and to) define how to build a subMap. + */ + enum Bound { + INCLUSIVE, + EXCLUSIVE, + NO_BOUND; + } + + /** + * Creates a suite whose map has some elements filtered out of view. + * + * <p>Because the map may be ascending or descending, this test must derive + * the relative order of these extreme values rather than relying on their + * regular sort ordering. + */ + private TestSuite createSubmapSuite(final FeatureSpecificTestSuiteBuilder<?, + ? extends OneSizeTestContainerGenerator<Map<K, V>, Entry<K, V>>> + parentBuilder, final Bound from, final Bound to) { + final TestMapGenerator<K, V> delegate + = (TestMapGenerator<K, V>) parentBuilder.getSubjectGenerator().getInnerGenerator(); + + List<Feature<?>> features = new ArrayList<Feature<?>>(); + features.add(NoRecurse.SUBMAP); + features.addAll(parentBuilder.getFeatures()); + + NavigableMap<K, V> emptyMap = (NavigableMap<K, V>) delegate.create(); + final Comparator<Entry<K, V>> entryComparator = Helpers.entryComparator(emptyMap.comparator()); + + // derive values for inclusive filtering from the input samples + SampleElements<Entry<K, V>> samples = delegate.samples(); + @SuppressWarnings("unchecked") // no elements are inserted into the array + List<Entry<K, V>> samplesList = Arrays.asList( + samples.e0, samples.e1, samples.e2, samples.e3, samples.e4); + Collections.sort(samplesList, entryComparator); + final K firstInclusive = samplesList.get(0).getKey(); + final K lastInclusive = samplesList.get(samplesList.size() - 1).getKey(); + + return NavigableMapTestSuiteBuilder + .using(new ForwardingTestMapGenerator<K, V>(delegate) { + @Override public Map<K, V> create(Object... entries) { + @SuppressWarnings("unchecked") // we dangerously assume K and V are both strings + List<Entry<K, V>> extremeValues = (List) getExtremeValues(); + @SuppressWarnings("unchecked") // map generators must past entry objects + List<Entry<K, V>> normalValues = (List) Arrays.asList(entries); + + // prepare extreme values to be filtered out of view + Collections.sort(extremeValues, entryComparator); + K firstExclusive = extremeValues.get(1).getKey(); + K lastExclusive = extremeValues.get(2).getKey(); + if (from == Bound.NO_BOUND) { + extremeValues.remove(0); + extremeValues.remove(0); + } + if (to == Bound.NO_BOUND) { + extremeValues.remove(extremeValues.size() - 1); + extremeValues.remove(extremeValues.size() - 1); + } + + // the regular values should be visible after filtering + List<Entry<K, V>> allEntries = new ArrayList<Entry<K, V>>(); + allEntries.addAll(extremeValues); + allEntries.addAll(normalValues); + NavigableMap<K, V> map = (NavigableMap<K, V>) + delegate.create((Object[]) + allEntries.toArray(new Entry[allEntries.size()])); + + // call the smallest subMap overload that filters out the extreme values + if (from == Bound.NO_BOUND && to == Bound.EXCLUSIVE) { + return map.headMap(lastExclusive); + } else if (from == Bound.NO_BOUND && to == Bound.INCLUSIVE) { + return map.headMap(lastInclusive, true); + } else if (from == Bound.EXCLUSIVE && to == Bound.NO_BOUND) { + return map.tailMap(firstExclusive, false); + } else if (from == Bound.EXCLUSIVE && to == Bound.EXCLUSIVE) { + return map.subMap(firstExclusive, false, lastExclusive, false); + } else if (from == Bound.EXCLUSIVE && to == Bound.INCLUSIVE) { + return map.subMap(firstExclusive, false, lastInclusive, true); + } else if (from == Bound.INCLUSIVE && to == Bound.NO_BOUND) { + return map.tailMap(firstInclusive); + } else if (from == Bound.INCLUSIVE && to == Bound.EXCLUSIVE) { + return map.subMap(firstInclusive, lastExclusive); + } else if (from == Bound.INCLUSIVE && to == Bound.INCLUSIVE) { + return map.subMap(firstInclusive, true, lastInclusive, true); + } else { + throw new IllegalArgumentException(); + } + } + }) + .named(parentBuilder.getName() + " subMap " + from + "-" + to) + .withFeatures(features) + .suppressing(parentBuilder.getSuppressedTests()) + .createTestSuite(); + } + + /** + * Returns an array of four bogus elements that will always be too high or + * too low for the display. This includes two values for each extreme. + * + * <p>This method (dangerously) assume that the strings {@code "!! a"} and + * {@code "~~ z"} will work for this purpose, which may cause problems for + * navigable maps with non-string or unicode generators. + */ + private List<Entry<String, String>> getExtremeValues() { + List<Entry<String, String>> result = new ArrayList<Entry<String, String>>(); + result.add(Helpers.mapEntry("!! a", "below view")); + result.add(Helpers.mapEntry("!! b", "below view")); + result.add(Helpers.mapEntry("~~ y", "above view")); + result.add(Helpers.mapEntry("~~ z", "above view")); + return result; } /** @@ -127,13 +220,6 @@ public class NavigableMapTestSuiteBuilder<K, V> extends SortedMapTestSuiteBuilde NavigableMap<K, V> map = (NavigableMap<K, V>) delegate.create(entries); return map.descendingMap(); } - - @Override - public Iterable<Entry<K, V>> order(List<Entry<K, V>> insertionOrder) { - insertionOrder = castOrCopyToList(delegate.order(insertionOrder)); - reverse(insertionOrder); - return insertionOrder; - } }) .named(parentBuilder.getName() + " descending") .withFeatures(features) diff --git a/guava-testlib/src/com/google/common/collect/testing/NavigableSetTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/NavigableSetTestSuiteBuilder.java index 7ef68bb..3e0f8b9 100644 --- a/guava-testlib/src/com/google/common/collect/testing/NavigableSetTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/NavigableSetTestSuiteBuilder.java @@ -16,7 +16,7 @@ package com.google.common.collect.testing; -import com.google.common.collect.testing.testers.NavigableSetNavigationTester; +import com.google.common.collect.testing.testers.SetNavigationTester; import java.util.List; @@ -25,7 +25,7 @@ import java.util.List; * a NavigableSet implementation. */ public final class NavigableSetTestSuiteBuilder<E> - extends SortedSetTestSuiteBuilder<E> { + extends SetTestSuiteBuilder<E> { public static <E> NavigableSetTestSuiteBuilder<E> using( TestSetGenerator<E> generator) { NavigableSetTestSuiteBuilder<E> builder = @@ -37,7 +37,7 @@ public final class NavigableSetTestSuiteBuilder<E> @Override protected List<Class<? extends AbstractTester>> getTesters() { List<Class<? extends AbstractTester>> testers = Helpers.copyToList(super.getTesters()); - testers.add(NavigableSetNavigationTester.class); + testers.add(SetNavigationTester.class); return testers; } } diff --git a/guava-testlib/src/com/google/common/collect/testing/OneSizeGenerator.java b/guava-testlib/src/com/google/common/collect/testing/OneSizeGenerator.java index a5d9fbc..7d3a50b 100644 --- a/guava-testlib/src/com/google/common/collect/testing/OneSizeGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/OneSizeGenerator.java @@ -16,7 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.features.CollectionSize; import java.util.ArrayList; @@ -31,7 +30,6 @@ import java.util.List; * * @author George van den Driessche */ -@GwtCompatible public final class OneSizeGenerator<T, E> implements OneSizeTestContainerGenerator<T, E> { private final TestContainerGenerator<T, E> generator; diff --git a/guava-testlib/src/com/google/common/collect/testing/OneSizeTestContainerGenerator.java b/guava-testlib/src/com/google/common/collect/testing/OneSizeTestContainerGenerator.java index c3350dc..5296be6 100644 --- a/guava-testlib/src/com/google/common/collect/testing/OneSizeTestContainerGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/OneSizeTestContainerGenerator.java @@ -16,7 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.features.CollectionSize; import java.util.Collection; @@ -33,7 +32,6 @@ import java.util.Collection; * * @author George van den Driessche */ -@GwtCompatible public interface OneSizeTestContainerGenerator<T, E> extends TestSubjectGenerator<T>, TestContainerGenerator<T, E> { TestContainerGenerator<T, E> getInnerGenerator(); diff --git a/guava-testlib/src/com/google/common/collect/testing/PerCollectionSizeTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/PerCollectionSizeTestSuiteBuilder.java index ef3f384..8c219e8 100644 --- a/guava-testlib/src/com/google/common/collect/testing/PerCollectionSizeTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/PerCollectionSizeTestSuiteBuilder.java @@ -115,7 +115,7 @@ public abstract class PerCollectionSizeTestSuiteBuilder< return suite; } - protected List<TestSuite> createDerivedSuites(FeatureSpecificTestSuiteBuilder< + List<TestSuite> createDerivedSuites(FeatureSpecificTestSuiteBuilder< ?, ? extends OneSizeTestContainerGenerator<T, E>> parentBuilder) { return new ArrayList<TestSuite>(); } diff --git a/guava-testlib/src/com/google/common/collect/testing/Platform.java b/guava-testlib/src/com/google/common/collect/testing/Platform.java index 78d14af..e7ac3ea 100644 --- a/guava-testlib/src/com/google/common/collect/testing/Platform.java +++ b/guava-testlib/src/com/google/common/collect/testing/Platform.java @@ -16,7 +16,7 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; +import java.lang.reflect.Method; /** * Methods factored out so that they can be emulated differently in GWT. @@ -25,7 +25,6 @@ import com.google.common.annotations.GwtCompatible; * * @author Hayward Chan */ -@GwtCompatible class Platform { /** @@ -51,6 +50,31 @@ class Platform { return String.format(template, args); } + /** + * Wrapper around {@link System#arraycopy} so that it can be emulated + * correctly in GWT. + * + * <p>It is only intended for the case {@code src} and {@code dest} are + * different. It also doesn't validate the types and indices. + * + * <p>As of GWT 2.0, The built-in {@link System#arraycopy} doesn't work + * in general case. See + * http://code.google.com/p/google-web-toolkit/issues/detail?id=3621 + * for more details. + */ + static void unsafeArrayCopy( + Object[] src, int srcPos, Object[] dest, int destPos, int length) { + System.arraycopy(src, srcPos, dest, destPos, length); + } + + static Method getMethod(Class<?> clazz, String name) { + try { + return clazz.getMethod(name); + } catch (Exception e) { + throw new IllegalArgumentException(e); + } + } + static String classGetSimpleName(Class<?> clazz) { return clazz.getSimpleName(); } diff --git a/guava-testlib/src/com/google/common/collect/testing/SampleElements.java b/guava-testlib/src/com/google/common/collect/testing/SampleElements.java index 30ddf65..2674dbb 100644 --- a/guava-testlib/src/com/google/common/collect/testing/SampleElements.java +++ b/guava-testlib/src/com/google/common/collect/testing/SampleElements.java @@ -16,10 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; - -import java.util.Arrays; -import java.util.Iterator; import java.util.Map; /** @@ -29,8 +25,7 @@ import java.util.Map; * * @author Kevin Bourrillion */ -@GwtCompatible -public class SampleElements<E> implements Iterable<E> { +public class SampleElements<E> { // TODO: rename e3, e4 => missing1, missing2 public final E e0; public final E e1; @@ -46,11 +41,6 @@ public class SampleElements<E> implements Iterable<E> { this.e4 = e4; } - @Override - public Iterator<E> iterator() { - return Arrays.asList(e0, e1, e2, e3, e4).iterator(); - } - public static class Strings extends SampleElements<String> { public Strings() { // elements aren't sorted, to better test SortedSet iteration ordering @@ -65,13 +55,6 @@ public class SampleElements<E> implements Iterable<E> { public static final String AFTER_LAST_2 = "zz"; } - public static class Chars extends SampleElements<Character> { - public Chars() { - // elements aren't sorted, to better test SortedSet iteration ordering - super('b', 'a', 'c', 'd', 'e'); - } - } - public static class Enums extends SampleElements<AnEnum> { public Enums() { // elements aren't sorted, to better test SortedSet iteration ordering @@ -79,13 +62,6 @@ public class SampleElements<E> implements Iterable<E> { } } - public static class Ints extends SampleElements<Integer> { - public Ints() { - // elements aren't sorted, to better test SortedSet iteration ordering - super(1, 0, 2, 3, 4); - } - } - public static <K, V> SampleElements<Map.Entry<K, V>> mapEntries( SampleElements<K> keys, SampleElements<V> values) { return new SampleElements<Map.Entry<K, V>>( diff --git a/guava-testlib/src/com/google/common/collect/testing/SetTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/SetTestSuiteBuilder.java index 7437760..5440d72 100644 --- a/guava-testlib/src/com/google/common/collect/testing/SetTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/SetTestSuiteBuilder.java @@ -16,24 +16,14 @@ package com.google.common.collect.testing; -import com.google.common.collect.testing.features.CollectionFeature; -import com.google.common.collect.testing.features.Feature; -import com.google.common.collect.testing.testers.CollectionSerializationEqualTester; import com.google.common.collect.testing.testers.SetAddAllTester; import com.google.common.collect.testing.testers.SetAddTester; import com.google.common.collect.testing.testers.SetCreationTester; import com.google.common.collect.testing.testers.SetEqualsTester; import com.google.common.collect.testing.testers.SetHashCodeTester; import com.google.common.collect.testing.testers.SetRemoveTester; -import com.google.common.testing.SerializableTester; -import junit.framework.TestSuite; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashSet; import java.util.List; -import java.util.Set; /** * Creates, based on your criteria, a JUnit test suite that exhaustively tests @@ -51,8 +41,7 @@ public class SetTestSuiteBuilder<E> @Override protected List<Class<? extends AbstractTester>> getTesters() { List<Class<? extends AbstractTester>> testers = Helpers.copyToList(super.getTesters()); - - testers.add(CollectionSerializationEqualTester.class); + testers.add(SetAddAllTester.class); testers.add(SetAddTester.class); testers.add(SetCreationTester.class); @@ -64,61 +53,4 @@ public class SetTestSuiteBuilder<E> // covered by CollectionRemoveAllTester. return testers; } - - @Override - protected - List<TestSuite> - createDerivedSuites( - FeatureSpecificTestSuiteBuilder< - ?, ? extends OneSizeTestContainerGenerator<Collection<E>, E>> parentBuilder) { - List<TestSuite> derivedSuites = new ArrayList<TestSuite>( - super.createDerivedSuites(parentBuilder)); - - if (parentBuilder.getFeatures().contains(CollectionFeature.SERIALIZABLE)) { - derivedSuites.add(SetTestSuiteBuilder - .using(new ReserializedSetGenerator<E>(parentBuilder.getSubjectGenerator())) - .named(getName() + " reserialized") - .withFeatures(computeReserializedCollectionFeatures(parentBuilder.getFeatures())) - .suppressing(parentBuilder.getSuppressedTests()) - .createTestSuite()); - } - return derivedSuites; - } - - static class ReserializedSetGenerator<E> implements TestSetGenerator<E>{ - final OneSizeTestContainerGenerator<Collection<E>, E> gen; - - private ReserializedSetGenerator(OneSizeTestContainerGenerator<Collection<E>, E> gen) { - this.gen = gen; - } - - @Override - public SampleElements<E> samples() { - return gen.samples(); - } - - @Override - public Set<E> create(Object... elements) { - return (Set<E>) SerializableTester.reserialize(gen.create(elements)); - } - - @Override - public E[] createArray(int length) { - return gen.createArray(length); - } - - @Override - public Iterable<E> order(List<E> insertionOrder) { - return gen.order(insertionOrder); - } - } - - private static Set<Feature<?>> computeReserializedCollectionFeatures( - Set<Feature<?>> features) { - Set<Feature<?>> derivedFeatures = new HashSet<Feature<?>>(); - derivedFeatures.addAll(features); - derivedFeatures.remove(CollectionFeature.SERIALIZABLE); - derivedFeatures.remove(CollectionFeature.SERIALIZABLE_INCLUDING_VIEWS); - return derivedFeatures; - } } diff --git a/guava-testlib/src/com/google/common/collect/testing/SortedMapInterfaceTest.java b/guava-testlib/src/com/google/common/collect/testing/SortedMapInterfaceTest.java index 10e5d1b..fdf6632 100644 --- a/guava-testlib/src/com/google/common/collect/testing/SortedMapInterfaceTest.java +++ b/guava-testlib/src/com/google/common/collect/testing/SortedMapInterfaceTest.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; - import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -40,7 +38,6 @@ import java.util.SortedMap; * @author Jared Levy */ // TODO: Use this class to test classes besides ImmutableSortedMap. -@GwtCompatible public abstract class SortedMapInterfaceTest<K, V> extends MapInterfaceTest<K, V> { diff --git a/guava-testlib/src/com/google/common/collect/testing/SortedMapTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/SortedMapTestSuiteBuilder.java deleted file mode 100644 index 11774ef..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/SortedMapTestSuiteBuilder.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright (C) 2010 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.testing; - -import com.google.common.collect.testing.DerivedCollectionGenerators.Bound; -import com.google.common.collect.testing.DerivedCollectionGenerators.SortedMapSubmapTestMapGenerator; -import com.google.common.collect.testing.features.CollectionFeature; -import com.google.common.collect.testing.features.Feature; -import com.google.common.collect.testing.testers.SortedMapNavigationTester; - -import junit.framework.TestSuite; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import java.util.SortedSet; - -/** - * Creates, based on your criteria, a JUnit test suite that exhaustively tests - * a SortedMap implementation. - */ -public class SortedMapTestSuiteBuilder<K, V> extends MapTestSuiteBuilder<K, V> { - public static <K, V> SortedMapTestSuiteBuilder<K, V> using( - TestSortedMapGenerator<K, V> generator) { - SortedMapTestSuiteBuilder<K, V> result = new SortedMapTestSuiteBuilder<K, V>(); - result.usingGenerator(generator); - return result; - } - - @Override protected List<Class<? extends AbstractTester>> getTesters() { - List<Class<? extends AbstractTester>> testers = Helpers.copyToList(super.getTesters()); - testers.add(SortedMapNavigationTester.class); - return testers; - } - - @Override public TestSuite createTestSuite() { - if (!getFeatures().contains(CollectionFeature.KNOWN_ORDER)) { - List<Feature<?>> features = Helpers.copyToList(getFeatures()); - features.add(CollectionFeature.KNOWN_ORDER); - withFeatures(features); - } - return super.createTestSuite(); - } - - @Override - protected List<TestSuite> createDerivedSuites(FeatureSpecificTestSuiteBuilder<?, - ? extends OneSizeTestContainerGenerator<Map<K, V>, Entry<K, V>>> parentBuilder) { - List<TestSuite> derivedSuites = super.createDerivedSuites(parentBuilder); - - if (!parentBuilder.getFeatures().contains(NoRecurse.SUBMAP)) { - derivedSuites.add(createSubmapSuite(parentBuilder, Bound.NO_BOUND, Bound.EXCLUSIVE)); - derivedSuites.add(createSubmapSuite(parentBuilder, Bound.INCLUSIVE, Bound.NO_BOUND)); - derivedSuites.add(createSubmapSuite(parentBuilder, Bound.INCLUSIVE, Bound.EXCLUSIVE)); - } - - return derivedSuites; - } - - @Override protected SetTestSuiteBuilder<K> createDerivedKeySetSuite( - TestSetGenerator<K> keySetGenerator) { - /* - * TODO(cpovirk): Consider requiring a SortedSet by default and requiring tests of a given - * implementation to opt out if they wish to return Set. This would encourage us to return - * keySets that implement SortedSet - */ - return (keySetGenerator.create() instanceof SortedSet) - ? SortedSetTestSuiteBuilder.using(keySetGenerator) - : SetTestSuiteBuilder.using(keySetGenerator); - } - - /** - * To avoid infinite recursion, test suites with these marker features won't - * have derived suites created for them. - */ - enum NoRecurse implements Feature<Void> { - SUBMAP, - DESCENDING; - - @Override - public Set<Feature<? super Void>> getImpliedFeatures() { - return Collections.emptySet(); - } - } - - /** - * Creates a suite whose map has some elements filtered out of view. - * - * <p>Because the map may be ascending or descending, this test must derive - * the relative order of these extreme values rather than relying on their - * regular sort ordering. - */ - final TestSuite createSubmapSuite(final FeatureSpecificTestSuiteBuilder<?, - ? extends OneSizeTestContainerGenerator<Map<K, V>, Entry<K, V>>> - parentBuilder, final Bound from, final Bound to) { - final TestSortedMapGenerator<K, V> delegate - = (TestSortedMapGenerator<K, V>) parentBuilder.getSubjectGenerator().getInnerGenerator(); - - List<Feature<?>> features = new ArrayList<Feature<?>>(); - features.add(NoRecurse.SUBMAP); - features.addAll(parentBuilder.getFeatures()); - - return newBuilderUsing(delegate, to, from) - .named(parentBuilder.getName() + " subMap " + from + "-" + to) - .withFeatures(features) - .suppressing(parentBuilder.getSuppressedTests()) - .createTestSuite(); - } - - /** Like using() but overrideable by NavigableMapTestSuiteBuilder. */ - SortedMapTestSuiteBuilder<K, V> newBuilderUsing( - TestSortedMapGenerator<K, V> delegate, Bound to, Bound from) { - return using(new SortedMapSubmapTestMapGenerator<K, V>(delegate, to, from)); - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/SortedSetTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/SortedSetTestSuiteBuilder.java deleted file mode 100644 index 2f457a1..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/SortedSetTestSuiteBuilder.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2010 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.testing; - -import com.google.common.collect.testing.features.CollectionFeature; -import com.google.common.collect.testing.features.Feature; -import com.google.common.collect.testing.testers.SortedSetNavigationTester; - -import junit.framework.TestSuite; - -import java.util.List; - -/** - * Creates, based on your criteria, a JUnit test suite that exhaustively tests - * a SortedSet implementation. - */ -public class SortedSetTestSuiteBuilder<E> extends SetTestSuiteBuilder<E> { - public static <E> SortedSetTestSuiteBuilder<E> using( - TestSetGenerator<E> generator) { - SortedSetTestSuiteBuilder<E> builder = - new SortedSetTestSuiteBuilder<E>(); - builder.usingGenerator(generator); - return builder; - } - - @Override protected List<Class<? extends AbstractTester>> getTesters() { - List<Class<? extends AbstractTester>> testers = - Helpers.copyToList(super.getTesters()); - testers.add(SortedSetNavigationTester.class); - return testers; - } - - @Override public TestSuite createTestSuite() { - if (!getFeatures().contains(CollectionFeature.KNOWN_ORDER)) { - List<Feature<?>> features = Helpers.copyToList(getFeatures()); - features.add(CollectionFeature.KNOWN_ORDER); - withFeatures(features); - } - return super.createTestSuite(); - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/TestCharacterListGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestCharacterListGenerator.java deleted file mode 100644 index 9f9befe..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/TestCharacterListGenerator.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * 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.testing; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.testing.SampleElements.Chars; - -import java.util.List; - -/** - * Generates {@code List<Character>} instances for test suites. - * - * <p>This class is GWT compatible. - * - * @author Kevin Bourrillion - * @author Louis Wasserman - */ -@GwtCompatible -public abstract class TestCharacterListGenerator - implements TestListGenerator<Character> { - @Override - public SampleElements<Character> samples() { - return new Chars(); - } - - @Override - public List<Character> create(Object... elements) { - Character[] array = new Character[elements.length]; - int i = 0; - for (Object e : elements) { - array[i++] = (Character) e; - } - return create(array); - } - - /** - * Creates a new collection containing the given elements; implement this - * method instead of {@link #create(Object...)}. - */ - protected abstract List<Character> create(Character[] elements); - - @Override - public Character[] createArray(int length) { - return new Character[length]; - } - - /** Returns the original element list, unchanged. */ - @Override - public List<Character> order(List<Character> insertionOrder) { - return insertionOrder; - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/TestCollectionGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestCollectionGenerator.java index f50b695..92367a2 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestCollectionGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestCollectionGenerator.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; - import java.util.Collection; /** @@ -27,7 +25,6 @@ import java.util.Collection; * * @author Kevin Bourrillion */ -@GwtCompatible public interface TestCollectionGenerator<E> extends TestContainerGenerator<Collection<E>, E> { } diff --git a/guava-testlib/src/com/google/common/collect/testing/TestCollidingSetGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestCollidingSetGenerator.java index f053f4e..ed26b65 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestCollidingSetGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestCollidingSetGenerator.java @@ -16,7 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.SampleElements.Colliders; import java.util.List; @@ -28,7 +27,6 @@ import java.util.List; * * @author Kevin Bourrillion */ -@GwtCompatible public abstract class TestCollidingSetGenerator implements TestSetGenerator<Object> { @Override diff --git a/guava-testlib/src/com/google/common/collect/testing/TestContainerGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestContainerGenerator.java index 00d167c..1511040 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestContainerGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestContainerGenerator.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; - import java.util.Collection; import java.util.List; import java.util.Map; @@ -32,7 +30,6 @@ import java.util.Map; * * @author George van den Driessche */ -@GwtCompatible public interface TestContainerGenerator<T, E> { /** * Returns the sample elements that this generate populates its container diff --git a/guava-testlib/src/com/google/common/collect/testing/TestEnumMapGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestEnumMapGenerator.java index 579c522..42bc48a 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestEnumMapGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestEnumMapGenerator.java @@ -16,10 +16,6 @@ package com.google.common.collect.testing; -import static com.google.common.collect.testing.Helpers.orderEntriesByKey; - -import com.google.common.annotations.GwtCompatible; - import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -31,7 +27,6 @@ import java.util.Map.Entry; * * @author Kevin Bourrillion */ -@GwtCompatible public abstract class TestEnumMapGenerator implements TestMapGenerator<AnEnum, String> { @@ -78,10 +73,10 @@ public abstract class TestEnumMapGenerator return new String[length]; } - /** Returns the elements sorted in natural order. */ + /** Returns the original element list, unchanged. */ @Override public Iterable<Entry<AnEnum, String>> order( List<Entry<AnEnum, String>> insertionOrder) { - return orderEntriesByKey(insertionOrder); + return insertionOrder; } -} +}
\ No newline at end of file diff --git a/guava-testlib/src/com/google/common/collect/testing/TestEnumSetGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestEnumSetGenerator.java index f4b9c80..fd7155c 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestEnumSetGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestEnumSetGenerator.java @@ -16,7 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.SampleElements.Enums; import java.util.Collections; @@ -30,7 +29,6 @@ import java.util.Set; * * @author Kevin Bourrillion */ -@GwtCompatible public abstract class TestEnumSetGenerator implements TestSetGenerator<AnEnum> { @Override public SampleElements<AnEnum> samples() { diff --git a/guava-testlib/src/com/google/common/collect/testing/TestIntegerSetGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestIntegerSetGenerator.java deleted file mode 100644 index 7e11e3a..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/TestIntegerSetGenerator.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * 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.testing; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.testing.SampleElements.Ints; - -import java.util.List; -import java.util.Set; - -/** - * Create integer sets for collection tests. - * - * <p>This class is GWT compatible. - * - * @author Gregory Kick - */ -@GwtCompatible -public abstract class TestIntegerSetGenerator implements TestSetGenerator<Integer> { - @Override public SampleElements<Integer> samples() { - return new Ints(); - } - - @Override public Set<Integer> create(Object... elements) { - Integer[] array = new Integer[elements.length]; - int i = 0; - for (Object e : elements) { - array[i++] = (Integer) e; - } - return create(array); - } - - protected abstract Set<Integer> create(Integer[] elements); - - @Override public Integer[] createArray(int length) { - return new Integer[length]; - } - - /** - * {@inheritDoc} - * - * <p>By default, returns the supplied elements in their given order; however, - * generators for containers with a known order other than insertion order - * must override this method. - * - * <p>Note: This default implementation is overkill (but valid) for an - * unordered container. An equally valid implementation for an unordered - * container is to throw an exception. The chosen implementation, however, has - * the advantage of working for insertion-ordered containers, as well. - */ - @Override public List<Integer> order(List<Integer> insertionOrder) { - return insertionOrder; - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/TestIntegerSortedSetGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestIntegerSortedSetGenerator.java deleted file mode 100644 index 8e577e8..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/TestIntegerSortedSetGenerator.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2008 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.testing; - -import com.google.common.annotations.GwtCompatible; - -import java.util.Collections; -import java.util.List; -import java.util.SortedSet; - -/** - * Create integer sets for testing collections that are sorted by natural - * ordering. - * - * <p>This class is GWT compatible. - * - * @author Chris Povirk - * @author Jared Levy - */ -@GwtCompatible -public abstract class TestIntegerSortedSetGenerator - extends TestIntegerSetGenerator { - @Override protected abstract SortedSet<Integer> create(Integer[] elements); - - /** Sorts the elements by their natural ordering. */ - @Override public List<Integer> order(List<Integer> insertionOrder) { - Collections.sort(insertionOrder); - return insertionOrder; - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/TestIteratorGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestIteratorGenerator.java index 8304364..1c718c5 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestIteratorGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestIteratorGenerator.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; - import java.util.Iterator; /** @@ -29,7 +27,6 @@ import java.util.Iterator; * * @author George van den Driessche */ -@GwtCompatible public interface TestIteratorGenerator<E> { Iterator<E> get(); } diff --git a/guava-testlib/src/com/google/common/collect/testing/TestListGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestListGenerator.java index 2027ce4..11e2604 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestListGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestListGenerator.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; - import java.util.List; /** @@ -27,7 +25,6 @@ import java.util.List; * * @author Kevin Bourrillion */ -@GwtCompatible public interface TestListGenerator<E> extends TestCollectionGenerator<E> { @Override List<E> create(Object... elements); diff --git a/guava-testlib/src/com/google/common/collect/testing/TestMapEntrySetGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestMapEntrySetGenerator.java index c57f7ac..e1a9611 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestMapEntrySetGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestMapEntrySetGenerator.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; - import java.util.List; import java.util.Map; import java.util.Set; @@ -29,7 +27,6 @@ import java.util.Set; * * @author Jesse Wilson */ -@GwtCompatible public abstract class TestMapEntrySetGenerator<K, V> implements TestSetGenerator<Map.Entry<K, V>> { private final SampleElements<K> keys; @@ -49,7 +46,7 @@ public abstract class TestMapEntrySetGenerator<K, V> @Override public Set<Map.Entry<K, V>> create(Object... elements) { Map.Entry<K, V>[] entries = createArray(elements.length); - System.arraycopy(elements, 0, entries, 0, elements.length); + Platform.unsafeArrayCopy(elements, 0, entries, 0, elements.length); return createFromEntries(entries); } diff --git a/guava-testlib/src/com/google/common/collect/testing/TestMapGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestMapGenerator.java index 2d18e06..e7add5a 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestMapGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestMapGenerator.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; - import java.util.Map; /** @@ -27,7 +25,6 @@ import java.util.Map; * * @author George van den Driessche */ -@GwtCompatible public interface TestMapGenerator<K, V> extends TestContainerGenerator<Map<K, V>, Map.Entry<K, V>> { K[] createKeyArray(int length); diff --git a/guava-testlib/src/com/google/common/collect/testing/TestQueueGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestQueueGenerator.java index 5bb3188..f8d8dc6 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestQueueGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestQueueGenerator.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; - import java.util.Queue; /** @@ -27,7 +25,6 @@ import java.util.Queue; * * @author Jared Levy */ -@GwtCompatible public interface TestQueueGenerator<E> extends TestCollectionGenerator<E> { @Override Queue<E> create(Object... elements); diff --git a/guava-testlib/src/com/google/common/collect/testing/TestSetGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestSetGenerator.java index 2586f70..106112b 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestSetGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestSetGenerator.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; - import java.util.Set; /** @@ -27,7 +25,6 @@ import java.util.Set; * * @author Kevin Bourrillion */ -@GwtCompatible public interface TestSetGenerator<E> extends TestCollectionGenerator<E> { @Override Set<E> create(Object... elements); diff --git a/guava-testlib/src/com/google/common/collect/testing/TestSortedMapGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestSortedMapGenerator.java deleted file mode 100644 index 9a9ab73..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/TestSortedMapGenerator.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2012 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.testing; - -import com.google.common.annotations.GwtCompatible; - -import java.util.Map; -import java.util.SortedMap; - -/** - * Creates sorted maps, containing sample elements, to be tested. - * - * <p>This class is GWT compatible. - * - * @author Louis Wasserman - */ -@GwtCompatible -public interface TestSortedMapGenerator<K, V> extends TestMapGenerator<K, V> { - @Override - SortedMap<K, V> create(Object... elements); - - /** - * Returns an entry with a key less than the keys of the {@link #samples()} - * and less than the key of {@link #belowSamplesGreater()}. - */ - Map.Entry<K, V> belowSamplesLesser(); - - /** - * Returns an entry with a key less than the keys of the {@link #samples()} - * but greater than the key of {@link #belowSamplesLesser()}. - */ - Map.Entry<K, V> belowSamplesGreater(); - - /** - * Returns an entry with a key greater than the keys of the {@link #samples()} - * but less than the key of {@link #aboveSamplesGreater()}. - */ - Map.Entry<K, V> aboveSamplesLesser(); - - /** - * Returns an entry with a key greater than the keys of the {@link #samples()} - * and greater than the key of {@link #aboveSamplesLesser()}. - */ - Map.Entry<K, V> aboveSamplesGreater(); -} diff --git a/guava-testlib/src/com/google/common/collect/testing/TestStringCollectionGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestStringCollectionGenerator.java index fa4b8f6..2248853 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestStringCollectionGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestStringCollectionGenerator.java @@ -16,7 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.SampleElements.Strings; import java.util.Collection; @@ -29,7 +28,6 @@ import java.util.List; * * @author Jared Levy */ -@GwtCompatible public abstract class TestStringCollectionGenerator implements TestCollectionGenerator<String> { @Override diff --git a/guava-testlib/src/com/google/common/collect/testing/TestStringListGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestStringListGenerator.java index 842d653..ea024ad 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestStringListGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestStringListGenerator.java @@ -16,7 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.SampleElements.Strings; import java.util.List; @@ -28,7 +27,6 @@ import java.util.List; * * @author Kevin Bourrillion */ -@GwtCompatible public abstract class TestStringListGenerator implements TestListGenerator<String> { @Override diff --git a/guava-testlib/src/com/google/common/collect/testing/TestStringMapGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestStringMapGenerator.java index 9505c8e..2f9b51b 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestStringMapGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestStringMapGenerator.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; - import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -32,7 +30,6 @@ import java.util.Map.Entry; * @author Jared Levy * @author George van den Driessche */ -@GwtCompatible public abstract class TestStringMapGenerator implements TestMapGenerator<String, String> { @@ -48,7 +45,7 @@ public abstract class TestStringMapGenerator } @Override - public Map<String, String> create(Object... entries) { + public final Map<String, String> create(Object... entries) { @SuppressWarnings("unchecked") Entry<String, String>[] array = new Entry[entries.length]; int i = 0; diff --git a/guava-testlib/src/com/google/common/collect/testing/TestStringQueueGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestStringQueueGenerator.java index d2ba7ce..d116044 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestStringQueueGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestStringQueueGenerator.java @@ -16,7 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.SampleElements.Strings; import java.util.List; @@ -29,7 +28,6 @@ import java.util.Queue; * * @author Jared Levy */ -@GwtCompatible public abstract class TestStringQueueGenerator implements TestQueueGenerator<String> { diff --git a/guava-testlib/src/com/google/common/collect/testing/TestStringSetGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestStringSetGenerator.java index 339a79e..712b533 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestStringSetGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestStringSetGenerator.java @@ -16,7 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.SampleElements.Strings; import java.util.List; @@ -29,7 +28,6 @@ import java.util.Set; * * @author Kevin Bourrillion */ -@GwtCompatible public abstract class TestStringSetGenerator implements TestSetGenerator<String> { @Override diff --git a/guava-testlib/src/com/google/common/collect/testing/TestStringSortedMapGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestStringSortedMapGenerator.java deleted file mode 100644 index 6c357e6..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/TestStringSortedMapGenerator.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (C) 2008 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.testing; - -import static com.google.common.collect.testing.Helpers.orderEntriesByKey; - -import com.google.common.annotations.GwtCompatible; - -import java.util.List; -import java.util.Map.Entry; -import java.util.SortedMap; - -/** - * Implementation helper for {@link TestMapGenerator} for use with sorted maps of strings. - * - * <p>This class is GWT compatible. - * - * @author Chris Povirk - */ -@GwtCompatible -public abstract class TestStringSortedMapGenerator extends TestStringMapGenerator - implements TestSortedMapGenerator<String, String> { - @Override - public Entry<String, String> belowSamplesLesser() { - return Helpers.mapEntry("!! a", "below view"); - } - - @Override - public Entry<String, String> belowSamplesGreater() { - return Helpers.mapEntry("!! b", "below view"); - } - - @Override - public Entry<String, String> aboveSamplesLesser() { - return Helpers.mapEntry("~~ a", "above view"); - } - - @Override - public Entry<String, String> aboveSamplesGreater() { - return Helpers.mapEntry("~~ b", "above view"); - } - - @Override - public Iterable<Entry<String, String>> order(List<Entry<String, String>> insertionOrder) { - return orderEntriesByKey(insertionOrder); - } - - @Override - protected abstract SortedMap<String, String> create(Entry<String, String>[] entries); - - @Override - public SortedMap<String, String> create(Object... entries) { - return (SortedMap<String, String>) super.create(entries); - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/TestStringSortedSetGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestStringSortedSetGenerator.java index c2e7cc0..833ffe9 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestStringSortedSetGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestStringSortedSetGenerator.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; - import java.util.Collections; import java.util.List; import java.util.SortedSet; @@ -30,7 +28,6 @@ import java.util.SortedSet; * * @author Jared Levy */ -@GwtCompatible public abstract class TestStringSortedSetGenerator extends TestStringSetGenerator { @Override protected abstract SortedSet<String> create(String[] elements); diff --git a/guava-testlib/src/com/google/common/collect/testing/TestSubjectGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestSubjectGenerator.java index 3b968e5..fa8970d 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestSubjectGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestSubjectGenerator.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; - /** * To be implemented by test generators that can produce test subjects without * requiring any parameters. @@ -28,7 +26,6 @@ import com.google.common.annotations.GwtCompatible; * * @author George van den Driessche */ -@GwtCompatible public interface TestSubjectGenerator<T> { T createTestSubject(); } diff --git a/guava-testlib/src/com/google/common/collect/testing/TestUnhashableCollectionGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestUnhashableCollectionGenerator.java index 92020c9..3010b47 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestUnhashableCollectionGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestUnhashableCollectionGenerator.java @@ -16,7 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.SampleElements.Unhashables; import java.util.Collection; @@ -29,7 +28,6 @@ import java.util.List; * * @author Regina O'Dell */ -@GwtCompatible public abstract class TestUnhashableCollectionGenerator<T extends Collection<UnhashableObject>> implements TestCollectionGenerator<UnhashableObject> { @@ -64,4 +62,4 @@ public abstract class List<UnhashableObject> insertionOrder) { return insertionOrder; } -} +}
\ No newline at end of file diff --git a/guava-testlib/src/com/google/common/collect/testing/TestsForListsInJavaUtil.java b/guava-testlib/src/com/google/common/collect/testing/TestsForListsInJavaUtil.java index 8191d70..c9961f3 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestsForListsInJavaUtil.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestsForListsInJavaUtil.java @@ -102,7 +102,7 @@ public class TestsForListsInJavaUtil { }) .named("emptyList") .withFeatures( - CollectionFeature.SERIALIZABLE, + CollectionFeature.NONE, CollectionSize.ZERO) .suppressing(suppressForEmptyList()) .createTestSuite(); @@ -117,7 +117,7 @@ public class TestsForListsInJavaUtil { }) .named("singletonList") .withFeatures( - CollectionFeature.SERIALIZABLE, + CollectionFeature.NONE, CollectionFeature.ALLOWS_NULL_VALUES, CollectionSize.ONE) .suppressing(suppressForSingletonList()) @@ -134,7 +134,6 @@ public class TestsForListsInJavaUtil { .named("Arrays.asList") .withFeatures( ListFeature.SUPPORTS_SET, - CollectionFeature.SERIALIZABLE, CollectionFeature.ALLOWS_NULL_VALUES, CollectionSize.ANY) .suppressing(suppressForArraysAsList()) @@ -151,9 +150,7 @@ public class TestsForListsInJavaUtil { .named("ArrayList") .withFeatures( ListFeature.GENERAL_PURPOSE, - CollectionFeature.SERIALIZABLE, CollectionFeature.ALLOWS_NULL_VALUES, - CollectionFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION, CollectionSize.ANY) .suppressing(suppressForArrayList()) .createTestSuite(); @@ -169,9 +166,7 @@ public class TestsForListsInJavaUtil { .named("LinkedList") .withFeatures( ListFeature.GENERAL_PURPOSE, - CollectionFeature.SERIALIZABLE, CollectionFeature.ALLOWS_NULL_VALUES, - CollectionFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION, CollectionSize.ANY) .suppressing(suppressForLinkedList()) .createTestSuite(); @@ -188,7 +183,6 @@ public class TestsForListsInJavaUtil { .named("CopyOnWriteArrayList") .withFeatures( ListFeature.GENERAL_PURPOSE, - CollectionFeature.SERIALIZABLE, CollectionFeature.ALLOWS_NULL_VALUES, CollectionSize.ANY) .suppressing(suppressForCopyOnWriteArrayList()) @@ -206,7 +200,7 @@ public class TestsForListsInJavaUtil { }) .named("unmodifiableList/ArrayList") .withFeatures( - CollectionFeature.SERIALIZABLE, + CollectionFeature.NONE, CollectionFeature.ALLOWS_NULL_VALUES, CollectionSize.ANY) .suppressing(suppressForUnmodifiableList()) @@ -225,7 +219,6 @@ public class TestsForListsInJavaUtil { .named("checkedList/ArrayList") .withFeatures( ListFeature.GENERAL_PURPOSE, - CollectionFeature.SERIALIZABLE, CollectionFeature.RESTRICTS_ELEMENTS, CollectionFeature.ALLOWS_NULL_VALUES, CollectionSize.ANY) diff --git a/guava-testlib/src/com/google/common/collect/testing/TestsForMapsInJavaUtil.java b/guava-testlib/src/com/google/common/collect/testing/TestsForMapsInJavaUtil.java index fa996b3..6b71f22 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestsForMapsInJavaUtil.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestsForMapsInJavaUtil.java @@ -23,7 +23,6 @@ import com.google.common.collect.testing.features.MapFeature; import junit.framework.Test; import junit.framework.TestSuite; -import java.io.Serializable; import java.lang.reflect.Method; import java.util.Collection; import java.util.Collections; @@ -31,12 +30,11 @@ import java.util.Comparator; import java.util.EnumMap; import java.util.HashMap; import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.SortedMap; import java.util.TreeMap; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentSkipListMap; /** * Generates a test suite covering the {@link Map} implementations in the @@ -46,7 +44,6 @@ import java.util.concurrent.ConcurrentSkipListMap; * @author Kevin Bourrillion */ public class TestsForMapsInJavaUtil { - public static Test suite() { return new TestsForMapsInJavaUtil().allTests(); } @@ -57,12 +54,9 @@ public class TestsForMapsInJavaUtil { suite.addTest(testsForSingletonMap()); suite.addTest(testsForHashMap()); suite.addTest(testsForLinkedHashMap()); - suite.addTest(testsForTreeMapNatural()); - suite.addTest(testsForTreeMapWithComparator()); + suite.addTest(testsForTreeMap()); suite.addTest(testsForEnumMap()); suite.addTest(testsForConcurrentHashMap()); - suite.addTest(testsForConcurrentSkipListMapNatural()); - suite.addTest(testsForConcurrentSkipListMapWithComparator()); return suite; } @@ -78,10 +72,7 @@ public class TestsForMapsInJavaUtil { protected Collection<Method> suppressForLinkedHashMap() { return Collections.emptySet(); } - protected Collection<Method> suppressForTreeMapNatural() { - return Collections.emptySet(); - } - protected Collection<Method> suppressForTreeMapWithComparator() { + protected Collection<Method> suppressForTreeMap() { return Collections.emptySet(); } protected Collection<Method> suppressForEnumMap() { @@ -90,9 +81,6 @@ public class TestsForMapsInJavaUtil { protected Collection<Method> suppressForConcurrentHashMap() { return Collections.emptySet(); } - protected Collection<Method> suppressForConcurrentSkipListMap() { - return Collections.emptySet(); - } public Test testsForEmptyMap() { return MapTestSuiteBuilder @@ -104,7 +92,7 @@ public class TestsForMapsInJavaUtil { }) .named("emptyMap") .withFeatures( - CollectionFeature.SERIALIZABLE, + CollectionFeature.NONE, CollectionSize.ZERO) .suppressing(suppressForEmptyMap()) .createTestSuite(); @@ -123,7 +111,6 @@ public class TestsForMapsInJavaUtil { .withFeatures( MapFeature.ALLOWS_NULL_KEYS, MapFeature.ALLOWS_NULL_VALUES, - CollectionFeature.SERIALIZABLE, CollectionSize.ONE) .suppressing(suppressForSingletonMap()) .createTestSuite(); @@ -136,14 +123,20 @@ public class TestsForMapsInJavaUtil { Entry<String, String>[] entries) { return toHashMap(entries); } + @Override public Iterable<Entry<String, String>> order( + List<Entry<String, String>> insertionOrder) { + /* + * For convenience, make this test double as a test that no tester + * calls order() on a container without the KNOWN_ORDER feature. + */ + throw new UnsupportedOperationException(); + } }) .named("HashMap") .withFeatures( MapFeature.GENERAL_PURPOSE, MapFeature.ALLOWS_NULL_KEYS, MapFeature.ALLOWS_NULL_VALUES, - MapFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION, - CollectionFeature.SERIALIZABLE, CollectionSize.ANY) .suppressing(suppressForHashMap()) .createTestSuite(); @@ -162,57 +155,29 @@ public class TestsForMapsInJavaUtil { MapFeature.GENERAL_PURPOSE, MapFeature.ALLOWS_NULL_KEYS, MapFeature.ALLOWS_NULL_VALUES, - MapFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION, CollectionFeature.KNOWN_ORDER, - CollectionFeature.SERIALIZABLE, CollectionSize.ANY) .suppressing(suppressForLinkedHashMap()) .createTestSuite(); } - public Test testsForTreeMapNatural() { + public Test testsForTreeMap() { return NavigableMapTestSuiteBuilder - .using(new TestStringSortedMapGenerator() { - @Override protected SortedMap<String, String> create( - Entry<String, String>[] entries) { - /* - * TODO(cpovirk): it would be nice to create an input Map and use - * the copy constructor here and in the other tests - */ - return populate(new TreeMap<String, String>(), entries); - } - }) - .named("TreeMap, natural") - .withFeatures( - MapFeature.GENERAL_PURPOSE, - MapFeature.ALLOWS_NULL_VALUES, - MapFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION, - CollectionFeature.KNOWN_ORDER, - CollectionFeature.SERIALIZABLE, - CollectionSize.ANY) - .suppressing(suppressForTreeMapNatural()) - .createTestSuite(); - } - - public Test testsForTreeMapWithComparator() { - return NavigableMapTestSuiteBuilder - .using(new TestStringSortedMapGenerator() { - @Override protected SortedMap<String, String> create( + .using(new TestStringMapGenerator() { + @Override protected Map<String, String> create( Entry<String, String>[] entries) { return populate(new TreeMap<String, String>( arbitraryNullFriendlyComparator()), entries); } }) - .named("TreeMap, with comparator") + .named("TreeMap") .withFeatures( MapFeature.GENERAL_PURPOSE, MapFeature.ALLOWS_NULL_KEYS, MapFeature.ALLOWS_NULL_VALUES, - MapFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION, CollectionFeature.KNOWN_ORDER, - CollectionFeature.SERIALIZABLE, CollectionSize.ANY) - .suppressing(suppressForTreeMapWithComparator()) + .suppressing(suppressForTreeMap()) .createTestSuite(); } @@ -231,7 +196,6 @@ public class TestsForMapsInJavaUtil { MapFeature.ALLOWS_NULL_VALUES, MapFeature.RESTRICTS_KEYS, CollectionFeature.KNOWN_ORDER, - CollectionFeature.SERIALIZABLE, CollectionSize.ANY) .suppressing(suppressForEnumMap()) .createTestSuite(); @@ -248,49 +212,11 @@ public class TestsForMapsInJavaUtil { .named("ConcurrentHashMap") .withFeatures( MapFeature.GENERAL_PURPOSE, - CollectionFeature.SERIALIZABLE, CollectionSize.ANY) .suppressing(suppressForConcurrentHashMap()) .createTestSuite(); } - public Test testsForConcurrentSkipListMapNatural() { - return NavigableMapTestSuiteBuilder - .using(new TestStringSortedMapGenerator() { - @Override protected SortedMap<String, String> create( - Entry<String, String>[] entries) { - return populate(new ConcurrentSkipListMap<String, String>(), entries); - } - }) - .named("ConcurrentSkipListMap, natural") - .withFeatures( - MapFeature.GENERAL_PURPOSE, - CollectionFeature.KNOWN_ORDER, - CollectionFeature.SERIALIZABLE, - CollectionSize.ANY) - .suppressing(suppressForConcurrentSkipListMap()) - .createTestSuite(); - } - - public Test testsForConcurrentSkipListMapWithComparator() { - return NavigableMapTestSuiteBuilder - .using(new TestStringSortedMapGenerator() { - @Override protected SortedMap<String, String> create( - Entry<String, String>[] entries) { - return populate(new ConcurrentSkipListMap<String, String>( - arbitraryNullFriendlyComparator()), entries); - } - }) - .named("ConcurrentSkipListMap, with comparator") - .withFeatures( - MapFeature.GENERAL_PURPOSE, - CollectionFeature.KNOWN_ORDER, - CollectionFeature.SERIALIZABLE, - CollectionSize.ANY) - .suppressing(suppressForConcurrentSkipListMap()) - .createTestSuite(); - } - // TODO: IdentityHashMap, AbstractMap private static Map<String, String> toHashMap( @@ -300,8 +226,8 @@ public class TestsForMapsInJavaUtil { // TODO: call conversion constructors or factory methods instead of using // populate() on an empty map - private static <T, M extends Map<T, String>> M populate( - M map, Entry<T, String>[] entries) { + private static <T> Map<T, String> populate( + Map<T, String> map, Entry<T, String>[] entries) { for (Entry<T, String> entry : entries) { map.put(entry.getKey(), entry.getValue()); } @@ -309,13 +235,11 @@ public class TestsForMapsInJavaUtil { } static <T> Comparator<T> arbitraryNullFriendlyComparator() { - return new NullFriendlyComparator<T>(); - } - - private static final class NullFriendlyComparator<T> implements Comparator<T>, Serializable { - @Override - public int compare(T left, T right) { - return String.valueOf(left).compareTo(String.valueOf(right)); - } + return new Comparator<T>() { + @Override + public int compare(T left, T right) { + return String.valueOf(left).compareTo(String.valueOf(right)); + } + }; } } diff --git a/guava-testlib/src/com/google/common/collect/testing/TestsForSetsInJavaUtil.java b/guava-testlib/src/com/google/common/collect/testing/TestsForSetsInJavaUtil.java index b6484ac..4b4b924 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestsForSetsInJavaUtil.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestsForSetsInJavaUtil.java @@ -19,12 +19,10 @@ package com.google.common.collect.testing; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; import com.google.common.collect.testing.features.SetFeature; -import com.google.common.collect.testing.testers.CollectionIteratorTester; import junit.framework.Test; import junit.framework.TestSuite; -import java.io.Serializable; import java.lang.reflect.Method; import java.util.AbstractSet; import java.util.Collection; @@ -37,7 +35,6 @@ import java.util.LinkedHashSet; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; -import java.util.concurrent.ConcurrentSkipListSet; import java.util.concurrent.CopyOnWriteArraySet; /** @@ -66,8 +63,6 @@ public class TestsForSetsInJavaUtil { suite.addTest(testsForCheckedSet()); suite.addTest(testsForAbstractSet()); suite.addTest(testsForBadlyCollidingHashSet()); - suite.addTest(testsForConcurrentSkipListSetNatural()); - suite.addTest(testsForConcurrentSkipListSetWithComparator()); return suite; } @@ -94,8 +89,7 @@ public class TestsForSetsInJavaUtil { return Collections.emptySet(); } protected Collection<Method> suppressForCopyOnWriteArraySet() { - return Collections.singleton(CollectionIteratorTester - .getIteratorKnownOrderRemoveSupportedMethod()); + return Collections.emptySet(); } protected Collection<Method> suppressForUnmodifiableSet() { return Collections.emptySet(); @@ -106,12 +100,6 @@ public class TestsForSetsInJavaUtil { protected Collection<Method> suppressForAbstractSet() { return Collections.emptySet(); } - protected Collection<Method> suppressForConcurrentSkipListSetNatural() { - return Collections.emptySet(); - } - protected Collection<Method> suppressForConcurrentSkipListSetWithComparator() { - return Collections.emptySet(); - } public Test testsForEmptySet() { return SetTestSuiteBuilder @@ -122,7 +110,7 @@ public class TestsForSetsInJavaUtil { }) .named("emptySet") .withFeatures( - CollectionFeature.SERIALIZABLE, + CollectionFeature.NONE, CollectionSize.ZERO) .suppressing(suppressForEmptySet()) .createTestSuite(); @@ -137,7 +125,7 @@ public class TestsForSetsInJavaUtil { }) .named("singleton") .withFeatures( - CollectionFeature.SERIALIZABLE, + CollectionFeature.NONE, CollectionFeature.ALLOWS_NULL_VALUES, CollectionSize.ONE) .suppressing(suppressForSingletonSet()) @@ -154,9 +142,7 @@ public class TestsForSetsInJavaUtil { .named("HashSet") .withFeatures( SetFeature.GENERAL_PURPOSE, - CollectionFeature.SERIALIZABLE, CollectionFeature.ALLOWS_NULL_VALUES, - CollectionFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION, CollectionSize.ANY) .suppressing(suppressForHashSet()) .createTestSuite(); @@ -172,10 +158,8 @@ public class TestsForSetsInJavaUtil { .named("LinkedHashSet") .withFeatures( SetFeature.GENERAL_PURPOSE, - CollectionFeature.SERIALIZABLE, CollectionFeature.ALLOWS_NULL_VALUES, CollectionFeature.KNOWN_ORDER, - CollectionFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION, CollectionSize.ANY) .suppressing(suppressForLinkedHashSet()) .createTestSuite(); @@ -193,7 +177,6 @@ public class TestsForSetsInJavaUtil { .named("EnumSet") .withFeatures( SetFeature.GENERAL_PURPOSE, - CollectionFeature.SERIALIZABLE, CollectionFeature.KNOWN_ORDER, CollectionFeature.RESTRICTS_ELEMENTS, CollectionSize.ANY) @@ -211,9 +194,7 @@ public class TestsForSetsInJavaUtil { .named("TreeSet, natural") .withFeatures( SetFeature.GENERAL_PURPOSE, - CollectionFeature.SERIALIZABLE, CollectionFeature.KNOWN_ORDER, - CollectionFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION, CollectionSize.ANY) .suppressing(suppressForTreeSetNatural()) .createTestSuite(); @@ -232,10 +213,8 @@ public class TestsForSetsInJavaUtil { .named("TreeSet, with comparator") .withFeatures( SetFeature.GENERAL_PURPOSE, - CollectionFeature.SERIALIZABLE, CollectionFeature.ALLOWS_NULL_VALUES, CollectionFeature.KNOWN_ORDER, - CollectionFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION, CollectionSize.ANY) .suppressing(suppressForTreeSetWithComparator()) .createTestSuite(); @@ -252,7 +231,6 @@ public class TestsForSetsInJavaUtil { .named("CopyOnWriteArraySet") .withFeatures( SetFeature.GENERAL_PURPOSE, - CollectionFeature.SERIALIZABLE, CollectionFeature.ALLOWS_NULL_VALUES, CollectionFeature.KNOWN_ORDER, CollectionSize.ANY) @@ -272,7 +250,6 @@ public class TestsForSetsInJavaUtil { .named("unmodifiableSet/HashSet") .withFeatures( CollectionFeature.NONE, - CollectionFeature.SERIALIZABLE, CollectionFeature.ALLOWS_NULL_VALUES, CollectionSize.ANY) .suppressing(suppressForUnmodifiableSet()) @@ -291,7 +268,6 @@ public class TestsForSetsInJavaUtil { .named("checkedSet/HashSet") .withFeatures( SetFeature.GENERAL_PURPOSE, - CollectionFeature.SERIALIZABLE, CollectionFeature.ALLOWS_NULL_VALUES, CollectionFeature.RESTRICTS_ELEMENTS, CollectionSize.ANY) @@ -341,43 +317,6 @@ public class TestsForSetsInJavaUtil { .createTestSuite(); } - public Test testsForConcurrentSkipListSetNatural() { - return SetTestSuiteBuilder - .using(new TestStringSortedSetGenerator() { - @Override public SortedSet<String> create(String[] elements) { - return new ConcurrentSkipListSet<String>(MinimalCollection.of(elements)); - } - }) - .named("ConcurrentSkipListSet, natural") - .withFeatures( - SetFeature.GENERAL_PURPOSE, - CollectionFeature.SERIALIZABLE, - CollectionFeature.KNOWN_ORDER, - CollectionSize.ANY) - .suppressing(suppressForConcurrentSkipListSetNatural()) - .createTestSuite(); - } - - public Test testsForConcurrentSkipListSetWithComparator() { - return SetTestSuiteBuilder - .using(new TestStringSortedSetGenerator() { - @Override public SortedSet<String> create(String[] elements) { - SortedSet<String> set - = new ConcurrentSkipListSet<String>(arbitraryNullFriendlyComparator()); - Collections.addAll(set, elements); - return set; - } - }) - .named("ConcurrentSkipListSet, with comparator") - .withFeatures( - SetFeature.GENERAL_PURPOSE, - CollectionFeature.SERIALIZABLE, - CollectionFeature.KNOWN_ORDER, - CollectionSize.ANY) - .suppressing(suppressForConcurrentSkipListSetWithComparator()) - .createTestSuite(); - } - private static String[] dedupe(String[] elements) { Set<String> tmp = new LinkedHashSet<String>(); Collections.addAll(tmp, elements); @@ -385,14 +324,11 @@ public class TestsForSetsInJavaUtil { } static <T> Comparator<T> arbitraryNullFriendlyComparator() { - return new NullFriendlyComparator<T>(); - } - - private static final class NullFriendlyComparator<T> - implements Comparator<T>, Serializable { - @Override - public int compare(T left, T right) { - return String.valueOf(left).compareTo(String.valueOf(right)); - } + return new Comparator<T>() { + @Override + public int compare(T left, T right) { + return String.valueOf(left).compareTo(String.valueOf(right)); + } + }; } } diff --git a/guava-testlib/src/com/google/common/collect/testing/UnhashableObject.java b/guava-testlib/src/com/google/common/collect/testing/UnhashableObject.java index 014995d..d038cfb 100644 --- a/guava-testlib/src/com/google/common/collect/testing/UnhashableObject.java +++ b/guava-testlib/src/com/google/common/collect/testing/UnhashableObject.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; - /** * An unhashable object to be used in testing as values in our collections. * @@ -25,7 +23,6 @@ import com.google.common.annotations.GwtCompatible; * * @author Regina O'Dell */ -@GwtCompatible public class UnhashableObject implements Comparable<UnhashableObject> { private final int value; diff --git a/guava-testlib/src/com/google/common/collect/testing/WrongType.java b/guava-testlib/src/com/google/common/collect/testing/WrongType.java index d49e942..0fecaba 100644 --- a/guava-testlib/src/com/google/common/collect/testing/WrongType.java +++ b/guava-testlib/src/com/google/common/collect/testing/WrongType.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing; -import com.google.common.annotations.GwtCompatible; - /** * A type which will never be used as the element type of any collection in our * tests, and so can be used to test how a Collection behaves when given input @@ -25,7 +23,6 @@ import com.google.common.annotations.GwtCompatible; * * <p>This class is GWT compatible. */ -@GwtCompatible public enum WrongType { VALUE } diff --git a/guava-testlib/src/com/google/common/collect/testing/features/CollectionFeature.java b/guava-testlib/src/com/google/common/collect/testing/features/CollectionFeature.java index 831c99f..4f14c3c 100644 --- a/guava-testlib/src/com/google/common/collect/testing/features/CollectionFeature.java +++ b/guava-testlib/src/com/google/common/collect/testing/features/CollectionFeature.java @@ -16,7 +16,6 @@ package com.google.common.collect.testing.features; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.Helpers; import java.lang.annotation.Inherited; @@ -36,8 +35,7 @@ import java.util.SortedSet; */ // Enum values use constructors with generic varargs. @SuppressWarnings("unchecked") -@GwtCompatible -public enum CollectionFeature implements Feature<Collection> { +public enum CollectionFeature implements Feature<Collection> { /** * The collection must not throw {@code NullPointerException} on calls * such as {@code contains(null)} or {@code remove(null)}, but instead @@ -63,7 +61,7 @@ public enum CollectionFeature implements Feature<Collection> { * Indicates that a collection has a well-defined ordering of its elements. * The ordering may depend on the element values, such as a {@link SortedSet}, * or on the insertion ordering, such as a {@link LinkedHashSet}. All list - * tests and sorted-collection tests automatically specify this feature. + * tests automatically specify this feature. */ KNOWN_ORDER, @@ -84,7 +82,10 @@ public enum CollectionFeature implements Feature<Collection> { SUPPORTS_ADD, SUPPORTS_REMOVE, - FAILS_FAST_ON_CONCURRENT_MODIFICATION, + SUPPORTS_ADD_ALL, + SUPPORTS_REMOVE_ALL, + SUPPORTS_RETAIN_ALL, + SUPPORTS_CLEAR, /** * Features supported by general-purpose collections - @@ -93,13 +94,18 @@ public enum CollectionFeature implements Feature<Collection> { */ GENERAL_PURPOSE( SUPPORTS_ADD, - SUPPORTS_REMOVE), + SUPPORTS_REMOVE, + SUPPORTS_ADD_ALL, + SUPPORTS_REMOVE_ALL, + SUPPORTS_RETAIN_ALL, + SUPPORTS_CLEAR), /** Features supported by collections where only removal is allowed. */ REMOVE_OPERATIONS( - SUPPORTS_REMOVE), - - SERIALIZABLE, SERIALIZABLE_INCLUDING_VIEWS(SERIALIZABLE), + SUPPORTS_REMOVE, + SUPPORTS_REMOVE_ALL, + SUPPORTS_RETAIN_ALL, + SUPPORTS_CLEAR), /** * For documenting collections that support no optional features, such as diff --git a/guava-testlib/src/com/google/common/collect/testing/features/CollectionSize.java b/guava-testlib/src/com/google/common/collect/testing/features/CollectionSize.java index b919850..f986d35 100644 --- a/guava-testlib/src/com/google/common/collect/testing/features/CollectionSize.java +++ b/guava-testlib/src/com/google/common/collect/testing/features/CollectionSize.java @@ -16,7 +16,6 @@ package com.google.common.collect.testing.features; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.Helpers; import java.lang.annotation.Inherited; @@ -48,7 +47,6 @@ import java.util.Set; */ // Enum values use constructors with generic varargs. @SuppressWarnings("unchecked") -@GwtCompatible public enum CollectionSize implements Feature<Collection>, Comparable<CollectionSize> { /** Test an empty collection. */ diff --git a/guava-testlib/src/com/google/common/collect/testing/features/ConflictingRequirementsException.java b/guava-testlib/src/com/google/common/collect/testing/features/ConflictingRequirementsException.java index ace5afc..e70ed0d 100644 --- a/guava-testlib/src/com/google/common/collect/testing/features/ConflictingRequirementsException.java +++ b/guava-testlib/src/com/google/common/collect/testing/features/ConflictingRequirementsException.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing.features; -import com.google.common.annotations.GwtCompatible; - import java.util.Set; /** @@ -28,7 +26,6 @@ import java.util.Set; * * @author George van den Driessche */ -@GwtCompatible public class ConflictingRequirementsException extends Exception { private Set<Feature<?>> conflicts; private Object source; diff --git a/guava-testlib/src/com/google/common/collect/testing/features/Feature.java b/guava-testlib/src/com/google/common/collect/testing/features/Feature.java index db7c9ee..b185803 100644 --- a/guava-testlib/src/com/google/common/collect/testing/features/Feature.java +++ b/guava-testlib/src/com/google/common/collect/testing/features/Feature.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing.features; -import com.google.common.annotations.GwtCompatible; - import java.util.Set; /** @@ -28,7 +26,6 @@ import java.util.Set; * @param <T> The interface whose features are to be enumerated. * @author George van den Driessche */ -@GwtCompatible public interface Feature<T> { /** Returns the set of features that are implied by this feature. */ Set<Feature<? super T>> getImpliedFeatures(); diff --git a/guava-testlib/src/com/google/common/collect/testing/features/FeatureUtil.java b/guava-testlib/src/com/google/common/collect/testing/features/FeatureUtil.java index 0351b16..3edffa3 100644 --- a/guava-testlib/src/com/google/common/collect/testing/features/FeatureUtil.java +++ b/guava-testlib/src/com/google/common/collect/testing/features/FeatureUtil.java @@ -16,7 +16,6 @@ package com.google.common.collect.testing.features; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.Helpers; import java.lang.annotation.Annotation; @@ -36,7 +35,6 @@ import java.util.Set; * * @author George van den Driessche */ -@GwtCompatible public class FeatureUtil { /** * A cache of annotated objects (typically a Class or Method) to its diff --git a/guava-testlib/src/com/google/common/collect/testing/features/ListFeature.java b/guava-testlib/src/com/google/common/collect/testing/features/ListFeature.java index 14ae4c0..095723f 100644 --- a/guava-testlib/src/com/google/common/collect/testing/features/ListFeature.java +++ b/guava-testlib/src/com/google/common/collect/testing/features/ListFeature.java @@ -16,7 +16,6 @@ package com.google.common.collect.testing.features; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.Helpers; import java.lang.annotation.Inherited; @@ -34,22 +33,23 @@ import java.util.Set; */ // Enum values use constructors with generic varargs. @SuppressWarnings("unchecked") -@GwtCompatible public enum ListFeature implements Feature<List> { SUPPORTS_SET, - SUPPORTS_ADD_WITH_INDEX(CollectionFeature.SUPPORTS_ADD), - SUPPORTS_REMOVE_WITH_INDEX(CollectionFeature.SUPPORTS_REMOVE), + SUPPORTS_ADD_WITH_INDEX, + SUPPORTS_ADD_ALL_WITH_INDEX, + SUPPORTS_REMOVE_WITH_INDEX, GENERAL_PURPOSE( CollectionFeature.GENERAL_PURPOSE, SUPPORTS_SET, SUPPORTS_ADD_WITH_INDEX, + SUPPORTS_ADD_ALL_WITH_INDEX, SUPPORTS_REMOVE_WITH_INDEX ), /** Features supported by lists where only removal is allowed. */ REMOVE_OPERATIONS( - CollectionFeature.SUPPORTS_REMOVE, + CollectionFeature.REMOVE_OPERATIONS, SUPPORTS_REMOVE_WITH_INDEX ); diff --git a/guava-testlib/src/com/google/common/collect/testing/features/MapFeature.java b/guava-testlib/src/com/google/common/collect/testing/features/MapFeature.java index 482d5b9..8d97a09 100644 --- a/guava-testlib/src/com/google/common/collect/testing/features/MapFeature.java +++ b/guava-testlib/src/com/google/common/collect/testing/features/MapFeature.java @@ -16,7 +16,6 @@ package com.google.common.collect.testing.features; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.Helpers; import java.lang.annotation.Inherited; @@ -34,7 +33,6 @@ import java.util.Set; */ // Enum values use constructors with generic varargs. @SuppressWarnings("unchecked") -@GwtCompatible public enum MapFeature implements Feature<Map> { /** * The map does not throw {@code NullPointerException} on calls such as @@ -46,8 +44,9 @@ public enum MapFeature implements Feature<Map> { RESTRICTS_KEYS, RESTRICTS_VALUES, SUPPORTS_PUT, + SUPPORTS_PUT_ALL, SUPPORTS_REMOVE, - FAILS_FAST_ON_CONCURRENT_MODIFICATION, + SUPPORTS_CLEAR, /** * Indicates that the constructor or factory method of a map, usually an * immutable map, throws an {@link IllegalArgumentException} when presented @@ -57,8 +56,16 @@ public enum MapFeature implements Feature<Map> { GENERAL_PURPOSE( SUPPORTS_PUT, - SUPPORTS_REMOVE - ); + SUPPORTS_PUT_ALL, + SUPPORTS_REMOVE, + SUPPORTS_CLEAR + ), + + /** Features supported by maps where only removal is allowed. */ + REMOVE_OPERATIONS( + SUPPORTS_REMOVE, + SUPPORTS_CLEAR + ); private final Set<Feature<? super Map>> implied; diff --git a/guava-testlib/src/com/google/common/collect/testing/features/SetFeature.java b/guava-testlib/src/com/google/common/collect/testing/features/SetFeature.java index 977eefa..7b6c069 100644 --- a/guava-testlib/src/com/google/common/collect/testing/features/SetFeature.java +++ b/guava-testlib/src/com/google/common/collect/testing/features/SetFeature.java @@ -16,7 +16,6 @@ package com.google.common.collect.testing.features; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.Helpers; import java.lang.annotation.Inherited; @@ -33,7 +32,6 @@ import java.util.Set; */ // Enum values use constructors with generic varargs. @SuppressWarnings("unchecked") -@GwtCompatible public enum SetFeature implements Feature<Set> { GENERAL_PURPOSE( CollectionFeature.GENERAL_PURPOSE diff --git a/guava-testlib/src/com/google/common/collect/testing/features/TesterAnnotation.java b/guava-testlib/src/com/google/common/collect/testing/features/TesterAnnotation.java index 850124e..bec249c 100644 --- a/guava-testlib/src/com/google/common/collect/testing/features/TesterAnnotation.java +++ b/guava-testlib/src/com/google/common/collect/testing/features/TesterAnnotation.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing.features; -import com.google.common.annotations.GwtCompatible; - import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -41,6 +39,5 @@ import java.lang.annotation.Target; @Target(value = {java.lang.annotation.ElementType.ANNOTATION_TYPE}) @Retention(value = RetentionPolicy.RUNTIME) @Documented -@GwtCompatible public @interface TesterAnnotation { } diff --git a/guava-testlib/src/com/google/common/collect/testing/features/TesterRequirements.java b/guava-testlib/src/com/google/common/collect/testing/features/TesterRequirements.java index 82c542a..1d72e3d 100644 --- a/guava-testlib/src/com/google/common/collect/testing/features/TesterRequirements.java +++ b/guava-testlib/src/com/google/common/collect/testing/features/TesterRequirements.java @@ -16,7 +16,6 @@ package com.google.common.collect.testing.features; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.Helpers; import java.util.Collections; @@ -30,7 +29,6 @@ import java.util.Set; * * @author George van den Driessche */ -@GwtCompatible public final class TesterRequirements { private final Set<Feature<?>> presentFeatures; private final Set<Feature<?>> absentFeatures; diff --git a/guava-testlib/src/com/google/common/collect/testing/google/AbstractBiMapTester.java b/guava-testlib/src/com/google/common/collect/testing/google/AbstractBiMapTester.java deleted file mode 100644 index 88f1b24..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/AbstractBiMapTester.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.BiMap; -import com.google.common.collect.testing.AbstractMapTester; -import com.google.common.collect.testing.Helpers; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map.Entry; - -/** - * Skeleton for a tester of a {@code BiMap}. - */ -@GwtCompatible -public abstract class AbstractBiMapTester<K, V> extends AbstractMapTester<K, V> { - - @Override - protected BiMap<K, V> getMap() { - return (BiMap<K, V>) super.getMap(); - } - - static <K, V> Entry<V, K> reverseEntry(Entry<K, V> entry) { - return Helpers.mapEntry(entry.getValue(), entry.getKey()); - } - - @Override - protected void expectContents(Collection<Entry<K, V>> expected) { - super.expectContents(expected); - List<Entry<V, K>> reversedEntries = new ArrayList<Entry<V, K>>(); - for (Entry<K, V> entry : expected) { - reversedEntries.add(reverseEntry(entry)); - } - Helpers.assertEqualIgnoringOrder(getMap().inverse().entrySet(), reversedEntries); - - for (Entry<K, V> entry : expected) { - assertEquals("Wrong key for value " + entry.getValue(), entry.getKey(), getMap() - .inverse() - .get(entry.getValue())); - } - } - - @Override - protected void expectMissing(Entry<K, V>... entries) { - super.expectMissing(entries); - for (Entry<K, V> entry : entries) { - Entry<V, K> reversed = reverseEntry(entry); - BiMap<V, K> inv = getMap().inverse(); - assertFalse("Inverse should not contain entry " + reversed, - inv.entrySet().contains(entry)); - assertFalse("Inverse should not contain key " + entry.getValue(), - inv.containsKey(entry.getValue())); - assertFalse("Inverse should not contain value " + entry.getKey(), - inv.containsValue(entry.getKey())); - assertNull("Inverse should not return a mapping for key " + entry.getValue(), - getMap().get(entry.getValue())); - } - } - -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/AbstractListMultimapTester.java b/guava-testlib/src/com/google/common/collect/testing/google/AbstractListMultimapTester.java deleted file mode 100644 index 9f81b4c..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/AbstractListMultimapTester.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import static org.truth0.Truth.ASSERT; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.ListMultimap; - -import java.util.Arrays; -import java.util.Collection; - -/** - * Superclass for all {@code ListMultimap} testers. - * - * @author Louis Wasserman - */ -@GwtCompatible -public class AbstractListMultimapTester<K, V> - extends AbstractMultimapTester<K, V, ListMultimap<K, V>> { - - protected void assertGet(K key, V... values) { - assertGet(key, Arrays.asList(values)); - } - - protected void assertGet(K key, Collection<V> values) { - ASSERT.that(multimap().get(key)).has().allFrom(values).inOrder(); - - if (!values.isEmpty()) { - ASSERT.that(multimap().asMap().get(key)).has().allFrom(values).inOrder(); - assertFalse(multimap().isEmpty()); - } else { - ASSERT.that(multimap().asMap().get(key)).isNull(); - } - - assertEquals(values.size(), multimap().get(key).size()); - assertEquals(values.size() > 0, multimap().containsKey(key)); - assertEquals(values.size() > 0, multimap().keySet().contains(key)); - assertEquals(values.size() > 0, multimap().keys().contains(key)); - } -} - diff --git a/guava-testlib/src/com/google/common/collect/testing/google/AbstractMultimapTester.java b/guava-testlib/src/com/google/common/collect/testing/google/AbstractMultimapTester.java deleted file mode 100644 index a0c0b89..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/AbstractMultimapTester.java +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import static java.util.Arrays.asList; -import static org.truth0.Truth.ASSERT; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.Multimap; -import com.google.common.collect.testing.AbstractContainerTester; -import com.google.common.collect.testing.Helpers; -import com.google.common.collect.testing.SampleElements; - -import java.util.Arrays; -import java.util.Collection; -import java.util.Iterator; -import java.util.Map; -import java.util.Map.Entry; - -/** - * Superclass for all {@code Multimap} testers. - * - * @author Louis Wasserman - */ -@GwtCompatible -public abstract class AbstractMultimapTester<K, V, M extends Multimap<K, V>> - extends AbstractContainerTester<M, Map.Entry<K, V>> { - - private M multimap; - - protected M multimap() { - return multimap; - } - - /** - * @return an array of the proper size with {@code null} as the key of the - * middle element. - */ - protected Map.Entry<K, V>[] createArrayWithNullKey() { - Map.Entry<K, V>[] array = createSamplesArray(); - final int nullKeyLocation = getNullLocation(); - final Map.Entry<K, V> oldEntry = array[nullKeyLocation]; - array[nullKeyLocation] = Helpers.mapEntry(null, oldEntry.getValue()); - return array; - } - - /** - * @return an array of the proper size with {@code null} as the value of the - * middle element. - */ - protected Map.Entry<K, V>[] createArrayWithNullValue() { - Map.Entry<K, V>[] array = createSamplesArray(); - final int nullValueLocation = getNullLocation(); - final Map.Entry<K, V> oldEntry = array[nullValueLocation]; - array[nullValueLocation] = Helpers.mapEntry(oldEntry.getKey(), null); - return array; - } - - /** - * @return an array of the proper size with {@code null} as the key and value of the - * middle element. - */ - protected Map.Entry<K, V>[] createArrayWithNullKeyAndValue() { - Map.Entry<K, V>[] array = createSamplesArray(); - final int nullValueLocation = getNullLocation(); - array[nullValueLocation] = Helpers.mapEntry(null, null); - return array; - } - - protected V getValueForNullKey() { - return getEntryNullReplaces().getValue(); - } - - protected K getKeyForNullValue() { - return getEntryNullReplaces().getKey(); - } - - private Entry<K, V> getEntryNullReplaces() { - Iterator<Entry<K, V>> entries = getSampleElements().iterator(); - for (int i = 0; i < getNullLocation(); i++) { - entries.next(); - } - return entries.next(); - } - - protected void initMultimapWithNullKey() { - resetContainer(getSubjectGenerator().create(createArrayWithNullKey())); - } - - protected void initMultimapWithNullValue() { - resetContainer(getSubjectGenerator().create(createArrayWithNullValue())); - } - - protected void initMultimapWithNullKeyAndValue() { - resetContainer(getSubjectGenerator().create(createArrayWithNullKeyAndValue())); - } - - protected SampleElements<K> sampleKeys() { - return ((TestMultimapGenerator<K, V, ? extends Multimap<K, V>>) getSubjectGenerator() - .getInnerGenerator()).sampleKeys(); - } - - protected SampleElements<V> sampleValues() { - return ((TestMultimapGenerator<K, V, ? extends Multimap<K, V>>) getSubjectGenerator() - .getInnerGenerator()).sampleValues(); - } - - @Override - protected Collection<Entry<K, V>> actualContents() { - return multimap.entries(); - } - - // TODO: dispose of this once collection is encapsulated. - @Override - protected M resetContainer(M newContents) { - multimap = super.resetContainer(newContents); - return multimap; - } - - protected Multimap<K, V> resetContainer(Entry<K, V>... newContents) { - multimap = super.resetContainer(getSubjectGenerator().create(newContents)); - return multimap; - } - - /** @see AbstractContainerTester#resetContainer() */ - protected void resetCollection() { - resetContainer(); - } - - protected void assertGet(K key, V... values) { - assertGet(key, Arrays.asList(values)); - } - - protected void assertGet(K key, Collection<V> values) { - ASSERT.that(multimap().get(key)).has().allFrom(values); - - if (!values.isEmpty()) { - ASSERT.that(multimap().asMap().get(key)).has().allFrom(values); - assertFalse(multimap().isEmpty()); - } else { - ASSERT.that(multimap().asMap().get(key)).isNull(); - } - - // TODO(user): Add proper overrides to prevent autoboxing. - // Truth+autoboxing == compile error. Cast int to long to fix: - ASSERT.that(multimap().get(key).size()).is((long) values.size()); - - assertEquals(values.size() > 0, multimap().containsKey(key)); - assertEquals(values.size() > 0, multimap().keySet().contains(key)); - assertEquals(values.size() > 0, multimap().keys().contains(key)); - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/AbstractMultisetSetCountTester.java b/guava-testlib/src/com/google/common/collect/testing/google/AbstractMultisetSetCountTester.java index 55749b2..9219e3e 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/AbstractMultisetSetCountTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/AbstractMultisetSetCountTester.java @@ -17,7 +17,6 @@ package com.google.common.collect.testing.google; import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES; -import static com.google.common.collect.testing.features.CollectionFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION; import static com.google.common.collect.testing.features.CollectionFeature.RESTRICTS_ELEMENTS; import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD; import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE; @@ -25,17 +24,12 @@ import static com.google.common.collect.testing.features.CollectionSize.SEVERAL; import static com.google.common.collect.testing.features.CollectionSize.ZERO; import com.google.common.annotations.GwtCompatible; -import com.google.common.annotations.GwtIncompatible; import com.google.common.collect.Multiset; -import com.google.common.collect.Multiset.Entry; -import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; import java.lang.reflect.Method; import java.util.Arrays; -import java.util.ConcurrentModificationException; -import java.util.Iterator; import java.util.List; /** @@ -47,7 +41,7 @@ import java.util.List; * * @author Chris Povirk */ -@GwtCompatible(emulated = true) +@GwtCompatible public abstract class AbstractMultisetSetCountTester<E> extends AbstractMultisetTester<E> { /* @@ -191,32 +185,6 @@ public abstract class AbstractMultisetSetCountTester<E> assertSetCount(samples.e3, 1); } - @CollectionFeature.Require({SUPPORTS_ADD, - FAILS_FAST_ON_CONCURRENT_MODIFICATION}) - public void testSetCountZeroToOneConcurrentWithIteration() { - try { - Iterator<E> iterator = collection.iterator(); - assertSetCount(samples.e3, 1); - iterator.next(); - fail("Expected ConcurrentModificationException"); - } catch (ConcurrentModificationException expected) { - // success - } - } - - @CollectionFeature.Require({SUPPORTS_ADD, - FAILS_FAST_ON_CONCURRENT_MODIFICATION}) - public void testSetCountZeroToOneConcurrentWithEntrySetIteration() { - try { - Iterator<Entry<E>> iterator = getMultiset().entrySet().iterator(); - assertSetCount(samples.e3, 1); - iterator.next(); - fail("Expected ConcurrentModificationException"); - } catch (ConcurrentModificationException expected) { - // success - } - } - @CollectionFeature.Require(SUPPORTS_ADD) public void testSetCount_zeroToThree_supported() { assertSetCount(samples.e3, 3); @@ -252,33 +220,6 @@ public abstract class AbstractMultisetSetCountTester<E> assertSetCount(samples.e0, 0); } - @CollectionFeature.Require({SUPPORTS_REMOVE, - FAILS_FAST_ON_CONCURRENT_MODIFICATION}) - @CollectionSize.Require(absent = ZERO) - public void testSetCountOneToZeroConcurrentWithIteration() { - try { - Iterator<E> iterator = collection.iterator(); - assertSetCount(samples.e0, 0); - iterator.next(); - fail("Expected ConcurrentModificationException"); - } catch (ConcurrentModificationException expected) { - // success - } - } - - @CollectionFeature.Require({SUPPORTS_REMOVE, - FAILS_FAST_ON_CONCURRENT_MODIFICATION}) - public void testSetCountOneToZeroConcurrentWithEntrySetIteration() { - try { - Iterator<Entry<E>> iterator = getMultiset().entrySet().iterator(); - assertSetCount(samples.e0, 0); - iterator.next(); - fail("Expected ConcurrentModificationException"); - } catch (ConcurrentModificationException expected) { - // success - } - } - @CollectionSize.Require(SEVERAL) @CollectionFeature.Require(SUPPORTS_REMOVE) public void testSetCount_threeToZero_supported() { @@ -394,7 +335,6 @@ public abstract class AbstractMultisetSetCountTester<E> * assume multisets support duplicates so that the test of {@code * Multisets.forSet()} can suppress them. */ - @GwtIncompatible("reflection") public static List<Method> getSetCountDuplicateInitializingMethods() { return Arrays.asList( getMethod("testSetCount_threeToThree_removeSupported"), @@ -402,8 +342,7 @@ public abstract class AbstractMultisetSetCountTester<E> getMethod("testSetCount_threeToOne_supported")); } - @GwtIncompatible("reflection") private static Method getMethod(String methodName) { - return Helpers.getMethod(AbstractMultisetSetCountTester.class, methodName); + return Platform.getMethod(AbstractMultisetSetCountTester.class, methodName); } } diff --git a/guava-testlib/src/com/google/common/collect/testing/google/BiMapClearTester.java b/guava-testlib/src/com/google/common/collect/testing/google/BiMapClearTester.java deleted file mode 100644 index 5d0d7a5..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/BiMapClearTester.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_REMOVE; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.BiMap; -import com.google.common.collect.testing.features.MapFeature; - -/** - * Tester for {@code BiMap.clear}. - * - * @author Louis Wasserman - */ -@GwtCompatible -public class BiMapClearTester<K, V> extends AbstractBiMapTester<K, V> { - @MapFeature.Require(SUPPORTS_REMOVE) - public void testClearClearsInverse() { - BiMap<V, K> inv = getMap().inverse(); - getMap().clear(); - assertTrue(getMap().isEmpty()); - assertTrue(inv.isEmpty()); - } - - @MapFeature.Require(SUPPORTS_REMOVE) - public void testKeySetClearClearsInverse() { - BiMap<V, K> inv = getMap().inverse(); - getMap().keySet().clear(); - assertTrue(getMap().isEmpty()); - assertTrue(inv.isEmpty()); - } - - @MapFeature.Require(SUPPORTS_REMOVE) - public void testValuesClearClearsInverse() { - BiMap<V, K> inv = getMap().inverse(); - getMap().values().clear(); - assertTrue(getMap().isEmpty()); - assertTrue(inv.isEmpty()); - } - - @MapFeature.Require(SUPPORTS_REMOVE) - public void testClearInverseClears() { - BiMap<V, K> inv = getMap().inverse(); - inv.clear(); - assertTrue(getMap().isEmpty()); - assertTrue(inv.isEmpty()); - } - - @MapFeature.Require(SUPPORTS_REMOVE) - public void testClearInverseKeySetClears() { - BiMap<V, K> inv = getMap().inverse(); - inv.keySet().clear(); - assertTrue(getMap().isEmpty()); - assertTrue(inv.isEmpty()); - } - - @MapFeature.Require(SUPPORTS_REMOVE) - public void testClearInverseValuesClears() { - BiMap<V, K> inv = getMap().inverse(); - inv.values().clear(); - assertTrue(getMap().isEmpty()); - assertTrue(inv.isEmpty()); - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/BiMapGenerators.java b/guava-testlib/src/com/google/common/collect/testing/google/BiMapGenerators.java index db19baa..987ae9c 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/BiMapGenerators.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/BiMapGenerators.java @@ -16,11 +16,18 @@ package com.google.common.collect.testing.google; +import static com.google.common.base.Preconditions.checkNotNull; + import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.BiMap; import com.google.common.collect.ImmutableBiMap; +import com.google.common.collect.Maps; +import com.google.common.collect.testing.SampleElements; +import com.google.common.collect.testing.TestMapEntrySetGenerator; +import com.google.common.collect.testing.TestStringSetGenerator; +import java.util.Map; import java.util.Map.Entry; +import java.util.Set; /** * Generators of various {@link com.google.common.collect.BiMap}s and derived @@ -31,13 +38,82 @@ import java.util.Map.Entry; */ @GwtCompatible public class BiMapGenerators { - public static class ImmutableBiMapGenerator extends TestStringBiMapGenerator { - @Override protected BiMap<String, String> create(Entry<String, String>[] entries) { - ImmutableBiMap.Builder<String, String> builder = ImmutableBiMap.builder(); + + public static class ImmutableBiMapKeySetGenerator + extends TestStringSetGenerator { + @Override protected Set<String> create(String[] elements) { + Map<String, Integer> map = Maps.newLinkedHashMap(); + for (int i = 0; i < elements.length; i++) { + map.put(elements[i], i); + } + return ImmutableBiMap.copyOf(map).keySet(); + } + } + + public static class ImmutableBiMapValuesGenerator + extends TestStringSetGenerator { + @Override protected Set<String> create(String[] elements) { + Map<Integer, String> map = Maps.newLinkedHashMap(); + for (int i = 0; i < elements.length; i++) { + map.put(i, elements[i]); + } + return ImmutableBiMap.copyOf(map).values(); + } + } + + public static class ImmutableBiMapInverseEntrySetGenerator + extends TestMapEntrySetGenerator<String, String> { + + public ImmutableBiMapInverseEntrySetGenerator() { + super(new SampleElements.Strings(), new SampleElements.Strings()); + } + @Override public Set<Entry<String, String>> createFromEntries( + Entry<String, String>[] entries) { + Map<String, String> map = Maps.newLinkedHashMap(); + for (Entry<String, String> entry : entries) { + checkNotNull(entry); + map.put(entry.getValue(), entry.getKey()); + } + return ImmutableBiMap.copyOf(map).inverse().entrySet(); + } + } + + public static class ImmutableBiMapInverseKeySetGenerator + extends TestStringSetGenerator { + @Override protected Set<String> create(String[] elements) { + Map<Integer, String> map = Maps.newLinkedHashMap(); + for (int i = 0; i < elements.length; i++) { + map.put(i, elements[i]); + } + return ImmutableBiMap.copyOf(map).inverse().keySet(); + } + } + + public static class ImmutableBiMapInverseValuesGenerator + extends TestStringSetGenerator { + @Override protected Set<String> create(String[] elements) { + Map<String, Integer> map = Maps.newLinkedHashMap(); + for (int i = 0; i < elements.length; i++) { + map.put(elements[i], i); + } + return ImmutableBiMap.copyOf(map).inverse().values(); + } + } + + public static class ImmutableBiMapEntrySetGenerator + extends TestMapEntrySetGenerator<String, String> { + + public ImmutableBiMapEntrySetGenerator() { + super(new SampleElements.Strings(), new SampleElements.Strings()); + } + @Override public Set<Entry<String, String>> createFromEntries( + Entry<String, String>[] entries) { + Map<String, String> map = Maps.newLinkedHashMap(); for (Entry<String, String> entry : entries) { - builder.put(entry.getKey(), entry.getValue()); + checkNotNull(entry); + map.put(entry.getKey(), entry.getValue()); } - return builder.build(); + return ImmutableBiMap.copyOf(map).entrySet(); } } } diff --git a/guava-testlib/src/com/google/common/collect/testing/google/BiMapInverseTester.java b/guava-testlib/src/com/google/common/collect/testing/google/BiMapInverseTester.java deleted file mode 100644 index c7cdbf9..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/BiMapInverseTester.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import static com.google.common.collect.testing.features.CollectionFeature.SERIALIZABLE; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.annotations.GwtIncompatible; -import com.google.common.collect.BiMap; -import com.google.common.collect.testing.Helpers; -import com.google.common.collect.testing.features.CollectionFeature; -import com.google.common.testing.SerializableTester; - -import java.io.Serializable; -import java.lang.reflect.Method; -import java.util.Collections; -import java.util.List; - -/** - * Tests for the {@code inverse} view of a BiMap. - * - * <p>This assumes that {@code bimap.inverse().inverse() == bimap}, which is not technically - * required but is fulfilled by all current implementations. - * - * @author Louis Wasserman - */ -@GwtCompatible(emulated = true) -public class BiMapInverseTester<K, V> extends AbstractBiMapTester<K, V> { - - public void testInverseSame() { - assertSame(getMap(), getMap().inverse().inverse()); - } - - @CollectionFeature.Require(SERIALIZABLE) - public void testInverseSerialization() { - BiMapPair<K, V> pair = new BiMapPair<K, V>(getMap()); - BiMapPair<K, V> copy = SerializableTester.reserialize(pair); - assertEquals(pair.forward, copy.forward); - assertEquals(pair.backward, copy.backward); - assertSame(copy.backward, copy.forward.inverse()); - assertSame(copy.forward, copy.backward.inverse()); - } - - private static class BiMapPair<K, V> implements Serializable { - final BiMap<K, V> forward; - final BiMap<V, K> backward; - - BiMapPair(BiMap<K, V> original) { - this.forward = original; - this.backward = original.inverse(); - } - - private static final long serialVersionUID = 0; - } - - /** - * Returns {@link Method} instances for the tests that assume that the inverse will be the same - * after serialization. - */ - @GwtIncompatible("reflection") - public static List<Method> getInverseSameAfterSerializingMethods() { - return Collections.singletonList(getMethod("testInverseSerialization")); - } - - @GwtIncompatible("reflection") - private static Method getMethod(String methodName) { - return Helpers.getMethod(BiMapInverseTester.class, methodName); - } - -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/BiMapPutTester.java b/guava-testlib/src/com/google/common/collect/testing/google/BiMapPutTester.java deleted file mode 100644 index 8c31aa3..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/BiMapPutTester.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_PUT; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.testing.Helpers; -import com.google.common.collect.testing.features.CollectionSize; -import com.google.common.collect.testing.features.MapFeature; - -/** - * Tester for {@code BiMap.put} and {@code BiMap.forcePut}. - */ -@GwtCompatible -public class BiMapPutTester<K, V> extends AbstractBiMapTester<K, V> { - - @SuppressWarnings("unchecked") - @MapFeature.Require(SUPPORTS_PUT) - @CollectionSize.Require(ZERO) - public void testPutWithSameValueFails() { - K k0 = samples.e0.getKey(); - K k1 = samples.e1.getKey(); - V v0 = samples.e0.getValue(); - getMap().put(k0, v0); - try { - getMap().put(k1, v0); - fail("Expected IllegalArgumentException"); - } catch (IllegalArgumentException expected) { - // success - } - // verify that the bimap is unchanged - expectAdded(samples.e0); - } - - @SuppressWarnings("unchecked") - @MapFeature.Require(SUPPORTS_PUT) - @CollectionSize.Require(ZERO) - public void testPutPresentKeyDifferentValue() { - K k0 = samples.e0.getKey(); - V v0 = samples.e0.getValue(); - V v1 = samples.e1.getValue(); - getMap().put(k0, v0); - getMap().put(k0, v1); - // verify that the bimap is changed, and that the old inverse mapping - // from v1 -> v0 is deleted - expectContents(Helpers.mapEntry(k0, v1)); - } - - @SuppressWarnings("unchecked") - @MapFeature.Require(SUPPORTS_PUT) - @CollectionSize.Require(ZERO) - public void putDistinctKeysDistinctValues() { - getMap().put(samples.e0.getKey(), samples.e0.getValue()); - getMap().put(samples.e1.getKey(), samples.e1.getValue()); - expectAdded(samples.e0, samples.e1); - } - - @SuppressWarnings("unchecked") - @MapFeature.Require(SUPPORTS_PUT) - @CollectionSize.Require(ZERO) - public void testForcePutOverwritesOldValueEntry() { - K k0 = samples.e0.getKey(); - K k1 = samples.e1.getKey(); - V v0 = samples.e0.getValue(); - getMap().put(k0, v0); - getMap().forcePut(k1, v0); - // verify that the bimap is unchanged - expectAdded(Helpers.mapEntry(k1, v0)); - } - - @SuppressWarnings("unchecked") - @MapFeature.Require(SUPPORTS_PUT) - @CollectionSize.Require(ZERO) - public void testInversePut() { - K k0 = samples.e0.getKey(); - V v0 = samples.e0.getValue(); - K k1 = samples.e1.getKey(); - V v1 = samples.e1.getValue(); - getMap().put(k0, v0); - getMap().inverse().put(v1, k1); - expectAdded(samples.e0, samples.e1); - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/BiMapRemoveTester.java b/guava-testlib/src/com/google/common/collect/testing/google/BiMapRemoveTester.java deleted file mode 100644 index fe3893b..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/BiMapRemoveTester.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_REMOVE; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.annotations.GwtIncompatible; -import com.google.common.collect.testing.Helpers; -import com.google.common.collect.testing.features.CollectionSize; -import com.google.common.collect.testing.features.MapFeature; - -import java.lang.reflect.Method; -import java.util.Iterator; - -/** - * Tester for {@code BiMap.remove}. - * - * @author Louis Wasserman - */ -@GwtCompatible(emulated = true) -public class BiMapRemoveTester<K, V> extends AbstractBiMapTester<K, V> { - @SuppressWarnings("unchecked") - @MapFeature.Require(SUPPORTS_REMOVE) - @CollectionSize.Require(absent = ZERO) - public void testRemoveKeyRemovesFromInverse() { - getMap().remove(samples.e0.getKey()); - expectMissing(samples.e0); - } - - @SuppressWarnings("unchecked") - @MapFeature.Require(SUPPORTS_REMOVE) - @CollectionSize.Require(absent = ZERO) - public void testRemoveKeyFromKeySetRemovesFromInverse() { - getMap().keySet().remove(samples.e0.getKey()); - expectMissing(samples.e0); - } - - @SuppressWarnings("unchecked") - @MapFeature.Require(SUPPORTS_REMOVE) - @CollectionSize.Require(absent = ZERO) - public void testRemoveFromValuesRemovesFromInverse() { - getMap().values().remove(samples.e0.getValue()); - expectMissing(samples.e0); - } - - @SuppressWarnings("unchecked") - @MapFeature.Require(SUPPORTS_REMOVE) - @CollectionSize.Require(absent = ZERO) - public void testRemoveFromInverseRemovesFromForward() { - getMap().inverse().remove(samples.e0.getValue()); - expectMissing(samples.e0); - } - - @SuppressWarnings("unchecked") - @MapFeature.Require(SUPPORTS_REMOVE) - @CollectionSize.Require(absent = ZERO) - public void testRemoveFromInverseKeySetRemovesFromForward() { - getMap().inverse().keySet().remove(samples.e0.getValue()); - expectMissing(samples.e0); - } - - @SuppressWarnings("unchecked") - @MapFeature.Require(SUPPORTS_REMOVE) - @CollectionSize.Require(absent = ZERO) - public void testRemoveFromInverseValuesRemovesFromInverse() { - getMap().inverse().values().remove(samples.e0.getKey()); - expectMissing(samples.e0); - } - - @MapFeature.Require(SUPPORTS_REMOVE) - @CollectionSize.Require(absent = ZERO) - public void testKeySetIteratorRemove() { - int initialSize = getNumElements(); - Iterator<K> iterator = getMap().keySet().iterator(); - iterator.next(); - iterator.remove(); - assertEquals(initialSize - 1, getMap().size()); - assertEquals(initialSize - 1, getMap().inverse().size()); - } - - /** - * Returns the {@link Method} instance for - * {@link #testKeySetIteratorRemove()} so that tests of - * {@code Maps.filterEntries(BiMap, Predicate)} can suppress - * it with {@code FeatureSpecificTestSuiteBuilder.suppressing()}. - */ - @GwtIncompatible("reflection") - public static Method getKeySetIteratorRemoveMethod() { - return Helpers.getMethod(BiMapRemoveTester.class, "testKeySetIteratorRemove"); - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/BiMapTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/google/BiMapTestSuiteBuilder.java deleted file mode 100644 index 30ffdaa..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/BiMapTestSuiteBuilder.java +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import com.google.common.collect.BiMap; -import com.google.common.collect.testing.AbstractTester; -import com.google.common.collect.testing.FeatureSpecificTestSuiteBuilder; -import com.google.common.collect.testing.MapTestSuiteBuilder; -import com.google.common.collect.testing.OneSizeTestContainerGenerator; -import com.google.common.collect.testing.PerCollectionSizeTestSuiteBuilder; -import com.google.common.collect.testing.SetTestSuiteBuilder; -import com.google.common.collect.testing.features.CollectionFeature; -import com.google.common.collect.testing.features.CollectionSize; -import com.google.common.collect.testing.features.Feature; -import com.google.common.collect.testing.features.MapFeature; -import com.google.common.collect.testing.google.DerivedGoogleCollectionGenerators.BiMapValueSetGenerator; -import com.google.common.collect.testing.google.DerivedGoogleCollectionGenerators.InverseBiMapGenerator; -import com.google.common.collect.testing.google.DerivedGoogleCollectionGenerators.MapGenerator; -import com.google.common.collect.testing.testers.SetCreationTester; - -import junit.framework.TestSuite; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; - -/** - * Creates, based on your criteria, a JUnit test suite that exhaustively tests a {@code BiMap} - * implementation. - * - * @author Louis Wasserman - */ -public class BiMapTestSuiteBuilder<K, V> - extends PerCollectionSizeTestSuiteBuilder<BiMapTestSuiteBuilder<K, V>, - TestBiMapGenerator<K, V>, BiMap<K, V>, Map.Entry<K, V>> { - public static <K, V> BiMapTestSuiteBuilder<K, V> using(TestBiMapGenerator<K, V> generator) { - return new BiMapTestSuiteBuilder<K, V>().usingGenerator(generator); - } - - @Override - protected List<Class<? extends AbstractTester>> getTesters() { - List<Class<? extends AbstractTester>> testers = - new ArrayList<Class<? extends AbstractTester>>(); - testers.add(BiMapPutTester.class); - testers.add(BiMapInverseTester.class); - testers.add(BiMapRemoveTester.class); - testers.add(BiMapClearTester.class); - return testers; - } - - enum NoRecurse implements Feature<Void> { - INVERSE; - - @Override - public Set<Feature<? super Void>> getImpliedFeatures() { - return Collections.emptySet(); - } - } - - @Override - protected - List<TestSuite> - createDerivedSuites( - FeatureSpecificTestSuiteBuilder<?, - ? extends OneSizeTestContainerGenerator<BiMap<K, V>, Entry<K, V>>> parentBuilder) { - List<TestSuite> derived = super.createDerivedSuites(parentBuilder); - // TODO(cpovirk): consider using this approach (derived suites instead of extension) in - // ListTestSuiteBuilder, etc.? - derived.add(MapTestSuiteBuilder - .using(new MapGenerator<K, V>(parentBuilder.getSubjectGenerator())) - .withFeatures(parentBuilder.getFeatures()) - .named(parentBuilder.getName() + " [Map]") - .suppressing(parentBuilder.getSuppressedTests()) - .suppressing(SetCreationTester.class.getMethods()) - // BiMap.entrySet() duplicate-handling behavior is too confusing for SetCreationTester - .createTestSuite()); - /* - * TODO(cpovirk): the Map tests duplicate most of this effort by using a - * CollectionTestSuiteBuilder on values(). It would be nice to avoid that - */ - derived.add(SetTestSuiteBuilder - .using(new BiMapValueSetGenerator<K, V>(parentBuilder.getSubjectGenerator())) - .withFeatures(computeValuesSetFeatures(parentBuilder.getFeatures())) - .named(parentBuilder.getName() + " values [Set]") - .suppressing(parentBuilder.getSuppressedTests()) - .suppressing(SetCreationTester.class.getMethods()) - // BiMap.values() duplicate-handling behavior is too confusing for SetCreationTester - .createTestSuite()); - if (!parentBuilder.getFeatures().contains(NoRecurse.INVERSE)) { - derived.add(BiMapTestSuiteBuilder - .using(new InverseBiMapGenerator<K, V>(parentBuilder.getSubjectGenerator())) - .withFeatures(computeInverseFeatures(parentBuilder.getFeatures())) - .named(parentBuilder.getName() + " inverse") - .suppressing(parentBuilder.getSuppressedTests()) - .createTestSuite()); - } - - return derived; - } - - private static Set<Feature<?>> computeInverseFeatures(Set<Feature<?>> mapFeatures) { - Set<Feature<?>> inverseFeatures = new HashSet<Feature<?>>(mapFeatures); - - boolean nullKeys = inverseFeatures.remove(MapFeature.ALLOWS_NULL_KEYS); - boolean nullValues = inverseFeatures.remove(MapFeature.ALLOWS_NULL_VALUES); - - if (nullKeys) { - inverseFeatures.add(MapFeature.ALLOWS_NULL_VALUES); - } - if (nullValues) { - inverseFeatures.add(MapFeature.ALLOWS_NULL_KEYS); - } - - inverseFeatures.add(NoRecurse.INVERSE); - inverseFeatures.remove(CollectionFeature.KNOWN_ORDER); - inverseFeatures.add(MapFeature.REJECTS_DUPLICATES_AT_CREATION); - - return inverseFeatures; - } - - // TODO(user): can we eliminate the duplication from MapTestSuiteBuilder here? - - private static Set<Feature<?>> computeValuesSetFeatures( - Set<Feature<?>> mapFeatures) { - Set<Feature<?>> valuesCollectionFeatures = - computeCommonDerivedCollectionFeatures(mapFeatures); - valuesCollectionFeatures.add(CollectionFeature.ALLOWS_NULL_QUERIES); - - if (mapFeatures.contains(MapFeature.ALLOWS_NULL_VALUES)) { - valuesCollectionFeatures.add(CollectionFeature.ALLOWS_NULL_VALUES); - } - - valuesCollectionFeatures.add(CollectionFeature.REJECTS_DUPLICATES_AT_CREATION); - - return valuesCollectionFeatures; - } - - private static Set<Feature<?>> computeCommonDerivedCollectionFeatures( - Set<Feature<?>> mapFeatures) { - Set<Feature<?>> derivedFeatures = new HashSet<Feature<?>>(); - if (mapFeatures.contains(MapFeature.SUPPORTS_REMOVE)) { - derivedFeatures.add(CollectionFeature.SUPPORTS_REMOVE); - } - if (mapFeatures.contains(MapFeature.REJECTS_DUPLICATES_AT_CREATION)) { - derivedFeatures.add(CollectionFeature.REJECTS_DUPLICATES_AT_CREATION); - } - // add the intersection of CollectionSize.values() and mapFeatures - for (CollectionSize size : CollectionSize.values()) { - if (mapFeatures.contains(size)) { - derivedFeatures.add(size); - } - } - return derivedFeatures; - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/DerivedGoogleCollectionGenerators.java b/guava-testlib/src/com/google/common/collect/testing/google/DerivedGoogleCollectionGenerators.java deleted file mode 100644 index e3178b4..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/DerivedGoogleCollectionGenerators.java +++ /dev/null @@ -1,211 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.BiMap; -import com.google.common.collect.testing.DerivedGenerator; -import com.google.common.collect.testing.Helpers; -import com.google.common.collect.testing.OneSizeTestContainerGenerator; -import com.google.common.collect.testing.SampleElements; -import com.google.common.collect.testing.TestMapGenerator; -import com.google.common.collect.testing.TestSetGenerator; -import com.google.common.collect.testing.TestSubjectGenerator; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; - -/** - * Derived suite generators for Guava collection interfaces, split out of the suite builders so that - * they are available to GWT. - * - * @author Louis Wasserman - */ -@GwtCompatible -public final class DerivedGoogleCollectionGenerators { - public static class MapGenerator<K, V> implements TestMapGenerator<K, V>, DerivedGenerator { - - private final OneSizeTestContainerGenerator<BiMap<K, V>, Entry<K, V>> generator; - - public MapGenerator( - OneSizeTestContainerGenerator<BiMap<K, V>, Entry<K, V>> oneSizeTestContainerGenerator) { - this.generator = oneSizeTestContainerGenerator; - } - - @Override - public SampleElements<Map.Entry<K, V>> samples() { - return generator.samples(); - } - - @Override - public Map<K, V> create(Object... elements) { - return generator.create(elements); - } - - @Override - public Map.Entry<K, V>[] createArray(int length) { - return generator.createArray(length); - } - - @Override - public Iterable<Map.Entry<K, V>> order(List<Map.Entry<K, V>> insertionOrder) { - return generator.order(insertionOrder); - } - - @SuppressWarnings("unchecked") - @Override - public K[] createKeyArray(int length) { - return (K[]) new Object[length]; - } - - @SuppressWarnings("unchecked") - @Override - public V[] createValueArray(int length) { - return (V[]) new Object[length]; - } - - public TestSubjectGenerator<?> getInnerGenerator() { - return generator; - } - } - - public static class InverseBiMapGenerator<K, V> - implements TestBiMapGenerator<V, K>, DerivedGenerator { - - private final OneSizeTestContainerGenerator<BiMap<K, V>, Entry<K, V>> generator; - - public InverseBiMapGenerator( - OneSizeTestContainerGenerator<BiMap<K, V>, Entry<K, V>> oneSizeTestContainerGenerator) { - this.generator = oneSizeTestContainerGenerator; - } - - @Override - public SampleElements<Map.Entry<V, K>> samples() { - SampleElements<Entry<K, V>> samples = generator.samples(); - return new SampleElements<Map.Entry<V, K>>(reverse(samples.e0), reverse(samples.e1), - reverse(samples.e2), reverse(samples.e3), reverse(samples.e4)); - } - - private Map.Entry<V, K> reverse(Map.Entry<K, V> entry) { - return Helpers.mapEntry(entry.getValue(), entry.getKey()); - } - - @SuppressWarnings("unchecked") - @Override - public BiMap<V, K> create(Object... elements) { - Entry[] entries = new Entry[elements.length]; - for (int i = 0; i < elements.length; i++) { - entries[i] = reverse((Entry<K, V>) elements[i]); - } - return generator.create((Object[]) entries).inverse(); - } - - @SuppressWarnings("unchecked") - @Override - public Map.Entry<V, K>[] createArray(int length) { - return new Entry[length]; - } - - @Override - public Iterable<Entry<V, K>> order(List<Entry<V, K>> insertionOrder) { - return insertionOrder; - } - - @SuppressWarnings("unchecked") - @Override - public V[] createKeyArray(int length) { - return (V[]) new Object[length]; - } - - @SuppressWarnings("unchecked") - @Override - public K[] createValueArray(int length) { - return (K[]) new Object[length]; - } - - public TestSubjectGenerator<?> getInnerGenerator() { - return generator; - } - } - - public static class BiMapValueSetGenerator<K, V> - implements TestSetGenerator<V>, DerivedGenerator { - private final OneSizeTestContainerGenerator<BiMap<K, V>, Map.Entry<K, V>> - mapGenerator; - private final SampleElements<V> samples; - - public BiMapValueSetGenerator( - OneSizeTestContainerGenerator<BiMap<K, V>, Entry<K, V>> mapGenerator) { - this.mapGenerator = mapGenerator; - final SampleElements<Map.Entry<K, V>> mapSamples = - this.mapGenerator.samples(); - this.samples = new SampleElements<V>( - mapSamples.e0.getValue(), - mapSamples.e1.getValue(), - mapSamples.e2.getValue(), - mapSamples.e3.getValue(), - mapSamples.e4.getValue()); - } - - @Override - public SampleElements<V> samples() { - return samples; - } - - @Override - public Set<V> create(Object... elements) { - @SuppressWarnings("unchecked") - V[] valuesArray = (V[]) elements; - - // Start with a suitably shaped collection of entries - Collection<Map.Entry<K, V>> originalEntries = - mapGenerator.getSampleElements(elements.length); - - // Create a copy of that, with the desired value for each value - Collection<Map.Entry<K, V>> entries = - new ArrayList<Entry<K, V>>(elements.length); - int i = 0; - for (Map.Entry<K, V> entry : originalEntries) { - entries.add(Helpers.mapEntry(entry.getKey(), valuesArray[i++])); - } - - return mapGenerator.create(entries.toArray()).values(); - } - - @Override - public V[] createArray(int length) { - final V[] vs = ((TestBiMapGenerator<K, V>) mapGenerator.getInnerGenerator()) - .createValueArray(length); - return vs; - } - - @Override - public Iterable<V> order(List<V> insertionOrder) { - return insertionOrder; - } - - public TestSubjectGenerator<?> getInnerGenerator() { - return mapGenerator; - } - } - - private DerivedGoogleCollectionGenerators() {} -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/ListGenerators.java b/guava-testlib/src/com/google/common/collect/testing/google/ListGenerators.java index fb14416..e0b7691 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/ListGenerators.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/ListGenerators.java @@ -20,15 +20,12 @@ import static java.util.Arrays.asList; import com.google.common.annotations.GwtCompatible; import com.google.common.collect.ImmutableList; -import com.google.common.collect.Lists; -import com.google.common.collect.testing.TestCharacterListGenerator; +import com.google.common.collect.ImmutableList.Builder; import com.google.common.collect.testing.TestListGenerator; import com.google.common.collect.testing.TestStringListGenerator; import com.google.common.collect.testing.TestUnhashableCollectionGenerator; import com.google.common.collect.testing.UnhashableObject; -import com.google.common.primitives.Chars; -import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -50,7 +47,7 @@ public final class ListGenerators { public static class BuilderAddListGenerator extends TestStringListGenerator { @Override protected List<String> create(String[] elements) { - ImmutableList.Builder<String> builder = ImmutableList.<String>builder(); + Builder<String> builder = ImmutableList.<String>builder(); for (String element : elements) { builder.add(element); } @@ -66,7 +63,7 @@ public final class ListGenerators { .build(); } } - + public static class BuilderReversedListGenerator extends TestStringListGenerator { @Override protected List<String> create(String[] elements) { @@ -116,24 +113,6 @@ public final class ListGenerators { } } - public static class CharactersOfStringGenerator - extends TestCharacterListGenerator { - @Override public List<Character> create(Character[] elements) { - char[] chars = Chars.toArray(Arrays.asList(elements)); - return Lists.charactersOf(String.copyValueOf(chars)); - } - } - - public static class CharactersOfCharSequenceGenerator - extends TestCharacterListGenerator { - @Override public List<Character> create(Character[] elements) { - char[] chars = Chars.toArray(Arrays.asList(elements)); - StringBuilder str = new StringBuilder(); - str.append(chars); - return Lists.charactersOf(str); - } - } - private abstract static class TestUnhashableListGenerator extends TestUnhashableCollectionGenerator<List<UnhashableObject>> implements TestListGenerator<UnhashableObject> { diff --git a/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapPutAllTester.java b/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapPutAllTester.java deleted file mode 100644 index 228d61d..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapPutAllTester.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import static com.google.common.collect.testing.Helpers.copyToList; -import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_PUT; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.ListMultimap; -import com.google.common.collect.testing.features.MapFeature; - -import java.util.Arrays; -import java.util.List; - -/** - * Testers for {@link ListMultimap#putAll(Object, Iterable)}. - * - * @author Louis Wasserman - */ -@GwtCompatible -public class ListMultimapPutAllTester<K, V> extends AbstractListMultimapTester<K, V> { - @MapFeature.Require(SUPPORTS_PUT) - public void testPutAllAddsAtEndInOrder() { - @SuppressWarnings("unchecked") - List<V> values = Arrays.asList( - sampleValues().e3, - sampleValues().e1, - sampleValues().e4); - - for (K k : sampleKeys()) { - resetContainer(); - - List<V> expectedValues = copyToList(multimap().get(k)); - - multimap().putAll(k, values); - expectedValues.addAll(values); - - assertGet(k, expectedValues); - } - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapPutTester.java b/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapPutTester.java deleted file mode 100644 index 2941612..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapPutTester.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import static com.google.common.collect.testing.Helpers.copyToList; -import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_PUT; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.ListMultimap; -import com.google.common.collect.testing.Helpers; -import com.google.common.collect.testing.features.CollectionSize; -import com.google.common.collect.testing.features.MapFeature; - -import java.util.List; -import java.util.Map.Entry; - -/** - * Testers for {@link ListMultimap#put(Object, Object)}. - * - * @author Louis Wasserman - */ -@GwtCompatible -public class ListMultimapPutTester<K, V> extends AbstractListMultimapTester<K, V> { - // MultimapPutTester tests non-duplicate values, but ignores ordering - - @MapFeature.Require(SUPPORTS_PUT) - public void testPutAddsValueAtEnd() { - for (K key : sampleKeys()) { - for (V value : sampleValues()) { - resetContainer(); - - List<V> values = multimap().get(key); - List<V> expectedValues = Helpers.copyToList(values); - - multimap().put(key, value); - expectedValues.add(value); - - assertGet(key, expectedValues); - assertEquals(value, values.get(values.size() - 1)); - } - } - } - - @MapFeature.Require(SUPPORTS_PUT) - @CollectionSize.Require(absent = ZERO) - public void testPutDuplicateValue() { - List<Entry<K, V>> entries = copyToList(multimap().entries()); - - for (Entry<K, V> entry : entries) { - resetContainer(); - - K k = entry.getKey(); - V v = entry.getValue(); - - List<V> values = multimap().get(k); - List<V> expectedValues = copyToList(values); - - assertTrue(multimap().put(k, v)); - expectedValues.add(v); - assertGet(k, expectedValues); - assertEquals(v, values.get(values.size() - 1)); - } - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapRemoveTester.java b/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapRemoveTester.java deleted file mode 100644 index 18f9b3a..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapRemoveTester.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import static com.google.common.collect.testing.Helpers.copyToList; -import static com.google.common.collect.testing.Helpers.mapEntry; -import static com.google.common.collect.testing.features.CollectionSize.SEVERAL; -import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_REMOVE; -import static org.truth0.Truth.ASSERT; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.ListMultimap; -import com.google.common.collect.testing.features.CollectionSize; -import com.google.common.collect.testing.features.MapFeature; - -import java.util.Arrays; -import java.util.Collection; -import java.util.List; -import java.util.Map; - -/** - * Testers for {@link ListMultimap#remove(Object, Object)}. - * - * @author Louis Wasserman - */ -@GwtCompatible -public class ListMultimapRemoveTester<K, V> extends AbstractListMultimapTester<K, V> { - @SuppressWarnings("unchecked") - @MapFeature.Require(SUPPORTS_REMOVE) - @CollectionSize.Require(SEVERAL) - public void testMultimapRemoveDeletesFirstOccurrence() { - K k = sampleKeys().e0; - V v0 = sampleValues().e0; - V v1 = sampleValues().e2; - resetContainer(mapEntry(k, v0), mapEntry(k, v1), mapEntry(k, v0)); - - List<V> list = multimap().get(k); - multimap().remove(k, v0); - ASSERT.that(list).has().allOf(v1, v0).inOrder(); - } - - @SuppressWarnings("unchecked") - @MapFeature.Require(SUPPORTS_REMOVE) - @CollectionSize.Require(SEVERAL) - public void testRemoveAtIndexFromGetPropagates() { - K k = sampleKeys().e0; - V v0 = sampleValues().e0; - V v1 = sampleValues().e2; - List<V> values = Arrays.asList(v0, v1, v0); - - for (int i = 0; i < 3; i++) { - resetContainer(mapEntry(k, v0), mapEntry(k, v1), mapEntry(k, v0)); - List<V> expectedValues = copyToList(values); - - multimap().get(k).remove(i); - expectedValues.remove(i); - - assertGet(k, expectedValues); - } - } - - @SuppressWarnings("unchecked") - @MapFeature.Require(SUPPORTS_REMOVE) - @CollectionSize.Require(SEVERAL) - public void testRemoveAtIndexFromAsMapPropagates() { - K k = sampleKeys().e0; - V v0 = sampleValues().e0; - V v1 = sampleValues().e2; - List<V> values = Arrays.asList(v0, v1, v0); - - for (int i = 0; i < 3; i++) { - resetContainer(mapEntry(k, v0), mapEntry(k, v1), mapEntry(k, v0)); - List<V> expectedValues = copyToList(values); - - List<V> asMapValue = (List<V>) multimap().asMap().get(k); - asMapValue.remove(i); - expectedValues.remove(i); - - assertGet(k, expectedValues); - } - } - - @SuppressWarnings("unchecked") - @MapFeature.Require(SUPPORTS_REMOVE) - @CollectionSize.Require(SEVERAL) - public void testRemoveAtIndexFromAsMapEntrySetPropagates() { - K k = sampleKeys().e0; - V v0 = sampleValues().e0; - V v1 = sampleValues().e2; - List<V> values = Arrays.asList(v0, v1, v0); - - for (int i = 0; i < 3; i++) { - resetContainer(mapEntry(k, v0), mapEntry(k, v1), mapEntry(k, v0)); - List<V> expectedValues = copyToList(values); - - Map.Entry<K, Collection<V>> asMapEntry = multimap().asMap().entrySet().iterator().next(); - List<V> asMapValue = (List<V>) asMapEntry.getValue(); - asMapValue.remove(i); - expectedValues.remove(i); - - assertGet(k, expectedValues); - } - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapReplaceValuesTester.java b/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapReplaceValuesTester.java deleted file mode 100644 index b7551af..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapReplaceValuesTester.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_PUT; -import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_REMOVE; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.ListMultimap; -import com.google.common.collect.testing.features.MapFeature; - -import java.util.Arrays; -import java.util.List; - -/** - * Testers for {@link ListMultimap#replaceValues(Object, Iterable)}. - * - * @author Louis Wasserman - */ -@GwtCompatible -public class ListMultimapReplaceValuesTester<K, V> extends AbstractListMultimapTester<K, V> { - @MapFeature.Require({SUPPORTS_PUT, SUPPORTS_REMOVE}) - public void testReplaceValuesPreservesOrder() { - @SuppressWarnings("unchecked") - List<V> values = Arrays.asList( - sampleValues().e3, - sampleValues().e1, - sampleValues().e4); - - for (K k : sampleKeys()) { - resetContainer(); - multimap().replaceValues(k, values); - assertGet(k, values); - } - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapTestSuiteBuilder.java deleted file mode 100644 index 87f84d6..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapTestSuiteBuilder.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import com.google.common.collect.ListMultimap; -import com.google.common.collect.testing.AbstractTester; -import com.google.common.collect.testing.FeatureSpecificTestSuiteBuilder; -import com.google.common.collect.testing.Helpers; -import com.google.common.collect.testing.ListTestSuiteBuilder; -import com.google.common.collect.testing.OneSizeTestContainerGenerator; -import com.google.common.collect.testing.TestListGenerator; -import com.google.common.collect.testing.features.CollectionFeature; -import com.google.common.collect.testing.features.Feature; -import com.google.common.collect.testing.features.ListFeature; - -import junit.framework.TestSuite; - -import java.util.List; -import java.util.Map.Entry; -import java.util.Set; - -/** - * Creates, based on your criteria, a JUnit test suite that exhaustively tests - * a {@code ListMultimap} implementation. - * - * @author Louis Wasserman - */ -public class ListMultimapTestSuiteBuilder<K, V> extends - MultimapTestSuiteBuilder<K, V, ListMultimap<K, V>> { - - public static <K, V> ListMultimapTestSuiteBuilder<K, V> using( - TestListMultimapGenerator<K, V> generator) { - ListMultimapTestSuiteBuilder<K, V> result = new ListMultimapTestSuiteBuilder<K, V>(); - result.usingGenerator(generator); - return result; - } - - @Override protected List<Class<? extends AbstractTester>> getTesters() { - List<Class<? extends AbstractTester>> testers = Helpers.copyToList(super.getTesters()); - testers.add(ListMultimapPutTester.class); - testers.add(ListMultimapPutAllTester.class); - testers.add(ListMultimapRemoveTester.class); - testers.add(ListMultimapReplaceValuesTester.class); - return testers; - } - - @Override - TestSuite computeMultimapGetTestSuite( - FeatureSpecificTestSuiteBuilder<?, ? extends - OneSizeTestContainerGenerator<ListMultimap<K, V>, Entry<K, V>>> parentBuilder) { - return ListTestSuiteBuilder.using( - new MultimapGetGenerator<K, V>(parentBuilder.getSubjectGenerator())) - .withFeatures(computeMultimapGetFeatures(parentBuilder.getFeatures())) - .named(parentBuilder.getName() + ".get[key]") - .suppressing(parentBuilder.getSuppressedTests()) - .createTestSuite(); - } - - @Override - Set<Feature<?>> computeMultimapGetFeatures( - Set<Feature<?>> multimapFeatures) { - Set<Feature<?>> derivedFeatures = super.computeMultimapGetFeatures(multimapFeatures); - if (derivedFeatures.contains(CollectionFeature.SUPPORTS_ADD)) { - derivedFeatures.add(ListFeature.SUPPORTS_ADD_WITH_INDEX); - } - if (derivedFeatures.contains(CollectionFeature.GENERAL_PURPOSE)) { - derivedFeatures.add(ListFeature.GENERAL_PURPOSE); - } - return derivedFeatures; - } - - private static class MultimapGetGenerator<K, V> - extends MultimapTestSuiteBuilder.MultimapGetGenerator<K, V, ListMultimap<K, V>> - implements TestListGenerator<V> { - public MultimapGetGenerator( - OneSizeTestContainerGenerator<ListMultimap<K, V>, Entry<K, V>> multimapGenerator) { - super(multimapGenerator); - } - - @Override - public List<V> create(Object... elements) { - return (List<V>) super.create(elements); - } - - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MapGenerators.java b/guava-testlib/src/com/google/common/collect/testing/google/MapGenerators.java index fa4b91d..2dd9f54 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/MapGenerators.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/MapGenerators.java @@ -16,26 +16,23 @@ package com.google.common.collect.testing.google; -import static com.google.common.collect.testing.Helpers.mapEntry; +import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.annotations.GwtCompatible; import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Maps; -import com.google.common.collect.Ordering; -import com.google.common.collect.testing.AnEnum; +import com.google.common.collect.ImmutableMap.Builder; import com.google.common.collect.testing.SampleElements; -import com.google.common.collect.testing.TestEnumMapGenerator; +import com.google.common.collect.testing.TestCollectionGenerator; import com.google.common.collect.testing.TestListGenerator; -import com.google.common.collect.testing.TestStringListGenerator; -import com.google.common.collect.testing.TestStringMapGenerator; +import com.google.common.collect.testing.TestMapEntrySetGenerator; +import com.google.common.collect.testing.TestStringSetGenerator; import com.google.common.collect.testing.TestUnhashableCollectionGenerator; import com.google.common.collect.testing.UnhashableObject; import java.util.Collection; -import java.util.EnumMap; import java.util.List; -import java.util.Map; import java.util.Map.Entry; +import java.util.Set; /** * Generators of different types of map and related collections, such as @@ -45,121 +42,105 @@ import java.util.Map.Entry; */ @GwtCompatible public class MapGenerators { - public static class ImmutableMapGenerator - extends TestStringMapGenerator { - @Override protected Map<String, String> create(Entry<String, String>[] entries) { - ImmutableMap.Builder<String, String> builder = ImmutableMap.builder(); - for (Entry<String, String> entry : entries) { - builder.put(entry.getKey(), entry.getValue()); + + public static class ImmutableMapKeySetGenerator + extends TestStringSetGenerator { + @Override protected Set<String> create(String[] elements) { + Builder<String, Integer> builder = ImmutableMap.builder(); + for (String key : elements) { + builder.put(key, 4); } - return builder.build(); + return builder.build().keySet(); } } - public static class ImmutableMapUnhashableValuesGenerator - extends TestUnhashableCollectionGenerator<Collection<UnhashableObject>> { + public static class ImmutableMapValuesGenerator + implements TestCollectionGenerator<String> { - @Override public Collection<UnhashableObject> create( - UnhashableObject[] elements) { - ImmutableMap.Builder<Integer, UnhashableObject> builder = ImmutableMap.builder(); - int key = 1; - for (UnhashableObject value : elements) { - builder.put(key++, value); + @Override + public SampleElements<String> samples() { + return new SampleElements.Strings(); + } + + @Override + public Collection<String> create(Object... elements) { + Builder<Object, String> builder = ImmutableMap.builder(); + for (Object key : elements) { + builder.put(key, String.valueOf(key)); } return builder.build().values(); } - } - public static class ImmutableMapKeyListGenerator extends TestStringListGenerator { @Override - public List<String> create(String[] elements) { - ImmutableMap.Builder<String, Integer> builder = ImmutableMap.builder(); - for (int i = 0; i < elements.length; i++) { - builder.put(elements[i], i); - } - return builder.build().keySet().asList(); + public String[] createArray(int length) { + return new String[length]; } - } - public static class ImmutableMapValueListGenerator extends TestStringListGenerator { @Override - public List<String> create(String[] elements) { - ImmutableMap.Builder<Integer, String> builder = ImmutableMap.builder(); - for (int i = 0; i < elements.length; i++) { - builder.put(i, elements[i]); - } - return builder.build().values().asList(); + public List<String> order(List<String> insertionOrder) { + return insertionOrder; } } - public static class ImmutableMapEntryListGenerator - implements TestListGenerator<Entry<String, Integer>> { + public static class ImmutableMapUnhashableValuesGenerator + extends TestUnhashableCollectionGenerator<Collection<UnhashableObject>> { - @Override - public SampleElements<Entry<String, Integer>> samples() { - return new SampleElements<Entry<String, Integer>>( - mapEntry("foo", 5), - mapEntry("bar", 3), - mapEntry("baz", 17), - mapEntry("quux", 1), - mapEntry("toaster", -2)); + @Override public Collection<UnhashableObject> create( + UnhashableObject[] elements) { + Builder<Integer, UnhashableObject> builder = ImmutableMap.builder(); + int key = 1; + for (UnhashableObject value : elements) { + builder.put(key++, value); + } + return builder.build().values(); } + } - @SuppressWarnings("unchecked") - @Override - public Entry<String, Integer>[] createArray(int length) { - return new Entry[length]; - } + public static class ImmutableMapEntrySetGenerator + extends TestMapEntrySetGenerator<String, String> { - @Override - public Iterable<Entry<String, Integer>> order(List<Entry<String, Integer>> insertionOrder) { - return insertionOrder; + public ImmutableMapEntrySetGenerator() { + super(new SampleElements.Strings(), new SampleElements.Strings()); } - @Override - public List<Entry<String, Integer>> create(Object... elements) { - ImmutableMap.Builder<String, Integer> builder = ImmutableMap.builder(); - for (Object o : elements) { - @SuppressWarnings("unchecked") - Entry<String, Integer> entry = (Entry<String, Integer>) o; - builder.put(entry); + @Override public Set<Entry<String, String>> createFromEntries( + Entry<String, String>[] entries) { + Builder<String, String> builder = ImmutableMap.builder(); + for (Entry<String, String> entry : entries) { + // This null-check forces NPE to be thrown for tests with null + // elements. Those tests aren't useful in testing entry sets + // because entry sets never have null elements. + checkNotNull(entry); + builder.put(entry.getKey(), entry.getValue()); } - return builder.build().entrySet().asList(); + return builder.build().entrySet(); } } - public static class ImmutableEnumMapGenerator extends TestEnumMapGenerator { + public static class ImmutableMapValueListGenerator + implements TestListGenerator<String> { @Override - protected Map<AnEnum, String> create(Entry<AnEnum, String>[] entries) { - Map<AnEnum, String> map = Maps.newHashMap(); - for (Entry<AnEnum, String> entry : entries) { - // checkArgument(!map.containsKey(entry.getKey())); - map.put(entry.getKey(), entry.getValue()); - } - return Maps.immutableEnumMap(map); + public SampleElements<String> samples() { + return new SampleElements.Strings(); } - } - public static class ImmutableMapCopyOfEnumMapGenerator extends TestEnumMapGenerator { @Override - protected Map<AnEnum, String> create(Entry<AnEnum, String>[] entries) { - EnumMap<AnEnum, String> map = new EnumMap<AnEnum, String>(AnEnum.class); - for (Entry<AnEnum, String> entry : entries) { - map.put(entry.getKey(), entry.getValue()); + public List<String> create(Object... elements) { + Builder<Integer, String> builder = ImmutableMap.builder(); + for (int i = 0; i < elements.length; i++) { + builder.put(i, toStringOrNull(elements[i])); } - return ImmutableMap.copyOf(map); + return builder.build().values().asList(); } @Override - public Iterable<Entry<AnEnum, String>> order(List<Entry<AnEnum, String>> insertionOrder) { - return new Ordering<Entry<AnEnum, String>>() { - - @Override - public int compare(Entry<AnEnum, String> left, Entry<AnEnum, String> right) { - return left.getKey().compareTo(right.getKey()); - } + public String[] createArray(int length) { + return new String[length]; + } - }.sortedCopy(insertionOrder); + @Override + public Iterable<String> order(List<String> insertionOrder) { + return insertionOrder; } } diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultimapContainsEntryTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultimapContainsEntryTester.java deleted file mode 100644 index aeabd99..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultimapContainsEntryTester.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS; -import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_QUERIES; -import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_VALUES; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.Multimap; -import com.google.common.collect.testing.features.CollectionSize; -import com.google.common.collect.testing.features.MapFeature; - -/** - * Tester for {@link Multimap#containsEntry}. - * - * @author Louis Wasserman - */ -@GwtCompatible -public class MultimapContainsEntryTester<K, V> - extends AbstractMultimapTester<K, V, Multimap<K, V>> { - @CollectionSize.Require(absent = ZERO) - public void testContainsEntryYes() { - assertTrue(multimap().containsEntry(sampleKeys().e0, sampleValues().e0)); - } - - public void testContainsEntryNo() { - assertFalse(multimap().containsEntry(sampleKeys().e3, sampleValues().e3)); - } - - public void testContainsEntryAgreesWithGet() { - for (K k : sampleKeys()) { - for (V v : sampleValues()) { - assertEquals(multimap().get(k).contains(v), - multimap().containsEntry(k, v)); - } - } - } - - @CollectionSize.Require(absent = ZERO) - @MapFeature.Require({ ALLOWS_NULL_KEYS, ALLOWS_NULL_VALUES }) - public void testContainsEntryNullYes() { - initMultimapWithNullKeyAndValue(); - assertTrue(multimap().containsEntry(null, null)); - } - - @MapFeature.Require(ALLOWS_NULL_QUERIES) - public void testContainsEntryNullNo() { - assertFalse(multimap().containsEntry(null, null)); - } - - @MapFeature.Require(absent = ALLOWS_NULL_QUERIES) - public void testContainsEntryNullDisallowed() { - try { - multimap().containsEntry(null, null); - fail("Expected NullPointerException"); - } catch (NullPointerException expected) { - // success - } - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultimapContainsKeyTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultimapContainsKeyTester.java deleted file mode 100644 index 1d2e7d9..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultimapContainsKeyTester.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS; -import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_QUERIES; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.Multimap; -import com.google.common.collect.testing.features.CollectionSize; -import com.google.common.collect.testing.features.MapFeature; - -/** - * Tester for the {@code containsKey} methods of {@code Multimap} and its {@code asMap()} view. - * - * @author Louis Wasserman - */ -@GwtCompatible -public class MultimapContainsKeyTester<K, V> - extends AbstractMultimapTester<K, V, Multimap<K, V>> { - @CollectionSize.Require(absent = ZERO) - public void testContainsKeyYes() { - assertTrue(multimap().containsKey(sampleKeys().e0)); - } - - public void testContainsKeyNo() { - assertFalse(multimap().containsKey(sampleKeys().e3)); - } - - public void testContainsKeysFromKeySet() { - for (K k : multimap().keySet()) { - assertTrue(multimap().containsKey(k)); - } - } - - public void testContainsKeyAgreesWithGet() { - for (K k : sampleKeys()) { - assertEquals(!multimap().get(k).isEmpty(), multimap().containsKey(k)); - } - } - - public void testContainsKeyAgreesWithAsMap() { - for (K k : sampleKeys()) { - assertEquals(multimap().containsKey(k), multimap().asMap().containsKey(k)); - } - } - - public void testContainsKeyAgreesWithKeySet() { - for (K k : sampleKeys()) { - assertEquals(multimap().containsKey(k), multimap().keySet().contains(k)); - } - } - - @MapFeature.Require(ALLOWS_NULL_KEYS) - @CollectionSize.Require(absent = ZERO) - public void testContainsKeyNullPresent() { - initMultimapWithNullKey(); - assertTrue(multimap().containsKey(null)); - } - - @MapFeature.Require(ALLOWS_NULL_QUERIES) - public void testContainsKeyNullAbsent() { - assertFalse(multimap().containsKey(null)); - } - - @MapFeature.Require(absent = ALLOWS_NULL_QUERIES) - public void testContainsKeyNullDisallowed() { - try { - multimap().containsKey(null); - fail("Expected NullPointerException"); - } catch (NullPointerException expected) { - // success - } - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultimapContainsValueTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultimapContainsValueTester.java deleted file mode 100644 index 4b0d51a..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultimapContainsValueTester.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_QUERIES; -import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_VALUES; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.Multimap; -import com.google.common.collect.testing.features.CollectionSize; -import com.google.common.collect.testing.features.MapFeature; - -/** - * Tester for {@link Multimap#containsValue}. - * - * @author Louis Wasserman - */ -@GwtCompatible -public class MultimapContainsValueTester<K, V> - extends AbstractMultimapTester<K, V, Multimap<K, V>> { - @CollectionSize.Require(absent = ZERO) - public void testContainsValueYes() { - assertTrue(multimap().containsValue(sampleValues().e0)); - } - - public void testContainsValueNo() { - assertFalse(multimap().containsValue(sampleValues().e3)); - } - - @MapFeature.Require(ALLOWS_NULL_VALUES) - @CollectionSize.Require(absent = ZERO) - public void testContainsNullValueYes() { - initMultimapWithNullValue(); - assertTrue(multimap().containsValue(null)); - } - - @MapFeature.Require(ALLOWS_NULL_QUERIES) - public void testContainsNullValueNo() { - assertFalse(multimap().containsValue(null)); - } - - @MapFeature.Require(absent = ALLOWS_NULL_QUERIES) - public void testContainsNullValueFails() { - try { - multimap().containsValue(null); - fail("Expected NullPointerException"); - } catch (NullPointerException expected) { - // success - } - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultimapGetTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultimapGetTester.java deleted file mode 100644 index f57928a..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultimapGetTester.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import static com.google.common.collect.testing.Helpers.assertContentsAnyOrder; -import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS; -import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_QUERIES; -import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_VALUES; -import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_PUT; -import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_REMOVE; -import static org.truth0.Truth.ASSERT; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.Multimap; -import com.google.common.collect.testing.features.CollectionSize; -import com.google.common.collect.testing.features.MapFeature; - -import java.util.Collection; - -/** - * Tests for {@link Multimap#get(Object)}. - * - * @author Louis Wasserman - */ -@GwtCompatible -public class MultimapGetTester<K, V> extends AbstractMultimapTester<K, V, Multimap<K, V>> { - public void testGetEmpty() { - Collection<V> result = multimap().get(sampleKeys().e3); - assertTrue(result.isEmpty()); - assertEquals(0, result.size()); - } - - @CollectionSize.Require(absent = ZERO) - public void testGetNonEmpty() { - Collection<V> result = multimap().get(sampleKeys().e0); - assertFalse(result.isEmpty()); - assertContentsAnyOrder(result, sampleValues().e0); - } - - @CollectionSize.Require(absent = ZERO) - @MapFeature.Require(SUPPORTS_REMOVE) - public void testGetPropagatesRemove() { - Collection<V> result = multimap().get(sampleKeys().e0); - assertTrue(result.remove(sampleValues().e0)); - assertFalse(multimap().containsKey(sampleKeys().e0)); - assertTrue(result.isEmpty()); - assertTrue(multimap().get(sampleKeys().e0).isEmpty()); - } - - @CollectionSize.Require(absent = ZERO) - @MapFeature.Require({ SUPPORTS_REMOVE, SUPPORTS_PUT }) - public void testGetRemoveThenAddPropagates() { - int oldSize = getNumElements(); - - K k0 = sampleKeys().e0; - V v0 = sampleValues().e0; - - Collection<V> result = multimap().get(k0); - assertTrue(result.remove(v0)); - - assertFalse(multimap().containsKey(k0)); - assertFalse(multimap().containsEntry(k0, v0)); - ASSERT.that(result).isEmpty(); - - V v1 = sampleValues().e1; - V v2 = sampleValues().e2; - - assertTrue(result.add(v1)); - assertTrue(result.add(v2)); - - ASSERT.that(result).has().allOf(v1, v2); - ASSERT.that(multimap().get(k0)).has().allOf(v1, v2); - assertTrue(multimap().containsKey(k0)); - assertFalse(multimap().containsEntry(k0, v0)); - assertTrue(multimap().containsEntry(k0, v2)); - assertEquals(oldSize + 1, multimap().size()); - } - - @MapFeature.Require(ALLOWS_NULL_KEYS) - @CollectionSize.Require(absent = ZERO) - public void testGetNullPresent() { - initMultimapWithNullKey(); - ASSERT.that(multimap().get(null)).has().item(getValueForNullKey()); - } - - @MapFeature.Require(ALLOWS_NULL_QUERIES) - public void testGetNullAbsent() { - ASSERT.that(multimap().get(null)).isEmpty(); - } - - @MapFeature.Require(absent = ALLOWS_NULL_QUERIES) - public void testGetNullForbidden() { - try { - multimap().get(null); - fail("Expected NullPointerException"); - } catch (NullPointerException expected) { - // success - } - } - - @MapFeature.Require(ALLOWS_NULL_VALUES) - @CollectionSize.Require(absent = ZERO) - public void testGetWithNullValue() { - initMultimapWithNullValue(); - ASSERT.that(multimap().get(getKeyForNullValue())) - .has().item(null); - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultimapPutIterableTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultimapPutIterableTester.java deleted file mode 100644 index 39acf99..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultimapPutIterableTester.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_PUT; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.Lists; -import com.google.common.collect.Multimap; -import com.google.common.collect.testing.features.CollectionSize; -import com.google.common.collect.testing.features.MapFeature; - -import java.util.Collections; -import java.util.Iterator; - -/** - * Tests for {@link Multimap#putAll(Object, Iterable)}. - * - * @author Louis Wasserman - */ -@GwtCompatible -public class MultimapPutIterableTester<K, V> extends AbstractMultimapTester<K, V, Multimap<K, V>> { - @CollectionSize.Require(absent = ZERO) - @MapFeature.Require(SUPPORTS_PUT) - public void testPutAllNonEmptyOnPresentKey() { - multimap().putAll(sampleKeys().e0, new Iterable<V>() { - @Override - public Iterator<V> iterator() { - return Lists.newArrayList(sampleValues().e3, sampleValues().e4).iterator(); - } - }); - assertGet(sampleKeys().e0, sampleValues().e0, sampleValues().e3, sampleValues().e4); - } - - @MapFeature.Require(SUPPORTS_PUT) - public void testPutAllNonEmptyOnAbsentKey() { - multimap().putAll(sampleKeys().e3, new Iterable<V>() { - @Override - public Iterator<V> iterator() { - return Lists.newArrayList(sampleValues().e3, sampleValues().e4).iterator(); - } - }); - assertGet(sampleKeys().e3, sampleValues().e3, sampleValues().e4); - } - - private static final Object[] EMPTY = new Object[0]; - - @MapFeature.Require(SUPPORTS_PUT) - public void testPutAllEmptyIterableOnAbsentKey() { - Iterable<V> iterable = Collections.emptyList(); - - multimap().putAll(sampleKeys().e3, iterable); - expectUnchanged(); - } - - @CollectionSize.Require(absent = ZERO) - @MapFeature.Require(SUPPORTS_PUT) - public void testPutAllEmptyIterableOnPresentKey() { - multimap().putAll(sampleKeys().e0, Collections.<V>emptyList()); - expectUnchanged(); - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultimapPutTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultimapPutTester.java deleted file mode 100644 index 9e113cf..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultimapPutTester.java +++ /dev/null @@ -1,194 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS; -import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_VALUES; -import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_PUT; -import static org.truth0.Truth.ASSERT; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.Lists; -import com.google.common.collect.Multimap; -import com.google.common.collect.testing.Helpers; -import com.google.common.collect.testing.features.CollectionSize; -import com.google.common.collect.testing.features.MapFeature; - -import java.util.Arrays; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.Map.Entry; - -/** - * Tester for {@link Multimap#put}. - * - * @author Louis Wasserman - */ -@GwtCompatible -public class MultimapPutTester<K, V> extends AbstractMultimapTester<K, V, Multimap<K, V>> { - @MapFeature.Require(SUPPORTS_PUT) - public void testPutEmpty() { - int size = getNumElements(); - - K key = sampleKeys().e3; - V value = sampleValues().e3; - - assertGet(key, ImmutableList.<V>of()); - - assertTrue(multimap().put(key, value)); - - assertGet(key, value); - assertEquals(size + 1, multimap().size()); - } - - @MapFeature.Require(SUPPORTS_PUT) - @CollectionSize.Require(absent = ZERO) - public void testPutPresent() { - int size = getNumElements(); - - K key = sampleKeys().e0; - V oldValue = sampleValues().e0; - V newValue = sampleValues().e3; - - assertGet(key, oldValue); - - assertTrue(multimap().put(key, newValue)); - - assertGet(key, oldValue, newValue); - assertEquals(size + 1, multimap().size()); - } - - @MapFeature.Require(SUPPORTS_PUT) - public void testPutTwoElements() { - int size = getNumElements(); - - K key = sampleKeys().e0; - V v1 = sampleValues().e3; - V v2 = sampleValues().e4; - - List<V> values = Helpers.copyToList(multimap().get(key)); - - assertTrue(multimap().put(key, v1)); - assertTrue(multimap().put(key, v2)); - - values.add(v1); - values.add(v2); - - assertGet(key, values); - assertEquals(size + 2, multimap().size()); - } - - @MapFeature.Require({SUPPORTS_PUT, ALLOWS_NULL_VALUES}) - public void testPutNullValue() { - int size = getNumElements(); - - multimap().put(sampleKeys().e3, null); - - assertGet(sampleKeys().e3, Lists.newArrayList((V)null)); // ImmutableList.of can't take null. - assertEquals(size + 1, multimap().size()); - } - - @MapFeature.Require({SUPPORTS_PUT, ALLOWS_NULL_KEYS}) - public void testPutNullKey() { - int size = getNumElements(); - - multimap().put(null, sampleValues().e3); - - assertGet(null, sampleValues().e3); - assertEquals(size + 1, multimap().size()); - } - - @MapFeature.Require(SUPPORTS_PUT) - public void testPutNotPresentKeyPropagatesToGet() { - int size = getNumElements(); - Collection<V> collection = multimap().get(sampleKeys().e3); - ASSERT.that(collection).isEmpty(); - multimap().put(sampleKeys().e3, sampleValues().e3); - ASSERT.that(collection).has().item(sampleValues().e3); - assertEquals(size + 1, multimap().size()); - } - - @MapFeature.Require(SUPPORTS_PUT) - @CollectionSize.Require(absent = ZERO) - public void testPutPresentKeyPropagatesToGet() { - List<K> keys = Helpers.copyToList(multimap().keySet()); - for (K key : keys) { - resetContainer(); - - int size = getNumElements(); - - Collection<V> collection = multimap().get(key); - Collection<V> expectedCollection = Helpers.copyToList(collection); - - multimap().put(key, sampleValues().e3); - expectedCollection.add(sampleValues().e3); - ASSERT.that(collection).has().allFrom(expectedCollection); - assertEquals(size + 1, multimap().size()); - } - } - - @MapFeature.Require(SUPPORTS_PUT) - @CollectionSize.Require(absent = ZERO) - public void testPutPresentKeyPropagatesToAsMapGet() { - List<K> keys = Helpers.copyToList(multimap().keySet()); - for (K key : keys) { - resetContainer(); - - int size = getNumElements(); - - Collection<V> collection = multimap().asMap().get(key); - assertNotNull(collection); - Collection<V> expectedCollection = Helpers.copyToList(collection); - - multimap().put(key, sampleValues().e3); - expectedCollection.add(sampleValues().e3); - ASSERT.that(collection).has().allFrom(expectedCollection); - assertEquals(size + 1, multimap().size()); - } - } - - @MapFeature.Require(SUPPORTS_PUT) - @CollectionSize.Require(absent = ZERO) - public void testPutPresentKeyPropagatesToAsMapEntrySet() { - List<K> keys = Helpers.copyToList(multimap().keySet()); - for (K key : keys) { - resetContainer(); - - int size = getNumElements(); - - Iterator<Entry<K, Collection<V>>> asMapItr = multimap().asMap().entrySet().iterator(); - Collection<V> collection = null; - while (asMapItr.hasNext()) { - Entry<K, Collection<V>> asMapEntry = asMapItr.next(); - if (key.equals(asMapEntry.getKey())) { - collection = asMapEntry.getValue(); - break; - } - } - assertNotNull(collection); - Collection<V> expectedCollection = Helpers.copyToList(collection); - - multimap().put(key, sampleValues().e3); - expectedCollection.add(sampleValues().e3); - ASSERT.that(collection).has().allFrom(expectedCollection); - assertEquals(size + 1, multimap().size()); - } - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultimapRemoveAllTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultimapRemoveAllTester.java deleted file mode 100644 index 7c209a7..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultimapRemoveAllTester.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import static com.google.common.collect.testing.features.CollectionSize.SEVERAL; -import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS; -import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_QUERIES; -import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_REMOVE; -import static org.truth0.Truth.ASSERT; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.Multimap; -import com.google.common.collect.testing.Helpers; -import com.google.common.collect.testing.features.CollectionSize; -import com.google.common.collect.testing.features.MapFeature; - -import java.util.Collection; - -/** - * Tests for {@link Multimap#removeAll(Object)}. - * - * @author Louis Wasserman - */ -@GwtCompatible -public class MultimapRemoveAllTester<K, V> extends AbstractMultimapTester<K, V, Multimap<K, V>> { - @MapFeature.Require(SUPPORTS_REMOVE) - public void testRemoveAllAbsentKey() { - ASSERT.that(multimap().removeAll(sampleKeys().e3)).isEmpty(); - expectUnchanged(); - } - - @CollectionSize.Require(absent = ZERO) - @MapFeature.Require(SUPPORTS_REMOVE) - public void testRemoveAllPresentKey() { - ASSERT.that(multimap().removeAll(sampleKeys().e0)) - .has().allOf(sampleValues().e0).inOrder(); - expectMissing(samples.e0); - } - - @CollectionSize.Require(absent = ZERO) - @MapFeature.Require(SUPPORTS_REMOVE) - public void testRemoveAllPropagatesToGet() { - Collection<V> getResult = multimap().get(sampleKeys().e0); - - multimap().removeAll(sampleKeys().e0); - - ASSERT.that(getResult).isEmpty(); - expectMissing(samples.e0); - } - - @CollectionSize.Require(SEVERAL) - @MapFeature.Require(SUPPORTS_REMOVE) - public void testRemoveAllMultipleValues() { - resetContainer( - Helpers.mapEntry(sampleKeys().e0, sampleValues().e0), - Helpers.mapEntry(sampleKeys().e0, sampleValues().e1), - Helpers.mapEntry(sampleKeys().e0, sampleValues().e2)); - - ASSERT.that(multimap().removeAll(sampleKeys().e0)) - .has().allOf(sampleValues().e0, sampleValues().e1, sampleValues().e2); - assertTrue(multimap().isEmpty()); - } - - @CollectionSize.Require(absent = ZERO) - @MapFeature.Require({ SUPPORTS_REMOVE, ALLOWS_NULL_KEYS }) - public void testRemoveAllNullKeyPresent() { - initMultimapWithNullKey(); - - ASSERT.that(multimap().removeAll(null)).has().allOf(getValueForNullKey()).inOrder(); - - expectMissing(Helpers.mapEntry((K) null, getValueForNullKey())); - } - - @MapFeature.Require({ SUPPORTS_REMOVE, ALLOWS_NULL_QUERIES }) - public void testRemoveAllNullKeyAbsent() { - ASSERT.that(multimap().removeAll(null)).isEmpty(); - expectUnchanged(); - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultimapRemoveEntryTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultimapRemoveEntryTester.java deleted file mode 100644 index 7245f77..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultimapRemoveEntryTester.java +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS; -import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_QUERIES; -import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_VALUES; -import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_REMOVE; -import static org.truth0.Truth.ASSERT; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.Multimap; -import com.google.common.collect.testing.Helpers; -import com.google.common.collect.testing.features.CollectionSize; -import com.google.common.collect.testing.features.MapFeature; - -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.Map.Entry; - -/** - * Tests for {@link Multimap#remove(Object, Object)}. - * - * @author Louis Wasserman - */ -@GwtCompatible -public class MultimapRemoveEntryTester<K, V> extends AbstractMultimapTester<K, V, Multimap<K, V>> { - @MapFeature.Require(SUPPORTS_REMOVE) - public void testRemoveAbsent() { - assertFalse(multimap().remove(sampleKeys().e0, sampleValues().e1)); - expectUnchanged(); - } - - @CollectionSize.Require(absent = ZERO) - @MapFeature.Require(SUPPORTS_REMOVE) - public void testRemovePresent() { - assertTrue(multimap().remove(sampleKeys().e0, sampleValues().e0)); - - expectMissing(samples.e0); - assertGet(sampleKeys().e0, ImmutableList.<V>of()); - } - - @CollectionSize.Require(absent = ZERO) - @MapFeature.Require({ SUPPORTS_REMOVE, ALLOWS_NULL_KEYS }) - public void testRemoveNullKeyPresent() { - initMultimapWithNullKey(); - - assertTrue(multimap().remove(null, getValueForNullKey())); - - expectMissing(Helpers.mapEntry((K) null, getValueForNullKey())); - assertGet(getKeyForNullValue(), ImmutableList.<V>of()); - } - - @CollectionSize.Require(absent = ZERO) - @MapFeature.Require({ SUPPORTS_REMOVE, ALLOWS_NULL_VALUES }) - public void testRemoveNullValuePresent() { - initMultimapWithNullValue(); - - assertTrue(multimap().remove(getKeyForNullValue(), null)); - - expectMissing(Helpers.mapEntry(getKeyForNullValue(), (V) null)); - assertGet(getKeyForNullValue(), ImmutableList.<V>of()); - } - - @MapFeature.Require({ SUPPORTS_REMOVE, ALLOWS_NULL_QUERIES}) - public void testRemoveNullKeyAbsent() { - assertFalse(multimap().remove(null, sampleValues().e0)); - expectUnchanged(); - } - - @MapFeature.Require({ SUPPORTS_REMOVE, ALLOWS_NULL_QUERIES}) - public void testRemoveNullValueAbsent() { - assertFalse(multimap().remove(sampleKeys().e0, null)); - expectUnchanged(); - } - - @MapFeature.Require(value = SUPPORTS_REMOVE, absent = ALLOWS_NULL_QUERIES) - public void testRemoveNullValueForbidden() { - try { - multimap().remove(sampleKeys().e0, null); - fail("Expected NullPointerException"); - } catch (NullPointerException expected) { - // success - } - expectUnchanged(); - } - - @MapFeature.Require(value = SUPPORTS_REMOVE, absent = ALLOWS_NULL_QUERIES) - public void testRemoveNullKeyForbidden() { - try { - multimap().remove(null, sampleValues().e0); - fail("Expected NullPointerException"); - } catch (NullPointerException expected) { - // success - } - expectUnchanged(); - } - - @MapFeature.Require(SUPPORTS_REMOVE) - @CollectionSize.Require(absent = ZERO) - public void testRemovePropagatesToGet() { - List<Entry<K, V>> entries = Helpers.copyToList(multimap().entries()); - for (Entry<K, V> entry : entries) { - resetContainer(); - - K key = entry.getKey(); - V value = entry.getValue(); - Collection<V> collection = multimap().get(key); - assertNotNull(collection); - Collection<V> expectedCollection = Helpers.copyToList(collection); - - multimap().remove(key, value); - expectedCollection.remove(value); - - ASSERT.that(collection).has().allFrom(expectedCollection); - assertEquals(!expectedCollection.isEmpty(), multimap().containsKey(key)); - } - } - - @MapFeature.Require(SUPPORTS_REMOVE) - @CollectionSize.Require(absent = ZERO) - public void testRemovePropagatesToAsMap() { - List<Entry<K, V>> entries = Helpers.copyToList(multimap().entries()); - for (Entry<K, V> entry : entries) { - resetContainer(); - - K key = entry.getKey(); - V value = entry.getValue(); - Collection<V> collection = multimap().asMap().get(key); - assertNotNull(collection); - Collection<V> expectedCollection = Helpers.copyToList(collection); - - multimap().remove(key, value); - expectedCollection.remove(value); - - ASSERT.that(collection).has().allFrom(expectedCollection); - assertEquals(!expectedCollection.isEmpty(), multimap().containsKey(key)); - } - } - - @MapFeature.Require(SUPPORTS_REMOVE) - @CollectionSize.Require(absent = ZERO) - public void testRemovePropagatesToAsMapEntrySet() { - List<Entry<K, V>> entries = Helpers.copyToList(multimap().entries()); - for (Entry<K, V> entry : entries) { - resetContainer(); - - K key = entry.getKey(); - V value = entry.getValue(); - - Iterator<Entry<K, Collection<V>>> asMapItr = multimap().asMap().entrySet().iterator(); - Collection<V> collection = null; - while (asMapItr.hasNext()) { - Entry<K, Collection<V>> asMapEntry = asMapItr.next(); - if (key.equals(asMapEntry.getKey())) { - collection = asMapEntry.getValue(); - break; - } - } - assertNotNull(collection); - Collection<V> expectedCollection = Helpers.copyToList(collection); - - multimap().remove(key, value); - expectedCollection.remove(value); - - ASSERT.that(collection).has().allFrom(expectedCollection); - assertEquals(!expectedCollection.isEmpty(), multimap().containsKey(key)); - } - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultimapReplaceValuesTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultimapReplaceValuesTester.java deleted file mode 100644 index 85dc6b9..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultimapReplaceValuesTester.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_PUT; -import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_REMOVE; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.Multimap; -import com.google.common.collect.testing.Helpers; -import com.google.common.collect.testing.features.CollectionSize; -import com.google.common.collect.testing.features.MapFeature; - -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.List; - -/** - * Tests for {@link Multimap#replaceValues(Object, Iterable)}. - * - * @author Louis Wasserman - */ -@GwtCompatible -public class MultimapReplaceValuesTester<K, V> - extends AbstractMultimapTester<K, V, Multimap<K, V>> { - @MapFeature.Require({SUPPORTS_PUT, SUPPORTS_REMOVE}) - public void testReplaceEmptyValues() { - int size = multimap().size(); - K key = sampleKeys().e3; - @SuppressWarnings("unchecked") - List<V> values = Arrays.asList(sampleValues().e0, sampleValues().e2, sampleValues().e3); - multimap().replaceValues(key, values); - assertGet(key, values); - assertEquals(size + values.size(), multimap().size()); - } - - @CollectionSize.Require(absent = ZERO) - @MapFeature.Require({SUPPORTS_PUT, SUPPORTS_REMOVE}) - public void testReplaceNonEmptyValues() { - List<K> keys = Helpers.copyToList(multimap().keySet()); - @SuppressWarnings("unchecked") - List<V> values = Arrays.asList(sampleValues().e0, sampleValues().e2, sampleValues().e3); - - for (K k : keys) { - resetContainer(); - - int size = multimap().size(); - Collection<V> oldKeyValues = Helpers.copyToList(multimap().get(k)); - multimap().replaceValues(k, values); - assertGet(k, values); - assertEquals(size + values.size() - oldKeyValues.size(), multimap().size()); - } - } - - @MapFeature.Require(absent = SUPPORTS_REMOVE) - @CollectionSize.Require(absent = ZERO) - public void testReplaceValuesRemoveNotSupported() { - List<V> values = Collections.singletonList(sampleValues().e3); - try { - multimap().replaceValues(sampleKeys().e0, values); - fail("Expected UnsupportedOperationException"); - } catch (UnsupportedOperationException expected) { - // success - } - } - - @MapFeature.Require(absent = SUPPORTS_PUT) - public void testReplaceValuesPutNotSupported() { - List<V> values = Collections.singletonList(sampleValues().e3); - try { - multimap().replaceValues(sampleKeys().e0, values); - fail("Expected UnsupportedOperationException"); - } catch (UnsupportedOperationException expected) { - // success - } - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultimapSizeTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultimapSizeTester.java deleted file mode 100644 index 0f63789..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultimapSizeTester.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import static com.google.common.collect.testing.Helpers.mapEntry; -import static com.google.common.collect.testing.features.CollectionSize.SEVERAL; -import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.Multimap; -import com.google.common.collect.testing.features.CollectionSize; -import com.google.common.collect.testing.features.MapFeature; - -import java.util.Collection; -import java.util.Map.Entry; - -/** - * Tester for the {@code size} methods of {@code Multimap} and its views. - * - * @author Louis Wasserman - */ -@GwtCompatible -public class MultimapSizeTester<K, V> extends AbstractMultimapTester<K, V, Multimap<K, V>> { - - public void testSize() { - int expectedSize = getNumElements(); - Multimap<K, V> multimap = multimap(); - assertEquals(expectedSize, multimap.size()); - - int size = 0; - for (Entry<K, V> entry : multimap.entries()) { - assertTrue(multimap.containsEntry(entry.getKey(), entry.getValue())); - size++; - } - assertEquals(expectedSize, size); - - int size2 = 0; - for (Entry<K, Collection<V>> entry2 : multimap.asMap().entrySet()) { - size2 += entry2.getValue().size(); - } - assertEquals(expectedSize, size2); - } - - @CollectionSize.Require(ZERO) - public void testIsEmptyYes() { - assertTrue(multimap().isEmpty()); - } - - @CollectionSize.Require(absent = ZERO) - public void testIsEmptyNo() { - assertFalse(multimap().isEmpty()); - } - - @CollectionSize.Require(absent = ZERO) - @MapFeature.Require(ALLOWS_NULL_KEYS) - public void testSizeNullEntry() { - initMultimapWithNullKey(); - assertEquals(getNumElements(), multimap().size()); - assertFalse(multimap().isEmpty()); - } - - @CollectionSize.Require(SEVERAL) - public void testSizeMultipleValues() { - resetContainer( - mapEntry(sampleKeys().e0, sampleValues().e0), - mapEntry(sampleKeys().e0, sampleValues().e1), - mapEntry(sampleKeys().e0, sampleValues().e2)); - - assertEquals(3, multimap().size()); - assertEquals(3, multimap().entries().size()); - assertEquals(3, multimap().keys().size()); - - assertEquals(1, multimap().keySet().size()); - assertEquals(1, multimap().asMap().size()); - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultimapTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/google/MultimapTestSuiteBuilder.java deleted file mode 100644 index b3886cb..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultimapTestSuiteBuilder.java +++ /dev/null @@ -1,600 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.collect.testing.Helpers.mapEntry; - -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMultimap; -import com.google.common.collect.Multimap; -import com.google.common.collect.Multiset; -import com.google.common.collect.testing.AbstractTester; -import com.google.common.collect.testing.CollectionTestSuiteBuilder; -import com.google.common.collect.testing.DerivedGenerator; -import com.google.common.collect.testing.FeatureSpecificTestSuiteBuilder; -import com.google.common.collect.testing.Helpers; -import com.google.common.collect.testing.MapTestSuiteBuilder; -import com.google.common.collect.testing.OneSizeTestContainerGenerator; -import com.google.common.collect.testing.PerCollectionSizeTestSuiteBuilder; -import com.google.common.collect.testing.SampleElements; -import com.google.common.collect.testing.TestCollectionGenerator; -import com.google.common.collect.testing.TestMapGenerator; -import com.google.common.collect.testing.TestSubjectGenerator; -import com.google.common.collect.testing.features.CollectionFeature; -import com.google.common.collect.testing.features.Feature; -import com.google.common.collect.testing.features.MapFeature; -import com.google.common.testing.SerializableTester; - -import junit.framework.TestSuite; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; - -/** - * Creates, based on your criteria, a JUnit test suite that exhaustively tests - * a {@code Multimap} implementation. - * - * @author Louis Wasserman - */ -public class MultimapTestSuiteBuilder<K, V, M extends Multimap<K, V>> extends - PerCollectionSizeTestSuiteBuilder< - MultimapTestSuiteBuilder<K, V, M>, - TestMultimapGenerator<K, V, M>, M, Map.Entry<K, V>> { - - public static <K, V, M extends Multimap<K, V>> MultimapTestSuiteBuilder<K, V, M> using( - TestMultimapGenerator<K, V, M> generator) { - return new MultimapTestSuiteBuilder<K, V, M>().usingGenerator(generator); - } - - // Class parameters must be raw. - @Override - protected List<Class<? extends AbstractTester>> getTesters() { - return ImmutableList.<Class<? extends AbstractTester>> of( - MultimapSizeTester.class, - MultimapContainsKeyTester.class, - MultimapContainsValueTester.class, - MultimapContainsEntryTester.class, - MultimapGetTester.class, - MultimapPutTester.class, - MultimapPutIterableTester.class, - MultimapReplaceValuesTester.class, - MultimapRemoveEntryTester.class, - MultimapRemoveAllTester.class); - } - - @Override - protected List<TestSuite> createDerivedSuites( - FeatureSpecificTestSuiteBuilder< - ?, - ? extends OneSizeTestContainerGenerator<M, Map.Entry<K, V>>> - parentBuilder) { - // TODO: Once invariant support is added, supply invariants to each of the - // derived suites, to check that mutations to the derived collections are - // reflected in the underlying map. - - List<TestSuite> derivedSuites = super.createDerivedSuites(parentBuilder); - - if (parentBuilder.getFeatures().contains(CollectionFeature.SERIALIZABLE)) { - derivedSuites.add(MultimapTestSuiteBuilder.using( - new ReserializedMultimapGenerator<K, V, M>(parentBuilder.getSubjectGenerator())) - .withFeatures(computeReserializedMultimapFeatures(parentBuilder.getFeatures())) - .named(parentBuilder.getName() + " reserialized") - .suppressing(parentBuilder.getSuppressedTests()) - .createTestSuite()); - } - - derivedSuites.add(MapTestSuiteBuilder.using( - new AsMapGenerator<K, V, M>(parentBuilder.getSubjectGenerator())) - .withFeatures(computeAsMapFeatures(parentBuilder.getFeatures())) - .named(parentBuilder.getName() + ".asMap") - .suppressing(parentBuilder.getSuppressedTests()) - .createTestSuite()); - - derivedSuites.add(computeEntriesTestSuite(parentBuilder)); - derivedSuites.add(computeMultimapGetTestSuite(parentBuilder)); - derivedSuites.add(computeKeysTestSuite(parentBuilder)); - - return derivedSuites; - } - - TestSuite computeValuesTestSuite( - FeatureSpecificTestSuiteBuilder<?, ? - extends OneSizeTestContainerGenerator<M, Map.Entry<K, V>>> parentBuilder) { - return CollectionTestSuiteBuilder.using( - new ValuesGenerator<K, V, M>(parentBuilder.getSubjectGenerator())) - .withFeatures(computeValuesFeatures(parentBuilder.getFeatures())) - .named(parentBuilder.getName() + ".entries") - .suppressing(parentBuilder.getSuppressedTests()) - .createTestSuite(); - } - - TestSuite computeEntriesTestSuite( - FeatureSpecificTestSuiteBuilder<?, ? - extends OneSizeTestContainerGenerator<M, Map.Entry<K, V>>> parentBuilder) { - return CollectionTestSuiteBuilder.using( - new EntriesGenerator<K, V, M>(parentBuilder.getSubjectGenerator())) - .withFeatures(computeEntriesFeatures(parentBuilder.getFeatures())) - .named(parentBuilder.getName() + ".entries") - .suppressing(parentBuilder.getSuppressedTests()) - .createTestSuite(); - } - - TestSuite computeMultimapGetTestSuite( - FeatureSpecificTestSuiteBuilder<?, ? extends - OneSizeTestContainerGenerator<M, Map.Entry<K, V>>> parentBuilder) { - return CollectionTestSuiteBuilder.using( - new MultimapGetGenerator<K, V, M>(parentBuilder.getSubjectGenerator())) - .withFeatures(computeMultimapGetFeatures(parentBuilder.getFeatures())) - .named(parentBuilder.getName() + ".get[key]") - .suppressing(parentBuilder.getSuppressedTests()) - .createTestSuite(); - } - - TestSuite computeKeysTestSuite( - FeatureSpecificTestSuiteBuilder<?, ? extends - OneSizeTestContainerGenerator<M, Map.Entry<K, V>>> parentBuilder) { - return MultisetTestSuiteBuilder.using( - new KeysGenerator<K, V, M>(parentBuilder.getSubjectGenerator())) - .withFeatures(computeKeysFeatures(parentBuilder.getFeatures())) - .named(parentBuilder.getName() + ".keys") - .suppressing(parentBuilder.getSuppressedTests()) - .createTestSuite(); - } - - static Set<Feature<?>> computeDerivedCollectionFeatures(Set<Feature<?>> multimapFeatures) { - Set<Feature<?>> derivedFeatures = Helpers.copyToSet(multimapFeatures); - if (!derivedFeatures.remove(CollectionFeature.SERIALIZABLE_INCLUDING_VIEWS)) { - derivedFeatures.remove(CollectionFeature.SERIALIZABLE); - } - if (derivedFeatures.remove(MapFeature.ALLOWS_NULL_QUERIES)) { - derivedFeatures.add(CollectionFeature.ALLOWS_NULL_QUERIES); - } - if (derivedFeatures.remove(MapFeature.SUPPORTS_REMOVE)) { - derivedFeatures.add(CollectionFeature.SUPPORTS_REMOVE); - } - return derivedFeatures; - } - - static Set<Feature<?>> computeEntriesFeatures( - Set<Feature<?>> multimapFeatures) { - return computeDerivedCollectionFeatures(multimapFeatures); - } - - static Set<Feature<?>> computeValuesFeatures( - Set<Feature<?>> multimapFeatures) { - return computeDerivedCollectionFeatures(multimapFeatures); - } - - static Set<Feature<?>> computeKeysFeatures( - Set<Feature<?>> multimapFeatures) { - Set<Feature<?>> result = computeDerivedCollectionFeatures(multimapFeatures); - if (multimapFeatures.contains(MapFeature.ALLOWS_NULL_KEYS)) { - result.add(CollectionFeature.ALLOWS_NULL_VALUES); - } - return result; - } - - private static Set<Feature<?>> computeReserializedMultimapFeatures( - Set<Feature<?>> multimapFeatures) { - Set<Feature<?>> derivedFeatures = Helpers.copyToSet(multimapFeatures); - derivedFeatures.remove(CollectionFeature.SERIALIZABLE); - derivedFeatures.remove(CollectionFeature.SERIALIZABLE_INCLUDING_VIEWS); - return derivedFeatures; - } - - private static Set<Feature<?>> computeAsMapFeatures( - Set<Feature<?>> multimapFeatures) { - Set<Feature<?>> derivedFeatures = Helpers.copyToSet(multimapFeatures); - derivedFeatures.remove(MapFeature.GENERAL_PURPOSE); - derivedFeatures.remove(MapFeature.SUPPORTS_PUT); - derivedFeatures.remove(MapFeature.ALLOWS_NULL_VALUES); - derivedFeatures.add(MapFeature.REJECTS_DUPLICATES_AT_CREATION); - if (!derivedFeatures.contains(CollectionFeature.SERIALIZABLE_INCLUDING_VIEWS)) { - derivedFeatures.remove(CollectionFeature.SERIALIZABLE); - } - return derivedFeatures; - } - - private static final Multimap<Feature<?>, Feature<?>> GET_FEATURE_MAP = ImmutableMultimap - .<Feature<?>, Feature<?>> builder() - .put( - MapFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION, - CollectionFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION) - .put(MapFeature.GENERAL_PURPOSE, CollectionFeature.GENERAL_PURPOSE) - .put(MapFeature.ALLOWS_NULL_QUERIES, CollectionFeature.ALLOWS_NULL_QUERIES) - .put(MapFeature.ALLOWS_NULL_VALUES, CollectionFeature.ALLOWS_NULL_VALUES) - .put(MapFeature.SUPPORTS_REMOVE, CollectionFeature.SUPPORTS_REMOVE) - .put(MapFeature.SUPPORTS_PUT, CollectionFeature.SUPPORTS_ADD) - .build(); - - Set<Feature<?>> computeMultimapGetFeatures( - Set<Feature<?>> multimapFeatures) { - Set<Feature<?>> derivedFeatures = Helpers.copyToSet(multimapFeatures); - for (Map.Entry<Feature<?>, Feature<?>> entry : GET_FEATURE_MAP.entries()) { - if (derivedFeatures.contains(entry.getKey())) { - derivedFeatures.add(entry.getValue()); - } - } - if (!derivedFeatures.contains(CollectionFeature.SERIALIZABLE_INCLUDING_VIEWS)) { - derivedFeatures.remove(CollectionFeature.SERIALIZABLE); - } - derivedFeatures.removeAll(GET_FEATURE_MAP.keySet()); - return derivedFeatures; - } - - private static class AsMapGenerator<K, V, M extends Multimap<K, V>> implements - TestMapGenerator<K, Collection<V>>, DerivedGenerator { - private final OneSizeTestContainerGenerator<M, Map.Entry<K, V>> multimapGenerator; - - public AsMapGenerator( - OneSizeTestContainerGenerator<M, Entry<K, V>> multimapGenerator) { - this.multimapGenerator = multimapGenerator; - } - - @Override - public TestSubjectGenerator<?> getInnerGenerator() { - return multimapGenerator; - } - - private Collection<V> createCollection(V v) { - return ((TestMultimapGenerator<K, V, M>) multimapGenerator.getInnerGenerator()) - .createCollection(Collections.singleton(v)); - } - - @Override - public SampleElements<Entry<K, Collection<V>>> samples() { - SampleElements<K> sampleKeys = - ((TestMultimapGenerator<K, V, M>) multimapGenerator.getInnerGenerator()).sampleKeys(); - SampleElements<V> sampleValues = - ((TestMultimapGenerator<K, V, M>) multimapGenerator.getInnerGenerator()).sampleValues(); - return new SampleElements<Entry<K, Collection<V>>>( - mapEntry(sampleKeys.e0, createCollection(sampleValues.e0)), - mapEntry(sampleKeys.e1, createCollection(sampleValues.e1)), - mapEntry(sampleKeys.e2, createCollection(sampleValues.e2)), - mapEntry(sampleKeys.e3, createCollection(sampleValues.e3)), - mapEntry(sampleKeys.e4, createCollection(sampleValues.e4))); - } - - @Override - public Map<K, Collection<V>> create(Object... elements) { - Set<K> keySet = new HashSet<K>(); - List<Map.Entry<K, V>> builder = new ArrayList<Entry<K, V>>(); - for (Object o : elements) { - Map.Entry<K, Collection<V>> entry = (Entry<K, Collection<V>>) o; - keySet.add(entry.getKey()); - for (V v : entry.getValue()) { - builder.add(mapEntry(entry.getKey(), v)); - } - } - checkArgument(keySet.size() == elements.length, "Duplicate keys"); - return multimapGenerator.create(builder.toArray()).asMap(); - } - - @SuppressWarnings("unchecked") - @Override - public Entry<K, Collection<V>>[] createArray(int length) { - return new Entry[length]; - } - - @Override - public Iterable<Entry<K, Collection<V>>> order(List<Entry<K, Collection<V>>> insertionOrder) { - Map<K, Collection<V>> map = new HashMap<K, Collection<V>>(); - List<Map.Entry<K, V>> builder = new ArrayList<Entry<K, V>>(); - for (Entry<K, Collection<V>> entry : insertionOrder) { - for (V v : entry.getValue()) { - builder.add(mapEntry(entry.getKey(), v)); - } - map.put(entry.getKey(), entry.getValue()); - } - Iterable<Map.Entry<K, V>> ordered = multimapGenerator.order(builder); - LinkedHashMap<K, Collection<V>> orderedMap = new LinkedHashMap<K, Collection<V>>(); - for (Map.Entry<K, V> entry : ordered) { - orderedMap.put(entry.getKey(), map.get(entry.getKey())); - } - return orderedMap.entrySet(); - } - - @Override - public K[] createKeyArray(int length) { - return ((TestMultimapGenerator<K, V, M>) multimapGenerator.getInnerGenerator()) - .createKeyArray(length); - } - - @SuppressWarnings("unchecked") - @Override - public Collection<V>[] createValueArray(int length) { - return new Collection[length]; - } - } - - static class EntriesGenerator<K, V, M extends Multimap<K, V>> - implements TestCollectionGenerator<Entry<K, V>>, DerivedGenerator { - private final OneSizeTestContainerGenerator<M, Map.Entry<K, V>> multimapGenerator; - - public EntriesGenerator( - OneSizeTestContainerGenerator<M, Entry<K, V>> multimapGenerator) { - this.multimapGenerator = multimapGenerator; - } - - @Override - public TestSubjectGenerator<?> getInnerGenerator() { - return multimapGenerator; - } - - @Override - public SampleElements<Entry<K, V>> samples() { - return multimapGenerator.samples(); - } - - @Override - public Collection<Entry<K, V>> create(Object... elements) { - return multimapGenerator.create(elements).entries(); - } - - @SuppressWarnings("unchecked") - @Override - public Entry<K, V>[] createArray(int length) { - return new Entry[length]; - } - - @Override - public Iterable<Entry<K, V>> order(List<Entry<K, V>> insertionOrder) { - return multimapGenerator.order(insertionOrder); - } - } - - static class ValuesGenerator<K, V, M extends Multimap<K, V>> - implements TestCollectionGenerator<V> { - private final OneSizeTestContainerGenerator<M, Map.Entry<K, V>> multimapGenerator; - - public ValuesGenerator( - OneSizeTestContainerGenerator<M, Entry<K, V>> multimapGenerator) { - this.multimapGenerator = multimapGenerator; - } - - @Override - public SampleElements<V> samples() { - return - ((TestMultimapGenerator<K, V, M>) multimapGenerator.getInnerGenerator()).sampleValues(); - } - - @Override - public Collection<V> create(Object... elements) { - K k = - ((TestMultimapGenerator<K, V, M>) multimapGenerator.getInnerGenerator()).sampleKeys().e0; - Entry<K, V>[] entries = new Entry[elements.length]; - for (int i = 0; i < elements.length; i++) { - entries[i] = mapEntry(k, (V) elements[i]); - } - return multimapGenerator.create(entries).values(); - } - - @SuppressWarnings("unchecked") - @Override - public V[] createArray(int length) { - return ((TestMultimapGenerator<K, V, M>) - multimapGenerator.getInnerGenerator()).createValueArray(length); - } - - @Override - public Iterable<V> order(List<V> insertionOrder) { - K k = - ((TestMultimapGenerator<K, V, M>) multimapGenerator.getInnerGenerator()).sampleKeys().e0; - List<Entry<K, V>> entries = new ArrayList<Entry<K, V>>(); - for (V v : insertionOrder) { - entries.add(mapEntry(k, v)); - } - Iterable<Entry<K, V>> ordered = multimapGenerator.order(entries); - List<V> orderedValues = new ArrayList<V>(); - for (Entry<K, V> entry : ordered) { - orderedValues.add(entry.getValue()); - } - return orderedValues; - } - } - - static class KeysGenerator<K, V, M extends Multimap<K, V>> implements - TestMultisetGenerator<K>, DerivedGenerator { - private final OneSizeTestContainerGenerator<M, Map.Entry<K, V>> multimapGenerator; - - public KeysGenerator( - OneSizeTestContainerGenerator<M, Entry<K, V>> multimapGenerator) { - this.multimapGenerator = multimapGenerator; - } - - @Override - public TestSubjectGenerator<?> getInnerGenerator() { - return multimapGenerator; - } - - @Override - public SampleElements<K> samples() { - return ((TestMultimapGenerator<K, V, M>) multimapGenerator.getInnerGenerator()).sampleKeys(); - } - - @Override - public Multiset<K> create(Object... elements) { - /* - * This is nasty and complicated, but it's the only way to make sure keys get mapped to enough - * distinct values. - */ - Map.Entry[] entries = new Map.Entry[elements.length]; - Map<K, Iterator<V>> valueIterators = new HashMap<K, Iterator<V>>(); - for (int i = 0; i < elements.length; i++) { - @SuppressWarnings("unchecked") - K key = (K) elements[i]; - - Iterator<V> valueItr = valueIterators.get(key); - if (valueItr == null) { - valueIterators.put(key, valueItr = sampleValuesIterator()); - } - entries[i] = mapEntry((K) elements[i], valueItr.next()); - } - return multimapGenerator.create(entries).keys(); - } - - private Iterator<V> sampleValuesIterator() { - return ((TestMultimapGenerator<K, V, M>) multimapGenerator - .getInnerGenerator()).sampleValues().iterator(); - } - - @SuppressWarnings("unchecked") - @Override - public K[] createArray(int length) { - return ((TestMultimapGenerator<K, V, M>) - multimapGenerator.getInnerGenerator()).createKeyArray(length); - } - - @Override - public Iterable<K> order(List<K> insertionOrder) { - Iterator<V> valueIter = sampleValuesIterator(); - List<Entry<K, V>> entries = new ArrayList<Entry<K, V>>(); - for (K k : insertionOrder) { - entries.add(mapEntry(k, valueIter.next())); - } - Iterable<Entry<K, V>> ordered = multimapGenerator.order(entries); - List<K> orderedValues = new ArrayList<K>(); - for (Entry<K, V> entry : ordered) { - orderedValues.add(entry.getKey()); - } - return orderedValues; - } - } - - static class MultimapGetGenerator<K, V, M extends Multimap<K, V>> - implements TestCollectionGenerator<V> { - private final OneSizeTestContainerGenerator<M, Map.Entry<K, V>> multimapGenerator; - - public MultimapGetGenerator( - OneSizeTestContainerGenerator< - M, Map.Entry<K, V>> multimapGenerator) { - this.multimapGenerator = multimapGenerator; - } - - @Override - public SampleElements<V> samples() { - return ((TestMultimapGenerator<K, V, M>) multimapGenerator.getInnerGenerator()) - .sampleValues(); - } - - @Override - public V[] createArray(int length) { - return ((TestMultimapGenerator<K, V, M>) multimapGenerator.getInnerGenerator()) - .createValueArray(length); - } - - @Override - public Iterable<V> order(List<V> insertionOrder) { - K k = ((TestMultimapGenerator<K, V, M>) multimapGenerator.getInnerGenerator()) - .sampleKeys().e0; - List<Entry<K, V>> entries = new ArrayList<Entry<K, V>>(); - for (V v : insertionOrder) { - entries.add(mapEntry(k, v)); - } - Iterable<Entry<K, V>> orderedEntries = multimapGenerator.order(entries); - List<V> values = new ArrayList<V>(); - for (Entry<K, V> entry : orderedEntries) { - values.add(entry.getValue()); - } - return values; - } - - @Override - public Collection<V> create(Object... elements) { - Entry<K, V>[] array = multimapGenerator.createArray(elements.length); - K k = ((TestMultimapGenerator<K, V, M>) multimapGenerator.getInnerGenerator()) - .sampleKeys().e0; - for (int i = 0; i < elements.length; i++) { - array[i] = mapEntry(k, (V) elements[i]); - } - return multimapGenerator.create(array).get(k); - } - } - - private static class ReserializedMultimapGenerator<K, V, M extends Multimap<K, V>> - implements TestMultimapGenerator<K, V, M> { - private final OneSizeTestContainerGenerator<M, Map.Entry<K, V>> multimapGenerator; - - public ReserializedMultimapGenerator( - OneSizeTestContainerGenerator< - M, Map.Entry<K, V>> multimapGenerator) { - this.multimapGenerator = multimapGenerator; - } - - @Override - public SampleElements<Map.Entry<K, V>> samples() { - return multimapGenerator.samples(); - } - - @Override - public Map.Entry<K, V>[] createArray(int length) { - return multimapGenerator.createArray(length); - } - - @Override - public Iterable<Map.Entry<K, V>> order( - List<Map.Entry<K, V>> insertionOrder) { - return multimapGenerator.order(insertionOrder); - } - - @Override - public M create(Object... elements) { - return SerializableTester.reserialize(((TestMultimapGenerator<K, V, M>) multimapGenerator - .getInnerGenerator()).create(elements)); - } - - @Override - public K[] createKeyArray(int length) { - return ((TestMultimapGenerator<K, V, M>) multimapGenerator.getInnerGenerator()) - .createKeyArray(length); - } - - @Override - public V[] createValueArray(int length) { - return ((TestMultimapGenerator<K, V, M>) multimapGenerator.getInnerGenerator()) - .createValueArray(length); - } - - @Override - public SampleElements<K> sampleKeys() { - return ((TestMultimapGenerator<K, V, M>) multimapGenerator.getInnerGenerator()) - .sampleKeys(); - } - - @Override - public SampleElements<V> sampleValues() { - return ((TestMultimapGenerator<K, V, M>) multimapGenerator.getInnerGenerator()) - .sampleValues(); - } - - @Override - public Collection<V> createCollection(Iterable<? extends V> values) { - return ((TestMultimapGenerator<K, V, M>) multimapGenerator.getInnerGenerator()) - .createCollection(values); - } - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultisetIteratorTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultisetIteratorTester.java index 8f1f70e..63082d5 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultisetIteratorTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/MultisetIteratorTester.java @@ -18,8 +18,6 @@ import static com.google.common.collect.testing.features.CollectionFeature.KNOWN import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE; import com.google.common.annotations.GwtCompatible; -import com.google.common.annotations.GwtIncompatible; -import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.IteratorFeature; import com.google.common.collect.testing.IteratorTester; import com.google.common.collect.testing.features.CollectionFeature; @@ -35,7 +33,7 @@ import java.util.List; * * @author Louis Wasserman */ -@GwtCompatible(emulated = true) +@GwtCompatible public class MultisetIteratorTester<E> extends AbstractMultisetTester<E> { @SuppressWarnings("unchecked") @CollectionFeature.Require({SUPPORTS_REMOVE, KNOWN_ORDER}) @@ -95,30 +93,11 @@ public class MultisetIteratorTester<E> extends AbstractMultisetTester<E> { * Returns {@link Method} instances for the tests that assume multisets support duplicates so that * the test of {@code Multisets.forSet()} can suppress them. */ - @GwtIncompatible("reflection") public static List<Method> getIteratorDuplicateInitializingMethods() { return Arrays.asList( - Helpers.getMethod(MultisetIteratorTester.class, "testIteratorKnownOrder"), - Helpers.getMethod(MultisetIteratorTester.class, "testIteratorUnknownOrder"), - Helpers.getMethod(MultisetIteratorTester.class, "testRemovingIteratorKnownOrder"), - Helpers.getMethod(MultisetIteratorTester.class, "testRemovingIteratorUnknownOrder")); - } - - /** - * Returns the {@link Method} instance for the test that assumes the multiset iterator supports - * {@code remove()} so that the test for {@code Multisets.filter} can suppress it. - */ - @GwtIncompatible("reflection") - public static Method getIteratorKnownOrderRemoveSupportedMethod() { - return Helpers.getMethod(MultisetIteratorTester.class, "testRemovingIteratorKnownOrder"); - } - - /** - * Returns the {@link Method} instance for the test that assumes the multiset iterator supports - * {@code remove()} so that the test for {@code Multisets.filter} can suppress it. - */ - @GwtIncompatible("reflection") - public static Method getIteratorUnknownOrderRemoveSupportedMethod() { - return Helpers.getMethod(MultisetIteratorTester.class, "testRemovingIteratorUnknownOrder"); + Platform.getMethod(MultisetIteratorTester.class, "testIteratorKnownOrder"), + Platform.getMethod(MultisetIteratorTester.class, "testIteratorUnknownOrder"), + Platform.getMethod(MultisetIteratorTester.class, "testRemovingIteratorKnownOrder"), + Platform.getMethod(MultisetIteratorTester.class, "testRemovingIteratorUnknownOrder")); } } diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultisetNavigationTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultisetNavigationTester.java index 9c844e8..e817738 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultisetNavigationTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/MultisetNavigationTester.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011 The Guava Authors + * Copyright (C) 2011 Google Inc. * * 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 diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultisetReadsTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultisetReadsTester.java index 9f1dd9c..c353404 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultisetReadsTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/MultisetReadsTester.java @@ -21,11 +21,9 @@ import static com.google.common.collect.testing.features.CollectionSize.SEVERAL; import static com.google.common.collect.testing.features.CollectionSize.ZERO; import com.google.common.annotations.GwtCompatible; -import com.google.common.annotations.GwtIncompatible; import com.google.common.collect.HashMultiset; import com.google.common.collect.Multiset; import com.google.common.collect.Multisets; -import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.WrongType; import com.google.common.collect.testing.features.CollectionSize; @@ -40,7 +38,7 @@ import java.util.List; * * @author Jared Levy */ -@GwtCompatible(emulated = true) +@GwtCompatible public class MultisetReadsTester<E> extends AbstractMultisetTester<E> { public void testCount_0() { assertEquals("multiset.count(missing) didn't return 0", @@ -149,9 +147,8 @@ public class MultisetReadsTester<E> extends AbstractMultisetTester<E> { * support duplicates so that the test of {@code Multisets.forSet()} can * suppress them. */ - @GwtIncompatible("reflection") public static List<Method> getReadsDuplicateInitializingMethods() { return Arrays.asList( - Helpers.getMethod(MultisetReadsTester.class, "testCount_3")); + Platform.getMethod(MultisetReadsTester.class, "testCount_3")); } } diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultisetSerializationTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultisetSerializationTester.java deleted file mode 100644 index 2a0a633..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultisetSerializationTester.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import static com.google.common.collect.testing.features.CollectionFeature.SERIALIZABLE_INCLUDING_VIEWS; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.Multiset; -import com.google.common.collect.testing.features.CollectionFeature; -import com.google.common.testing.SerializableTester; - -import java.util.Set; - -/** - * A generic JUnit test which tests multiset-specific serialization. Can't be invoked directly; - * please see {@link com.google.common.collect.testing.MultisetTestSuiteBuilder}. - * - * @author Louis Wasserman - */ -@GwtCompatible // but no-op -public class MultisetSerializationTester<E> extends AbstractMultisetTester<E> { - @CollectionFeature.Require(SERIALIZABLE_INCLUDING_VIEWS) - public void testEntrySetSerialization() { - Set<Multiset.Entry<E>> expected = getMultiset().entrySet(); - assertEquals(expected, SerializableTester.reserialize(expected)); - } - - @CollectionFeature.Require(SERIALIZABLE_INCLUDING_VIEWS) - public void testElementSetSerialization() { - Set<E> expected = getMultiset().elementSet(); - assertEquals(expected, SerializableTester.reserialize(expected)); - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultisetTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/google/MultisetTestSuiteBuilder.java index 1175af9..4bdbaf5 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultisetTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/MultisetTestSuiteBuilder.java @@ -16,35 +16,12 @@ package com.google.common.collect.testing.google; -import static com.google.common.base.Preconditions.checkArgument; - -import com.google.common.collect.Multiset; -import com.google.common.collect.Multiset.Entry; -import com.google.common.collect.Multisets; +import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.AbstractCollectionTestSuiteBuilder; import com.google.common.collect.testing.AbstractTester; -import com.google.common.collect.testing.FeatureSpecificTestSuiteBuilder; import com.google.common.collect.testing.Helpers; -import com.google.common.collect.testing.OneSizeTestContainerGenerator; -import com.google.common.collect.testing.SampleElements; -import com.google.common.collect.testing.SetTestSuiteBuilder; -import com.google.common.collect.testing.TestSetGenerator; -import com.google.common.collect.testing.features.CollectionFeature; -import com.google.common.collect.testing.features.Feature; -import com.google.common.collect.testing.testers.CollectionSerializationEqualTester; -import com.google.common.testing.SerializableTester; - -import junit.framework.TestSuite; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; import java.util.List; -import java.util.Map; -import java.util.Set; /** * Creates, based on your criteria, a JUnit test suite that exhaustively tests @@ -53,6 +30,7 @@ import java.util.Set; * @author Jared Levy * @author Louis Wasserman */ +@GwtCompatible public class MultisetTestSuiteBuilder<E> extends AbstractCollectionTestSuiteBuilder<MultisetTestSuiteBuilder<E>, E> { public static <E> MultisetTestSuiteBuilder<E> using( @@ -60,219 +38,15 @@ public class MultisetTestSuiteBuilder<E> extends return new MultisetTestSuiteBuilder<E>().usingGenerator(generator); } - public enum NoRecurse implements Feature<Void> { - NO_ENTRY_SET; - - @Override - public Set<Feature<? super Void>> getImpliedFeatures() { - return Collections.emptySet(); - } - } - @Override protected List<Class<? extends AbstractTester>> getTesters() { List<Class<? extends AbstractTester>> testers = Helpers.copyToList(super.getTesters()); - testers.add(CollectionSerializationEqualTester.class); testers.add(MultisetReadsTester.class); testers.add(MultisetSetCountConditionallyTester.class); testers.add(MultisetSetCountUnconditionallyTester.class); testers.add(MultisetWritesTester.class); testers.add(MultisetIteratorTester.class); - testers.add(MultisetSerializationTester.class); return testers; } - - private static Set<Feature<?>> computeEntrySetFeatures( - Set<Feature<?>> features) { - Set<Feature<?>> derivedFeatures = new HashSet<Feature<?>>(); - derivedFeatures.addAll(features); - derivedFeatures.remove(CollectionFeature.GENERAL_PURPOSE); - derivedFeatures.remove(CollectionFeature.SUPPORTS_ADD); - derivedFeatures.remove(CollectionFeature.ALLOWS_NULL_VALUES); - derivedFeatures.add(CollectionFeature.REJECTS_DUPLICATES_AT_CREATION); - if (!derivedFeatures.remove(CollectionFeature.SERIALIZABLE_INCLUDING_VIEWS)) { - derivedFeatures.remove(CollectionFeature.SERIALIZABLE); - } - return derivedFeatures; - } - - static Set<Feature<?>> computeElementSetFeatures( - Set<Feature<?>> features) { - Set<Feature<?>> derivedFeatures = new HashSet<Feature<?>>(); - derivedFeatures.addAll(features); - derivedFeatures.remove(CollectionFeature.GENERAL_PURPOSE); - derivedFeatures.remove(CollectionFeature.SUPPORTS_ADD); - if (!derivedFeatures.remove(CollectionFeature.SERIALIZABLE_INCLUDING_VIEWS)) { - derivedFeatures.remove(CollectionFeature.SERIALIZABLE); - } - return derivedFeatures; - } - - private static Set<Feature<?>> computeReserializedMultisetFeatures( - Set<Feature<?>> features) { - Set<Feature<?>> derivedFeatures = new HashSet<Feature<?>>(); - derivedFeatures.addAll(features); - derivedFeatures.remove(CollectionFeature.SERIALIZABLE); - derivedFeatures.remove(CollectionFeature.SERIALIZABLE_INCLUDING_VIEWS); - return derivedFeatures; - } - - @Override - protected List<TestSuite> createDerivedSuites(FeatureSpecificTestSuiteBuilder< - ?, ? extends OneSizeTestContainerGenerator<Collection<E>, E>> parentBuilder) { - List<TestSuite> derivedSuites = new ArrayList<TestSuite>( - super.createDerivedSuites(parentBuilder)); - - derivedSuites.add(createElementSetTestSuite(parentBuilder)); - - if (!parentBuilder.getFeatures().contains(NoRecurse.NO_ENTRY_SET)) { - derivedSuites.add( - SetTestSuiteBuilder.using(new EntrySetGenerator<E>(parentBuilder.getSubjectGenerator())) - .named(getName() + ".entrySet") - .withFeatures(computeEntrySetFeatures(parentBuilder.getFeatures())) - .suppressing(parentBuilder.getSuppressedTests()) - .createTestSuite()); - } - - if (parentBuilder.getFeatures().contains(CollectionFeature.SERIALIZABLE)) { - derivedSuites.add(MultisetTestSuiteBuilder - .using(new ReserializedMultisetGenerator<E>(parentBuilder.getSubjectGenerator())) - .named(getName() + " reserialized") - .withFeatures(computeReserializedMultisetFeatures(parentBuilder.getFeatures())) - .suppressing(parentBuilder.getSuppressedTests()) - .createTestSuite()); - } - return derivedSuites; - } - - TestSuite createElementSetTestSuite(FeatureSpecificTestSuiteBuilder< - ?, ? extends OneSizeTestContainerGenerator<Collection<E>, E>> parentBuilder) { - return SetTestSuiteBuilder - .using(new ElementSetGenerator<E>(parentBuilder.getSubjectGenerator())) - .named(getName() + ".elementSet") - .withFeatures(computeElementSetFeatures(parentBuilder.getFeatures())) - .suppressing(parentBuilder.getSuppressedTests()) - .createTestSuite(); - } - - static class ElementSetGenerator<E> implements TestSetGenerator<E> { - final OneSizeTestContainerGenerator<Collection<E>, E> gen; - - ElementSetGenerator(OneSizeTestContainerGenerator<Collection<E>, E> gen) { - this.gen = gen; - } - - @Override - public SampleElements<E> samples() { - return gen.samples(); - } - - @Override - public Set<E> create(Object... elements) { - Object[] duplicated = new Object[elements.length * 2]; - for (int i = 0; i < elements.length; i++) { - duplicated[i] = elements[i]; - duplicated[i + elements.length] = elements[i]; - } - return ((Multiset<E>) gen.create(duplicated)).elementSet(); - } - - @Override - public E[] createArray(int length) { - return gen.createArray(length); - } - - @Override - public Iterable<E> order(List<E> insertionOrder) { - return gen.order(new ArrayList<E>(new LinkedHashSet<E>(insertionOrder))); - } - } - - static class EntrySetGenerator<E> implements TestSetGenerator<Multiset.Entry<E>> { - final OneSizeTestContainerGenerator<Collection<E>, E> gen; - - private EntrySetGenerator(OneSizeTestContainerGenerator<Collection<E>, E> gen) { - this.gen = gen; - } - - @Override - public SampleElements<Multiset.Entry<E>> samples() { - SampleElements<E> samples = gen.samples(); - return new SampleElements<Multiset.Entry<E>>( - Multisets.immutableEntry(samples.e0, 3), - Multisets.immutableEntry(samples.e1, 4), - Multisets.immutableEntry(samples.e2, 1), - Multisets.immutableEntry(samples.e3, 5), - Multisets.immutableEntry(samples.e4, 2)); - } - - @Override - public Set<Multiset.Entry<E>> create(Object... entries) { - List<Object> contents = new ArrayList<Object>(); - Set<E> elements = new HashSet<E>(); - for (Object o : entries) { - @SuppressWarnings("unchecked") - Multiset.Entry<E> entry = (Entry<E>) o; - checkArgument(elements.add(entry.getElement()), - "Duplicate keys not allowed in EntrySetGenerator"); - for (int i = 0; i < entry.getCount(); i++) { - contents.add(entry.getElement()); - } - } - return ((Multiset<E>) gen.create(contents.toArray())).entrySet(); - } - - @SuppressWarnings("unchecked") - @Override - public Multiset.Entry<E>[] createArray(int length) { - return new Multiset.Entry[length]; - } - - @Override - public Iterable<Entry<E>> order(List<Entry<E>> insertionOrder) { - // We mimic the order from gen. - Map<E, Entry<E>> map = new LinkedHashMap<E, Entry<E>>(); - for (Entry<E> entry : insertionOrder) { - map.put(entry.getElement(), entry); - } - - Set<E> seen = new HashSet<E>(); - List<Entry<E>> order = new ArrayList<Entry<E>>(); - for (E e : gen.order(new ArrayList<E>(map.keySet()))) { - if (seen.add(e)) { - order.add(map.get(e)); - } - } - return order; - } - } - - static class ReserializedMultisetGenerator<E> implements TestMultisetGenerator<E>{ - final OneSizeTestContainerGenerator<Collection<E>, E> gen; - - private ReserializedMultisetGenerator(OneSizeTestContainerGenerator<Collection<E>, E> gen) { - this.gen = gen; - } - - @Override - public SampleElements<E> samples() { - return gen.samples(); - } - - @Override - public Multiset<E> create(Object... elements) { - return (Multiset<E>) SerializableTester.reserialize(gen.create(elements)); - } - - @Override - public E[] createArray(int length) { - return gen.createArray(length); - } - - @Override - public Iterable<E> order(List<E> insertionOrder) { - return gen.order(insertionOrder); - } - } } diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultisetWritesTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultisetWritesTester.java index cdf7710..9b91cb8 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultisetWritesTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/MultisetWritesTester.java @@ -17,15 +17,16 @@ package com.google.common.collect.testing.google; import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD; +import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_CLEAR; import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE; +import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE_ALL; +import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_RETAIN_ALL; import static com.google.common.collect.testing.features.CollectionSize.ONE; import static com.google.common.collect.testing.features.CollectionSize.ZERO; import com.google.common.annotations.GwtCompatible; -import com.google.common.annotations.GwtIncompatible; import com.google.common.collect.Multiset; import com.google.common.collect.Multisets; -import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.WrongType; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -40,31 +41,25 @@ import java.util.Iterator; * * @author Jared Levy */ -@GwtCompatible(emulated = true) +@GwtCompatible public class MultisetWritesTester<E> extends AbstractMultisetTester<E> { /** * Returns the {@link Method} instance for * {@link #testEntrySet_iterator()} so that tests of * classes with unmodifiable iterators can suppress it. */ - @GwtIncompatible("reflection") public static Method getEntrySetIteratorMethod() { - return Helpers.getMethod( + return Platform.getMethod( MultisetWritesTester.class, "testEntrySet_iterator"); } @CollectionFeature.Require(SUPPORTS_ADD) - public void testAddOccurrencesZero() { - int originalCount = getMultiset().count(samples.e0); - assertEquals("old count", originalCount, getMultiset().add(samples.e0, 0)); - expectUnchanged(); - } - - @CollectionFeature.Require(SUPPORTS_ADD) public void testAddOccurrences() { - int originalCount = getMultiset().count(samples.e0); - assertEquals("old count", originalCount, getMultiset().add(samples.e0, 2)); - assertEquals("old count", originalCount + 2, getMultiset().count(samples.e0)); + int oldCount = getMultiset().count(samples.e0); + assertEquals("multiset.add(E, int) should return the old count", + oldCount, getMultiset().add(samples.e0, 2)); + assertEquals("multiset.count() incorrect after add(E, int)", + oldCount + 2, getMultiset().count(samples.e0)); } @CollectionFeature.Require(absent = SUPPORTS_ADD) @@ -75,21 +70,6 @@ public class MultisetWritesTester<E> extends AbstractMultisetTester<E> { } catch (UnsupportedOperationException required) {} } - @CollectionFeature.Require(SUPPORTS_ADD) - public void testAdd_occurrences_negative() { - try { - getMultiset().add(samples.e0, -1); - fail("multiset.add(E, -1) didn't throw an exception"); - } catch (IllegalArgumentException required) {} - } - - @CollectionFeature.Require(SUPPORTS_REMOVE) - public void testRemoveZeroNoOp() { - int originalCount = getMultiset().count(samples.e0); - assertEquals("old count", originalCount, getMultiset().remove(samples.e0, 0)); - expectUnchanged(); - } - @CollectionSize.Require(absent = ZERO) @CollectionFeature.Require(SUPPORTS_REMOVE) public void testRemove_occurrences_present() { @@ -136,7 +116,7 @@ public class MultisetWritesTester<E> extends AbstractMultisetTester<E> { 0, getMultiset().remove(WrongType.VALUE, 1)); } - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_CLEAR) public void testEntrySet_clear() { getMultiset().entrySet().clear(); assertTrue("multiset not empty after entrySet().clear()", @@ -200,7 +180,7 @@ public class MultisetWritesTester<E> extends AbstractMultisetTester<E> { } @CollectionSize.Require(absent = ZERO) - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_REMOVE_ALL) public void testEntrySet_removeAll_present() { assertTrue( "multiset.entrySet.removeAll(presentEntry) returned false", @@ -212,7 +192,7 @@ public class MultisetWritesTester<E> extends AbstractMultisetTester<E> { } @CollectionSize.Require(absent = ZERO) - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_REMOVE_ALL) public void testEntrySet_removeAll_missing() { assertFalse( "multiset.entrySet.remove(missingEntry) returned true", @@ -223,7 +203,7 @@ public class MultisetWritesTester<E> extends AbstractMultisetTester<E> { getMultiset().contains(samples.e0)); } - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_REMOVE_ALL) public void testEntrySet_removeAll_null() { try { getMultiset().entrySet().removeAll(null); @@ -232,7 +212,7 @@ public class MultisetWritesTester<E> extends AbstractMultisetTester<E> { } @CollectionSize.Require(ONE) - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) public void testEntrySet_retainAll_present() { assertFalse( "multiset.entrySet.retainAll(presentEntry) returned false", @@ -244,7 +224,7 @@ public class MultisetWritesTester<E> extends AbstractMultisetTester<E> { } @CollectionSize.Require(ONE) - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) public void testEntrySet_retainAll_missing() { assertTrue( "multiset.entrySet.retainAll(missingEntry) returned true", @@ -255,7 +235,7 @@ public class MultisetWritesTester<E> extends AbstractMultisetTester<E> { getMultiset().contains(samples.e0)); } - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) public void testEntrySet_retainAll_null() { try { getMultiset().entrySet().retainAll(null); diff --git a/guava-testlib/src/com/google/common/collect/testing/google/Platform.java b/guava-testlib/src/com/google/common/collect/testing/google/Platform.java new file mode 100644 index 0000000..45b4166 --- /dev/null +++ b/guava-testlib/src/com/google/common/collect/testing/google/Platform.java @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2009 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.testing.google; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; + +import java.lang.reflect.Method; + +/** + * Methods factored out so that they can be emulated in GWT. + * + * @author Hayward Chan + */ +@GwtCompatible +class Platform { + + @GwtIncompatible("Class.getMethod, java.lang.reflect.Method") + static Method getMethod(Class<?> clazz, String name) { + try { + return clazz.getMethod(name); + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/SetGenerators.java b/guava-testlib/src/com/google/common/collect/testing/google/SetGenerators.java index 4e8273a..dee0d41 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/SetGenerators.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/SetGenerators.java @@ -16,28 +16,19 @@ package com.google.common.collect.testing.google; -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.collect.Lists.newArrayList; -import static com.google.common.collect.Sets.newTreeSet; import static com.google.common.collect.testing.SampleElements.Strings.AFTER_LAST; import static com.google.common.collect.testing.SampleElements.Strings.AFTER_LAST_2; import static com.google.common.collect.testing.SampleElements.Strings.BEFORE_FIRST; import static com.google.common.collect.testing.SampleElements.Strings.BEFORE_FIRST_2; -import static junit.framework.Assert.assertEquals; import com.google.common.annotations.GwtCompatible; -import com.google.common.annotations.GwtIncompatible; -import com.google.common.collect.ContiguousSet; -import com.google.common.collect.DiscreteDomain; import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSortedSet; import com.google.common.collect.Lists; import com.google.common.collect.Ordering; -import com.google.common.collect.Range; import com.google.common.collect.Sets; import com.google.common.collect.testing.TestCollectionGenerator; import com.google.common.collect.testing.TestCollidingSetGenerator; -import com.google.common.collect.testing.TestIntegerSortedSetGenerator; import com.google.common.collect.testing.TestSetGenerator; import com.google.common.collect.testing.TestStringListGenerator; import com.google.common.collect.testing.TestStringSetGenerator; @@ -54,12 +45,12 @@ import java.util.SortedSet; /** * Generators of different types of sets and derived collections from sets. - * + * * @author Kevin Bourrillion * @author Jared Levy * @author Hayward Chan */ -@GwtCompatible(emulated = true) +@GwtCompatible public class SetGenerators { public static class ImmutableSetCopyOfGenerator extends TestStringSetGenerator { @@ -129,18 +120,6 @@ public class SetGenerators { } } - @GwtIncompatible("NavigableSet") - public static class ImmutableSortedSetDescendingGenerator - extends TestStringSortedSetGenerator { - @Override protected SortedSet<String> create(String[] elements) { - return ImmutableSortedSet - .<String>reverseOrder() - .add(elements) - .build() - .descendingSet(); - } - } - public static class ImmutableSortedSetExplicitComparator extends TestStringSetGenerator { @@ -231,20 +210,6 @@ public class SetGenerators { } } - @GwtIncompatible("NavigableSet") - public static class ImmutableSortedSetDescendingAsListGenerator - extends TestStringListGenerator { - @Override protected List<String> create(String[] elements) { - Comparator<String> comparator = createExplicitComparator(elements).reverse(); - return ImmutableSortedSet - .orderedBy(comparator) - .add(elements) - .build() - .descendingSet() - .asList(); - } - } - public static class ImmutableSortedSetAsListSubListGenerator extends TestStringListGenerator { @Override protected List<String> create(String[] elements) { @@ -258,7 +223,7 @@ public class SetGenerators { } } - public static class ImmutableSortedSetSubsetAsListSubListGenerator + public static class ImmutableSortedsetSubsetAsListSubListGenerator extends TestStringListGenerator { @Override protected List<String> create(String[] elements) { Comparator<String> comparator = createExplicitComparator(elements); @@ -280,7 +245,7 @@ public class SetGenerators { implements TestSetGenerator<UnhashableObject> { } - private static Ordering<String> createExplicitComparator( + private static Comparator<String> createExplicitComparator( String[] elements) { // Collapse equal elements, which Ordering.explicit() doesn't support, while // maintaining the ordering by first occurrence. @@ -292,97 +257,4 @@ public class SetGenerators { elementsPlus.add(AFTER_LAST_2); return Ordering.explicit(Lists.newArrayList(elementsPlus)); } - - /* - * All the ContiguousSet generators below manually reject nulls here. In principle, we'd like to - * defer that to Range, since it's ContiguousSet.create() that's used to create the sets. However, - * that gets messy here, and we already have null tests for Range. - */ - - /* - * These generators also rely on consecutive integer inputs (not necessarily in order, but no - * holes). - */ - - // SetCreationTester has some tests that pass in duplicates. Dedup them. - private static <E extends Comparable<? super E>> SortedSet<E> nullCheckedTreeSet(E[] elements) { - SortedSet<E> set = newTreeSet(); - for (E element : elements) { - // Explicit null check because TreeSet wrongly accepts add(null) when empty. - set.add(checkNotNull(element)); - } - return set; - } - - public static class ContiguousSetGenerator extends AbstractContiguousSetGenerator { - @Override protected SortedSet<Integer> create(Integer[] elements) { - return checkedCreate(nullCheckedTreeSet(elements)); - } - } - - public static class ContiguousSetHeadsetGenerator extends AbstractContiguousSetGenerator { - @Override protected SortedSet<Integer> create(Integer[] elements) { - SortedSet<Integer> set = nullCheckedTreeSet(elements); - int tooHigh = (set.isEmpty()) ? 0 : set.last() + 1; - set.add(tooHigh); - return checkedCreate(set).headSet(tooHigh); - } - } - - public static class ContiguousSetTailsetGenerator extends AbstractContiguousSetGenerator { - @Override protected SortedSet<Integer> create(Integer[] elements) { - SortedSet<Integer> set = nullCheckedTreeSet(elements); - int tooLow = (set.isEmpty()) ? 0 : set.first() - 1; - set.add(tooLow); - return checkedCreate(set).tailSet(tooLow + 1); - } - } - - public static class ContiguousSetSubsetGenerator extends AbstractContiguousSetGenerator { - @Override protected SortedSet<Integer> create(Integer[] elements) { - SortedSet<Integer> set = nullCheckedTreeSet(elements); - if (set.isEmpty()) { - /* - * The (tooLow + 1, tooHigh) arguments below would be invalid because tooLow would be - * greater than tooHigh. - */ - return ContiguousSet.create(Range.openClosed(0, 1), DiscreteDomain.integers()).subSet(0, 1); - } - int tooHigh = set.last() + 1; - int tooLow = set.first() - 1; - set.add(tooHigh); - set.add(tooLow); - return checkedCreate(set).subSet(tooLow + 1, tooHigh); - } - } - - @GwtIncompatible("NavigableSet") - public static class ContiguousSetDescendingGenerator extends AbstractContiguousSetGenerator { - @Override protected SortedSet<Integer> create(Integer[] elements) { - return checkedCreate(nullCheckedTreeSet(elements)).descendingSet(); - } - - /** Sorts the elements in reverse natural order. */ - @Override public List<Integer> order(List<Integer> insertionOrder) { - Collections.sort(insertionOrder, Ordering.natural().reverse()); - return insertionOrder; - } - } - - private abstract static class AbstractContiguousSetGenerator - extends TestIntegerSortedSetGenerator { - protected final ContiguousSet<Integer> checkedCreate(SortedSet<Integer> elementsSet) { - List<Integer> elements = newArrayList(elementsSet); - /* - * A ContiguousSet can't have holes. If a test demands a hole, it should be changed so that it - * doesn't need one, or it should be suppressed for ContiguousSet. - */ - for (int i = 0; i < elements.size() - 1; i++) { - assertEquals(elements.get(i) + 1, (int) elements.get(i + 1)); - } - Range<Integer> range = - (elements.isEmpty()) ? Range.closedOpen(0, 0) : Range.encloseAll(elements); - return ContiguousSet.create(range, DiscreteDomain.integers()); - } - } } diff --git a/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapPutAllTester.java b/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapPutAllTester.java deleted file mode 100644 index bcc3d50..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapPutAllTester.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import static com.google.common.collect.testing.Helpers.copyToSet; -import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_PUT; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.SetMultimap; -import com.google.common.collect.testing.features.MapFeature; - -import java.util.Arrays; -import java.util.List; -import java.util.Set; - -/** - * Tests for {@link SetMultimap#replaceValues}. - * - * @author Louis Wasserman - */ -@GwtCompatible -public class SetMultimapPutAllTester<K, V> - extends AbstractMultimapTester<K, V, SetMultimap<K, V>> { - - @MapFeature.Require(SUPPORTS_PUT) - public void testReplaceValuesHandlesDuplicates() { - V v0 = sampleValues().e3; - V v1 = sampleValues().e2; - @SuppressWarnings("unchecked") - List<V> valuesToPut = Arrays.asList(v0, v1, v0); - - for (K k : sampleKeys()) { - resetContainer(); - - Set<V> expectedValues = copyToSet(multimap().get(k)); - - multimap().putAll(k, valuesToPut); - expectedValues.addAll(valuesToPut); - - assertGet(k, expectedValues); - } - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapPutTester.java b/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapPutTester.java deleted file mode 100644 index ade18b3..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapPutTester.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import static com.google.common.collect.testing.Helpers.copyToList; -import static com.google.common.collect.testing.Helpers.copyToSet; -import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_PUT; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.SetMultimap; -import com.google.common.collect.testing.features.CollectionSize; -import com.google.common.collect.testing.features.MapFeature; - -import java.util.List; -import java.util.Map.Entry; -import java.util.Set; - -/** - * Tests for {@link SetMultimap#replaceValues}. - * - * @author Louis Wasserman - */ -@GwtCompatible -public class SetMultimapPutTester<K, V> - extends AbstractMultimapTester<K, V, SetMultimap<K, V>> { - // Tests for non-duplicate values are in MultimapPutTester - - @MapFeature.Require(SUPPORTS_PUT) - @CollectionSize.Require(absent = ZERO) - public void testPutDuplicateValue() { - List<Entry<K, V>> entries = copyToList(multimap().entries()); - - for (Entry<K, V> entry : entries) { - resetContainer(); - K k = entry.getKey(); - V v = entry.getValue(); - - Set<V> values = multimap().get(k); - Set<V> expectedValues = copyToSet(values); - - assertFalse(multimap().put(k, v)); - assertEquals(expectedValues, values); - assertGet(k, expectedValues); - } - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapReplaceValuesTester.java b/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapReplaceValuesTester.java deleted file mode 100644 index fa95309..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapReplaceValuesTester.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_PUT; -import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_REMOVE; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.SetMultimap; -import com.google.common.collect.testing.features.MapFeature; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests for {@link SetMultimap#replaceValues}. - * - * @author Louis Wasserman - */ -@GwtCompatible -public class SetMultimapReplaceValuesTester<K, V> - extends AbstractMultimapTester<K, V, SetMultimap<K, V>> { - - @MapFeature.Require({SUPPORTS_PUT, SUPPORTS_REMOVE}) - public void testReplaceValuesHandlesDuplicates() { - V v0 = sampleValues().e3; - V v1 = sampleValues().e2; - @SuppressWarnings("unchecked") - List<V> values = Arrays.asList(v0, v1, v0); - - for (K k : sampleKeys()) { - resetContainer(); - multimap().replaceValues(k, values); - assertGet(k, v0, v1); - } - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapTestSuiteBuilder.java deleted file mode 100644 index 9a81532..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapTestSuiteBuilder.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import com.google.common.collect.SetMultimap; -import com.google.common.collect.testing.AbstractTester; -import com.google.common.collect.testing.FeatureSpecificTestSuiteBuilder; -import com.google.common.collect.testing.Helpers; -import com.google.common.collect.testing.OneSizeTestContainerGenerator; -import com.google.common.collect.testing.SetTestSuiteBuilder; -import com.google.common.collect.testing.TestSetGenerator; - -import junit.framework.TestSuite; - -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; - -/** - * Creates, based on your criteria, a JUnit test suite that exhaustively tests - * a {@code SetMultimap} implementation. - * - * @author Louis Wasserman - */ -public class SetMultimapTestSuiteBuilder<K, V> - extends MultimapTestSuiteBuilder<K, V, SetMultimap<K, V>> { - - public static <K, V> SetMultimapTestSuiteBuilder<K, V> using( - TestSetMultimapGenerator<K, V> generator) { - SetMultimapTestSuiteBuilder<K, V> result = new SetMultimapTestSuiteBuilder<K, V>(); - result.usingGenerator(generator); - return result; - } - - @Override protected List<Class<? extends AbstractTester>> getTesters() { - List<Class<? extends AbstractTester>> testers = Helpers.copyToList(super.getTesters()); - testers.add(SetMultimapPutTester.class); - testers.add(SetMultimapPutAllTester.class); - testers.add(SetMultimapReplaceValuesTester.class); - return testers; - } - - @Override - TestSuite computeMultimapGetTestSuite( - FeatureSpecificTestSuiteBuilder<?, ? extends - OneSizeTestContainerGenerator<SetMultimap<K, V>, Entry<K, V>>> parentBuilder) { - return SetTestSuiteBuilder.using( - new MultimapGetGenerator<K, V>(parentBuilder.getSubjectGenerator())) - .withFeatures(computeMultimapGetFeatures(parentBuilder.getFeatures())) - .named(parentBuilder.getName() + ".get[key]") - .suppressing(parentBuilder.getSuppressedTests()) - .createTestSuite(); - } - - @Override - TestSuite computeEntriesTestSuite( - FeatureSpecificTestSuiteBuilder<?, ? extends - OneSizeTestContainerGenerator<SetMultimap<K, V>, Map.Entry<K, V>>> parentBuilder) { - return SetTestSuiteBuilder.using( - new EntriesGenerator<K, V>(parentBuilder.getSubjectGenerator())) - .withFeatures(computeEntriesFeatures(parentBuilder.getFeatures())) - .named(parentBuilder.getName() + ".entries") - .suppressing(parentBuilder.getSuppressedTests()) - .createTestSuite(); - } - - private static class EntriesGenerator<K, V> - extends MultimapTestSuiteBuilder.EntriesGenerator<K, V, SetMultimap<K, V>> - implements TestSetGenerator<Entry<K, V>> { - - public EntriesGenerator( - OneSizeTestContainerGenerator<SetMultimap<K, V>, Entry<K, V>> multimapGenerator) { - super(multimapGenerator); - } - - @Override - public Set<Entry<K, V>> create(Object... elements) { - return (Set<Entry<K, V>>) super.create(elements); - } - } - - private static class MultimapGetGenerator<K, V> - extends MultimapTestSuiteBuilder.MultimapGetGenerator<K, V, SetMultimap<K, V>> - implements TestSetGenerator<V> { - public MultimapGetGenerator( - OneSizeTestContainerGenerator<SetMultimap<K, V>, Entry<K, V>> multimapGenerator) { - super(multimapGenerator); - } - - @Override - public Set<V> create(Object... elements) { - return (Set<V>) super.create(elements); - } - - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/SortedMapGenerators.java b/guava-testlib/src/com/google/common/collect/testing/google/SortedMapGenerators.java index e37ae5f..6ce5a77 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/SortedMapGenerators.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/SortedMapGenerators.java @@ -17,19 +17,21 @@ package com.google.common.collect.testing.google; import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.collect.testing.Helpers.mapEntry; import com.google.common.annotations.GwtCompatible; import com.google.common.collect.ImmutableSortedMap; -import com.google.common.collect.Ordering; +import com.google.common.collect.ImmutableSortedMap.Builder; import com.google.common.collect.testing.SampleElements; -import com.google.common.collect.testing.TestListGenerator; -import com.google.common.collect.testing.TestStringListGenerator; -import com.google.common.collect.testing.TestStringSortedMapGenerator; +import com.google.common.collect.testing.TestCollectionGenerator; +import com.google.common.collect.testing.TestMapEntrySetGenerator; +import com.google.common.collect.testing.TestStringSetGenerator; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; import java.util.List; import java.util.Map.Entry; -import java.util.SortedMap; +import java.util.Set; /** * Generators of sorted maps and derived collections. @@ -38,85 +40,160 @@ import java.util.SortedMap; * @author Jesse Wilson * @author Jared Levy * @author Hayward Chan - * @author Chris Povirk - * @author Louis Wasserman */ @GwtCompatible public class SortedMapGenerators { - public static class ImmutableSortedMapGenerator extends TestStringSortedMapGenerator { - @Override public SortedMap<String, String> create(Entry<String, String>[] entries) { - ImmutableSortedMap.Builder<String, String> builder = ImmutableSortedMap.naturalOrder(); - for (Entry<String, String> entry : entries) { - checkNotNull(entry); - builder.put(entry.getKey(), entry.getValue()); + + public static final Comparator<Entry<String, String>> ENTRY_COMPARATOR + = new Comparator<Entry<String, String>>() { + @Override + public int compare( + Entry<String, String> o1, Entry<String, String> o2) { + return o1.getKey().compareTo(o2.getKey()); + } + }; + + public static class ImmutableSortedMapKeySetGenerator + extends TestStringSetGenerator { + + @Override protected Set<String> create(String[] elements) { + Builder<String, Integer> builder = ImmutableSortedMap.naturalOrder(); + for (String key : elements) { + builder.put(key, 4); } - return builder.build(); + return builder.build().keySet(); + } + @Override public List<String> order(List<String> insertionOrder) { + Collections.sort(insertionOrder); + return insertionOrder; } } - public static class ImmutableSortedMapEntryListGenerator - implements TestListGenerator<Entry<String, Integer>> { + public static class ImmutableSortedMapValuesGenerator + implements TestCollectionGenerator<String> { @Override - public SampleElements<Entry<String, Integer>> samples() { - return new SampleElements<Entry<String, Integer>>( - mapEntry("foo", 5), - mapEntry("bar", 3), - mapEntry("baz", 17), - mapEntry("quux", 1), - mapEntry("toaster", -2)); + public SampleElements<String> samples() { + return new SampleElements.Strings(); } - @SuppressWarnings("unchecked") @Override - public Entry<String, Integer>[] createArray(int length) { - return new Entry[length]; + public Collection<String> create(Object... elements) { + Builder<Integer, String> builder = ImmutableSortedMap.naturalOrder(); + for (int i = 0; i < elements.length; i++) { + builder.put(i, toStringOrNull(elements[i])); + } + return builder.build().values(); } @Override - public Iterable<Entry<String, Integer>> order(List<Entry<String, Integer>> insertionOrder) { - return new Ordering<Entry<String, Integer>>() { - @Override - public int compare(Entry<String, Integer> left, Entry<String, Integer> right) { - return left.getKey().compareTo(right.getKey()); - } - }.sortedCopy(insertionOrder); + public String[] createArray(int length) { + return new String[length]; } @Override - public List<Entry<String, Integer>> create(Object... elements) { - ImmutableSortedMap.Builder<String, Integer> builder = ImmutableSortedMap.naturalOrder(); - for (Object o : elements) { - @SuppressWarnings("unchecked") - Entry<String, Integer> entry = (Entry<String, Integer>) o; - builder.put(entry); + public List<String> order(List<String> insertionOrder) { + return insertionOrder; + } + } + + public static class ImmutableSortedMapSubMapEntryGenerator + extends TestMapEntrySetGenerator<String, String> { + + public ImmutableSortedMapSubMapEntryGenerator() { + super(new SampleElements.Strings(), new SampleElements.Strings()); + } + + @Override public Set<Entry<String, String>> createFromEntries( + Entry<String, String>[] entries) { + Builder<String, String> builder = ImmutableSortedMap.naturalOrder(); + builder.put(SampleElements.Strings.BEFORE_FIRST, "begin"); + builder.put(SampleElements.Strings.AFTER_LAST, "end"); + for (Entry<String, String> entry : entries) { + checkNotNull(entry); + builder.put(entry.getKey(), entry.getValue()); + } + return builder.build().subMap(SampleElements.Strings.MIN_ELEMENT, + SampleElements.Strings.AFTER_LAST).entrySet(); + } + @Override public List<Entry<String, String>> order( + List<Entry<String, String>> insertionOrder) { + Collections.sort(insertionOrder, ENTRY_COMPARATOR); + return insertionOrder; + } + } + + public static class ImmutableSortedMapHeadMapKeySetGenerator + extends TestStringSetGenerator { + @Override protected Set<String> create(String[] elements) { + Builder<String, Integer> builder = ImmutableSortedMap.naturalOrder(); + builder.put(SampleElements.Strings.AFTER_LAST, -1); + for (String key : elements) { + builder.put(key, 4); } - return builder.build().entrySet().asList(); + return builder.build().headMap( + SampleElements.Strings.AFTER_LAST).keySet(); + } + @Override public List<String> order(List<String> insertionOrder) { + Collections.sort(insertionOrder); + return insertionOrder; } } - public static class ImmutableSortedMapKeyListGenerator extends TestStringListGenerator { - @Override protected List<String> create(String[] elements) { - ImmutableSortedMap.Builder<String, Integer> builder = ImmutableSortedMap.naturalOrder(); + public static class ImmutableSortedMapTailMapValuesGenerator + implements TestCollectionGenerator<String> { + + @Override + public SampleElements<String> samples() { + return new SampleElements.Strings(); + } + + @Override + public Collection<String> create(Object... elements) { + Builder<Integer, String> builder = ImmutableSortedMap.naturalOrder(); + builder.put(-1, "begin"); for (int i = 0; i < elements.length; i++) { - builder.put(elements[i], i); + builder.put(i, toStringOrNull(elements[i])); } - return builder.build().keySet().asList(); + return builder.build().tailMap(0).values(); + } + + @Override + public String[] createArray(int length) { + return new String[length]; } @Override public List<String> order(List<String> insertionOrder) { - return Ordering.natural().sortedCopy(insertionOrder); + return insertionOrder; } } - public static class ImmutableSortedMapValueListGenerator extends TestStringListGenerator { - @Override protected List<String> create(String[] elements) { - ImmutableSortedMap.Builder<Integer, String> builder = ImmutableSortedMap.naturalOrder(); - for (int i = 0; i < elements.length; i++) { - builder.put(i, elements[i]); + public static class ImmutableSortedMapEntrySetGenerator + extends TestMapEntrySetGenerator<String, String> { + + public ImmutableSortedMapEntrySetGenerator() { + super(new SampleElements.Strings(), new SampleElements.Strings()); + } + + @Override public Set<Entry<String, String>> createFromEntries( + Entry<String, String>[] entries) { + Builder<String, String> builder = ImmutableSortedMap.naturalOrder(); + for (Entry<String, String> entry : entries) { + checkNotNull(entry); + builder.put(entry.getKey(), entry.getValue()); } - return builder.build().values().asList(); + return builder.build().entrySet(); + } + + @Override public List<Entry<String, String>> order( + List<Entry<String, String>> insertionOrder) { + Collections.sort(insertionOrder, ENTRY_COMPARATOR); + return insertionOrder; } } + + private static String toStringOrNull(Object o) { + return (o == null) ? null : o.toString(); + } } diff --git a/guava-testlib/src/com/google/common/collect/testing/google/SortedMultisetTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/google/SortedMultisetTestSuiteBuilder.java index af79cc2..547ab97 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/SortedMultisetTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/SortedMultisetTestSuiteBuilder.java @@ -1,12 +1,12 @@ /* - * Copyright (C) 2011 The Guava Authors - * + * Copyright (C) 2011 Google Inc. + * * 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 @@ -16,40 +16,36 @@ package com.google.common.collect.testing.google; +import com.google.common.annotations.GwtCompatible; import com.google.common.collect.BoundType; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.google.common.collect.Multiset; import com.google.common.collect.SortedMultiset; import com.google.common.collect.testing.AbstractTester; -import com.google.common.collect.testing.FeatureSpecificTestSuiteBuilder; import com.google.common.collect.testing.Helpers; -import com.google.common.collect.testing.OneSizeTestContainerGenerator; import com.google.common.collect.testing.SampleElements; -import com.google.common.collect.testing.SortedSetTestSuiteBuilder; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.Feature; -import com.google.common.testing.SerializableTester; import junit.framework.TestSuite; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.Collections; import java.util.Comparator; -import java.util.HashSet; import java.util.List; import java.util.Set; /** * Creates, based on your criteria, a JUnit test suite that exhaustively tests a * {@code SortedMultiset} implementation. - * + * * <p><b>Warning</b>: expects that {@code E} is a String. - * + * * @author Louis Wasserman */ +@GwtCompatible public class SortedMultisetTestSuiteBuilder<E> extends MultisetTestSuiteBuilder<E> { public static <E> SortedMultisetTestSuiteBuilder<E> using( @@ -62,7 +58,6 @@ public class SortedMultisetTestSuiteBuilder<E> extends @Override public TestSuite createTestSuite() { - withFeatures(CollectionFeature.KNOWN_ORDER); TestSuite suite = super.createTestSuite(); for (TestSuite subSuite : createDerivedSuites(this)) { suite.addTest(subSuite); @@ -78,17 +73,6 @@ public class SortedMultisetTestSuiteBuilder<E> extends return testers; } - @Override - TestSuite createElementSetTestSuite(FeatureSpecificTestSuiteBuilder< - ?, ? extends OneSizeTestContainerGenerator<Collection<E>, E>> parentBuilder) { - return SortedSetTestSuiteBuilder - .using(new ElementSetGenerator<E>(parentBuilder.getSubjectGenerator())) - .named(getName() + ".elementSet") - .withFeatures(computeElementSetFeatures(parentBuilder.getFeatures())) - .suppressing(parentBuilder.getSuppressedTests()) - .createTestSuite(); - } - /** * To avoid infinite recursion, test suites with these marker features won't * have derived suites created for them. @@ -117,10 +101,6 @@ public class SortedMultisetTestSuiteBuilder<E> extends derivedSuites.add(createDescendingSuite(parentBuilder)); } - if (parentBuilder.getFeatures().contains(CollectionFeature.SERIALIZABLE)) { - derivedSuites.add(createReserializedSuite(parentBuilder)); - } - if (!parentBuilder.getFeatures().contains(NoRecurse.SUBMULTISET)) { derivedSuites.add(createSubMultisetSuite(parentBuilder, Bound.NO_BOUND, Bound.EXCLUSIVE)); @@ -149,15 +129,11 @@ public class SortedMultisetTestSuiteBuilder<E> extends final TestMultisetGenerator<E> delegate = (TestMultisetGenerator<E>) parentBuilder.getSubjectGenerator(); - Set<Feature<?>> features = new HashSet<Feature<?>>(); + List<Feature<?>> features = new ArrayList<Feature<?>>(); features.add(NoRecurse.SUBMULTISET); features.add(CollectionFeature.RESTRICTS_ELEMENTS); features.addAll(parentBuilder.getFeatures()); - if (!features.remove(CollectionFeature.SERIALIZABLE_INCLUDING_VIEWS)) { - features.remove(CollectionFeature.SERIALIZABLE); - } - SortedMultiset<E> emptyMultiset = (SortedMultiset<E>) delegate.create(); final Comparator<? super E> comparator = emptyMultiset.comparator(); SampleElements<E> samples = delegate.samples(); @@ -228,7 +204,7 @@ public class SortedMultisetTestSuiteBuilder<E> extends /** * Returns an array of four bogus elements that will always be too high or too * low for the display. This includes two values for each extreme. - * + * * <p> * This method (dangerously) assume that the strings {@code "!! a"} and * {@code "~~ z"} will work for this purpose, which may cause problems for @@ -248,12 +224,9 @@ public class SortedMultisetTestSuiteBuilder<E> extends final TestMultisetGenerator<E> delegate = (TestMultisetGenerator<E>) parentBuilder.getSubjectGenerator(); - Set<Feature<?>> features = new HashSet<Feature<?>>(); + List<Feature<?>> features = new ArrayList<Feature<?>>(); features.add(NoRecurse.DESCENDING); features.addAll(parentBuilder.getFeatures()); - if (!features.remove(CollectionFeature.SERIALIZABLE_INCLUDING_VIEWS)) { - features.remove(CollectionFeature.SERIALIZABLE); - } return SortedMultisetTestSuiteBuilder .using(new ForwardingTestMultisetGenerator<E>(delegate) { @@ -274,29 +247,6 @@ public class SortedMultisetTestSuiteBuilder<E> extends .createTestSuite(); } - private TestSuite createReserializedSuite( - SortedMultisetTestSuiteBuilder<E> parentBuilder) { - final TestMultisetGenerator<E> delegate = - (TestMultisetGenerator<E>) parentBuilder.getSubjectGenerator(); - - Set<Feature<?>> features = new HashSet<Feature<?>>(); - features.addAll(parentBuilder.getFeatures()); - features.remove(CollectionFeature.SERIALIZABLE); - features.remove(CollectionFeature.SERIALIZABLE_INCLUDING_VIEWS); - - return SortedMultisetTestSuiteBuilder - .using(new ForwardingTestMultisetGenerator<E>(delegate) { - @Override - public SortedMultiset<E> create(Object... entries) { - return SerializableTester.reserialize(((SortedMultiset<E>) super.create(entries))); - } - }) - .named(parentBuilder.getName() + " reserialized") - .withFeatures(features) - .suppressing(parentBuilder.getSuppressedTests()) - .createTestSuite(); - } - private static class ForwardingTestMultisetGenerator<E> implements TestMultisetGenerator<E> { private final TestMultisetGenerator<E> delegate; diff --git a/guava-testlib/src/com/google/common/collect/testing/google/SortedSetMultimapGetTester.java b/guava-testlib/src/com/google/common/collect/testing/google/SortedSetMultimapGetTester.java deleted file mode 100644 index ee703d8..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/SortedSetMultimapGetTester.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.SortedSetMultimap; - -/** - * Tester for {@link SortedSetMultimap#get(Object)}. - * - * @author Louis Wasserman - */ -@GwtCompatible -public class SortedSetMultimapGetTester<K, V> - extends AbstractMultimapTester<K, V, SortedSetMultimap<K, V>> { - public void testValueComparator() { - assertEquals( - multimap().valueComparator(), - multimap().get(sampleKeys().e0).comparator()); - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/SortedSetMultimapTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/google/SortedSetMultimapTestSuiteBuilder.java deleted file mode 100644 index 268069e..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/SortedSetMultimapTestSuiteBuilder.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import com.google.common.collect.SetMultimap; -import com.google.common.collect.testing.AbstractTester; -import com.google.common.collect.testing.FeatureSpecificTestSuiteBuilder; -import com.google.common.collect.testing.Helpers; -import com.google.common.collect.testing.OneSizeTestContainerGenerator; -import com.google.common.collect.testing.SortedSetTestSuiteBuilder; -import com.google.common.collect.testing.TestSetGenerator; - -import junit.framework.TestSuite; - -import java.util.Map.Entry; -import java.util.List; -import java.util.Set; - -/** - * Creates, based on your criteria, a JUnit test suite that exhaustively tests - * a {@code SortedSetMultimap} implementation. - * - * @author Louis Wasserman - */ -public class SortedSetMultimapTestSuiteBuilder<K, V> - extends MultimapTestSuiteBuilder<K, V, SetMultimap<K, V>> { - - public static <K, V> SortedSetMultimapTestSuiteBuilder<K, V> using( - TestSetMultimapGenerator<K, V> generator) { - SortedSetMultimapTestSuiteBuilder<K, V> result = new SortedSetMultimapTestSuiteBuilder<K, V>(); - result.usingGenerator(generator); - return result; - } - - @Override protected List<Class<? extends AbstractTester>> getTesters() { - List<Class<? extends AbstractTester>> testers = Helpers.copyToList(super.getTesters()); - testers.add(SetMultimapPutTester.class); - testers.add(SetMultimapPutAllTester.class); - testers.add(SetMultimapReplaceValuesTester.class); - testers.add(SortedSetMultimapGetTester.class); - return testers; - } - - @Override - TestSuite computeMultimapGetTestSuite( - FeatureSpecificTestSuiteBuilder<?, ? extends - OneSizeTestContainerGenerator<SetMultimap<K, V>, Entry<K, V>>> parentBuilder) { - return SortedSetTestSuiteBuilder.using( - new MultimapGetGenerator<K, V>(parentBuilder.getSubjectGenerator())) - .withFeatures(computeMultimapGetFeatures(parentBuilder.getFeatures())) - .named(parentBuilder.getName() + ".get[key]") - .suppressing(parentBuilder.getSuppressedTests()) - .createTestSuite(); - } - - private static class MultimapGetGenerator<K, V> - extends MultimapTestSuiteBuilder.MultimapGetGenerator<K, V, SetMultimap<K, V>> - implements TestSetGenerator<V> { - public MultimapGetGenerator( - OneSizeTestContainerGenerator<SetMultimap<K, V>, Entry<K, V>> multimapGenerator) { - super(multimapGenerator); - } - - @Override - public Set<V> create(Object... elements) { - return (Set<V>) super.create(elements); - } - - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/TestBiMapGenerator.java b/guava-testlib/src/com/google/common/collect/testing/google/TestBiMapGenerator.java deleted file mode 100644 index a8999e4..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/TestBiMapGenerator.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.BiMap; -import com.google.common.collect.testing.TestContainerGenerator; - -import java.util.Map; - -/** - * Creates bimaps, containing sample entries, to be tested. - * - * @author Louis Wasserman - */ -@GwtCompatible -public interface TestBiMapGenerator<K, V> - extends TestContainerGenerator<BiMap<K, V>, Map.Entry<K, V>> { - K[] createKeyArray(int length); - - V[] createValueArray(int length); -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/TestListMultimapGenerator.java b/guava-testlib/src/com/google/common/collect/testing/google/TestListMultimapGenerator.java deleted file mode 100644 index ffc6ab2..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/TestListMultimapGenerator.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.ListMultimap; - -/** - * A generator for {@code ListMultimap} implementations based on test data. - * - * @author Louis Wasserman - */ -@GwtCompatible -public interface TestListMultimapGenerator<K, V> - extends TestMultimapGenerator<K, V, ListMultimap<K, V>> { - -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/TestMultimapGenerator.java b/guava-testlib/src/com/google/common/collect/testing/google/TestMultimapGenerator.java deleted file mode 100644 index fe97023..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/TestMultimapGenerator.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.Multimap; -import com.google.common.collect.testing.SampleElements; -import com.google.common.collect.testing.TestContainerGenerator; - -import java.util.Collection; -import java.util.Map; - -/** - * Creates multimaps, containing sample elements, to be tested. - * - * @author Louis Wasserman - */ -@GwtCompatible -public interface TestMultimapGenerator<K, V, M extends Multimap<K, V>> - extends TestContainerGenerator<M, Map.Entry<K, V>> { - - K[] createKeyArray(int length); - - V[] createValueArray(int length); - - SampleElements<K> sampleKeys(); - - SampleElements<V> sampleValues(); - - Collection<V> createCollection(Iterable<? extends V> values); -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/TestSetMultimapGenerator.java b/guava-testlib/src/com/google/common/collect/testing/google/TestSetMultimapGenerator.java deleted file mode 100644 index 8b31084..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/TestSetMultimapGenerator.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.SetMultimap; - -/** - * A generator for {@code SetMultimap} implementations based on test data. - * - * @author Louis Wasserman - */ -@GwtCompatible -public interface TestSetMultimapGenerator<K, V> - extends TestMultimapGenerator<K, V, SetMultimap<K, V>> { - -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/TestStringBiMapGenerator.java b/guava-testlib/src/com/google/common/collect/testing/google/TestStringBiMapGenerator.java deleted file mode 100644 index 30f1452..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/TestStringBiMapGenerator.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.BiMap; -import com.google.common.collect.testing.Helpers; -import com.google.common.collect.testing.SampleElements; - -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -/** - * Implementation helper for {@link TestBiMapGenerator} for use with bimaps of - * strings. - * - * <p>This class is GWT compatible. - * - * @author Chris Povirk - * @author Jared Levy - * @author George van den Driessche - * @author Louis Wasserman - */ -@GwtCompatible -public abstract class TestStringBiMapGenerator - implements TestBiMapGenerator<String, String> { - - @Override - public SampleElements<Map.Entry<String, String>> samples() { - return new SampleElements<Map.Entry<String, String>>( - Helpers.mapEntry("one", "January"), - Helpers.mapEntry("two", "February"), - Helpers.mapEntry("three", "March"), - Helpers.mapEntry("four", "April"), - Helpers.mapEntry("five", "May") - ); - } - - @Override - public final BiMap<String, String> create(Object... entries) { - @SuppressWarnings("unchecked") - Entry<String, String>[] array = new Entry[entries.length]; - int i = 0; - for (Object o : entries) { - @SuppressWarnings("unchecked") - Entry<String, String> e = (Entry<String, String>) o; - array[i++] = e; - } - return create(array); - } - - protected abstract BiMap<String, String> create( - Entry<String, String>[] entries); - - @Override - @SuppressWarnings("unchecked") - public final Entry<String, String>[] createArray(int length) { - return new Entry[length]; - } - - @Override - public final String[] createKeyArray(int length) { - return new String[length]; - } - - @Override - public final String[] createValueArray(int length) { - return new String[length]; - } - - /** Returns the original element list, unchanged. */ - @Override - public Iterable<Entry<String, String>> order( - List<Entry<String, String>> insertionOrder) { - return insertionOrder; - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/TestStringListMultimapGenerator.java b/guava-testlib/src/com/google/common/collect/testing/google/TestStringListMultimapGenerator.java deleted file mode 100644 index 4f99879..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/TestStringListMultimapGenerator.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.ListMultimap; -import com.google.common.collect.testing.Helpers; -import com.google.common.collect.testing.SampleElements; - -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -/** - * A skeleton generator for a {@code ListMultimap} implementation. - * - * @author Louis Wasserman - */ -@GwtCompatible -public abstract class TestStringListMultimapGenerator - implements TestListMultimapGenerator<String, String> { - - @Override - public SampleElements<Map.Entry<String, String>> samples() { - return new SampleElements<Map.Entry<String, String>>( - Helpers.mapEntry("one", "January"), - Helpers.mapEntry("two", "February"), - Helpers.mapEntry("three", "March"), - Helpers.mapEntry("four", "April"), - Helpers.mapEntry("five", "May")); - } - - @Override - public SampleElements<String> sampleKeys() { - return new SampleElements<String>("one", "two", "three", "four", "five"); - } - - @Override - public SampleElements<String> sampleValues() { - return new SampleElements<String>("January", "February", "March", "April", "May"); - } - - @Override - public Collection<String> createCollection(Iterable<? extends String> values) { - return Helpers.copyToList(values); - } - - @Override - public final ListMultimap<String, String> create(Object... entries) { - @SuppressWarnings("unchecked") - Entry<String, String>[] array = new Entry[entries.length]; - int i = 0; - for (Object o : entries) { - @SuppressWarnings("unchecked") - Entry<String, String> e = (Entry<String, String>) o; - array[i++] = e; - } - return create(array); - } - - protected abstract ListMultimap<String, String> create( - Entry<String, String>[] entries); - - @Override - @SuppressWarnings("unchecked") - public final Entry<String, String>[] createArray(int length) { - return new Entry[length]; - } - - @Override - public final String[] createKeyArray(int length) { - return new String[length]; - } - - @Override - public final String[] createValueArray(int length) { - return new String[length]; - } - - /** Returns the original element list, unchanged. */ - @Override - public Iterable<Entry<String, String>> order( - List<Entry<String, String>> insertionOrder) { - return insertionOrder; - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/TestStringSetMultimapGenerator.java b/guava-testlib/src/com/google/common/collect/testing/google/TestStringSetMultimapGenerator.java deleted file mode 100644 index f49d4f0..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/google/TestStringSetMultimapGenerator.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.google; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.SetMultimap; -import com.google.common.collect.testing.Helpers; -import com.google.common.collect.testing.SampleElements; - -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -/** - * A skeleton generator for a {@code SetMultimap} implementation. - * - * @author Louis Wasserman - */ -@GwtCompatible -public abstract class TestStringSetMultimapGenerator - implements TestSetMultimapGenerator<String, String> { - - @Override - public SampleElements<Map.Entry<String, String>> samples() { - return new SampleElements<Map.Entry<String, String>>( - Helpers.mapEntry("one", "January"), - Helpers.mapEntry("two", "February"), - Helpers.mapEntry("three", "March"), - Helpers.mapEntry("four", "April"), - Helpers.mapEntry("five", "May")); - } - - @Override - public SampleElements<String> sampleKeys() { - return new SampleElements<String>("one", "two", "three", "four", "five"); - } - - @Override - public SampleElements<String> sampleValues() { - return new SampleElements<String>("January", "February", "March", "April", "May"); - } - - @Override - public Collection<String> createCollection(Iterable<? extends String> values) { - return Helpers.copyToSet(values); - } - - @Override - public final SetMultimap<String, String> create(Object... entries) { - @SuppressWarnings("unchecked") - Entry<String, String>[] array = new Entry[entries.length]; - int i = 0; - for (Object o : entries) { - @SuppressWarnings("unchecked") - Entry<String, String> e = (Entry<String, String>) o; - array[i++] = e; - } - return create(array); - } - - protected abstract SetMultimap<String, String> create( - Entry<String, String>[] entries); - - @Override - @SuppressWarnings("unchecked") - public final Entry<String, String>[] createArray(int length) { - return new Entry[length]; - } - - @Override - public final String[] createKeyArray(int length) { - return new String[length]; - } - - @Override - public final String[] createValueArray(int length) { - return new String[length]; - } - - /** Returns the original element list, unchanged. */ - @Override - public Iterable<Entry<String, String>> order( - List<Entry<String, String>> insertionOrder) { - return insertionOrder; - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/AbstractListIndexOfTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/AbstractListIndexOfTester.java index 21fff11..af960a5 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/AbstractListIndexOfTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/AbstractListIndexOfTester.java @@ -19,7 +19,6 @@ package com.google.common.collect.testing.testers; import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES; import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.WrongType; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -32,7 +31,6 @@ import com.google.common.collect.testing.features.CollectionSize; * * @author Chris Povirk */ -@GwtCompatible public abstract class AbstractListIndexOfTester<E> extends AbstractListTester<E> { /** Override to call {@code indexOf()} or {@code lastIndexOf()}. */ @@ -47,7 +45,7 @@ public abstract class AbstractListIndexOfTester<E> @CollectionSize.Require(absent = ZERO) public void testFind_yes() { assertEquals(getMethodName() + "(firstElement) should return 0", - 0, find(getOrderedElements().get(0))); + 0, find(samples.e0)); } public void testFind_no() { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/AbstractListTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/AbstractListTester.java index 5bebdb3..268022d 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/AbstractListTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/AbstractListTester.java @@ -16,7 +16,6 @@ package com.google.common.collect.testing.testers; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.AbstractCollectionTester; import com.google.common.collect.testing.Helpers; @@ -30,7 +29,6 @@ import java.util.List; * * @author George van den Driessche */ -@GwtCompatible public class AbstractListTester<E> extends AbstractCollectionTester<E> { /* * Previously we had a field named list that was initialized to the value of diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/AbstractQueueTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/AbstractQueueTester.java index dd6a260..5f7477c 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/AbstractQueueTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/AbstractQueueTester.java @@ -16,7 +16,6 @@ package com.google.common.collect.testing.testers; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.AbstractCollectionTester; import java.util.Queue; @@ -28,7 +27,6 @@ import java.util.Queue; * * @author Jared Levy */ -@GwtCompatible public class AbstractQueueTester<E> extends AbstractCollectionTester<E> { protected final Queue<E> getQueue() { return (Queue<E>) collection; diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/AbstractSetTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/AbstractSetTester.java index 544373e..76a5326 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/AbstractSetTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/AbstractSetTester.java @@ -16,7 +16,6 @@ package com.google.common.collect.testing.testers; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.AbstractCollectionTester; import java.util.Set; @@ -26,7 +25,6 @@ import java.util.Set; * * @author George van den Driessche */ -@GwtCompatible public class AbstractSetTester<E> extends AbstractCollectionTester<E> { /* * Previously we had a field named set that was initialized to the value of diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddAllTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddAllTester.java index 38d5261..b5e3085 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddAllTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddAllTester.java @@ -17,23 +17,17 @@ package com.google.common.collect.testing.testers; import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES; -import static com.google.common.collect.testing.features.CollectionFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION; import static com.google.common.collect.testing.features.CollectionFeature.RESTRICTS_ELEMENTS; -import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD; +import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD_ALL; import static com.google.common.collect.testing.features.CollectionSize.ZERO; import static java.util.Collections.singletonList; -import com.google.common.annotations.GwtCompatible; -import com.google.common.annotations.GwtIncompatible; import com.google.common.collect.testing.AbstractCollectionTester; -import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.MinimalCollection; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; import java.lang.reflect.Method; -import java.util.ConcurrentModificationException; -import java.util.Iterator; import java.util.List; /** @@ -47,16 +41,15 @@ import java.util.List; * @author Kevin Bourrillion */ @SuppressWarnings("unchecked") // too many "unchecked generic array creations" -@GwtCompatible(emulated = true) public class CollectionAddAllTester<E> extends AbstractCollectionTester<E> { - @CollectionFeature.Require(SUPPORTS_ADD) + @CollectionFeature.Require(SUPPORTS_ADD_ALL) public void testAddAll_supportedNothing() { assertFalse("addAll(nothing) should return false", collection.addAll(emptyCollection())); expectUnchanged(); } - @CollectionFeature.Require(absent = SUPPORTS_ADD) + @CollectionFeature.Require(absent = SUPPORTS_ADD_ALL) public void testAddAll_unsupportedNothing() { try { assertFalse("addAll(nothing) should return false or throw", @@ -66,14 +59,14 @@ public class CollectionAddAllTester<E> extends AbstractCollectionTester<E> { expectUnchanged(); } - @CollectionFeature.Require(SUPPORTS_ADD) + @CollectionFeature.Require(SUPPORTS_ADD_ALL) public void testAddAll_supportedNonePresent() { assertTrue("addAll(nonePresent) should return true", collection.addAll(createDisjointCollection())); expectAdded(samples.e3, samples.e4); } - @CollectionFeature.Require(absent = SUPPORTS_ADD) + @CollectionFeature.Require(absent = SUPPORTS_ADD_ALL) public void testAddAll_unsupportedNonePresent() { try { collection.addAll(createDisjointCollection()); @@ -84,7 +77,7 @@ public class CollectionAddAllTester<E> extends AbstractCollectionTester<E> { expectMissing(samples.e3, samples.e4); } - @CollectionFeature.Require(SUPPORTS_ADD) + @CollectionFeature.Require(SUPPORTS_ADD_ALL) @CollectionSize.Require(absent = ZERO) public void testAddAll_supportedSomePresent() { assertTrue("addAll(somePresent) should return true", @@ -93,7 +86,7 @@ public class CollectionAddAllTester<E> extends AbstractCollectionTester<E> { assertTrue("should contain " + samples.e0, collection.contains(samples.e0)); } - @CollectionFeature.Require(absent = SUPPORTS_ADD) + @CollectionFeature.Require(absent = SUPPORTS_ADD_ALL) @CollectionSize.Require(absent = ZERO) public void testAddAll_unsupportedSomePresent() { try { @@ -104,21 +97,7 @@ public class CollectionAddAllTester<E> extends AbstractCollectionTester<E> { expectUnchanged(); } - @CollectionFeature.Require({SUPPORTS_ADD, - FAILS_FAST_ON_CONCURRENT_MODIFICATION}) - @CollectionSize.Require(absent = ZERO) - public void testAddAllConcurrentWithIteration() { - try { - Iterator<E> iterator = collection.iterator(); - assertTrue(collection.addAll(MinimalCollection.of(samples.e3, samples.e0))); - iterator.next(); - fail("Expected ConcurrentModificationException"); - } catch (ConcurrentModificationException expected) { - // success - } - } - - @CollectionFeature.Require(absent = SUPPORTS_ADD) + @CollectionFeature.Require(absent = SUPPORTS_ADD_ALL) @CollectionSize.Require(absent = ZERO) public void testAddAll_unsupportedAllPresent() { try { @@ -129,7 +108,7 @@ public class CollectionAddAllTester<E> extends AbstractCollectionTester<E> { expectUnchanged(); } - @CollectionFeature.Require(value = {SUPPORTS_ADD, + @CollectionFeature.Require(value = {SUPPORTS_ADD_ALL, ALLOWS_NULL_VALUES}, absent = RESTRICTS_ELEMENTS) public void testAddAll_nullSupported() { List<E> containsNull = singletonList(null); @@ -142,7 +121,7 @@ public class CollectionAddAllTester<E> extends AbstractCollectionTester<E> { expectAdded((E) null); } - @CollectionFeature.Require(value = SUPPORTS_ADD, + @CollectionFeature.Require(value = SUPPORTS_ADD_ALL, absent = ALLOWS_NULL_VALUES) public void testAddAll_nullUnsupported() { List<E> containsNull = singletonList(null); @@ -156,7 +135,7 @@ public class CollectionAddAllTester<E> extends AbstractCollectionTester<E> { "Should not contain null after unsupported addAll(containsNull)"); } - @CollectionFeature.Require(SUPPORTS_ADD) + @CollectionFeature.Require(SUPPORTS_ADD_ALL) public void testAddAll_nullCollectionReference() { try { collection.addAll(null); @@ -172,8 +151,7 @@ public class CollectionAddAllTester<E> extends AbstractCollectionTester<E> { * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5045147">Sun * bug 5045147</a> is fixed. */ - @GwtIncompatible("reflection") public static Method getAddAllNullUnsupportedMethod() { - return Helpers.getMethod(CollectionAddAllTester.class, "testAddAll_nullUnsupported"); + return Platform.getMethod(CollectionAddAllTester.class, "testAddAll_nullUnsupported"); } } diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddTester.java index afe276b..1de5b14 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddTester.java @@ -17,21 +17,15 @@ package com.google.common.collect.testing.testers; import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES; -import static com.google.common.collect.testing.features.CollectionFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION; import static com.google.common.collect.testing.features.CollectionFeature.RESTRICTS_ELEMENTS; import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD; import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import com.google.common.annotations.GwtCompatible; -import com.google.common.annotations.GwtIncompatible; import com.google.common.collect.testing.AbstractCollectionTester; -import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; import java.lang.reflect.Method; -import java.util.ConcurrentModificationException; -import java.util.Iterator; /** * A generic JUnit test which tests {@code add} operations on a collection. @@ -44,7 +38,6 @@ import java.util.Iterator; * @author Kevin Bourrillion */ @SuppressWarnings("unchecked") // too many "unchecked generic array creations" -@GwtCompatible(emulated = true) public class CollectionAddTester<E> extends AbstractCollectionTester<E> { @CollectionFeature.Require(SUPPORTS_ADD) public void testAdd_supportedNotPresent() { @@ -96,20 +89,6 @@ public class CollectionAddTester<E> extends AbstractCollectionTester<E> { "Should not contain null after unsupported add(null)"); } - @CollectionFeature.Require({SUPPORTS_ADD, - FAILS_FAST_ON_CONCURRENT_MODIFICATION}) - @CollectionSize.Require(absent = ZERO) - public void testAddConcurrentWithIteration() { - try { - Iterator<E> iterator = collection.iterator(); - assertTrue(collection.add(samples.e3)); - iterator.next(); - fail("Expected ConcurrentModificationException"); - } catch (ConcurrentModificationException expected) { - // success - } - } - /** * Returns the {@link Method} instance for {@link #testAdd_nullSupported()} so * that tests of {@link @@ -122,20 +101,20 @@ public class CollectionAddTester<E> extends AbstractCollectionTester<E> { * seems more likely that code would depend on that behavior than on the * other. Thus, we say the bug is in add(), which fails to support null. */ - @GwtIncompatible("reflection") public static Method getAddNullSupportedMethod() { - return Helpers.getMethod(CollectionAddTester.class, "testAdd_nullSupported"); + return Platform.getMethod(CollectionAddTester.class, "testAdd_nullSupported"); } /** - * Returns the {@link Method} instance for {@link #testAdd_nullSupported()} - * so that tests of {@link java.util.TreeSet} can suppress it with {@code - * FeatureSpecificTestSuiteBuilder.suppressing()} until <a - * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5045147">Sun bug - * 5045147</a> is fixed. + * Returns the {@link Method} instance for {@link #testAdd_nullSupported()} so + * that tests of {@link + * java.util.Collections#checkedCollection(java.util.Collection, Class)} can + * suppress it with {@code FeatureSpecificTestSuiteBuilder.suppressing()} + * until <a + * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5045147">Sun + * bug 5045147</a> is fixed. */ - @GwtIncompatible("reflection") public static Method getAddNullUnsupportedMethod() { - return Helpers.getMethod(CollectionAddTester.class, "testAdd_nullUnsupported"); + return Platform.getMethod(CollectionAddTester.class, "testAdd_nullUnsupported"); } } diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionClearTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionClearTester.java index a417e55..69f1d02 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionClearTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionClearTester.java @@ -16,19 +16,13 @@ package com.google.common.collect.testing.testers; -import static com.google.common.collect.testing.features.CollectionFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION; -import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE; -import static com.google.common.collect.testing.features.CollectionSize.SEVERAL; +import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_CLEAR; import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.AbstractCollectionTester; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; -import java.util.ConcurrentModificationException; -import java.util.Iterator; - /** * A generic JUnit test which tests {@code clear()} operations on a collection. * Can't be invoked directly; please see @@ -38,16 +32,15 @@ import java.util.Iterator; * * @author George van den Driessche */ -@GwtCompatible public class CollectionClearTester<E> extends AbstractCollectionTester<E> { - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_CLEAR) public void testClear() { collection.clear(); assertTrue("After clear(), a collection should be empty.", collection.isEmpty()); } - @CollectionFeature.Require(absent = SUPPORTS_REMOVE) + @CollectionFeature.Require(absent = SUPPORTS_CLEAR) @CollectionSize.Require(absent = ZERO) public void testClear_unsupported() { try { @@ -59,7 +52,7 @@ public class CollectionClearTester<E> extends AbstractCollectionTester<E> { expectUnchanged(); } - @CollectionFeature.Require(absent = SUPPORTS_REMOVE) + @CollectionFeature.Require(absent = SUPPORTS_CLEAR) @CollectionSize.Require(ZERO) public void testClear_unsupportedByEmptyCollection() { try { @@ -68,22 +61,4 @@ public class CollectionClearTester<E> extends AbstractCollectionTester<E> { } expectUnchanged(); } - - @CollectionFeature.Require({SUPPORTS_REMOVE, - FAILS_FAST_ON_CONCURRENT_MODIFICATION}) - @CollectionSize.Require(SEVERAL) - public void testClearConcurrentWithIteration() { - try { - Iterator<E> iterator = collection.iterator(); - collection.clear(); - iterator.next(); - /* - * We prefer for iterators to fail immediately on hasNext, but ArrayList - * and LinkedList will notably return true on hasNext here! - */ - fail("Expected ConcurrentModificationException"); - } catch (ConcurrentModificationException expected) { - // success - } - } } diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionContainsAllTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionContainsAllTester.java index 4fd424b..40be02b 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionContainsAllTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionContainsAllTester.java @@ -20,7 +20,6 @@ import static com.google.common.collect.testing.features.CollectionFeature.ALLOW import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES; import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.AbstractCollectionTester; import com.google.common.collect.testing.MinimalCollection; import com.google.common.collect.testing.WrongType; @@ -40,7 +39,6 @@ import java.util.Collection; * @author Chris Povirk */ @SuppressWarnings("unchecked") // too many "unchecked generic array creations" -@GwtCompatible public class CollectionContainsAllTester<E> extends AbstractCollectionTester<E> { public void testContainsAll_empty() { @@ -87,7 +85,6 @@ public class CollectionContainsAllTester<E> } @CollectionFeature.Require(ALLOWS_NULL_VALUES) - @CollectionSize.Require(absent = ZERO) public void testContainsAll_nullPresent() { initCollectionWithNullElement(); assertTrue(collection.containsAll(MinimalCollection.of((E) null))); diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionContainsTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionContainsTester.java index e8f754a..49337c3 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionContainsTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionContainsTester.java @@ -20,7 +20,6 @@ import static com.google.common.collect.testing.features.CollectionFeature.ALLOW import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES; import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.AbstractCollectionTester; import com.google.common.collect.testing.WrongType; import com.google.common.collect.testing.features.CollectionFeature; @@ -36,7 +35,6 @@ import com.google.common.collect.testing.features.CollectionSize; * @author Kevin Bourrillion * @author Chris Povirk */ -@GwtCompatible public class CollectionContainsTester<E> extends AbstractCollectionTester<E> { @CollectionSize.Require(absent = ZERO) public void testContains_yes() { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionCreationTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionCreationTester.java index 3e7499c..401a0f2 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionCreationTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionCreationTester.java @@ -19,10 +19,7 @@ package com.google.common.collect.testing.testers; import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES; import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import com.google.common.annotations.GwtCompatible; -import com.google.common.annotations.GwtIncompatible; import com.google.common.collect.testing.AbstractCollectionTester; -import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -37,7 +34,6 @@ import java.lang.reflect.Method; * * @author Chris Povirk */ -@GwtCompatible(emulated = true) public class CollectionCreationTester<E> extends AbstractCollectionTester<E> { @CollectionFeature.Require(ALLOWS_NULL_VALUES) @CollectionSize.Require(absent = ZERO) @@ -66,8 +62,7 @@ public class CollectionCreationTester<E> extends AbstractCollectionTester<E> { * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5045147">Sun * bug 5045147</a> is fixed. */ - @GwtIncompatible("reflection") public static Method getCreateWithNullUnsupportedMethod() { - return Helpers.getMethod(CollectionCreationTester.class, "testCreateWithNull_unsupported"); + return Platform.getMethod(CollectionCreationTester.class, "testCreateWithNull_unsupported"); } } diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionEqualsTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionEqualsTester.java index c59db0a..fe642fc 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionEqualsTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionEqualsTester.java @@ -16,7 +16,6 @@ package com.google.common.collect.testing.testers; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.AbstractCollectionTester; /** @@ -26,7 +25,6 @@ import com.google.common.collect.testing.AbstractCollectionTester; * * @author George van den Driessche */ -@GwtCompatible public class CollectionEqualsTester<E> extends AbstractCollectionTester<E> { public void testEquals_self() { assertTrue("An Object should be equal to itself.", @@ -45,4 +43,4 @@ public class CollectionEqualsTester<E> extends AbstractCollectionTester<E> { + "object that is not a Collection.", collection.equals("huh?")); } -} +}
\ No newline at end of file diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionIsEmptyTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionIsEmptyTester.java index 94e2c13..8d11f42 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionIsEmptyTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionIsEmptyTester.java @@ -18,7 +18,6 @@ package com.google.common.collect.testing.testers; import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.AbstractCollectionTester; import com.google.common.collect.testing.features.CollectionSize; @@ -31,7 +30,6 @@ import com.google.common.collect.testing.features.CollectionSize; * * @author Kevin Bourrillion */ -@GwtCompatible public class CollectionIsEmptyTester<E> extends AbstractCollectionTester<E> { @CollectionSize.Require(ZERO) public void testIsEmpty_yes() { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionIteratorTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionIteratorTester.java index 6a8d567..3e54cfc 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionIteratorTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionIteratorTester.java @@ -21,8 +21,6 @@ import static com.google.common.collect.testing.IteratorFeature.UNMODIFIABLE; import static com.google.common.collect.testing.features.CollectionFeature.KNOWN_ORDER; import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE; -import com.google.common.annotations.GwtCompatible; -import com.google.common.annotations.GwtIncompatible; import com.google.common.collect.testing.AbstractCollectionTester; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.IteratorFeature; @@ -48,7 +46,6 @@ import java.util.concurrent.CopyOnWriteArraySet; * * @author Chris Povirk */ -@GwtCompatible(emulated = true) public class CollectionIteratorTester<E> extends AbstractCollectionTester<E> { public void testIterator() { List<E> iteratorElements = new ArrayList<E>(); @@ -123,9 +120,8 @@ public class CollectionIteratorTester<E> extends AbstractCollectionTester<E> { * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6570575">Sun bug * 6570575</a> is fixed. */ - @GwtIncompatible("reflection") public static Method getIteratorKnownOrderRemoveSupportedMethod() { - return Helpers.getMethod( + return Platform.getMethod( CollectionIteratorTester.class, "testIterator_knownOrderRemoveSupported"); } @@ -134,9 +130,8 @@ public class CollectionIteratorTester<E> extends AbstractCollectionTester<E> { * {@link #testIterator_unknownOrderRemoveSupported()} so that tests of * classes with unmodifiable iterators can suppress it. */ - @GwtIncompatible("reflection") public static Method getIteratorUnknownOrderRemoveSupportedMethod() { - return Helpers.getMethod( + return Platform.getMethod( CollectionIteratorTester.class, "testIterator_unknownOrderRemoveSupported"); } @@ -160,9 +155,8 @@ public class CollectionIteratorTester<E> extends AbstractCollectionTester<E> { * supports {@code remove()} on only the first element, and the iterator * tester can't handle that. */ - @GwtIncompatible("reflection") public static Method getIteratorKnownOrderRemoveUnsupportedMethod() { - return Helpers.getMethod( + return Platform.getMethod( CollectionIteratorTester.class, "testIterator_knownOrderRemoveUnsupported"); } } diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveAllTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveAllTester.java index f607916..1005307 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveAllTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveAllTester.java @@ -18,12 +18,9 @@ package com.google.common.collect.testing.testers; import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_QUERIES; import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES; -import static com.google.common.collect.testing.features.CollectionFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION; -import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE; -import static com.google.common.collect.testing.features.CollectionSize.SEVERAL; +import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE_ALL; import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.AbstractCollectionTester; import com.google.common.collect.testing.MinimalCollection; import com.google.common.collect.testing.WrongType; @@ -31,8 +28,6 @@ import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; import java.util.Collections; -import java.util.ConcurrentModificationException; -import java.util.Iterator; /** * A generic JUnit test which tests {@code removeAll} operations on a @@ -45,23 +40,22 @@ import java.util.Iterator; * @author Chris Povirk */ @SuppressWarnings("unchecked") // too many "unchecked generic array creations" -@GwtCompatible public class CollectionRemoveAllTester<E> extends AbstractCollectionTester<E> { - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_REMOVE_ALL) public void testRemoveAll_emptyCollection() { assertFalse("removeAll(emptyCollection) should return false", collection.removeAll(MinimalCollection.of())); expectUnchanged(); } - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_REMOVE_ALL) public void testRemoveAll_nonePresent() { assertFalse("removeAll(disjointCollection) should return false", collection.removeAll(MinimalCollection.of(samples.e3))); expectUnchanged(); } - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_REMOVE_ALL) @CollectionSize.Require(absent = ZERO) public void testRemoveAll_allPresent() { assertTrue("removeAll(intersectingCollection) should return true", @@ -69,7 +63,7 @@ public class CollectionRemoveAllTester<E> extends AbstractCollectionTester<E> { expectMissing(samples.e0); } - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_REMOVE_ALL) @CollectionSize.Require(absent = ZERO) public void testRemoveAll_somePresent() { assertTrue("removeAll(intersectingCollection) should return true", @@ -77,24 +71,10 @@ public class CollectionRemoveAllTester<E> extends AbstractCollectionTester<E> { expectMissing(samples.e0); } - @CollectionFeature.Require({SUPPORTS_REMOVE, - FAILS_FAST_ON_CONCURRENT_MODIFICATION}) - @CollectionSize.Require(SEVERAL) - public void testRemoveAllSomePresentConcurrentWithIteration() { - try { - Iterator<E> iterator = collection.iterator(); - assertTrue(collection.removeAll(MinimalCollection.of(samples.e0, samples.e3))); - iterator.next(); - fail("Expected ConcurrentModificationException"); - } catch (ConcurrentModificationException expected) { - // success - } - } - /** * Trigger the other.size() >= this.size() case in AbstractSet.removeAll(). */ - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_REMOVE_ALL) @CollectionSize.Require(absent = ZERO) public void testRemoveAll_somePresentLargeCollectionToRemove() { assertTrue("removeAll(largeIntersectingCollection) should return true", @@ -104,7 +84,7 @@ public class CollectionRemoveAllTester<E> extends AbstractCollectionTester<E> { expectMissing(samples.e0); } - @CollectionFeature.Require(absent = SUPPORTS_REMOVE) + @CollectionFeature.Require(absent = SUPPORTS_REMOVE_ALL) public void testRemoveAll_unsupportedEmptyCollection() { try { assertFalse("removeAll(emptyCollection) should return false or throw " @@ -115,7 +95,7 @@ public class CollectionRemoveAllTester<E> extends AbstractCollectionTester<E> { expectUnchanged(); } - @CollectionFeature.Require(absent = SUPPORTS_REMOVE) + @CollectionFeature.Require(absent = SUPPORTS_REMOVE_ALL) public void testRemoveAll_unsupportedNonePresent() { try { assertFalse("removeAll(disjointCollection) should return false or throw " @@ -126,7 +106,7 @@ public class CollectionRemoveAllTester<E> extends AbstractCollectionTester<E> { expectUnchanged(); } - @CollectionFeature.Require(absent = SUPPORTS_REMOVE) + @CollectionFeature.Require(absent = SUPPORTS_REMOVE_ALL) @CollectionSize.Require(absent = ZERO) public void testRemoveAll_unsupportedPresent() { try { @@ -146,7 +126,7 @@ public class CollectionRemoveAllTester<E> extends AbstractCollectionTester<E> { * suppress only the former. */ - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_REMOVE_ALL) @CollectionSize.Require(ZERO) public void testRemoveAll_nullCollectionReferenceEmptySubject() { try { @@ -156,7 +136,7 @@ public class CollectionRemoveAllTester<E> extends AbstractCollectionTester<E> { } } - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_REMOVE_ALL) @CollectionSize.Require(absent = ZERO) public void testRemoveAll_nullCollectionReferenceNonEmptySubject() { try { @@ -166,7 +146,7 @@ public class CollectionRemoveAllTester<E> extends AbstractCollectionTester<E> { } } - @CollectionFeature.Require(value = SUPPORTS_REMOVE, + @CollectionFeature.Require(value = SUPPORTS_REMOVE_ALL, absent = ALLOWS_NULL_QUERIES) public void testRemoveAll_containsNullNo() { MinimalCollection<?> containsNull = MinimalCollection.of((Object) null); @@ -178,7 +158,7 @@ public class CollectionRemoveAllTester<E> extends AbstractCollectionTester<E> { expectUnchanged(); } - @CollectionFeature.Require({SUPPORTS_REMOVE, ALLOWS_NULL_QUERIES}) + @CollectionFeature.Require({SUPPORTS_REMOVE_ALL, ALLOWS_NULL_QUERIES}) public void testRemoveAll_containsNullNoButAllowed() { MinimalCollection<?> containsNull = MinimalCollection.of((Object) null); assertFalse("removeAll(containsNull) should return false", @@ -186,7 +166,7 @@ public class CollectionRemoveAllTester<E> extends AbstractCollectionTester<E> { expectUnchanged(); } - @CollectionFeature.Require({SUPPORTS_REMOVE, ALLOWS_NULL_VALUES}) + @CollectionFeature.Require({SUPPORTS_REMOVE_ALL, ALLOWS_NULL_VALUES}) @CollectionSize.Require(absent = ZERO) public void testRemoveAll_containsNullYes() { initCollectionWithNullElement(); @@ -195,7 +175,7 @@ public class CollectionRemoveAllTester<E> extends AbstractCollectionTester<E> { // TODO: make this work with MinimalCollection } - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_REMOVE_ALL) public void testRemoveAll_containsWrongType() { try { assertFalse("removeAll(containsWrongType) should return false or throw", diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveTester.java index 3818fd9..2d051bc 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveTester.java @@ -18,18 +18,14 @@ package com.google.common.collect.testing.testers; import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_QUERIES; import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES; -import static com.google.common.collect.testing.features.CollectionFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION; import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE; -import static com.google.common.collect.testing.features.CollectionSize.SEVERAL; import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.AbstractCollectionTester; import com.google.common.collect.testing.WrongType; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; -import java.util.ConcurrentModificationException; import java.util.Iterator; /** @@ -42,7 +38,6 @@ import java.util.Iterator; * @author George van den Driessche */ @SuppressWarnings("unchecked") // too many "unchecked generic array creations" -@GwtCompatible public class CollectionRemoveTester<E> extends AbstractCollectionTester<E> { @CollectionFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(absent = ZERO) @@ -55,20 +50,6 @@ public class CollectionRemoveTester<E> extends AbstractCollectionTester<E> { expectMissing(samples.e0); } - @CollectionFeature.Require({SUPPORTS_REMOVE, - FAILS_FAST_ON_CONCURRENT_MODIFICATION}) - @CollectionSize.Require(SEVERAL) - public void testRemovePresentConcurrentWithIteration() { - try { - Iterator<E> iterator = collection.iterator(); - assertTrue(collection.remove(samples.e0)); - iterator.next(); - fail("Expected ConcurrentModificationException"); - } catch (ConcurrentModificationException expected) { - // success - } - } - @CollectionFeature.Require(SUPPORTS_REMOVE) public void testRemove_notPresent() { assertFalse("remove(notPresent) should return false", diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRetainAllTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRetainAllTester.java index 693c0b1..fbfd0d8 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRetainAllTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRetainAllTester.java @@ -17,11 +17,10 @@ package com.google.common.collect.testing.testers; import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES; -import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE; +import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_RETAIN_ALL; import static com.google.common.collect.testing.features.CollectionSize.ONE; import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.AbstractCollectionTester; import com.google.common.collect.testing.MinimalCollection; import com.google.common.collect.testing.features.CollectionFeature; @@ -42,7 +41,6 @@ import java.util.List; * @author Chris Povirk */ @SuppressWarnings("unchecked") // too many "unchecked generic array creations" -@GwtCompatible public class CollectionRetainAllTester<E> extends AbstractCollectionTester<E> { /** @@ -105,21 +103,21 @@ public class CollectionRetainAllTester<E> extends AbstractCollectionTester<E> { // retainAll(empty) - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) @CollectionSize.Require(ZERO) public void testRetainAll_emptyPreviouslyEmpty() { expectReturnsFalse(empty); expectUnchanged(); } - @CollectionFeature.Require(absent = SUPPORTS_REMOVE) + @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL) @CollectionSize.Require(ZERO) public void testRetainAll_emptyPreviouslyEmptyUnsupported() { expectReturnsFalseOrThrows(empty); expectUnchanged(); } - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) @CollectionSize.Require(absent = ZERO) public void testRetainAll_emptyPreviouslyNonEmpty() { expectReturnsTrue(empty); @@ -127,7 +125,7 @@ public class CollectionRetainAllTester<E> extends AbstractCollectionTester<E> { expectMissing(samples.e0, samples.e1, samples.e2); } - @CollectionFeature.Require(absent = SUPPORTS_REMOVE) + @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL) @CollectionSize.Require(absent = ZERO) public void testRetainAll_emptyPreviouslyNonEmptyUnsupported() { expectThrows(empty); @@ -136,21 +134,21 @@ public class CollectionRetainAllTester<E> extends AbstractCollectionTester<E> { // retainAll(disjoint) - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) @CollectionSize.Require(ZERO) public void testRetainAll_disjointPreviouslyEmpty() { expectReturnsFalse(disjoint); expectUnchanged(); } - @CollectionFeature.Require(absent = SUPPORTS_REMOVE) + @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL) @CollectionSize.Require(ZERO) public void testRetainAll_disjointPreviouslyEmptyUnsupported() { expectReturnsFalseOrThrows(disjoint); expectUnchanged(); } - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) @CollectionSize.Require(absent = ZERO) public void testRetainAll_disjointPreviouslyNonEmpty() { expectReturnsTrue(disjoint); @@ -158,7 +156,7 @@ public class CollectionRetainAllTester<E> extends AbstractCollectionTester<E> { expectMissing(samples.e0, samples.e1, samples.e2); } - @CollectionFeature.Require(absent = SUPPORTS_REMOVE) + @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL) @CollectionSize.Require(absent = ZERO) public void testRetainAll_disjointPreviouslyNonEmptyUnsupported() { expectThrows(disjoint); @@ -167,13 +165,13 @@ public class CollectionRetainAllTester<E> extends AbstractCollectionTester<E> { // retainAll(superset) - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) public void testRetainAll_superset() { expectReturnsFalse(superset); expectUnchanged(); } - @CollectionFeature.Require(absent = SUPPORTS_REMOVE) + @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL) public void testRetainAll_supersetUnsupported() { expectReturnsFalseOrThrows(superset); expectUnchanged(); @@ -181,14 +179,14 @@ public class CollectionRetainAllTester<E> extends AbstractCollectionTester<E> { // retainAll(subset) - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) @CollectionSize.Require(absent = {ZERO, ONE}) public void testRetainAll_subset() { expectReturnsTrue(nonEmptyProperSubset); expectContents(nonEmptyProperSubset.toRetain); } - @CollectionFeature.Require(absent = SUPPORTS_REMOVE) + @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL) @CollectionSize.Require(absent = {ZERO, ONE}) public void testRetainAll_subsetUnsupported() { expectThrows(nonEmptyProperSubset); @@ -197,13 +195,13 @@ public class CollectionRetainAllTester<E> extends AbstractCollectionTester<E> { // retainAll(sameElements) - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) public void testRetainAll_sameElements() { expectReturnsFalse(sameElements); expectUnchanged(); } - @CollectionFeature.Require(absent = SUPPORTS_REMOVE) + @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL) public void testRetainAll_sameElementsUnsupported() { expectReturnsFalseOrThrows(sameElements); expectUnchanged(); @@ -211,14 +209,14 @@ public class CollectionRetainAllTester<E> extends AbstractCollectionTester<E> { // retainAll(partialOverlap) - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) @CollectionSize.Require(absent = {ZERO, ONE}) public void testRetainAll_partialOverlap() { expectReturnsTrue(partialOverlap); expectContents(samples.e2); } - @CollectionFeature.Require(absent = SUPPORTS_REMOVE) + @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL) @CollectionSize.Require(absent = {ZERO, ONE}) public void testRetainAll_partialOverlapUnsupported() { expectThrows(partialOverlap); @@ -227,14 +225,14 @@ public class CollectionRetainAllTester<E> extends AbstractCollectionTester<E> { // retainAll(containsDuplicates) - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) @CollectionSize.Require(ONE) public void testRetainAll_containsDuplicatesSizeOne() { expectReturnsFalse(containsDuplicates); expectContents(samples.e0); } - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) @CollectionSize.Require(absent = {ZERO, ONE}) public void testRetainAll_containsDuplicatesSizeSeveral() { expectReturnsTrue(containsDuplicates); @@ -243,21 +241,21 @@ public class CollectionRetainAllTester<E> extends AbstractCollectionTester<E> { // retainAll(nullSingleton) - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) @CollectionSize.Require(ZERO) public void testRetainAll_nullSingletonPreviouslyEmpty() { expectReturnsFalse(nullSingleton); expectUnchanged(); } - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) @CollectionSize.Require(absent = ZERO) public void testRetainAll_nullSingletonPreviouslyNonEmpty() { expectReturnsTrue(nullSingleton); expectContents(); } - @CollectionFeature.Require({SUPPORTS_REMOVE, ALLOWS_NULL_VALUES}) + @CollectionFeature.Require({SUPPORTS_RETAIN_ALL, ALLOWS_NULL_VALUES}) @CollectionSize.Require(ONE) public void testRetainAll_nullSingletonPreviouslySingletonWithNull() { initCollectionWithNullElement(); @@ -265,7 +263,7 @@ public class CollectionRetainAllTester<E> extends AbstractCollectionTester<E> { expectContents(createArrayWithNullElement()); } - @CollectionFeature.Require({SUPPORTS_REMOVE, ALLOWS_NULL_VALUES}) + @CollectionFeature.Require({SUPPORTS_RETAIN_ALL, ALLOWS_NULL_VALUES}) @CollectionSize.Require(absent = {ZERO, ONE}) public void testRetainAll_nullSingletonPreviouslySeveralWithNull() { initCollectionWithNullElement(); @@ -275,7 +273,7 @@ public class CollectionRetainAllTester<E> extends AbstractCollectionTester<E> { // nullSingleton.retainAll() - @CollectionFeature.Require({SUPPORTS_REMOVE, ALLOWS_NULL_VALUES}) + @CollectionFeature.Require({SUPPORTS_RETAIN_ALL, ALLOWS_NULL_VALUES}) @CollectionSize.Require(absent = ZERO) public void testRetainAll_containsNonNullWithNull() { initCollectionWithNullElement(); @@ -292,7 +290,7 @@ public class CollectionRetainAllTester<E> extends AbstractCollectionTester<E> { * suppress only the former. */ - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) @CollectionSize.Require(ZERO) public void testRetainAll_nullCollectionReferenceEmptySubject() { try { @@ -302,7 +300,7 @@ public class CollectionRetainAllTester<E> extends AbstractCollectionTester<E> { } } - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) @CollectionSize.Require(absent = ZERO) public void testRetainAll_nullCollectionReferenceNonEmptySubject() { try { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionSerializationEqualTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionSerializationEqualTester.java deleted file mode 100644 index 1fbfe26..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionSerializationEqualTester.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.testers; - -import static com.google.common.collect.testing.features.CollectionFeature.SERIALIZABLE; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.testing.AbstractCollectionTester; -import com.google.common.collect.testing.features.CollectionFeature; -import com.google.common.testing.SerializableTester; - -/** - * Basic reserialization test for collection types that must preserve {@code equals()} behavior - * when reserialized. (Sets and Lists, but not bare Collections.) - * - * @author Louis Wasserman - */ -@GwtCompatible -public class CollectionSerializationEqualTester<E> extends AbstractCollectionTester<E> { - @CollectionFeature.Require(SERIALIZABLE) - public void testReserialize() { - assertEquals( - actualContents(), - SerializableTester.reserialize(actualContents())); - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionSerializationTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionSerializationTester.java deleted file mode 100644 index bc4470e..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionSerializationTester.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.testers; - -import static com.google.common.collect.testing.features.CollectionFeature.SERIALIZABLE; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.testing.AbstractCollectionTester; -import com.google.common.collect.testing.Helpers; -import com.google.common.collect.testing.features.CollectionFeature; -import com.google.common.testing.SerializableTester; - -/** - * Basic reserialization test for collections. - * - * @author Louis Wasserman - */ -@GwtCompatible -public class CollectionSerializationTester<E> extends AbstractCollectionTester<E> { - @CollectionFeature.Require(SERIALIZABLE) - public void testReserialize() { - // For a bare Collection, the most we can guarantee is that the elements are preserved. - Helpers.assertEqualIgnoringOrder( - actualContents(), - SerializableTester.reserialize(actualContents())); - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionSizeTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionSizeTester.java index 0c9693d..f7fa87b 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionSizeTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionSizeTester.java @@ -16,7 +16,6 @@ package com.google.common.collect.testing.testers; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.AbstractCollectionTester; /** @@ -28,7 +27,6 @@ import com.google.common.collect.testing.AbstractCollectionTester; * * @author Kevin Bourrillion */ -@GwtCompatible public class CollectionSizeTester<E> extends AbstractCollectionTester<E> { public void testSize() { assertEquals("size():", getNumElements(), collection.size()); diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionToArrayTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionToArrayTester.java index d7de38b..3d65969 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionToArrayTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionToArrayTester.java @@ -19,8 +19,6 @@ package com.google.common.collect.testing.testers; import static com.google.common.collect.testing.features.CollectionFeature.KNOWN_ORDER; import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import com.google.common.annotations.GwtCompatible; -import com.google.common.annotations.GwtIncompatible; import com.google.common.collect.testing.AbstractCollectionTester; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.WrongType; @@ -42,7 +40,6 @@ import java.util.List; * @author Kevin Bourrillion * @author Chris Povirk */ -@GwtCompatible(emulated = true) public class CollectionToArrayTester<E> extends AbstractCollectionTester<E> { public void testToArray_noArgs() { Object[] array = collection.toArray(); @@ -195,8 +192,7 @@ public class CollectionToArrayTester<E> extends AbstractCollectionTester<E> { * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6260652">Sun bug * 6260652</a> is fixed. */ - @GwtIncompatible("reflection") public static Method getToArrayIsPlainObjectArrayMethod() { - return Helpers.getMethod(CollectionToArrayTester.class, "testToArray_isPlainObjectArray"); + return Platform.getMethod(CollectionToArrayTester.class, "testToArray_isPlainObjectArray"); } } diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionToStringTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionToStringTester.java index 4d93fa9..120a112 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionToStringTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionToStringTester.java @@ -22,7 +22,6 @@ import static com.google.common.collect.testing.features.CollectionSize.ONE; import static com.google.common.collect.testing.features.CollectionSize.SEVERAL; import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.AbstractCollectionTester; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; @@ -37,7 +36,6 @@ import com.google.common.collect.testing.features.CollectionSize; * * @author Kevin Bourrillion */ -@GwtCompatible public class CollectionToStringTester<E> extends AbstractCollectionTester<E> { public void testToString_minimal() { assertNotNull("toString() should not return null", diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAllAtIndexTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAllAtIndexTester.java index 1844106..be64b0d 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAllAtIndexTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAllAtIndexTester.java @@ -19,10 +19,10 @@ package com.google.common.collect.testing.testers; import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES; import static com.google.common.collect.testing.features.CollectionSize.ONE; import static com.google.common.collect.testing.features.CollectionSize.ZERO; +import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_ADD_ALL_WITH_INDEX; import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_ADD_WITH_INDEX; import static java.util.Collections.singletonList; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.MinimalCollection; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -40,9 +40,8 @@ import java.util.List; * @author Chris Povirk */ @SuppressWarnings("unchecked") // too many "unchecked generic array creations" -@GwtCompatible public class ListAddAllAtIndexTester<E> extends AbstractListTester<E> { - @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX) + @ListFeature.Require(SUPPORTS_ADD_ALL_WITH_INDEX) @CollectionSize.Require(absent = ZERO) public void testAddAllAtIndex_supportedAllPresent() { assertTrue("addAll(n, allPresent) should return true", @@ -50,7 +49,7 @@ public class ListAddAllAtIndexTester<E> extends AbstractListTester<E> { expectAdded(0, samples.e0); } - @ListFeature.Require(absent = SUPPORTS_ADD_WITH_INDEX) + @ListFeature.Require(absent = SUPPORTS_ADD_ALL_WITH_INDEX) @CollectionSize.Require(absent = ZERO) public void testAddAllAtIndex_unsupportedAllPresent() { try { @@ -61,7 +60,7 @@ public class ListAddAllAtIndexTester<E> extends AbstractListTester<E> { expectUnchanged(); } - @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX) + @ListFeature.Require(SUPPORTS_ADD_ALL_WITH_INDEX) @CollectionSize.Require(absent = ZERO) public void testAddAllAtIndex_supportedSomePresent() { assertTrue("addAll(n, allPresent) should return true", @@ -69,7 +68,7 @@ public class ListAddAllAtIndexTester<E> extends AbstractListTester<E> { expectAdded(0, samples.e0, samples.e3); } - @ListFeature.Require(absent = SUPPORTS_ADD_WITH_INDEX) + @ListFeature.Require(absent = SUPPORTS_ADD_ALL_WITH_INDEX) @CollectionSize.Require(absent = ZERO) public void testAddAllAtIndex_unsupportedSomePresent() { try { @@ -81,14 +80,14 @@ public class ListAddAllAtIndexTester<E> extends AbstractListTester<E> { expectMissing(samples.e3); } - @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX) + @ListFeature.Require(SUPPORTS_ADD_ALL_WITH_INDEX) public void testAddAllAtIndex_supportedNothing() { assertFalse("addAll(n, nothing) should return false", getList().addAll(0, emptyCollection())); expectUnchanged(); } - @ListFeature.Require(absent = SUPPORTS_ADD_WITH_INDEX) + @ListFeature.Require(absent = SUPPORTS_ADD_ALL_WITH_INDEX) public void testAddAllAtIndex_unsupportedNothing() { try { assertFalse("addAll(n, nothing) should return false or throw", @@ -98,7 +97,7 @@ public class ListAddAllAtIndexTester<E> extends AbstractListTester<E> { expectUnchanged(); } - @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX) + @ListFeature.Require(SUPPORTS_ADD_ALL_WITH_INDEX) public void testAddAllAtIndex_withDuplicates() { MinimalCollection<E> elementsToAdd = MinimalCollection.of(samples.e0, samples.e1, samples.e0, samples.e1); @@ -107,7 +106,7 @@ public class ListAddAllAtIndexTester<E> extends AbstractListTester<E> { expectAdded(0, samples.e0, samples.e1, samples.e0, samples.e1); } - @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX) + @ListFeature.Require(SUPPORTS_ADD_ALL_WITH_INDEX) @CollectionFeature.Require(ALLOWS_NULL_VALUES) public void testAddAllAtIndex_nullSupported() { List<E> containsNull = singletonList(null); @@ -120,7 +119,7 @@ public class ListAddAllAtIndexTester<E> extends AbstractListTester<E> { expectAdded(0, (E) null); } - @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX) + @ListFeature.Require(SUPPORTS_ADD_ALL_WITH_INDEX) @CollectionFeature.Require(absent = ALLOWS_NULL_VALUES) public void testAddAllAtIndex_nullUnsupported() { List<E> containsNull = singletonList(null); @@ -134,7 +133,7 @@ public class ListAddAllAtIndexTester<E> extends AbstractListTester<E> { "Should not contain null after unsupported addAll(n, containsNull)"); } - @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX) + @ListFeature.Require(SUPPORTS_ADD_ALL_WITH_INDEX) @CollectionSize.Require(absent = {ZERO, ONE}) public void testAddAllAtIndex_middle() { assertTrue("addAll(middle, disjoint) should return true", @@ -142,7 +141,7 @@ public class ListAddAllAtIndexTester<E> extends AbstractListTester<E> { expectAdded(getNumElements() / 2, createDisjointCollection()); } - @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX) + @ListFeature.Require(SUPPORTS_ADD_ALL_WITH_INDEX) @CollectionSize.Require(absent = ZERO) public void testAddAllAtIndex_end() { assertTrue("addAll(end, disjoint) should return true", @@ -150,7 +149,7 @@ public class ListAddAllAtIndexTester<E> extends AbstractListTester<E> { expectAdded(getNumElements(), createDisjointCollection()); } - @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX) + @ListFeature.Require(SUPPORTS_ADD_ALL_WITH_INDEX) public void testAddAllAtIndex_nullCollectionReference() { try { getList().addAll(0, null); diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAllTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAllTester.java index f76d5db..3e9cb49 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAllTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAllTester.java @@ -16,10 +16,9 @@ package com.google.common.collect.testing.testers; -import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD; +import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD_ALL; import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.MinimalCollection; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -34,9 +33,8 @@ import com.google.common.collect.testing.features.CollectionSize; * @author Chris Povirk */ @SuppressWarnings("unchecked") // too many "unchecked generic array creations" -@GwtCompatible public class ListAddAllTester<E> extends AbstractListTester<E> { - @CollectionFeature.Require(SUPPORTS_ADD) + @CollectionFeature.Require(SUPPORTS_ADD_ALL) @CollectionSize.Require(absent = ZERO) public void testAddAll_supportedAllPresent() { assertTrue("addAll(allPresent) should return true", @@ -44,7 +42,7 @@ public class ListAddAllTester<E> extends AbstractListTester<E> { expectAdded(samples.e0); } - @CollectionFeature.Require(absent = SUPPORTS_ADD) + @CollectionFeature.Require(absent = SUPPORTS_ADD_ALL) @CollectionSize.Require(absent = ZERO) public void testAddAll_unsupportedAllPresent() { try { @@ -55,7 +53,7 @@ public class ListAddAllTester<E> extends AbstractListTester<E> { expectUnchanged(); } - @CollectionFeature.Require(SUPPORTS_ADD) + @CollectionFeature.Require(SUPPORTS_ADD_ALL) public void testAddAll_withDuplicates() { MinimalCollection<E> elementsToAdd = MinimalCollection.of(samples.e0, samples.e1, samples.e0, samples.e1); diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAtIndexTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAtIndexTester.java index ab92dd9..9721393 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAtIndexTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAtIndexTester.java @@ -17,21 +17,15 @@ package com.google.common.collect.testing.testers; import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES; -import static com.google.common.collect.testing.features.CollectionFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION; import static com.google.common.collect.testing.features.CollectionSize.ONE; import static com.google.common.collect.testing.features.CollectionSize.ZERO; import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_ADD_WITH_INDEX; -import com.google.common.annotations.GwtCompatible; -import com.google.common.annotations.GwtIncompatible; -import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; import com.google.common.collect.testing.features.ListFeature; import java.lang.reflect.Method; -import java.util.ConcurrentModificationException; -import java.util.Iterator; /** * A generic JUnit test which tests {@code add(int, Object)} operations on a @@ -43,7 +37,6 @@ import java.util.Iterator; * @author Chris Povirk */ @SuppressWarnings("unchecked") // too many "unchecked generic array creations" -@GwtCompatible(emulated = true) public class ListAddAtIndexTester<E> extends AbstractListTester<E> { @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX) @CollectionSize.Require(absent = ZERO) @@ -73,19 +66,6 @@ public class ListAddAtIndexTester<E> extends AbstractListTester<E> { expectAdded(0, samples.e3); } - @CollectionFeature.Require(FAILS_FAST_ON_CONCURRENT_MODIFICATION) - @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX) - public void testAddAtIndexConcurrentWithIteration() { - try { - Iterator<E> iterator = collection.iterator(); - getList().add(0, samples.e3); - iterator.next(); - fail("Expected ConcurrentModificationException"); - } catch (ConcurrentModificationException expected) { - // success - } - } - @ListFeature.Require(absent = SUPPORTS_ADD_WITH_INDEX) public void testAddAtIndex_unsupportedNotPresent() { try { @@ -158,9 +138,8 @@ public class ListAddAtIndexTester<E> extends AbstractListTester<E> { * {@link #testAddAtIndex_nullSupported()} so that tests can suppress it. See * {@link CollectionAddTester#getAddNullSupportedMethod()} for details. */ - @GwtIncompatible("reflection") public static Method getAddNullSupportedMethod() { - return Helpers.getMethod( + return Platform.getMethod( ListAddAtIndexTester.class, "testAddAtIndex_nullSupported"); } } diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListAddTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListAddTester.java index d974761..0fc8dd0 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ListAddTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListAddTester.java @@ -20,8 +20,6 @@ import static com.google.common.collect.testing.features.CollectionFeature.ALLOW import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD; import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import com.google.common.annotations.GwtCompatible; -import com.google.common.annotations.GwtIncompatible; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -39,7 +37,6 @@ import java.util.List; * @author Chris Povirk */ @SuppressWarnings("unchecked") // too many "unchecked generic array creations" -@GwtCompatible(emulated = true) public class ListAddTester<E> extends AbstractListTester<E> { @CollectionFeature.Require(SUPPORTS_ADD) @CollectionSize.Require(absent = ZERO) @@ -79,8 +76,7 @@ public class ListAddTester<E> extends AbstractListTester<E> { * {@link #testAdd_supportedNullPresent()} so that tests can suppress it. See * {@link CollectionAddTester#getAddNullSupportedMethod()} for details. */ - @GwtIncompatible("reflection") public static Method getAddSupportedNullPresentMethod() { - return Helpers.getMethod(ListAddTester.class, "testAdd_supportedNullPresent"); + return Platform.getMethod(ListAddTester.class, "testAdd_supportedNullPresent"); } } diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListCreationTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListCreationTester.java index 257ffab..601eea4 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ListCreationTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListCreationTester.java @@ -20,7 +20,6 @@ import static com.google.common.collect.testing.features.CollectionFeature.REJEC import static com.google.common.collect.testing.features.CollectionSize.ONE; import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -33,7 +32,6 @@ import com.google.common.collect.testing.features.CollectionSize; * * @author Chris Povirk */ -@GwtCompatible public class ListCreationTester<E> extends AbstractListTester<E> { @CollectionFeature.Require(absent = REJECTS_DUPLICATES_AT_CREATION) @CollectionSize.Require(absent = {ZERO, ONE}) diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListEqualsTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListEqualsTester.java index c1adc6a..9e7e13e 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ListEqualsTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListEqualsTester.java @@ -18,7 +18,6 @@ package com.google.common.collect.testing.testers; import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.MinimalSet; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -34,12 +33,11 @@ import java.util.List; * * @author George van den Driessche */ -@GwtCompatible public class ListEqualsTester<E> extends AbstractListTester<E> { public void testEquals_otherListWithSameElements() { assertTrue( "A List should equal any other List containing the same elements.", - getList().equals(new ArrayList<E>(getOrderedElements()))); + getList().equals(new ArrayList<E>(getSampleElements()))); } @CollectionSize.Require(absent = CollectionSize.ZERO) diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListGetTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListGetTester.java index eed4112..340e0cb 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ListGetTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListGetTester.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing.testers; -import com.google.common.annotations.GwtCompatible; - /** * A generic JUnit test which tests {@code get()} operations on a list. Can't be * invoked directly; please see @@ -27,11 +25,10 @@ import com.google.common.annotations.GwtCompatible; * * @author Chris Povirk */ -@GwtCompatible public class ListGetTester<E> extends AbstractListTester<E> { public void testGet_valid() { // This calls get() on each index and checks the result: - expectContents(createOrderedArray()); + expectContents(createSamplesArray()); } public void testGet_negative() { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListHashCodeTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListHashCodeTester.java index 30ed6c2..f7f3291 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ListHashCodeTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListHashCodeTester.java @@ -16,10 +16,6 @@ package com.google.common.collect.testing.testers; -import com.google.common.annotations.GwtCompatible; -import com.google.common.annotations.GwtIncompatible; -import com.google.common.collect.testing.Helpers; - import java.lang.reflect.Method; /** @@ -29,11 +25,10 @@ import java.lang.reflect.Method; * * @author George van den Driessche */ -@GwtCompatible(emulated = true) public class ListHashCodeTester<E> extends AbstractListTester<E> { public void testHashCode() { int expectedHashCode = 1; - for (E element : getOrderedElements()) { + for (E element : getSampleElements()) { expectedHashCode = 31 * expectedHashCode + ((element == null) ? 0 : element.hashCode()); } @@ -47,8 +42,7 @@ public class ListHashCodeTester<E> extends AbstractListTester<E> { * list tests on unhashable objects can suppress it with * {@code FeatureSpecificTestSuiteBuilder.suppressing()}. */ - @GwtIncompatible("reflection") public static Method getHashCodeMethod() { - return Helpers.getMethod(ListHashCodeTester.class, "testHashCode"); + return Platform.getMethod(ListHashCodeTester.class, "testHashCode"); } } diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListIndexOfTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListIndexOfTester.java index 5da84e8..4c96c19 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ListIndexOfTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListIndexOfTester.java @@ -20,7 +20,6 @@ import static com.google.common.collect.testing.features.CollectionFeature.REJEC import static com.google.common.collect.testing.features.CollectionSize.ONE; import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -33,7 +32,6 @@ import com.google.common.collect.testing.features.CollectionSize; * * @author Chris Povirk */ -@GwtCompatible public class ListIndexOfTester<E> extends AbstractListIndexOfTester<E> { @Override protected int find(Object o) { return getList().indexOf(o); diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListLastIndexOfTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListLastIndexOfTester.java index 041a22d..a3f9812 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ListLastIndexOfTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListLastIndexOfTester.java @@ -20,7 +20,6 @@ import static com.google.common.collect.testing.features.CollectionFeature.REJEC import static com.google.common.collect.testing.features.CollectionSize.ONE; import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -33,7 +32,6 @@ import com.google.common.collect.testing.features.CollectionSize; * * @author Chris Povirk */ -@GwtCompatible public class ListLastIndexOfTester<E> extends AbstractListIndexOfTester<E> { @Override protected int find(Object o) { return getList().lastIndexOf(o); diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListListIteratorTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListListIteratorTester.java index 438634b..c8c8d6f 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ListListIteratorTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListListIteratorTester.java @@ -24,8 +24,6 @@ import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_SE import static com.google.common.collect.testing.testers.Platform.listListIteratorTesterNumIterations; import static java.util.Collections.singleton; -import com.google.common.annotations.GwtCompatible; -import com.google.common.annotations.GwtIncompatible; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.IteratorFeature; import com.google.common.collect.testing.ListIteratorTester; @@ -48,7 +46,6 @@ import java.util.concurrent.CopyOnWriteArraySet; * @author Chris Povirk * @author Kevin Bourrillion */ -@GwtCompatible(emulated = true) public class ListListIteratorTester<E> extends AbstractListTester<E> { // TODO: switch to DerivedIteratorTestSuiteBuilder @@ -71,7 +68,7 @@ public class ListListIteratorTester<E> extends AbstractListTester<E> { private void runListIteratorTest(Set<IteratorFeature> features) { new ListIteratorTester<E>( listListIteratorTesterNumIterations(), singleton(samples.e4), features, - Helpers.copyToList(getOrderedElements()), 0) { + Helpers.copyToList(getSampleElements()), 0) { { // TODO: don't set this universally stopTestingWhenAddThrowsException(); @@ -117,9 +114,8 @@ public class ListListIteratorTester<E> extends AbstractListTester<E> { * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6570575">Sun bug * 6570575</a> is fixed. */ - @GwtIncompatible("reflection") public static Method getListIteratorFullyModifiableMethod() { - return Helpers.getMethod( + return Platform.getMethod( ListListIteratorTester.class, "testListIterator_fullyModifiable"); } @@ -128,9 +124,8 @@ public class ListListIteratorTester<E> extends AbstractListTester<E> { * {@link #testListIterator_unmodifiable()} so that it can be suppressed in * GWT tests. */ - @GwtIncompatible("reflection") public static Method getListIteratorUnmodifiableMethod() { - return Helpers.getMethod( + return Platform.getMethod( ListListIteratorTester.class, "testListIterator_unmodifiable"); } } diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListRemoveAllTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListRemoveAllTester.java index 8eb83ec..faeec46 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ListRemoveAllTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListRemoveAllTester.java @@ -16,11 +16,10 @@ package com.google.common.collect.testing.testers; -import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE; +import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE_ALL; import static com.google.common.collect.testing.features.CollectionSize.ONE; import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.MinimalCollection; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -35,9 +34,8 @@ import com.google.common.collect.testing.features.CollectionSize; * @author George van den Driessche */ @SuppressWarnings("unchecked") // too many "unchecked generic array creations" -@GwtCompatible public class ListRemoveAllTester<E> extends AbstractListTester<E> { - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_REMOVE_ALL) @CollectionSize.Require(absent = {ZERO, ONE}) public void testRemoveAll_duplicate() { ArrayWithDuplicate<E> arrayAndDuplicate = createArrayWithDuplicateElement(); diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListRemoveAtIndexTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListRemoveAtIndexTester.java index 47c1e95..cb37c67 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ListRemoveAtIndexTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListRemoveAtIndexTester.java @@ -16,19 +16,14 @@ package com.google.common.collect.testing.testers; -import static com.google.common.collect.testing.features.CollectionFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION; import static com.google.common.collect.testing.features.CollectionSize.ONE; import static com.google.common.collect.testing.features.CollectionSize.ZERO; import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_REMOVE_WITH_INDEX; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.Helpers; -import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; import com.google.common.collect.testing.features.ListFeature; -import java.util.ConcurrentModificationException; -import java.util.Iterator; import java.util.List; /** @@ -40,7 +35,6 @@ import java.util.List; * * @author Chris Povirk */ -@GwtCompatible public class ListRemoveAtIndexTester<E> extends AbstractListTester<E> { @ListFeature.Require(absent = SUPPORTS_REMOVE_WITH_INDEX) @CollectionSize.Require(absent = ZERO) @@ -85,20 +79,6 @@ public class ListRemoveAtIndexTester<E> extends AbstractListTester<E> { runRemoveTest(getNumElements() / 2); } - @CollectionFeature.Require(FAILS_FAST_ON_CONCURRENT_MODIFICATION) - @ListFeature.Require(SUPPORTS_REMOVE_WITH_INDEX) - @CollectionSize.Require(absent = ZERO) - public void testRemoveAtIndexConcurrentWithIteration() { - try { - Iterator<E> iterator = collection.iterator(); - getList().remove(getNumElements() / 2); - iterator.next(); - fail("Expected ConcurrentModificationException"); - } catch (ConcurrentModificationException expected) { - // success - } - } - @ListFeature.Require(SUPPORTS_REMOVE_WITH_INDEX) @CollectionSize.Require(absent = ZERO) public void testRemoveAtIndex_last() { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListRemoveTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListRemoveTester.java index e338ca0..0094928 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ListRemoveTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListRemoveTester.java @@ -20,7 +20,6 @@ import static com.google.common.collect.testing.features.CollectionFeature.SUPPO import static com.google.common.collect.testing.features.CollectionSize.ONE; import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -33,7 +32,6 @@ import com.google.common.collect.testing.features.CollectionSize; * * @author George van den Driessche */ -@GwtCompatible public class ListRemoveTester<E> extends AbstractListTester<E> { @CollectionFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(absent = {ZERO, ONE}) diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListRetainAllTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListRetainAllTester.java index 872e096..2ede664 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ListRetainAllTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListRetainAllTester.java @@ -16,12 +16,11 @@ package com.google.common.collect.testing.testers; -import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE; +import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_RETAIN_ALL; import static com.google.common.collect.testing.features.CollectionSize.ONE; import static com.google.common.collect.testing.features.CollectionSize.SEVERAL; import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.MinimalCollection; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -35,9 +34,8 @@ import com.google.common.collect.testing.features.CollectionSize; * * @author Chris Povirk */ -@GwtCompatible public class ListRetainAllTester<E> extends AbstractListTester<E> { - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) @CollectionSize.Require(absent = {ZERO, ONE}) public void testRetainAll_duplicatesKept() { E[] array = createSamplesArray(); @@ -49,7 +47,7 @@ public class ListRetainAllTester<E> extends AbstractListTester<E> { } @SuppressWarnings("unchecked") - @CollectionFeature.Require(SUPPORTS_REMOVE) + @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) @CollectionSize.Require(SEVERAL) public void testRetainAll_duplicatesRemoved() { E[] array = createSamplesArray(); diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListSetTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListSetTester.java index df3b8ad..2b3b7b0 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ListSetTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListSetTester.java @@ -20,9 +20,6 @@ import static com.google.common.collect.testing.features.CollectionFeature.ALLOW import static com.google.common.collect.testing.features.CollectionSize.ZERO; import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_SET; -import com.google.common.annotations.GwtCompatible; -import com.google.common.annotations.GwtIncompatible; -import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; import com.google.common.collect.testing.features.ListFeature; @@ -38,7 +35,6 @@ import java.lang.reflect.Method; * * @author George van den Driessche */ -@GwtCompatible(emulated = true) public class ListSetTester<E> extends AbstractListTester<E> { @ListFeature.Require(SUPPORTS_SET) @CollectionSize.Require(absent = ZERO) @@ -149,8 +145,7 @@ public class ListSetTester<E> extends AbstractListTester<E> { * seems more likely that code would depend on that behavior than on the * other. Thus, we say the bug is in set(), which fails to support null. */ - @GwtIncompatible("reflection") public static Method getSetNullSupportedMethod() { - return Helpers.getMethod(ListSetTester.class, "testSet_null"); + return Platform.getMethod(ListSetTester.class, "testSet_null"); } } diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListSubListTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListSubListTester.java index e01dce5..7ba68ba 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ListSubListTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListSubListTester.java @@ -16,8 +16,6 @@ package com.google.common.collect.testing.testers; -import static com.google.common.collect.testing.Helpers.getMethod; -import static com.google.common.collect.testing.features.CollectionFeature.SERIALIZABLE_INCLUDING_VIEWS; import static com.google.common.collect.testing.features.CollectionSize.ONE; import static com.google.common.collect.testing.features.CollectionSize.ZERO; import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_ADD_WITH_INDEX; @@ -25,13 +23,9 @@ import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_RE import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_SET; import static java.util.Collections.emptyList; -import com.google.common.annotations.GwtCompatible; -import com.google.common.annotations.GwtIncompatible; import com.google.common.collect.testing.Helpers; -import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; import com.google.common.collect.testing.features.ListFeature; -import com.google.common.testing.SerializableTester; import java.lang.reflect.Method; import java.util.Arrays; @@ -49,7 +43,6 @@ import java.util.concurrent.CopyOnWriteArrayList; * @author Chris Povirk */ @SuppressWarnings("unchecked") // too many "unchecked generic array creations" -@GwtCompatible(emulated = true) public class ListSubListTester<E> extends AbstractListTester<E> { public void testSubList_startNegative() { try { @@ -178,7 +171,7 @@ public class ListSubListTester<E> extends AbstractListTester<E> { List<E> subList = getList().subList(0, 2).subList(1, 2); assertEquals("subList(0, 2).subList(1, 2) " + "should be a single-element list of the element at index 1", - Collections.singletonList(getOrderedElements().get(1)), subList); + Collections.singletonList(samples.e1), subList); } @CollectionSize.Require(absent = {ZERO}) @@ -305,22 +298,6 @@ public class ListSubListTester<E> extends AbstractListTester<E> { -1); } - @CollectionFeature.Require(SERIALIZABLE_INCLUDING_VIEWS) - public void testReserializeWholeSubList() { - SerializableTester.reserializeAndAssert(getList().subList(0, getNumElements())); - } - - @CollectionFeature.Require(SERIALIZABLE_INCLUDING_VIEWS) - public void testReserializeEmptySubList() { - SerializableTester.reserializeAndAssert(getList().subList(0, 0)); - } - - @CollectionFeature.Require(SERIALIZABLE_INCLUDING_VIEWS) - @CollectionSize.Require(absent = {ZERO, ONE}) - public void testReserializeSubList() { - SerializableTester.reserializeAndAssert(getList().subList(0, 2)); - } - /** * Returns the {@link Method} instance for * {@link #testSubList_originalListSetAffectsSubList()} so that tests @@ -329,9 +306,9 @@ public class ListSubListTester<E> extends AbstractListTester<E> { * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6570631">Sun bug * 6570631</a> is fixed. */ - @GwtIncompatible("reflection") public static Method getSubListOriginalListSetAffectsSubListMethod() { - return getMethod(ListSubListTester.class, "testSubList_originalListSetAffectsSubList"); + return Platform + .getMethod(ListSubListTester.class, "testSubList_originalListSetAffectsSubList"); } /** @@ -342,9 +319,10 @@ public class ListSubListTester<E> extends AbstractListTester<E> { * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6570631">Sun bug * 6570631</a> is fixed. */ - @GwtIncompatible("reflection") - public static Method getSubListOriginalListSetAffectsSubListLargeListMethod() { - return getMethod(ListSubListTester.class, "testSubList_originalListSetAffectsSubListLargeList"); + public static Method + getSubListOriginalListSetAffectsSubListLargeListMethod() { + return Platform + .getMethod(ListSubListTester.class, "testSubList_originalListSetAffectsSubListLargeList"); } /** @@ -355,9 +333,9 @@ public class ListSubListTester<E> extends AbstractListTester<E> { * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6570575">Sun bug * 6570575</a> is fixed. */ - @GwtIncompatible("reflection") public static Method getSubListSubListRemoveAffectsOriginalLargeListMethod() { - return getMethod(ListSubListTester.class, "testSubList_subListRemoveAffectsOriginalLargeList"); + return Platform.getMethod( + ListSubListTester.class, "testSubList_subListRemoveAffectsOriginalLargeList"); } /* diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListToArrayTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListToArrayTester.java index ca11aba..f990ffb 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ListToArrayTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListToArrayTester.java @@ -18,7 +18,6 @@ package com.google.common.collect.testing.testers; import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.features.CollectionSize; import java.util.Arrays; @@ -32,27 +31,26 @@ import java.util.Arrays; * * @author Chris Povirk */ -@GwtCompatible public class ListToArrayTester<E> extends AbstractListTester<E> { // CollectionToArrayTester tests everything except ordering. public void testToArray_noArg() { Object[] actual = getList().toArray(); assertArrayEquals("toArray() order should match list", - createOrderedArray(), actual); + createSamplesArray(), actual); } @CollectionSize.Require(absent = ZERO) public void testToArray_tooSmall() { Object[] actual = getList().toArray(new Object[0]); assertArrayEquals("toArray(tooSmall) order should match list", - createOrderedArray(), actual); + createSamplesArray(), actual); } public void testToArray_largeEnough() { Object[] actual = getList().toArray(new Object[getNumElements()]); assertArrayEquals("toArray(largeEnough) order should match list", - createOrderedArray(), actual); + createSamplesArray(), actual); } private static void assertArrayEquals(String message, Object[] expected, diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapClearTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapClearTester.java index 2f341ff..302df11 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/MapClearTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapClearTester.java @@ -16,20 +16,13 @@ package com.google.common.collect.testing.testers; -import static com.google.common.collect.testing.features.CollectionSize.SEVERAL; import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import static com.google.common.collect.testing.features.MapFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION; -import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_REMOVE; +import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_CLEAR; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.AbstractMapTester; import com.google.common.collect.testing.features.CollectionSize; import com.google.common.collect.testing.features.MapFeature; -import java.util.ConcurrentModificationException; -import java.util.Iterator; -import java.util.Map.Entry; - /** * A generic JUnit test which tests {@code clear()} operations on a map. * Can't be invoked directly; please see @@ -40,58 +33,15 @@ import java.util.Map.Entry; * @author George van den Driessche * @author Chris Povirk */ -@GwtCompatible public class MapClearTester<K, V> extends AbstractMapTester<K, V> { - @MapFeature.Require(SUPPORTS_REMOVE) + @MapFeature.Require(SUPPORTS_CLEAR) public void testClear() { getMap().clear(); assertTrue("After clear(), a map should be empty.", getMap().isEmpty()); } - @MapFeature.Require({FAILS_FAST_ON_CONCURRENT_MODIFICATION, - SUPPORTS_REMOVE}) - @CollectionSize.Require(SEVERAL) - public void testClearConcurrentWithEntrySetIteration() { - try { - Iterator<Entry<K, V>> iterator = getMap().entrySet().iterator(); - getMap().clear(); - iterator.next(); - fail("Expected ConcurrentModificationException"); - } catch (ConcurrentModificationException expected) { - // success - } - } - - @MapFeature.Require({FAILS_FAST_ON_CONCURRENT_MODIFICATION, - SUPPORTS_REMOVE}) - @CollectionSize.Require(SEVERAL) - public void testClearConcurrentWithKeySetIteration() { - try { - Iterator<K> iterator = getMap().keySet().iterator(); - getMap().clear(); - iterator.next(); - fail("Expected ConcurrentModificationException"); - } catch (ConcurrentModificationException expected) { - // success - } - } - - @MapFeature.Require({FAILS_FAST_ON_CONCURRENT_MODIFICATION, - SUPPORTS_REMOVE}) - @CollectionSize.Require(SEVERAL) - public void testClearConcurrentWithValuesIteration() { - try { - Iterator<V> iterator = getMap().values().iterator(); - getMap().clear(); - iterator.next(); - fail("Expected ConcurrentModificationException"); - } catch (ConcurrentModificationException expected) { - // success - } - } - - @MapFeature.Require(absent = SUPPORTS_REMOVE) + @MapFeature.Require(absent = SUPPORTS_CLEAR) @CollectionSize.Require(absent = ZERO) public void testClear_unsupported() { try { @@ -103,7 +53,7 @@ public class MapClearTester<K, V> extends AbstractMapTester<K, V> { expectUnchanged(); } - @MapFeature.Require(absent = SUPPORTS_REMOVE) + @MapFeature.Require(absent = SUPPORTS_CLEAR) @CollectionSize.Require(ZERO) public void testClear_unsupportedByEmptyCollection() { try { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapContainsKeyTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapContainsKeyTester.java index 7a69636..cbfeaf4 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/MapContainsKeyTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapContainsKeyTester.java @@ -20,7 +20,6 @@ import static com.google.common.collect.testing.features.CollectionSize.ZERO; import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS; import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_QUERIES; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.AbstractMapTester; import com.google.common.collect.testing.WrongType; import com.google.common.collect.testing.features.CollectionSize; @@ -35,7 +34,6 @@ import com.google.common.collect.testing.features.MapFeature; * * @author George van den Driessche */ -@GwtCompatible public class MapContainsKeyTester<K, V> extends AbstractMapTester<K, V> { @CollectionSize.Require(absent = ZERO) public void testContains_yes() { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapContainsValueTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapContainsValueTester.java index e587f67..7c44040 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/MapContainsValueTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapContainsValueTester.java @@ -19,7 +19,6 @@ package com.google.common.collect.testing.testers; import static com.google.common.collect.testing.features.CollectionSize.ZERO; import static com.google.common.collect.testing.features.MapFeature.*; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.AbstractMapTester; import com.google.common.collect.testing.WrongType; import com.google.common.collect.testing.features.CollectionSize; @@ -35,7 +34,6 @@ import com.google.common.collect.testing.features.MapFeature; * @author George van den Driessche * @author Chris Povirk */ -@GwtCompatible public class MapContainsValueTester<K, V> extends AbstractMapTester<K, V> { @CollectionSize.Require(absent = ZERO) public void testContains_yes() { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapCreationTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapCreationTester.java index 499a53b..00f8bfc 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/MapCreationTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapCreationTester.java @@ -22,14 +22,10 @@ import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_ import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_VALUES; import static com.google.common.collect.testing.features.MapFeature.REJECTS_DUPLICATES_AT_CREATION; -import com.google.common.annotations.GwtCompatible; -import com.google.common.annotations.GwtIncompatible; import com.google.common.collect.testing.AbstractMapTester; -import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionSize; import com.google.common.collect.testing.features.MapFeature; -import java.lang.reflect.Method; import java.util.Arrays; import java.util.List; import java.util.Map.Entry; @@ -44,7 +40,6 @@ import java.util.Map.Entry; * @author Chris Povirk * @author Kevin Bourrillion */ -@GwtCompatible(emulated = true) public class MapCreationTester<K, V> extends AbstractMapTester<K, V> { @MapFeature.Require(ALLOWS_NULL_KEYS) @CollectionSize.Require(absent = ZERO) @@ -126,13 +121,13 @@ public class MapCreationTester<K, V> extends AbstractMapTester<K, V> { private Entry<K, V>[] getEntriesMultipleNullKeys() { Entry<K, V>[] entries = createArrayWithNullKey(); - entries[0] = entry(null, entries[0].getValue()); + entries[0] = entries[getNullLocation()]; return entries; } private Entry<K, V>[] getEntriesMultipleNonNullKeys() { Entry<K, V>[] entries = createSamplesArray(); - entries[0] = entry(samples.e1.getKey(), samples.e0.getValue()); + entries[0] = samples.e1; return entries; } @@ -143,16 +138,4 @@ public class MapCreationTester<K, V> extends AbstractMapTester<K, V> { Arrays.asList(entries).subList(1, getNumElements()); expectContents(expectedWithDuplicateRemoved); } - - /** - * Returns the {@link Method} instance for {@link - * #testCreateWithNullKeyUnsupported()} so that tests can suppress it - * with {@code FeatureSpecificTestSuiteBuilder.suppressing()} until <a - * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5045147">Sun - * bug 5045147</a> is fixed. - */ - @GwtIncompatible("reflection") - public static Method getCreateWithNullKeyUnsupportedMethod() { - return Helpers.getMethod(MapCreationTester.class, "testCreateWithNullKeyUnsupported"); - } } diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapEqualsTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapEqualsTester.java index b73c523..66b71e7 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/MapEqualsTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapEqualsTester.java @@ -19,7 +19,6 @@ package com.google.common.collect.testing.testers; import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS; import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_VALUES; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.AbstractMapTester; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionSize; @@ -38,7 +37,6 @@ import java.util.Map.Entry; * @author George van den Driessche * @author Chris Povirk */ -@GwtCompatible public class MapEqualsTester<K, V> extends AbstractMapTester<K, V> { public void testEquals_otherMapWithSameEntries() { assertTrue( diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapGetTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapGetTester.java index a1c934d..9860931 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/MapGetTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapGetTester.java @@ -20,7 +20,6 @@ import static com.google.common.collect.testing.features.CollectionFeature.ALLOW import static com.google.common.collect.testing.features.CollectionSize.ZERO; import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.AbstractMapTester; import com.google.common.collect.testing.WrongType; import com.google.common.collect.testing.features.CollectionFeature; @@ -37,7 +36,6 @@ import com.google.common.collect.testing.features.MapFeature; * @author Kevin Bourrillion * @author Chris Povirk */ -@GwtCompatible public class MapGetTester<K, V> extends AbstractMapTester<K, V> { @CollectionSize.Require(absent = ZERO) public void testGet_yes() { @@ -61,7 +59,7 @@ public class MapGetTester<K, V> extends AbstractMapTester<K, V> { } catch (NullPointerException tolerated) { } } - + @MapFeature.Require(ALLOWS_NULL_KEYS) @CollectionSize.Require(absent = ZERO) public void testGet_nonNullWhenNullContained() { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapHashCodeTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapHashCodeTester.java index c2483bc..ccfde43 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/MapHashCodeTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapHashCodeTester.java @@ -19,7 +19,6 @@ package com.google.common.collect.testing.testers; import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS; import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_VALUES; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.AbstractMapTester; import com.google.common.collect.testing.features.CollectionSize; import com.google.common.collect.testing.features.MapFeature; @@ -35,7 +34,6 @@ import java.util.Map; * @author George van den Driessche * @author Chris Povirk */ -@GwtCompatible public class MapHashCodeTester<K, V> extends AbstractMapTester<K, V> { public void testHashCode() { int expectedHashCode = 0; diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapIsEmptyTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapIsEmptyTester.java index 8eb31da..8d27eb7 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/MapIsEmptyTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapIsEmptyTester.java @@ -18,7 +18,6 @@ package com.google.common.collect.testing.testers; import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.AbstractMapTester; import com.google.common.collect.testing.features.CollectionSize; @@ -31,7 +30,6 @@ import com.google.common.collect.testing.features.CollectionSize; * * @author Kevin Bourrillion */ -@GwtCompatible public class MapIsEmptyTester<K, V> extends AbstractMapTester<K, V> { @CollectionSize.Require(ZERO) public void testIsEmpty_yes() { @@ -42,4 +40,4 @@ public class MapIsEmptyTester<K, V> extends AbstractMapTester<K, V> { public void testIsEmpty_no() { assertFalse("isEmpty() should return false", getMap().isEmpty()); } -} +}
\ No newline at end of file diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/NavigableMapNavigationTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapNavigationTester.java index 26f9918..8c2bf60 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/NavigableMapNavigationTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapNavigationTester.java @@ -31,15 +31,16 @@ import java.util.Collections; import java.util.List; import java.util.Map.Entry; import java.util.NavigableMap; +import java.util.NoSuchElementException; /** * A generic JUnit test which tests operations on a NavigableMap. Can't be - * invoked directly; please see {@code NavigableMapTestSuiteBuilder}. + * invoked directly; please see {@code MapTestSuiteBuilder}. * * @author Jesse Wilson * @author Louis Wasserman */ -public class NavigableMapNavigationTester<K, V> extends AbstractMapTester<K, V> { +public class MapNavigationTester<K, V> extends AbstractMapTester<K, V> { private NavigableMap<K, V> navigableMap; private List<Entry<K, V>> entries; @@ -78,6 +79,11 @@ public class NavigableMapNavigationTester<K, V> extends AbstractMapTester<K, V> @CollectionSize.Require(ZERO) public void testEmptyMapFirst() { assertNull(navigableMap.firstEntry()); + try { + navigableMap.firstKey(); + fail(); + } catch (NoSuchElementException e) { + } } @MapFeature.Require(SUPPORTS_REMOVE) @@ -101,7 +107,12 @@ public class NavigableMapNavigationTester<K, V> extends AbstractMapTester<K, V> @CollectionSize.Require(ZERO) public void testEmptyMapLast() { assertNull(navigableMap.lastEntry()); - } + try { + assertNull(navigableMap.lastKey()); + fail(); + } catch (NoSuchElementException e) { + } + } @MapFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(ZERO) @@ -112,6 +123,7 @@ public class NavigableMapNavigationTester<K, V> extends AbstractMapTester<K, V> @CollectionSize.Require(ONE) public void testSingletonMapFirst() { assertEquals(a, navigableMap.firstEntry()); + assertEquals(a.getKey(), navigableMap.firstKey()); } @MapFeature.Require(SUPPORTS_REMOVE) @@ -136,6 +148,7 @@ public class NavigableMapNavigationTester<K, V> extends AbstractMapTester<K, V> @CollectionSize.Require(ONE) public void testSingletonMapLast() { assertEquals(a, navigableMap.lastEntry()); + assertEquals(a.getKey(), navigableMap.lastKey()); } @MapFeature.Require(SUPPORTS_REMOVE) @@ -148,6 +161,7 @@ public class NavigableMapNavigationTester<K, V> extends AbstractMapTester<K, V> @CollectionSize.Require(SEVERAL) public void testFirst() { assertEquals(a, navigableMap.firstEntry()); + assertEquals(a.getKey(), navigableMap.firstKey()); } @MapFeature.Require(SUPPORTS_REMOVE) @@ -166,7 +180,7 @@ public class NavigableMapNavigationTester<K, V> extends AbstractMapTester<K, V> } catch (UnsupportedOperationException e) { } } - + @CollectionSize.Require(SEVERAL) public void testLower() { resetWithHole(); @@ -177,7 +191,7 @@ public class NavigableMapNavigationTester<K, V> extends AbstractMapTester<K, V> assertEquals(a, navigableMap.lowerEntry(c.getKey())); assertEquals(a.getKey(), navigableMap.lowerKey(c.getKey())); } - + @CollectionSize.Require(SEVERAL) public void testFloor() { resetWithHole(); @@ -210,12 +224,13 @@ public class NavigableMapNavigationTester<K, V> extends AbstractMapTester<K, V> assertEquals(null, navigableMap.higherEntry(c.getKey())); assertEquals(null, navigableMap.higherKey(c.getKey())); } - + @CollectionSize.Require(SEVERAL) public void testLast() { assertEquals(c, navigableMap.lastEntry()); + assertEquals(c.getKey(), navigableMap.lastKey()); } - + @MapFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(SEVERAL) public void testPollLast() { @@ -232,7 +247,7 @@ public class NavigableMapNavigationTester<K, V> extends AbstractMapTester<K, V> fail(); } catch (UnsupportedOperationException e) { } - } + } @CollectionSize.Require(SEVERAL) public void testDescendingNavigation() { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapPutAllTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapPutAllTester.java index 41eec75..d36e736 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/MapPutAllTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapPutAllTester.java @@ -19,22 +19,15 @@ package com.google.common.collect.testing.testers; import static com.google.common.collect.testing.features.CollectionSize.ZERO; import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS; import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_VALUES; -import static com.google.common.collect.testing.features.MapFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION; -import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_PUT; +import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_PUT_ALL; import static java.util.Collections.singletonList; -import com.google.common.annotations.GwtCompatible; -import com.google.common.annotations.GwtIncompatible; import com.google.common.collect.testing.AbstractMapTester; -import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.MinimalCollection; import com.google.common.collect.testing.features.CollectionSize; import com.google.common.collect.testing.features.MapFeature; -import java.lang.reflect.Method; import java.util.Collections; -import java.util.ConcurrentModificationException; -import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -51,7 +44,6 @@ import java.util.Map.Entry; * @author Kevin Bourrillion */ @SuppressWarnings("unchecked") // too many "unchecked generic array creations" -@GwtCompatible(emulated = true) public class MapPutAllTester<K, V> extends AbstractMapTester<K, V> { private List<Entry<K, V>> containsNullKey; private List<Entry<K, V>> containsNullValue; @@ -62,13 +54,13 @@ public class MapPutAllTester<K, V> extends AbstractMapTester<K, V> { containsNullValue = singletonList(entry(samples.e3.getKey(), null)); } - @MapFeature.Require(SUPPORTS_PUT) + @MapFeature.Require(SUPPORTS_PUT_ALL) public void testPutAll_supportedNothing() { getMap().putAll(emptyMap()); expectUnchanged(); } - @MapFeature.Require(absent = SUPPORTS_PUT) + @MapFeature.Require(absent = SUPPORTS_PUT_ALL) public void testPutAll_unsupportedNothing() { try { getMap().putAll(emptyMap()); @@ -77,13 +69,13 @@ public class MapPutAllTester<K, V> extends AbstractMapTester<K, V> { expectUnchanged(); } - @MapFeature.Require(SUPPORTS_PUT) + @MapFeature.Require(SUPPORTS_PUT_ALL) public void testPutAll_supportedNonePresent() { putAll(createDisjointCollection()); expectAdded(samples.e3, samples.e4); } - @MapFeature.Require(absent = SUPPORTS_PUT) + @MapFeature.Require(absent = SUPPORTS_PUT_ALL) public void testPutAll_unsupportedNonePresent() { try { putAll(createDisjointCollection()); @@ -94,28 +86,14 @@ public class MapPutAllTester<K, V> extends AbstractMapTester<K, V> { expectMissing(samples.e3, samples.e4); } - @MapFeature.Require(SUPPORTS_PUT) + @MapFeature.Require(SUPPORTS_PUT_ALL) @CollectionSize.Require(absent = ZERO) public void testPutAll_supportedSomePresent() { putAll(MinimalCollection.of(samples.e3, samples.e0)); expectAdded(samples.e3); } - @MapFeature.Require({ FAILS_FAST_ON_CONCURRENT_MODIFICATION, - SUPPORTS_PUT }) - @CollectionSize.Require(absent = ZERO) - public void testPutAllSomePresentConcurrentWithEntrySetIteration() { - try { - Iterator<Entry<K, V>> iterator = getMap().entrySet().iterator(); - putAll(MinimalCollection.of(samples.e3, samples.e0)); - iterator.next(); - fail("Expected ConcurrentModificationException"); - } catch (ConcurrentModificationException expected) { - // success - } - } - - @MapFeature.Require(absent = SUPPORTS_PUT) + @MapFeature.Require(absent = SUPPORTS_PUT_ALL) @CollectionSize.Require(absent = ZERO) public void testPutAll_unsupportedSomePresent() { try { @@ -126,7 +104,7 @@ public class MapPutAllTester<K, V> extends AbstractMapTester<K, V> { expectUnchanged(); } - @MapFeature.Require(absent = SUPPORTS_PUT) + @MapFeature.Require(absent = SUPPORTS_PUT_ALL) @CollectionSize.Require(absent = ZERO) public void testPutAll_unsupportedAllPresent() { try { @@ -136,16 +114,16 @@ public class MapPutAllTester<K, V> extends AbstractMapTester<K, V> { expectUnchanged(); } - @MapFeature.Require({SUPPORTS_PUT, + @MapFeature.Require({SUPPORTS_PUT_ALL, ALLOWS_NULL_KEYS}) public void testPutAll_nullKeySupported() { putAll(containsNullKey); expectAdded(containsNullKey.get(0)); } - @MapFeature.Require(value = SUPPORTS_PUT, + @MapFeature.Require(value = SUPPORTS_PUT_ALL, absent = ALLOWS_NULL_KEYS) - public void testPutAll_nullKeyUnsupported() { + public void testAdd_nullKeyUnsupported() { try { putAll(containsNullKey); fail("putAll(containsNullKey) should throw"); @@ -157,16 +135,16 @@ public class MapPutAllTester<K, V> extends AbstractMapTester<K, V> { "putAll(containsNullKey)"); } - @MapFeature.Require({SUPPORTS_PUT, + @MapFeature.Require({SUPPORTS_PUT_ALL, ALLOWS_NULL_VALUES}) public void testPutAll_nullValueSupported() { putAll(containsNullValue); expectAdded(containsNullValue.get(0)); } - @MapFeature.Require(value = SUPPORTS_PUT, + @MapFeature.Require(value = SUPPORTS_PUT_ALL, absent = ALLOWS_NULL_VALUES) - public void testPutAll_nullValueUnsupported() { + public void testAdd_nullValueUnsupported() { try { putAll(containsNullValue); fail("putAll(containsNullValue) should throw"); @@ -178,7 +156,7 @@ public class MapPutAllTester<K, V> extends AbstractMapTester<K, V> { "putAll(containsNullValue)"); } - @MapFeature.Require(SUPPORTS_PUT) + @MapFeature.Require(SUPPORTS_PUT_ALL) public void testPutAll_nullCollectionReference() { try { getMap().putAll(null); @@ -198,16 +176,4 @@ public class MapPutAllTester<K, V> extends AbstractMapTester<K, V> { } getMap().putAll(map); } - - /** - * Returns the {@link Method} instance for {@link - * #testPutAll_nullKeyUnsupported()} so that tests can suppress it with {@code - * FeatureSpecificTestSuiteBuilder.suppressing()} until <a - * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5045147">Sun - * bug 5045147</a> is fixed. - */ - @GwtIncompatible("reflection") - public static Method getPutAllNullKeyUnsupportedMethod() { - return Helpers.getMethod(MapPutAllTester.class, "testPutAll_nullKeyUnsupported"); - } } diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapPutTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapPutTester.java index 7c242d5..69b57ca 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/MapPutTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapPutTester.java @@ -19,19 +19,12 @@ package com.google.common.collect.testing.testers; import static com.google.common.collect.testing.features.CollectionSize.ZERO; import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS; import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_VALUES; -import static com.google.common.collect.testing.features.MapFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION; import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_PUT; -import com.google.common.annotations.GwtCompatible; -import com.google.common.annotations.GwtIncompatible; import com.google.common.collect.testing.AbstractMapTester; -import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionSize; import com.google.common.collect.testing.features.MapFeature; -import java.lang.reflect.Method; -import java.util.ConcurrentModificationException; -import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; @@ -46,7 +39,6 @@ import java.util.Map.Entry; * @author Kevin Bourrillion */ @SuppressWarnings("unchecked") // too many "unchecked generic array creations" -@GwtCompatible(emulated = true) public class MapPutTester<K, V> extends AbstractMapTester<K, V> { private Entry<K, V> nullKeyEntry; private Entry<K, V> nullValueEntry; @@ -67,45 +59,6 @@ public class MapPutTester<K, V> extends AbstractMapTester<K, V> { expectAdded(samples.e3); } - @MapFeature.Require({FAILS_FAST_ON_CONCURRENT_MODIFICATION, SUPPORTS_PUT}) - @CollectionSize.Require(absent = ZERO) - public void testPutAbsentConcurrentWithEntrySetIteration() { - try { - Iterator<Entry<K, V>> iterator = getMap().entrySet().iterator(); - put(samples.e3); - iterator.next(); - fail("Expected ConcurrentModificationException"); - } catch (ConcurrentModificationException expected) { - // success - } - } - - @MapFeature.Require({FAILS_FAST_ON_CONCURRENT_MODIFICATION, SUPPORTS_PUT}) - @CollectionSize.Require(absent = ZERO) - public void testPutAbsentConcurrentWithKeySetIteration() { - try { - Iterator<K> iterator = getMap().keySet().iterator(); - put(samples.e3); - iterator.next(); - fail("Expected ConcurrentModificationException"); - } catch (ConcurrentModificationException expected) { - // success - } - } - - @MapFeature.Require({FAILS_FAST_ON_CONCURRENT_MODIFICATION, SUPPORTS_PUT}) - @CollectionSize.Require(absent = ZERO) - public void testPutAbsentConcurrentWithValueIteration() { - try { - Iterator<V> iterator = getMap().values().iterator(); - put(samples.e3); - iterator.next(); - fail("Expected ConcurrentModificationException"); - } catch (ConcurrentModificationException expected) { - // success - } - } - @MapFeature.Require(absent = SUPPORTS_PUT) public void testPut_unsupportedNotPresent() { try { @@ -240,17 +193,4 @@ public class MapPutTester<K, V> extends AbstractMapTester<K, V> { private V put(Map.Entry<K, V> entry) { return getMap().put(entry.getKey(), entry.getValue()); } - - /** - * Returns the {@link Method} instance for {@link - * #testPut_nullKeyUnsupported()} so that tests of {@link java.util.TreeMap} - * can suppress it with {@code FeatureSpecificTestSuiteBuilder.suppressing()} - * until <a - * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5045147">Sun bug - * 5045147</a> is fixed. - */ - @GwtIncompatible("reflection") - public static Method getPutNullKeyUnsupportedMethod() { - return Helpers.getMethod(MapPutTester.class, "testPut_nullKeyUnsupported"); - } } diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapRemoveTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapRemoveTester.java index 4a7a5b4..6ba33ce 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/MapRemoveTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapRemoveTester.java @@ -16,23 +16,16 @@ package com.google.common.collect.testing.testers; -import static com.google.common.collect.testing.features.CollectionSize.SEVERAL; import static com.google.common.collect.testing.features.CollectionSize.ZERO; import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS; import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_QUERIES; -import static com.google.common.collect.testing.features.MapFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION; import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_REMOVE; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.AbstractMapTester; import com.google.common.collect.testing.WrongType; import com.google.common.collect.testing.features.CollectionSize; import com.google.common.collect.testing.features.MapFeature; -import java.util.ConcurrentModificationException; -import java.util.Iterator; -import java.util.Map.Entry; - /** * A generic JUnit test which tests {@code remove} operations on a map. Can't be * invoked directly; please see @@ -44,7 +37,6 @@ import java.util.Map.Entry; * @author Chris Povirk */ @SuppressWarnings("unchecked") // too many "unchecked generic array creations" -@GwtCompatible public class MapRemoveTester<K, V> extends AbstractMapTester<K, V> { @MapFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(absent = ZERO) @@ -57,48 +49,6 @@ public class MapRemoveTester<K, V> extends AbstractMapTester<K, V> { expectMissing(samples.e0); } - @MapFeature.Require({FAILS_FAST_ON_CONCURRENT_MODIFICATION, - SUPPORTS_REMOVE}) - @CollectionSize.Require(SEVERAL) - public void testRemovePresentConcurrentWithEntrySetIteration() { - try { - Iterator<Entry<K, V>> iterator = getMap().entrySet().iterator(); - getMap().remove(samples.e0.getKey()); - iterator.next(); - fail("Expected ConcurrentModificationException"); - } catch (ConcurrentModificationException expected) { - // success - } - } - - @MapFeature.Require({FAILS_FAST_ON_CONCURRENT_MODIFICATION, - SUPPORTS_REMOVE}) - @CollectionSize.Require(SEVERAL) - public void testRemovePresentConcurrentWithKeySetIteration() { - try { - Iterator<K> iterator = getMap().keySet().iterator(); - getMap().remove(samples.e0.getKey()); - iterator.next(); - fail("Expected ConcurrentModificationException"); - } catch (ConcurrentModificationException expected) { - // success - } - } - - @MapFeature.Require({FAILS_FAST_ON_CONCURRENT_MODIFICATION, - SUPPORTS_REMOVE}) - @CollectionSize.Require(SEVERAL) - public void testRemovePresentConcurrentWithValuesIteration() { - try { - Iterator<V> iterator = getMap().values().iterator(); - getMap().remove(samples.e0.getKey()); - iterator.next(); - fail("Expected ConcurrentModificationException"); - } catch (ConcurrentModificationException expected) { - // success - } - } - @MapFeature.Require(SUPPORTS_REMOVE) public void testRemove_notPresent() { assertNull("remove(notPresent) should return null", diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapSerializationTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapSerializationTester.java deleted file mode 100644 index 3d5c675..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/testers/MapSerializationTester.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2012 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.testing.testers; - -import static com.google.common.collect.testing.features.CollectionFeature.SERIALIZABLE; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.testing.AbstractMapTester; -import com.google.common.collect.testing.features.CollectionFeature; -import com.google.common.testing.SerializableTester; - -/** - * Basic serialization test for maps. - * - * @author Louis Wasserman - */ -@GwtCompatible -public class MapSerializationTester<K, V> extends AbstractMapTester<K, V> { - @CollectionFeature.Require(SERIALIZABLE) - public void testReserializeMap() { - SerializableTester.reserializeAndAssert(getMap()); - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapSizeTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapSizeTester.java index f3df9f0..6b3439a 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/MapSizeTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapSizeTester.java @@ -16,7 +16,6 @@ package com.google.common.collect.testing.testers; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.AbstractMapTester; /** @@ -28,9 +27,8 @@ import com.google.common.collect.testing.AbstractMapTester; * * @author George van den Driessche */ -@GwtCompatible public class MapSizeTester<K, V> extends AbstractMapTester<K, V> { public void testSize() { assertEquals("size():", getNumElements(), getMap().size()); } -} +}
\ No newline at end of file diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/Platform.java b/guava-testlib/src/com/google/common/collect/testing/testers/Platform.java index cd3eb84..ba4d3f0 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/Platform.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/Platform.java @@ -16,17 +16,28 @@ package com.google.common.collect.testing.testers; -import com.google.common.annotations.GwtCompatible; +import java.lang.reflect.Method; /** * This class is emulated in GWT. * * @author Hayward Chan */ -@GwtCompatible class Platform { /** + * Delegate to {@link Class#getMethod(String, Class[])}. Not + * usable in GWT. + */ + static Method getMethod(Class<?> clazz, String methodName) { + try { + return clazz.getMethod(methodName); + } catch (NoSuchMethodException e) { + throw new RuntimeException(e); + } + } + + /** * Format the template with args, only supports the placeholder * {@code %s}. */ diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/QueueElementTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/QueueElementTester.java index 26570ed..7c5ce41 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/QueueElementTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/QueueElementTester.java @@ -21,7 +21,6 @@ import static com.google.common.collect.testing.features.CollectionSize.ONE; import static com.google.common.collect.testing.features.CollectionSize.SEVERAL; import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -36,7 +35,6 @@ import java.util.NoSuchElementException; * * @author Jared Levy */ -@GwtCompatible public class QueueElementTester<E> extends AbstractQueueTester<E> { @CollectionSize.Require(ZERO) public void testElement_empty() { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/QueueOfferTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/QueueOfferTester.java index d9a67ea..f4fa792 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/QueueOfferTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/QueueOfferTester.java @@ -19,7 +19,6 @@ package com.google.common.collect.testing.testers; import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES; import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.features.CollectionFeature; /** @@ -32,7 +31,6 @@ import com.google.common.collect.testing.features.CollectionFeature; * @author Jared Levy */ @SuppressWarnings("unchecked") // too many "unchecked generic array creations" -@GwtCompatible public class QueueOfferTester<E> extends AbstractQueueTester<E> { @CollectionFeature.Require(SUPPORTS_ADD) public void testOffer_supportedNotPresent() { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/QueuePeekTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/QueuePeekTester.java index c9c045e..341e68d 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/QueuePeekTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/QueuePeekTester.java @@ -21,7 +21,6 @@ import static com.google.common.collect.testing.features.CollectionSize.ONE; import static com.google.common.collect.testing.features.CollectionSize.SEVERAL; import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -34,7 +33,6 @@ import com.google.common.collect.testing.features.CollectionSize; * * @author Jared Levy */ -@GwtCompatible public class QueuePeekTester<E> extends AbstractQueueTester<E> { @CollectionSize.Require(ZERO) public void testPeek_empty() { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/QueuePollTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/QueuePollTester.java index 14c2803..a447bb0 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/QueuePollTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/QueuePollTester.java @@ -22,7 +22,6 @@ import static com.google.common.collect.testing.features.CollectionSize.ONE; import static com.google.common.collect.testing.features.CollectionSize.SEVERAL; import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -36,7 +35,6 @@ import com.google.common.collect.testing.features.CollectionSize; * @author Jared Levy */ @SuppressWarnings("unchecked") // too many "unchecked generic array creations" -@GwtCompatible public class QueuePollTester<E> extends AbstractQueueTester<E> { @CollectionFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(ZERO) diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/QueueRemoveTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/QueueRemoveTester.java index 718f63b..07596f4 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/QueueRemoveTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/QueueRemoveTester.java @@ -22,7 +22,6 @@ import static com.google.common.collect.testing.features.CollectionSize.ONE; import static com.google.common.collect.testing.features.CollectionSize.SEVERAL; import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -38,7 +37,6 @@ import java.util.NoSuchElementException; * @author Jared Levy */ @SuppressWarnings("unchecked") // too many "unchecked generic array creations" -@GwtCompatible public class QueueRemoveTester<E> extends AbstractQueueTester<E> { @CollectionFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(ZERO) diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/SetAddAllTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/SetAddAllTester.java index 638d6ef..0dac713 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/SetAddAllTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/SetAddAllTester.java @@ -16,10 +16,9 @@ package com.google.common.collect.testing.testers; -import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD; +import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD_ALL; import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.MinimalCollection; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -34,9 +33,8 @@ import com.google.common.collect.testing.features.CollectionSize; * @author Kevin Bourrillion */ @SuppressWarnings("unchecked") // too many "unchecked generic array creations" -@GwtCompatible public class SetAddAllTester<E> extends AbstractSetTester<E> { - @CollectionFeature.Require(SUPPORTS_ADD) + @CollectionFeature.Require(SUPPORTS_ADD_ALL) @CollectionSize.Require(absent = ZERO) public void testAddAll_supportedSomePresent() { assertTrue("add(somePresent) should return true", @@ -44,7 +42,7 @@ public class SetAddAllTester<E> extends AbstractSetTester<E> { expectAdded(samples.e3); } - @CollectionFeature.Require(SUPPORTS_ADD) + @CollectionFeature.Require(SUPPORTS_ADD_ALL) public void testAddAll_withDuplicates() { MinimalCollection<E> elementsToAdd = MinimalCollection.of(samples.e3, samples.e4, samples.e3, samples.e4); @@ -53,7 +51,7 @@ public class SetAddAllTester<E> extends AbstractSetTester<E> { expectAdded(samples.e3, samples.e4); } - @CollectionFeature.Require(SUPPORTS_ADD) + @CollectionFeature.Require(SUPPORTS_ADD_ALL) @CollectionSize.Require(absent = ZERO) public void testAddAll_supportedAllPresent() { assertFalse("add(allPresent) should return false", diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/SetAddTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/SetAddTester.java index 216411e..d9d8601 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/SetAddTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/SetAddTester.java @@ -20,9 +20,6 @@ import static com.google.common.collect.testing.features.CollectionFeature.ALLOW import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD; import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import com.google.common.annotations.GwtCompatible; -import com.google.common.annotations.GwtIncompatible; -import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -37,7 +34,6 @@ import java.lang.reflect.Method; * * @author Kevin Bourrillion */ -@GwtCompatible(emulated = true) public class SetAddTester<E> extends AbstractSetTester<E> { @CollectionFeature.Require(SUPPORTS_ADD) @CollectionSize.Require(absent = ZERO) @@ -60,8 +56,7 @@ public class SetAddTester<E> extends AbstractSetTester<E> { * {@link #testAdd_supportedNullPresent()} so that tests can suppress it. See * {@link CollectionAddTester#getAddNullSupportedMethod()} for details. */ - @GwtIncompatible("reflection") public static Method getAddSupportedNullPresentMethod() { - return Helpers.getMethod(SetAddTester.class, "testAdd_supportedNullPresent"); + return Platform.getMethod(SetAddTester.class, "testAdd_supportedNullPresent"); } } diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/SetCreationTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/SetCreationTester.java index f81314d..50d83c7 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/SetCreationTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/SetCreationTester.java @@ -21,7 +21,6 @@ import static com.google.common.collect.testing.features.CollectionFeature.REJEC import static com.google.common.collect.testing.features.CollectionSize.ONE; import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -37,7 +36,6 @@ import java.util.List; * * @author Chris Povirk */ -@GwtCompatible public class SetCreationTester<E> extends AbstractSetTester<E> { @CollectionFeature.Require(value = ALLOWS_NULL_VALUES, absent = REJECTS_DUPLICATES_AT_CREATION) diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/SetEqualsTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/SetEqualsTester.java index 9989d2d..a783a44 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/SetEqualsTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/SetEqualsTester.java @@ -18,7 +18,6 @@ package com.google.common.collect.testing.testers; import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.MinimalSet; import com.google.common.collect.testing.features.CollectionFeature; @@ -34,7 +33,6 @@ import java.util.Set; * * @author George van den Driessche */ -@GwtCompatible public class SetEqualsTester<E> extends AbstractSetTester<E> { public void testEquals_otherSetWithSameElements() { assertTrue( diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/SetHashCodeTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/SetHashCodeTester.java index 09c6f5d..e8fc705 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/SetHashCodeTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/SetHashCodeTester.java @@ -18,9 +18,6 @@ package com.google.common.collect.testing.testers; import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES; -import com.google.common.annotations.GwtCompatible; -import com.google.common.annotations.GwtIncompatible; -import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -34,7 +31,6 @@ import java.util.Collection; * * @author George van den Driessche */ -@GwtCompatible(emulated = true) public class SetHashCodeTester<E> extends AbstractSetTester<E> { public void testHashCode() { int expectedHashCode = 0; @@ -69,10 +65,9 @@ public class SetHashCodeTester<E> extends AbstractSetTester<E> { * unhashable objects can suppress it with * {@code FeatureSpecificTestSuiteBuilder.suppressing()}. */ - @GwtIncompatible("reflection") public static Method[] getHashCodeMethods() { return new Method[]{ - Helpers.getMethod(SetHashCodeTester.class, "testHashCode"), - Helpers.getMethod(SetHashCodeTester.class, "testHashCode_containingNull") }; + Platform.getMethod(SetHashCodeTester.class, "testHashCode"), + Platform.getMethod(SetHashCodeTester.class, "testHashCode_containingNull") }; } } diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/NavigableSetNavigationTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/SetNavigationTester.java index 14c6a47..a35595a 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/NavigableSetNavigationTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/SetNavigationTester.java @@ -25,22 +25,21 @@ import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; -import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.NavigableSet; -import java.util.TreeSet; +import java.util.NoSuchElementException; /** * A generic JUnit test which tests operations on a NavigableSet. Can't be - * invoked directly; please see {@code NavigableSetTestSuiteBuilder}. + * invoked directly; please see {@code SetTestSuiteBuilder}. * * @author Jesse Wilson * @author Louis Wasserman */ -public class NavigableSetNavigationTester<E> extends AbstractSetTester<E> { +public class SetNavigationTester<E> extends AbstractSetTester<E> { private NavigableSet<E> navigableSet; private List<E> values; @@ -64,7 +63,7 @@ public class NavigableSetNavigationTester<E> extends AbstractSetTester<E> { } } } - + /** * Resets the contents of navigableSet to have elements a, c, for the * navigation tests. @@ -74,6 +73,15 @@ public class NavigableSetNavigationTester<E> extends AbstractSetTester<E> { navigableSet = (NavigableSet<E>) getSet(); } + @CollectionSize.Require(ZERO) + public void testEmptySetFirst() { + try { + navigableSet.first(); + fail(); + } catch (NoSuchElementException e) { + } + } + @CollectionFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(ZERO) public void testEmptySetPollFirst() { @@ -88,12 +96,26 @@ public class NavigableSetNavigationTester<E> extends AbstractSetTester<E> { assertNull(navigableSet.higher(samples.e0)); } + @CollectionSize.Require(ZERO) + public void testEmptySetLast() { + try { + navigableSet.last(); + fail(); + } catch (NoSuchElementException e) { + } + } + @CollectionFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(ZERO) public void testEmptySetPollLast() { assertNull(navigableSet.pollLast()); } + @CollectionSize.Require(ONE) + public void testSingletonSetFirst() { + assertEquals(a, navigableSet.first()); + } + @CollectionFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(ONE) public void testSingletonSetPollFirst() { @@ -109,6 +131,11 @@ public class NavigableSetNavigationTester<E> extends AbstractSetTester<E> { assertNull(navigableSet.higher(samples.e0)); } + @CollectionSize.Require(ONE) + public void testSingletonSetLast() { + assertEquals(a, navigableSet.last()); + } + @CollectionFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(ONE) public void testSingletonSetPollLast() { @@ -116,6 +143,11 @@ public class NavigableSetNavigationTester<E> extends AbstractSetTester<E> { assertTrue(navigableSet.isEmpty()); } + @CollectionSize.Require(SEVERAL) + public void testFirst() { + assertEquals(a, navigableSet.first()); + } + @CollectionFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(SEVERAL) public void testPollFirst() { @@ -134,15 +166,14 @@ public class NavigableSetNavigationTester<E> extends AbstractSetTester<E> { } @CollectionSize.Require(SEVERAL) - public void testLowerHole() { + public void testLower() { resetWithHole(); assertEquals(null, navigableSet.lower(a)); assertEquals(a, navigableSet.lower(b)); assertEquals(a, navigableSet.lower(c)); } - @CollectionSize.Require(SEVERAL) - public void testFloorHole() { + public void testFloor() { resetWithHole(); assertEquals(a, navigableSet.floor(a)); assertEquals(a, navigableSet.floor(b)); @@ -150,7 +181,7 @@ public class NavigableSetNavigationTester<E> extends AbstractSetTester<E> { } @CollectionSize.Require(SEVERAL) - public void testCeilingHole() { + public void testCeiling() { resetWithHole(); assertEquals(a, navigableSet.ceiling(a)); assertEquals(c, navigableSet.ceiling(b)); @@ -158,44 +189,16 @@ public class NavigableSetNavigationTester<E> extends AbstractSetTester<E> { } @CollectionSize.Require(SEVERAL) - public void testHigherHole() { + public void testHigher() { resetWithHole(); assertEquals(c, navigableSet.higher(a)); assertEquals(c, navigableSet.higher(b)); assertEquals(null, navigableSet.higher(c)); } - /* - * TODO(cpovirk): make "too small" and "too large" elements available for better navigation - * testing. At that point, we may be able to eliminate the "hole" tests, which would mean that - * ContiguousSet's tests would no longer need to suppress them. - */ - @CollectionSize.Require(SEVERAL) - public void testLower() { - assertEquals(null, navigableSet.lower(a)); - assertEquals(a, navigableSet.lower(b)); - assertEquals(b, navigableSet.lower(c)); - } - @CollectionSize.Require(SEVERAL) - public void testFloor() { - assertEquals(a, navigableSet.floor(a)); - assertEquals(b, navigableSet.floor(b)); - assertEquals(c, navigableSet.floor(c)); - } - - @CollectionSize.Require(SEVERAL) - public void testCeiling() { - assertEquals(a, navigableSet.ceiling(a)); - assertEquals(b, navigableSet.ceiling(b)); - assertEquals(c, navigableSet.ceiling(c)); - } - - @CollectionSize.Require(SEVERAL) - public void testHigher() { - assertEquals(b, navigableSet.higher(a)); - assertEquals(c, navigableSet.higher(b)); - assertEquals(null, navigableSet.higher(c)); + public void testLast() { + assertEquals(c, navigableSet.last()); } @CollectionFeature.Require(SUPPORTS_REMOVE) @@ -224,34 +227,4 @@ public class NavigableSetNavigationTester<E> extends AbstractSetTester<E> { Collections.reverse(descending); assertEquals(values, descending); } - - public void testEmptySubSet() { - NavigableSet<E> empty = navigableSet.subSet(samples.e0, false, samples.e0, false); - assertEquals(new TreeSet<E>(), empty); - } - - /* - * TODO(cpovirk): more testing of subSet/headSet/tailSet/descendingSet? and/or generate derived - * suites? - */ - - /** - * Returns the {@link Method} instances for the test methods in this class that create a set with - * a "hole" in it so that set tests of {@code ContiguousSet} can suppress them with {@code - * FeatureSpecificTestSuiteBuilder.suppressing()}. - */ - /* - * TODO(cpovirk): or we could make HOLES_FORBIDDEN a feature. Or we could declare that - * implementations are permitted to throw IAE if a hole is requested, and we could update - * test*Hole to permit IAE. (But might this ignore genuine bugs?) But see the TODO above - * testLower, which could make this all unnecessary - */ - public static Method[] getHoleMethods() { - return new Method[] { - Helpers.getMethod(NavigableSetNavigationTester.class, "testLowerHole"), - Helpers.getMethod(NavigableSetNavigationTester.class, "testFloorHole"), - Helpers.getMethod(NavigableSetNavigationTester.class, "testCeilingHole"), - Helpers.getMethod(NavigableSetNavigationTester.class, "testHigherHole"), - }; - } } diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/SetRemoveTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/SetRemoveTester.java index ffc5044..1310cff 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/SetRemoveTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/SetRemoveTester.java @@ -19,7 +19,6 @@ package com.google.common.collect.testing.testers; import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE; import static com.google.common.collect.testing.features.CollectionSize.ZERO; -import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -32,7 +31,6 @@ import com.google.common.collect.testing.features.CollectionSize; * * @author George van den Driessche */ -@GwtCompatible public class SetRemoveTester<E> extends AbstractSetTester<E> { @CollectionFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(absent = ZERO) diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/SortedMapNavigationTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/SortedMapNavigationTester.java deleted file mode 100644 index 9552a41..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/testers/SortedMapNavigationTester.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright (C) 2010 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.testing.testers; - -import static com.google.common.collect.testing.features.CollectionSize.ONE; -import static com.google.common.collect.testing.features.CollectionSize.SEVERAL; -import static com.google.common.collect.testing.features.CollectionSize.ZERO; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.testing.AbstractMapTester; -import com.google.common.collect.testing.Helpers; -import com.google.common.collect.testing.features.CollectionSize; - -import java.util.Collections; -import java.util.List; -import java.util.Map.Entry; -import java.util.NoSuchElementException; -import java.util.SortedMap; - -/** - * A generic JUnit test which tests operations on a SortedMap. Can't be - * invoked directly; please see {@code SortedMapTestSuiteBuilder}. - * - * @author Jesse Wilson - * @author Louis Wasserman - */ -@GwtCompatible -public class SortedMapNavigationTester<K, V> extends AbstractMapTester<K, V> { - - private SortedMap<K, V> navigableMap; - private Entry<K, V> a; - private Entry<K, V> c; - - @Override public void setUp() throws Exception { - super.setUp(); - navigableMap = (SortedMap<K, V>) getMap(); - List<Entry<K, V>> entries = Helpers.copyToList(getSubjectGenerator().getSampleElements( - getSubjectGenerator().getCollectionSize().getNumElements())); - Collections.sort(entries, Helpers.<K, V>entryComparator(navigableMap.comparator())); - - // some tests assume SEVERAL == 3 - if (entries.size() >= 1) { - a = entries.get(0); - if (entries.size() >= 3) { - c = entries.get(2); - } - } - } - - @CollectionSize.Require(ZERO) - public void testEmptyMapFirst() { - try { - navigableMap.firstKey(); - fail(); - } catch (NoSuchElementException e) { - } - } - - @CollectionSize.Require(ZERO) - public void testEmptyMapLast() { - try { - assertNull(navigableMap.lastKey()); - fail(); - } catch (NoSuchElementException e) { - } - } - - @CollectionSize.Require(ONE) - public void testSingletonMapFirst() { - assertEquals(a.getKey(), navigableMap.firstKey()); - } - - @CollectionSize.Require(ONE) - public void testSingletonMapLast() { - assertEquals(a.getKey(), navigableMap.lastKey()); - } - - @CollectionSize.Require(SEVERAL) - public void testFirst() { - assertEquals(a.getKey(), navigableMap.firstKey()); - } - - @CollectionSize.Require(SEVERAL) - public void testLast() { - assertEquals(c.getKey(), navigableMap.lastKey()); - } -} diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/SortedSetNavigationTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/SortedSetNavigationTester.java deleted file mode 100644 index b3a52d2..0000000 --- a/guava-testlib/src/com/google/common/collect/testing/testers/SortedSetNavigationTester.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (C) 2010 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.testing.testers; - -import static com.google.common.collect.testing.features.CollectionSize.ONE; -import static com.google.common.collect.testing.features.CollectionSize.SEVERAL; -import static com.google.common.collect.testing.features.CollectionSize.ZERO; - -import com.google.common.annotations.GwtCompatible; -import com.google.common.collect.testing.Helpers; -import com.google.common.collect.testing.features.CollectionSize; - -import java.util.Collections; -import java.util.List; -import java.util.NoSuchElementException; -import java.util.SortedSet; - -/** - * A generic JUnit test which tests operations on a SortedSet. Can't be - * invoked directly; please see {@code SortedSetTestSuiteBuilder}. - * - * @author Jesse Wilson - * @author Louis Wasserman - */ -@GwtCompatible -public class SortedSetNavigationTester<E> extends AbstractSetTester<E> { - - private SortedSet<E> sortedSet; - private List<E> values; - private E a; - private E b; - private E c; - - @Override public void setUp() throws Exception { - super.setUp(); - sortedSet = (SortedSet<E>) getSet(); - values = Helpers.copyToList(getSubjectGenerator().getSampleElements( - getSubjectGenerator().getCollectionSize().getNumElements())); - Collections.sort(values, sortedSet.comparator()); - - // some tests assume SEVERAL == 3 - if (values.size() >= 1) { - a = values.get(0); - if (values.size() >= 3) { - b = values.get(1); - c = values.get(2); - } - } - } - - @CollectionSize.Require(ZERO) - public void testEmptySetFirst() { - try { - sortedSet.first(); - fail(); - } catch (NoSuchElementException e) { - } - } - - @CollectionSize.Require(ZERO) - public void testEmptySetLast() { - try { - sortedSet.last(); - fail(); - } catch (NoSuchElementException e) { - } - } - - @CollectionSize.Require(ONE) - public void testSingletonSetFirst() { - assertEquals(a, sortedSet.first()); - } - - @CollectionSize.Require(ONE) - public void testSingletonSetLast() { - assertEquals(a, sortedSet.last()); - } - - @CollectionSize.Require(SEVERAL) - public void testFirst() { - assertEquals(a, sortedSet.first()); - } - - @CollectionSize.Require(SEVERAL) - public void testLast() { - assertEquals(c, sortedSet.last()); - } -} |