11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2009 The Guava Authors 31d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 41d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); 51d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * you may not use this file except in compliance with the License. 61d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * You may obtain a copy of the License at 71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 81d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 91d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unless required by applicable law or agreed to in writing, software 111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS, 121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * See the License for the specific language governing permissions and 141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * limitations under the License. 151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpackage com.google.common.collect.testing.google; 181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static java.util.Arrays.asList; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.ImmutableList; 237dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.Lists; 247dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.TestCharacterListGenerator; 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.TestListGenerator; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.TestStringListGenerator; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.TestUnhashableCollectionGenerator; 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.UnhashableObject; 297dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.primitives.Chars; 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 317dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.util.Arrays; 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collections; 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.List; 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Common generators of different types of lists. 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Hayward Chan 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic final class ListGenerators { 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private ListGenerators() {} 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class ImmutableListOfGenerator extends TestStringListGenerator { 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected List<String> create(String[] elements) { 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableList.copyOf(elements); 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class BuilderAddListGenerator extends TestStringListGenerator { 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected List<String> create(String[] elements) { 537dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableList.Builder<String> builder = ImmutableList.<String>builder(); 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (String element : elements) { 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.add(element); 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return builder.build(); 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class BuilderAddAllListGenerator 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends TestStringListGenerator { 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected List<String> create(String[] elements) { 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableList.<String>builder() 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addAll(asList(elements)) 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 697dd252788645e940eada959bdde927426e2531c9Paul Duffin 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class BuilderReversedListGenerator 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends TestStringListGenerator { 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected List<String> create(String[] elements) { 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = asList(elements); 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collections.reverse(list); 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableList.copyOf(list).reverse(); 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class ImmutableListHeadSubListGenerator 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends TestStringListGenerator { 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected List<String> create(String[] elements) { 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] suffix = {"f", "g"}; 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] all = new String[elements.length + suffix.length]; 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert System.arraycopy(elements, 0, all, 0, elements.length); 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert System.arraycopy(suffix, 0, all, elements.length, suffix.length); 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableList.copyOf(all) 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .subList(0, elements.length); 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class ImmutableListTailSubListGenerator 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends TestStringListGenerator { 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected List<String> create(String[] elements) { 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] prefix = {"f", "g"}; 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] all = new String[elements.length + prefix.length]; 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert System.arraycopy(prefix, 0, all, 0, 2); 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert System.arraycopy(elements, 0, all, 2, elements.length); 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableList.copyOf(all) 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .subList(2, elements.length + 2); 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class ImmutableListMiddleSubListGenerator 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends TestStringListGenerator { 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected List<String> create(String[] elements) { 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] prefix = {"f", "g"}; 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] suffix = {"h", "i"}; 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] all = new String[2 + elements.length + 2]; 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert System.arraycopy(prefix, 0, all, 0, 2); 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert System.arraycopy(elements, 0, all, 2, elements.length); 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert System.arraycopy(suffix, 0, all, 2 + elements.length, 2); 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableList.copyOf(all) 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .subList(2, elements.length + 2); 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1197dd252788645e940eada959bdde927426e2531c9Paul Duffin public static class CharactersOfStringGenerator 1207dd252788645e940eada959bdde927426e2531c9Paul Duffin extends TestCharacterListGenerator { 1217dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override public List<Character> create(Character[] elements) { 1227dd252788645e940eada959bdde927426e2531c9Paul Duffin char[] chars = Chars.toArray(Arrays.asList(elements)); 1237dd252788645e940eada959bdde927426e2531c9Paul Duffin return Lists.charactersOf(String.copyValueOf(chars)); 1247dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1257dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1267dd252788645e940eada959bdde927426e2531c9Paul Duffin 1277dd252788645e940eada959bdde927426e2531c9Paul Duffin public static class CharactersOfCharSequenceGenerator 1287dd252788645e940eada959bdde927426e2531c9Paul Duffin extends TestCharacterListGenerator { 1297dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override public List<Character> create(Character[] elements) { 1307dd252788645e940eada959bdde927426e2531c9Paul Duffin char[] chars = Chars.toArray(Arrays.asList(elements)); 1317dd252788645e940eada959bdde927426e2531c9Paul Duffin StringBuilder str = new StringBuilder(); 1327dd252788645e940eada959bdde927426e2531c9Paul Duffin str.append(chars); 1337dd252788645e940eada959bdde927426e2531c9Paul Duffin return Lists.charactersOf(str); 1347dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1357dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1367dd252788645e940eada959bdde927426e2531c9Paul Duffin 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private abstract static class TestUnhashableListGenerator 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends TestUnhashableCollectionGenerator<List<UnhashableObject>> 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert implements TestListGenerator<UnhashableObject> { 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class UnhashableElementsImmutableListGenerator 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends TestUnhashableListGenerator { 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public List<UnhashableObject> create(UnhashableObject[] elements) { 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableList.copyOf(elements); 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 150