001/* 002 * Copyright (C) 2009 The Guava Authors 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017package com.google.common.collect.testing.google; 018 019import static com.google.common.base.Preconditions.checkNotNull; 020import static com.google.common.collect.testing.Helpers.mapEntry; 021 022import com.google.common.annotations.GwtCompatible; 023import com.google.common.collect.ImmutableSortedMap; 024import com.google.common.collect.Ordering; 025import com.google.common.collect.testing.SampleElements; 026import com.google.common.collect.testing.TestListGenerator; 027import com.google.common.collect.testing.TestStringListGenerator; 028import com.google.common.collect.testing.TestStringSortedMapGenerator; 029import java.util.Arrays; 030import java.util.List; 031import java.util.Map.Entry; 032import java.util.SortedMap; 033 034/** 035 * Generators of sorted maps and derived collections. 036 * 037 * @author Kevin Bourrillion 038 * @author Jesse Wilson 039 * @author Jared Levy 040 * @author Hayward Chan 041 * @author Chris Povirk 042 * @author Louis Wasserman 043 */ 044@GwtCompatible 045@ElementTypesAreNonnullByDefault 046public class SortedMapGenerators { 047 public static class ImmutableSortedMapGenerator extends TestStringSortedMapGenerator { 048 @Override 049 public SortedMap<String, String> create(Entry<String, String>[] entries) { 050 ImmutableSortedMap.Builder<String, String> builder = ImmutableSortedMap.naturalOrder(); 051 for (Entry<String, String> entry : entries) { 052 checkNotNull(entry); 053 builder.put(entry.getKey(), entry.getValue()); 054 } 055 return builder.build(); 056 } 057 } 058 059 public static class ImmutableSortedMapCopyOfEntriesGenerator 060 extends TestStringSortedMapGenerator { 061 @Override 062 public SortedMap<String, String> create(Entry<String, String>[] entries) { 063 return ImmutableSortedMap.copyOf(Arrays.asList(entries)); 064 } 065 } 066 067 public static class ImmutableSortedMapEntryListGenerator 068 implements TestListGenerator<Entry<String, Integer>> { 069 070 @Override 071 public SampleElements<Entry<String, Integer>> samples() { 072 return new SampleElements<>( 073 mapEntry("foo", 5), 074 mapEntry("bar", 3), 075 mapEntry("baz", 17), 076 mapEntry("quux", 1), 077 mapEntry("toaster", -2)); 078 } 079 080 @SuppressWarnings("unchecked") 081 @Override 082 public Entry<String, Integer>[] createArray(int length) { 083 return (Entry<String, Integer>[]) new Entry<?, ?>[length]; 084 } 085 086 @Override 087 public Iterable<Entry<String, Integer>> order(List<Entry<String, Integer>> insertionOrder) { 088 return new Ordering<Entry<String, Integer>>() { 089 @Override 090 public int compare(Entry<String, Integer> left, Entry<String, Integer> right) { 091 return left.getKey().compareTo(right.getKey()); 092 } 093 }.sortedCopy(insertionOrder); 094 } 095 096 @Override 097 public List<Entry<String, Integer>> create(Object... elements) { 098 ImmutableSortedMap.Builder<String, Integer> builder = ImmutableSortedMap.naturalOrder(); 099 for (Object o : elements) { 100 @SuppressWarnings("unchecked") 101 Entry<String, Integer> entry = (Entry<String, Integer>) o; 102 builder.put(entry); 103 } 104 return builder.build().entrySet().asList(); 105 } 106 } 107 108 public static class ImmutableSortedMapKeyListGenerator extends TestStringListGenerator { 109 @Override 110 protected List<String> create(String[] elements) { 111 ImmutableSortedMap.Builder<String, Integer> builder = ImmutableSortedMap.naturalOrder(); 112 for (int i = 0; i < elements.length; i++) { 113 builder.put(elements[i], i); 114 } 115 return builder.build().keySet().asList(); 116 } 117 118 @Override 119 public List<String> order(List<String> insertionOrder) { 120 return Ordering.<String>natural().sortedCopy(insertionOrder); 121 } 122 } 123 124 public static class ImmutableSortedMapValueListGenerator extends TestStringListGenerator { 125 @Override 126 protected List<String> create(String[] elements) { 127 ImmutableSortedMap.Builder<Integer, String> builder = ImmutableSortedMap.naturalOrder(); 128 for (int i = 0; i < elements.length; i++) { 129 builder.put(i, elements[i]); 130 } 131 return builder.build().values().asList(); 132 } 133 } 134}