1 /* 2 * Copyright (C) 2010 The Guava Authors 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.google.common.collect.testing; 18 19 import static java.util.Collections.sort; 20 21 import com.google.common.annotations.GwtIncompatible; 22 import com.google.common.collect.ImmutableSortedMap; 23 import com.google.common.collect.Lists; 24 import com.google.common.collect.Ordering; 25 import com.google.common.collect.testing.Helpers.NullsBeforeTwo; 26 import com.google.common.collect.testing.features.CollectionFeature; 27 import com.google.common.collect.testing.features.CollectionSize; 28 import com.google.common.collect.testing.features.MapFeature; 29 import com.google.common.testing.SerializableTester; 30 31 import junit.framework.Test; 32 import junit.framework.TestCase; 33 import junit.framework.TestSuite; 34 35 import java.util.List; 36 import java.util.Map; 37 import java.util.Map.Entry; 38 import java.util.NavigableMap; 39 import java.util.SortedMap; 40 41 /** 42 * Tests for SafeTreeMap. 43 * 44 * @author Louis Wasserman 45 */ 46 public class SafeTreeMapTest extends TestCase { 47 public static Test suite() { 48 TestSuite suite = new TestSuite(); 49 suite.addTestSuite(SafeTreeMapTest.class); 50 suite.addTest( 51 NavigableMapTestSuiteBuilder.using(new TestStringSortedMapGenerator() { 52 @Override protected SortedMap<String, String> create( 53 Entry<String, String>[] entries) { 54 NavigableMap<String, String> map = 55 new SafeTreeMap<String, String>(Ordering.natural()); 56 for (Entry<String, String> entry : entries) { 57 map.put(entry.getKey(), entry.getValue()); 58 } 59 return map; 60 } 61 }).withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER, 62 CollectionFeature.SERIALIZABLE, MapFeature.ALLOWS_NULL_VALUES, 63 CollectionFeature.SUPPORTS_ITERATOR_REMOVE, MapFeature.GENERAL_PURPOSE).named( 64 "SafeTreeMap with natural comparator").createTestSuite()); 65 suite.addTest(NavigableMapTestSuiteBuilder.using(new TestStringSortedMapGenerator() { 66 @Override protected SortedMap<String, String> create( 67 Entry<String, String>[] entries) { 68 NavigableMap<String, String> map = 69 new SafeTreeMap<String, String>(NullsBeforeTwo.INSTANCE); 70 for (Entry<String, String> entry : entries) { 71 map.put(entry.getKey(), entry.getValue()); 72 } 73 return map; 74 } 75 76 @Override 77 public Iterable<Entry<String, String>> order(List<Entry<String, String>> insertionOrder) { 78 sort(insertionOrder, Helpers.<String, String>entryComparator(NullsBeforeTwo.INSTANCE)); 79 return insertionOrder; 80 } 81 }).withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER, 82 MapFeature.ALLOWS_NULL_KEYS, MapFeature.ALLOWS_NULL_VALUES, 83 MapFeature.ALLOWS_ANY_NULL_QUERIES, MapFeature.GENERAL_PURPOSE, 84 CollectionFeature.SUPPORTS_ITERATOR_REMOVE, CollectionFeature.SERIALIZABLE).named( 85 "SafeTreeMap with null-friendly comparator").createTestSuite()); 86 return suite; 87 } 88 89 @GwtIncompatible("SerializableTester") 90 public void testViewSerialization() { 91 Map<String, Integer> map = 92 ImmutableSortedMap.of("one", 1, "two", 2, "three", 3); 93 SerializableTester.reserializeAndAssert(map.entrySet()); 94 SerializableTester.reserializeAndAssert(map.keySet()); 95 assertEquals(Lists.newArrayList(map.values()), 96 Lists.newArrayList(SerializableTester.reserialize(map.values()))); 97 } 98 99 @GwtIncompatible("SerializableTester") 100 public static class ReserializedMapTests 101 extends SortedMapInterfaceTest<String, Integer> { 102 public ReserializedMapTests() { 103 super(false, true, true, true, true); 104 } 105 106 @Override protected SortedMap<String, Integer> makePopulatedMap() { 107 NavigableMap<String, Integer> map = new SafeTreeMap<String, Integer>(); 108 map.put("one", 1); 109 map.put("two", 2); 110 map.put("three", 3); 111 return SerializableTester.reserialize(map); 112 } 113 114 @Override protected SortedMap<String, Integer> makeEmptyMap() 115 throws UnsupportedOperationException { 116 NavigableMap<String, Integer> map = new SafeTreeMap<String, Integer>(); 117 return SerializableTester.reserialize(map); 118 } 119 120 @Override protected String getKeyNotInPopulatedMap() { 121 return "minus one"; 122 } 123 124 @Override protected Integer getValueNotInPopulatedMap() { 125 return -1; 126 } 127 } 128 } 129