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; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.ImmutableList.Builder; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.TestListGenerator; 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.TestStringListGenerator; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.TestUnhashableCollectionGenerator; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.UnhashableObject; 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collections; 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.List; 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Common generators of different types of lists. 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Hayward Chan 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic final class ListGenerators { 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private ListGenerators() {} 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class ImmutableListOfGenerator extends TestStringListGenerator { 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected List<String> create(String[] elements) { 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableList.copyOf(elements); 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class BuilderAddListGenerator extends TestStringListGenerator { 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected List<String> create(String[] elements) { 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Builder<String> builder = ImmutableList.<String>builder(); 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (String element : elements) { 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.add(element); 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return builder.build(); 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class BuilderAddAllListGenerator 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends TestStringListGenerator { 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected List<String> create(String[] elements) { 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableList.<String>builder() 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addAll(asList(elements)) 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class BuilderReversedListGenerator 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends TestStringListGenerator { 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected List<String> create(String[] elements) { 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = asList(elements); 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collections.reverse(list); 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableList.copyOf(list).reverse(); 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class ImmutableListHeadSubListGenerator 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends TestStringListGenerator { 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected List<String> create(String[] elements) { 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] suffix = {"f", "g"}; 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] all = new String[elements.length + suffix.length]; 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert System.arraycopy(elements, 0, all, 0, elements.length); 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert System.arraycopy(suffix, 0, all, elements.length, suffix.length); 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableList.copyOf(all) 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .subList(0, elements.length); 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class ImmutableListTailSubListGenerator 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends TestStringListGenerator { 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected List<String> create(String[] elements) { 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] prefix = {"f", "g"}; 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] all = new String[elements.length + prefix.length]; 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert System.arraycopy(prefix, 0, all, 0, 2); 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert System.arraycopy(elements, 0, all, 2, elements.length); 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableList.copyOf(all) 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .subList(2, elements.length + 2); 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class ImmutableListMiddleSubListGenerator 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends TestStringListGenerator { 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected List<String> create(String[] elements) { 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] prefix = {"f", "g"}; 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] suffix = {"h", "i"}; 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] all = new String[2 + elements.length + 2]; 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert System.arraycopy(prefix, 0, all, 0, 2); 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert System.arraycopy(elements, 0, all, 2, elements.length); 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert System.arraycopy(suffix, 0, all, 2 + elements.length, 2); 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableList.copyOf(all) 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .subList(2, elements.length + 2); 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private abstract static class TestUnhashableListGenerator 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends TestUnhashableCollectionGenerator<List<UnhashableObject>> 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert implements TestListGenerator<UnhashableObject> { 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class UnhashableElementsImmutableListGenerator 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends TestUnhashableListGenerator { 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public List<UnhashableObject> create(UnhashableObject[] elements) { 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableList.copyOf(elements); 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 129