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 045public class SortedMapGenerators { 046 public static class ImmutableSortedMapGenerator extends TestStringSortedMapGenerator { 047 @Override 048 public SortedMap<String, String> create(Entry<String, String>[] entries) { 049 ImmutableSortedMap.Builder<String, String> builder = ImmutableSortedMap.naturalOrder(); 050 for (Entry<String, String> entry : entries) { 051 checkNotNull(entry); 052 builder.put(entry.getKey(), entry.getValue()); 053 } 054 return builder.build(); 055 } 056 } 057 058 public static class ImmutableSortedMapCopyOfEntriesGenerator 059 extends TestStringSortedMapGenerator { 060 @Override 061 public SortedMap<String, String> create(Entry<String, String>[] entries) { 062 return ImmutableSortedMap.copyOf(Arrays.asList(entries)); 063 } 064 } 065 066 public static class ImmutableSortedMapEntryListGenerator 067 implements TestListGenerator<Entry<String, Integer>> { 068 069 @Override 070 public SampleElements<Entry<String, Integer>> samples() { 071 return new SampleElements<>( 072 mapEntry("foo", 5), 073 mapEntry("bar", 3), 074 mapEntry("baz", 17), 075 mapEntry("quux", 1), 076 mapEntry("toaster", -2)); 077 } 078 079 @SuppressWarnings("unchecked") 080 @Override 081 public Entry<String, Integer>[] createArray(int length) { 082 return new Entry[length]; 083 } 084 085 @Override 086 public Iterable<Entry<String, Integer>> order(List<Entry<String, Integer>> insertionOrder) { 087 return new Ordering<Entry<String, Integer>>() { 088 @Override 089 public int compare(Entry<String, Integer> left, Entry<String, Integer> right) { 090 return left.getKey().compareTo(right.getKey()); 091 } 092 }.sortedCopy(insertionOrder); 093 } 094 095 @Override 096 public List<Entry<String, Integer>> create(Object... elements) { 097 ImmutableSortedMap.Builder<String, Integer> builder = ImmutableSortedMap.naturalOrder(); 098 for (Object o : elements) { 099 @SuppressWarnings("unchecked") 100 Entry<String, Integer> entry = (Entry<String, Integer>) o; 101 builder.put(entry); 102 } 103 return builder.build().entrySet().asList(); 104 } 105 } 106 107 public static class ImmutableSortedMapKeyListGenerator extends TestStringListGenerator { 108 @Override 109 protected List<String> create(String[] elements) { 110 ImmutableSortedMap.Builder<String, Integer> builder = ImmutableSortedMap.naturalOrder(); 111 for (int i = 0; i < elements.length; i++) { 112 builder.put(elements[i], i); 113 } 114 return builder.build().keySet().asList(); 115 } 116 117 @Override 118 public List<String> order(List<String> insertionOrder) { 119 return Ordering.natural().sortedCopy(insertionOrder); 120 } 121 } 122 123 public static class ImmutableSortedMapValueListGenerator extends TestStringListGenerator { 124 @Override 125 protected List<String> create(String[] elements) { 126 ImmutableSortedMap.Builder<Integer, String> builder = ImmutableSortedMap.naturalOrder(); 127 for (int i = 0; i < elements.length; i++) { 128 builder.put(i, elements[i]); 129 } 130 return builder.build().values().asList(); 131 } 132 } 133}