1 /* 2 * Copyright (C) 2009 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.google; 18 19 import static java.util.Arrays.asList; 20 21 import com.google.common.annotations.GwtCompatible; 22 import com.google.common.collect.ImmutableList; 23 import com.google.common.collect.Lists; 24 import com.google.common.collect.testing.TestCharacterListGenerator; 25 import com.google.common.collect.testing.TestListGenerator; 26 import com.google.common.collect.testing.TestStringListGenerator; 27 import com.google.common.collect.testing.TestUnhashableCollectionGenerator; 28 import com.google.common.collect.testing.UnhashableObject; 29 import com.google.common.primitives.Chars; 30 31 import java.util.Arrays; 32 import java.util.Collections; 33 import java.util.List; 34 35 /** 36 * Common generators of different types of lists. 37 * 38 * @author Hayward Chan 39 */ 40 @GwtCompatible 41 public final class ListGenerators { 42 ListGenerators()43 private ListGenerators() {} 44 45 public static class ImmutableListOfGenerator extends TestStringListGenerator { create(String[] elements)46 @Override protected List<String> create(String[] elements) { 47 return ImmutableList.copyOf(elements); 48 } 49 } 50 51 public static class BuilderAddListGenerator extends TestStringListGenerator { create(String[] elements)52 @Override protected List<String> create(String[] elements) { 53 ImmutableList.Builder<String> builder = ImmutableList.<String>builder(); 54 for (String element : elements) { 55 builder.add(element); 56 } 57 return builder.build(); 58 } 59 } 60 61 public static class BuilderAddAllListGenerator 62 extends TestStringListGenerator { create(String[] elements)63 @Override protected List<String> create(String[] elements) { 64 return ImmutableList.<String>builder() 65 .addAll(asList(elements)) 66 .build(); 67 } 68 } 69 70 public static class BuilderReversedListGenerator 71 extends TestStringListGenerator { create(String[] elements)72 @Override protected List<String> create(String[] elements) { 73 List<String> list = asList(elements); 74 Collections.reverse(list); 75 return ImmutableList.copyOf(list).reverse(); 76 } 77 } 78 79 public static class ImmutableListHeadSubListGenerator 80 extends TestStringListGenerator { create(String[] elements)81 @Override protected List<String> create(String[] elements) { 82 String[] suffix = {"f", "g"}; 83 String[] all = new String[elements.length + suffix.length]; 84 System.arraycopy(elements, 0, all, 0, elements.length); 85 System.arraycopy(suffix, 0, all, elements.length, suffix.length); 86 return ImmutableList.copyOf(all) 87 .subList(0, elements.length); 88 } 89 } 90 91 public static class ImmutableListTailSubListGenerator 92 extends TestStringListGenerator { create(String[] elements)93 @Override protected List<String> create(String[] elements) { 94 String[] prefix = {"f", "g"}; 95 String[] all = new String[elements.length + prefix.length]; 96 System.arraycopy(prefix, 0, all, 0, 2); 97 System.arraycopy(elements, 0, all, 2, elements.length); 98 return ImmutableList.copyOf(all) 99 .subList(2, elements.length + 2); 100 } 101 } 102 103 public static class ImmutableListMiddleSubListGenerator 104 extends TestStringListGenerator { create(String[] elements)105 @Override protected List<String> create(String[] elements) { 106 String[] prefix = {"f", "g"}; 107 String[] suffix = {"h", "i"}; 108 109 String[] all = new String[2 + elements.length + 2]; 110 System.arraycopy(prefix, 0, all, 0, 2); 111 System.arraycopy(elements, 0, all, 2, elements.length); 112 System.arraycopy(suffix, 0, all, 2 + elements.length, 2); 113 114 return ImmutableList.copyOf(all) 115 .subList(2, elements.length + 2); 116 } 117 } 118 119 public static class CharactersOfStringGenerator 120 extends TestCharacterListGenerator { create(Character[] elements)121 @Override public List<Character> create(Character[] elements) { 122 char[] chars = Chars.toArray(Arrays.asList(elements)); 123 return Lists.charactersOf(String.copyValueOf(chars)); 124 } 125 } 126 127 public static class CharactersOfCharSequenceGenerator 128 extends TestCharacterListGenerator { create(Character[] elements)129 @Override public List<Character> create(Character[] elements) { 130 char[] chars = Chars.toArray(Arrays.asList(elements)); 131 StringBuilder str = new StringBuilder(); 132 str.append(chars); 133 return Lists.charactersOf(str); 134 } 135 } 136 137 private abstract static class TestUnhashableListGenerator 138 extends TestUnhashableCollectionGenerator<List<UnhashableObject>> 139 implements TestListGenerator<UnhashableObject> { 140 } 141 142 public static class UnhashableElementsImmutableListGenerator 143 extends TestUnhashableListGenerator { 144 @Override create(UnhashableObject[] elements)145 public List<UnhashableObject> create(UnhashableObject[] elements) { 146 return ImmutableList.copyOf(elements); 147 } 148 } 149 } 150