11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2008 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.primitives; 181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.base.Preconditions.checkNotNull; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.ImmutableList; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.ListTestSuiteBuilder; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.SampleElements; 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.TestListGenerator; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionFeature; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionSize; 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.ListFeature; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.Test; 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestCase; 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestSuite; 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.List; 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Test suite covering {@link Bytes#asList(byte[])}. 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Kevin Bourrillion 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class ByteArrayAsListTest extends TestCase { 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static List<Byte> asList(Byte[] values) { 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert byte[] temp = new byte[values.length]; 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 0; i < values.length; i++) { 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert temp[i] = checkNotNull(values[i]); // checkNotNull for GWT (do not optimize). 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Bytes.asList(temp); 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static Test suite() { 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<ListTestSuiteBuilder<Byte>> builders = 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableList.of( 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ListTestSuiteBuilder.using(new BytesAsListGenerator()) 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("Bytes.asList"), 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ListTestSuiteBuilder.using(new BytesAsListHeadSubListGenerator()) 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("Bytes.asList, head subList"), 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ListTestSuiteBuilder.using(new BytesAsListTailSubListGenerator()) 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("Bytes.asList, tail subList"), 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ListTestSuiteBuilder.using(new BytesAsListMiddleSubListGenerator()) 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("Bytes.asList, middle subList") 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ); 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TestSuite suite = new TestSuite(); 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (ListTestSuiteBuilder<Byte> builder : builders) { 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest( 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.ONE, 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionSize.SEVERAL, 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.RESTRICTS_ELEMENTS, 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ListFeature.SUPPORTS_SET) 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return suite; 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Test generators. To let the GWT test suite generator access them, they need to be 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // public named classes with a public default constructor. 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static final class BytesAsListGenerator extends TestByteListGenerator { 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected List<Byte> create(Byte[] elements) { 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return asList(elements); 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static final class BytesAsListHeadSubListGenerator extends TestByteListGenerator { 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected List<Byte> create(Byte[] elements) { 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Byte[] suffix = {Byte.MIN_VALUE, Byte.MAX_VALUE}; 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Byte[] all = concat(elements, suffix); 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return asList(all).subList(0, elements.length); 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static final class BytesAsListTailSubListGenerator extends TestByteListGenerator { 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected List<Byte> create(Byte[] elements) { 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Byte[] prefix = {(byte) 86, (byte) 99}; 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Byte[] all = concat(prefix, elements); 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return asList(all).subList(2, elements.length + 2); 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static final class BytesAsListMiddleSubListGenerator extends TestByteListGenerator { 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected List<Byte> create(Byte[] elements) { 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Byte[] prefix = {Byte.MIN_VALUE, Byte.MAX_VALUE}; 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Byte[] suffix = {(byte) 86, (byte) 99}; 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Byte[] all = concat(concat(prefix, elements), suffix); 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return asList(all).subList(2, elements.length + 2); 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static Byte[] concat(Byte[] left, Byte[] right) { 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Byte[] result = new Byte[left.length + right.length]; 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert System.arraycopy(left, 0, result, 0, left.length); 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert System.arraycopy(right, 0, result, left.length, right.length); 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return result; 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static abstract class TestByteListGenerator 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert implements TestListGenerator<Byte> { 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public SampleElements<Byte> samples() { 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return new SampleBytes(); 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public List<Byte> create(Object... elements) { 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Byte[] array = new Byte[elements.length]; 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int i = 0; 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Object e : elements) { 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert array[i++] = (Byte) e; 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return create(array); 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Creates a new collection containing the given elements; implement this 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * method instead of {@link #create(Object...)}. 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected abstract List<Byte> create(Byte[] elements); 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Byte[] createArray(int length) { 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return new Byte[length]; 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** Returns the original element list, unchanged. */ 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public List<Byte> order(List<Byte> insertionOrder) { 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return insertionOrder; 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class SampleBytes extends SampleElements<Byte> { 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public SampleBytes() { 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super((byte) 0, (byte) 1, (byte) 2, (byte) 3, (byte) 4); 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 163