17dd252788645e940eada959bdde927426e2531c9Paul Duffin/* 27dd252788645e940eada959bdde927426e2531c9Paul Duffin * Copyright (C) 2010 The Guava Authors 37dd252788645e940eada959bdde927426e2531c9Paul Duffin * 47dd252788645e940eada959bdde927426e2531c9Paul Duffin * Licensed under the Apache License, Version 2.0 (the "License"); 57dd252788645e940eada959bdde927426e2531c9Paul Duffin * you may not use this file except in compliance with the License. 67dd252788645e940eada959bdde927426e2531c9Paul Duffin * You may obtain a copy of the License at 77dd252788645e940eada959bdde927426e2531c9Paul Duffin * 87dd252788645e940eada959bdde927426e2531c9Paul Duffin * http://www.apache.org/licenses/LICENSE-2.0 97dd252788645e940eada959bdde927426e2531c9Paul Duffin * 107dd252788645e940eada959bdde927426e2531c9Paul Duffin * Unless required by applicable law or agreed to in writing, software 117dd252788645e940eada959bdde927426e2531c9Paul Duffin * distributed under the License is distributed on an "AS IS" BASIS, 127dd252788645e940eada959bdde927426e2531c9Paul Duffin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137dd252788645e940eada959bdde927426e2531c9Paul Duffin * See the License for the specific language governing permissions and 147dd252788645e940eada959bdde927426e2531c9Paul Duffin * limitations under the License. 157dd252788645e940eada959bdde927426e2531c9Paul Duffin */ 167dd252788645e940eada959bdde927426e2531c9Paul Duffin 177dd252788645e940eada959bdde927426e2531c9Paul Duffinpackage com.google.common.collect.testing; 187dd252788645e940eada959bdde927426e2531c9Paul Duffin 197dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.annotations.GwtIncompatible; 207dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.ImmutableSortedMap; 217dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.Lists; 227dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.Ordering; 237dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.Sets; 247dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.features.CollectionFeature; 257dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.features.CollectionSize; 267dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.testing.SerializableTester; 277dd252788645e940eada959bdde927426e2531c9Paul Duffin 287dd252788645e940eada959bdde927426e2531c9Paul Duffinimport junit.framework.Test; 297dd252788645e940eada959bdde927426e2531c9Paul Duffinimport junit.framework.TestCase; 307dd252788645e940eada959bdde927426e2531c9Paul Duffinimport junit.framework.TestSuite; 317dd252788645e940eada959bdde927426e2531c9Paul Duffin 327dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.util.Arrays; 330888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport java.util.Collections; 347dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.util.List; 357dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.util.Map; 363ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffinimport java.util.NavigableSet; 377dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.util.Set; 387dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.util.SortedSet; 397dd252788645e940eada959bdde927426e2531c9Paul Duffin 407dd252788645e940eada959bdde927426e2531c9Paul Duffinpublic class SafeTreeSetTest extends TestCase { 417dd252788645e940eada959bdde927426e2531c9Paul Duffin public static Test suite() { 427dd252788645e940eada959bdde927426e2531c9Paul Duffin TestSuite suite = new TestSuite(); 437dd252788645e940eada959bdde927426e2531c9Paul Duffin suite.addTestSuite(SafeTreeSetTest.class); 443ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin suite.addTest( 453ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin NavigableSetTestSuiteBuilder.using(new TestStringSetGenerator() { 463ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin @Override protected Set<String> create(String[] elements) { 473ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin return new SafeTreeSet<String>(Arrays.asList(elements)); 483ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin } 493ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin 503ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin @Override public List<String> order(List<String> insertionOrder) { 513ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin return Lists.newArrayList(Sets.newTreeSet(insertionOrder)); 523ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin } 533ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin }).withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER, 543ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin CollectionFeature.GENERAL_PURPOSE).named( 553ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin "SafeTreeSet with natural comparator").createTestSuite()); 567dd252788645e940eada959bdde927426e2531c9Paul Duffin suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() { 577dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override protected Set<String> create(String[] elements) { 583ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin NavigableSet<String> set = 597dd252788645e940eada959bdde927426e2531c9Paul Duffin new SafeTreeSet<String>(Ordering.natural().nullsFirst()); 600888a09821a98ac0680fad765217302858e70fa4Paul Duffin Collections.addAll(set, elements); 617dd252788645e940eada959bdde927426e2531c9Paul Duffin return set; 627dd252788645e940eada959bdde927426e2531c9Paul Duffin } 637dd252788645e940eada959bdde927426e2531c9Paul Duffin 647dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override public List<String> order(List<String> insertionOrder) { 657dd252788645e940eada959bdde927426e2531c9Paul Duffin return Lists.newArrayList(Sets.newTreeSet(insertionOrder)); 667dd252788645e940eada959bdde927426e2531c9Paul Duffin } 677dd252788645e940eada959bdde927426e2531c9Paul Duffin }).withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER, 687dd252788645e940eada959bdde927426e2531c9Paul Duffin CollectionFeature.GENERAL_PURPOSE, CollectionFeature.ALLOWS_NULL_VALUES) 697dd252788645e940eada959bdde927426e2531c9Paul Duffin .named("SafeTreeSet with null-friendly comparator").createTestSuite()); 707dd252788645e940eada959bdde927426e2531c9Paul Duffin return suite; 717dd252788645e940eada959bdde927426e2531c9Paul Duffin } 727dd252788645e940eada959bdde927426e2531c9Paul Duffin 737dd252788645e940eada959bdde927426e2531c9Paul Duffin @GwtIncompatible("SerializableTester") 747dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testViewSerialization() { 757dd252788645e940eada959bdde927426e2531c9Paul Duffin Map<String, Integer> map = 767dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableSortedMap.of("one", 1, "two", 2, "three", 3); 777dd252788645e940eada959bdde927426e2531c9Paul Duffin SerializableTester.reserializeAndAssert(map.entrySet()); 787dd252788645e940eada959bdde927426e2531c9Paul Duffin SerializableTester.reserializeAndAssert(map.keySet()); 797dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals(Lists.newArrayList(map.values()), 807dd252788645e940eada959bdde927426e2531c9Paul Duffin Lists.newArrayList(SerializableTester.reserialize(map.values()))); 817dd252788645e940eada959bdde927426e2531c9Paul Duffin } 827dd252788645e940eada959bdde927426e2531c9Paul Duffin 837dd252788645e940eada959bdde927426e2531c9Paul Duffin @GwtIncompatible("SerializableTester") 847dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testEmpty_serialization() { 857dd252788645e940eada959bdde927426e2531c9Paul Duffin SortedSet<String> set = new SafeTreeSet<String>(); 867dd252788645e940eada959bdde927426e2531c9Paul Duffin SortedSet<String> copy = SerializableTester.reserializeAndAssert(set); 877dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals(set.comparator(), copy.comparator()); 887dd252788645e940eada959bdde927426e2531c9Paul Duffin } 897dd252788645e940eada959bdde927426e2531c9Paul Duffin 907dd252788645e940eada959bdde927426e2531c9Paul Duffin @GwtIncompatible("SerializableTester") 917dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testSingle_serialization() { 927dd252788645e940eada959bdde927426e2531c9Paul Duffin SortedSet<String> set = new SafeTreeSet<String>(); 937dd252788645e940eada959bdde927426e2531c9Paul Duffin set.add("e"); 947dd252788645e940eada959bdde927426e2531c9Paul Duffin SortedSet<String> copy = SerializableTester.reserializeAndAssert(set); 957dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals(set.comparator(), copy.comparator()); 967dd252788645e940eada959bdde927426e2531c9Paul Duffin } 977dd252788645e940eada959bdde927426e2531c9Paul Duffin 987dd252788645e940eada959bdde927426e2531c9Paul Duffin @GwtIncompatible("SerializableTester") 997dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testSeveral_serialization() { 1007dd252788645e940eada959bdde927426e2531c9Paul Duffin SortedSet<String> set = new SafeTreeSet<String>(); 1017dd252788645e940eada959bdde927426e2531c9Paul Duffin set.add("a"); 1027dd252788645e940eada959bdde927426e2531c9Paul Duffin set.add("b"); 1037dd252788645e940eada959bdde927426e2531c9Paul Duffin set.add("c"); 1047dd252788645e940eada959bdde927426e2531c9Paul Duffin SortedSet<String> copy = SerializableTester.reserializeAndAssert(set); 1057dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals(set.comparator(), copy.comparator()); 1067dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1077dd252788645e940eada959bdde927426e2531c9Paul Duffin} 108