110 lines
4.2 KiB
Java
110 lines
4.2 KiB
Java
/*
|
|
* Copyright (C) 2013 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;
|
|
|
|
import com.google.common.annotations.GwtCompatible;
|
|
import com.google.common.annotations.GwtIncompatible;
|
|
import com.google.common.collect.MultimapBuilder.MultimapBuilderWithKeys;
|
|
import java.io.ByteArrayInputStream;
|
|
import java.io.ByteArrayOutputStream;
|
|
import java.io.ObjectInputStream;
|
|
import java.io.ObjectOutputStream;
|
|
import java.math.RoundingMode;
|
|
import java.util.SortedMap;
|
|
import java.util.SortedSet;
|
|
import junit.framework.TestCase;
|
|
|
|
/**
|
|
* Tests for {@link MultimapBuilder}.
|
|
*
|
|
* @author Louis Wasserman
|
|
*/
|
|
@GwtCompatible(emulated = true)
|
|
public class MultimapBuilderTest extends TestCase {
|
|
|
|
@GwtIncompatible // doesn't build without explicit type parameters on build() methods
|
|
public void testGenerics() {
|
|
ListMultimap<String, Integer> a = MultimapBuilder.hashKeys().arrayListValues().build();
|
|
SortedSetMultimap<String, Integer> b = MultimapBuilder.linkedHashKeys().treeSetValues().build();
|
|
SetMultimap<String, Integer> c =
|
|
MultimapBuilder.treeKeys(String.CASE_INSENSITIVE_ORDER).hashSetValues().build();
|
|
}
|
|
|
|
public void testGenerics_gwtCompatible() {
|
|
ListMultimap<String, Integer> a =
|
|
MultimapBuilder.hashKeys().arrayListValues().<String, Integer>build();
|
|
SortedSetMultimap<String, Integer> b =
|
|
MultimapBuilder.linkedHashKeys().treeSetValues().<String, Integer>build();
|
|
SetMultimap<String, Integer> c =
|
|
MultimapBuilder.treeKeys(String.CASE_INSENSITIVE_ORDER)
|
|
.hashSetValues()
|
|
.<String, Integer>build();
|
|
}
|
|
|
|
@GwtIncompatible // doesn't build without explicit type parameters on build() methods
|
|
public void testTreeKeys() {
|
|
ListMultimap<String, Integer> multimap = MultimapBuilder.treeKeys().arrayListValues().build();
|
|
assertTrue(multimap.keySet() instanceof SortedSet);
|
|
assertTrue(multimap.asMap() instanceof SortedMap);
|
|
}
|
|
|
|
public void testTreeKeys_gwtCompatible() {
|
|
ListMultimap<String, Integer> multimap =
|
|
MultimapBuilder.treeKeys().arrayListValues().<String, Integer>build();
|
|
assertTrue(multimap.keySet() instanceof SortedSet);
|
|
assertTrue(multimap.asMap() instanceof SortedMap);
|
|
}
|
|
|
|
@GwtIncompatible // serialization
|
|
public void testSerialization() throws Exception {
|
|
for (MultimapBuilderWithKeys<?> builderWithKeys :
|
|
ImmutableList.of(
|
|
MultimapBuilder.hashKeys(),
|
|
MultimapBuilder.linkedHashKeys(),
|
|
MultimapBuilder.treeKeys(),
|
|
MultimapBuilder.enumKeys(RoundingMode.class))) {
|
|
for (MultimapBuilder<?, ?> builder :
|
|
ImmutableList.of(
|
|
builderWithKeys.arrayListValues(),
|
|
builderWithKeys.linkedListValues(),
|
|
builderWithKeys.hashSetValues(),
|
|
builderWithKeys.linkedHashSetValues(),
|
|
builderWithKeys.treeSetValues(),
|
|
builderWithKeys.enumSetValues(RoundingMode.class))) {
|
|
/*
|
|
* Temporarily inlining SerializableTester here for obscure internal reasons.
|
|
*/
|
|
reserializeAndAssert(builder.build());
|
|
}
|
|
}
|
|
}
|
|
|
|
@GwtIncompatible // serialization
|
|
private static void reserializeAndAssert(Object object) throws Exception {
|
|
Object copy = reserialize(object);
|
|
assertEquals(object, copy);
|
|
assertEquals(object.getClass(), copy.getClass());
|
|
}
|
|
|
|
@GwtIncompatible // serialization
|
|
private static Object reserialize(Object object) throws Exception {
|
|
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
|
|
new ObjectOutputStream(bytes).writeObject(object);
|
|
return new ObjectInputStream(new ByteArrayInputStream(bytes.toByteArray())).readObject();
|
|
}
|
|
}
|