16d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim/* 26d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Copyright 2016 The Android Open Source Project 36d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 46d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Licensed under the Apache License, Version 2.0 (the "License"); 56d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * you may not use this file except in compliance with the License. 66d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * You may obtain a copy of the License at 76d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 86d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * http://www.apache.org/licenses/LICENSE-2.0 96d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 106d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Unless required by applicable law or agreed to in writing, software 116d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * distributed under the License is distributed on an "AS IS" BASIS, 126d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * See the License for the specific language governing permissions and 146d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * limitations under the License. 156d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 166d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 176d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimpackage com.android.mediaframeworktest.helpers; 186d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 196d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimimport java.util.ArrayList; 206d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimimport java.util.Arrays; 216d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimimport java.util.Collection; 226d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimimport java.util.List; 236d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 246d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimimport static junit.framework.Assert.assertEquals; 256d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimimport static junit.framework.Assert.assertTrue; 266d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimimport static junit.framework.Assert.fail; 276d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 286d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim/** 296d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Helper set of methods to add extra useful assert functionality missing in junit. 306d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 316d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim/** 326d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * (non-Javadoc) 336d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @see android.hardware.camera2.cts.helpers.AssertHelpers 346d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 356d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimpublic class AssertHelpers { 366d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 376d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim private static final int MAX_FORMAT_STRING = 50; 386d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 396d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 406d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Assert that at least one of the elements in data is non-zero. 416d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 426d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * <p>An empty or a null array always fails.</p> 436d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 446d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public static void assertArrayNotAllZeroes(String message, byte[] data) { 456d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim int size = data.length; 466d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 476d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim int i = 0; 486d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim for (i = 0; i < size; ++i) { 496d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (data[i] != 0) { 506d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim break; 516d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 526d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 536d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 546d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim assertTrue(message, i < size); 556d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 566d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 576d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 586d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Assert that every element in left is less than or equals to the corresponding element in 596d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * right. 606d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 616d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * <p>Array sizes must match.</p> 626d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 636d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param message Message to use in case the assertion fails 646d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param left Left array 656d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param right Right array 666d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 676d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public static void assertArrayNotGreater(String message, float[] left, float[] right) { 686d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim assertEquals("Array lengths did not match", left.length, right.length); 696d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 706d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim String leftString = Arrays.toString(left); 716d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim String rightString = Arrays.toString(right); 726d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 736d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim for (int i = 0; i < left.length; ++i) { 746d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim String msg = String.format( 756d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim "%s: (%s should be less than or equals than %s; item index %d; left = %s; " + 766d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim "right = %s)", 776d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim message, left[i], right[i], i, leftString, rightString); 786d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 796d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim assertTrue(msg, left[i] <= right[i]); 806d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 816d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 826d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 836d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 846d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Assert that every element in the value array is greater than the lower bound (exclusive). 856d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 866d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param value an array of items 876d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param lowerBound the exclusive lower bound 886d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 896d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public static void assertArrayWithinLowerBound(String message, float[] value, float lowerBound) 906d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim { 916d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim for (int i = 0; i < value.length; ++i) { 926d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim assertTrue( 936d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim String.format("%s: (%s should be greater than than %s; item index %d in %s)", 946d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim message, value[i], lowerBound, i, Arrays.toString(value)), 956d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim value[i] > lowerBound); 966d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 976d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 986d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 996d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 1006d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Assert that every element in the value array is less than the upper bound (exclusive). 1016d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 1026d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param value an array of items 1036d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param upperBound the exclusive upper bound 1046d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 1056d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public static void assertArrayWithinUpperBound(String message, float[] value, float upperBound) 1066d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim { 1076d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim for (int i = 0; i < value.length; ++i) { 1086d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim assertTrue( 1096d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim String.format("%s: (%s should be less than than %s; item index %d in %s)", 1106d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim message, value[i], upperBound, i, Arrays.toString(value)), 1116d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim value[i] < upperBound); 1126d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 1136d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 1146d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 1156d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 1166d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Assert that {@code low <= value <= high} 1176d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 1186d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public static void assertInRange(float value, float low, float high) { 1196d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim assertTrue( 1206d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim String.format("Value %s must be greater or equal to %s, but was lower", value, low), 1216d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim value >= low); 1226d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim assertTrue( 1236d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim String.format("Value %s must be less than or equal to %s, but was higher", 1246d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim value, high), 1256d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim value <= high); 1266d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 1276d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim // TODO: generic by using comparators 1286d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 1296d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 1306d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 1316d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Assert that the given array contains the given value. 1326d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 1336d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param message message to print on failure. 1346d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param actual array to test. 1356d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param checkVals value to check for array membership. 1366d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 1376d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public static <T> void assertArrayContains(String message, T[] actual, T checkVals) { 1386d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim assertCollectionContainsAnyOf(message, buildList(actual), Arrays.asList(checkVals)); 1396d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 1406d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 1416d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 1426d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 1436d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Assert that the given array contains the given value. 1446d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 1456d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param message message to print on failure. 1466d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param actual array to test. 1476d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param checkVals value to check for array membership. 1486d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 1496d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public static void assertArrayContains(String message, int[] actual, int checkVals) { 1506d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim assertCollectionContainsAnyOf(message, buildList(actual), Arrays.asList(checkVals)); 1516d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 1526d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 1536d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 1546d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Assert that the given array contains at least one of the given values. 1556d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 1566d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param message message to print on failure. 1576d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param actual array to test 1586d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param checkVals values to check for array membership. 1596d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @return the value contained, or null. 1606d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 1616d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public static <T> T assertArrayContainsAnyOf(String message, T[] actual, T[] checkVals) { 1626d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return assertCollectionContainsAnyOf(message, buildList(actual), buildList(checkVals)); 1636d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 1646d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 1656d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 1666d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Assert that the given array contains at least one of the given values. 1676d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 1686d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param message message to print on failure. 1696d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param actual array to test 1706d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param checkVals values to check for array membership. 1716d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @return the value contained. 1726d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 1736d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public static int assertArrayContainsAnyOf(String message, int[] actual, int[] checkVals) { 1746d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return assertCollectionContainsAnyOf(message, buildList(actual), buildList(checkVals)); 1756d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 1766d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 1776d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 1786d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Assert that the given {@link Collection} contains at least one of the given values. 1796d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 1806d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param message message to print on failure. 1816d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param actual {@link Collection} to test. 1826d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param checkVals a {@link Collection} of values to check for membership. 1836d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @return the value contained, or null. 1846d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 1856d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public static <T> T assertCollectionContainsAnyOf(String message, Collection<T> actual, 1866d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim Collection<T> checkVals) { 1876d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim boolean contains = false; 1886d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim T selected = null; 1896d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim for (T check : checkVals) { 1906d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim contains = actual.contains(check); 1916d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (contains) { 1926d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim selected = check; 1936d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim break; 1946d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 1956d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 1966d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 1976d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (!contains) { 1986d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim fail(String.format("%s : No elements from %s in %s", message, 1996d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim formatCollection(actual, MAX_FORMAT_STRING), 2006d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim formatCollection(checkVals, MAX_FORMAT_STRING))); 2016d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 2026d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return selected; 2036d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 2046d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 2056d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim private static <T> List<T> buildList(T[] array) { 2066d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return new ArrayList<T>(Arrays.asList(array)); 2076d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 2086d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 2096d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim private static List<Integer> buildList(int[] array) { 2106d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim List<Integer> list = new ArrayList<Integer>(array.length); 2116d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim for (Integer val : array) { 2126d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim list.add(val); 2136d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 2146d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return list; 2156d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 2166d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 2176d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim private static <T> String formatCollection(Collection<T> collection, int maxLen) { 2186d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim StringBuilder builder = new StringBuilder(); 2196d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim builder.append("["); 2206d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 2216d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim boolean first = true; 2226d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim for (T elem : collection) { 2236d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim String val = ((first) ? ", " : "") + ((elem != null) ? elem.toString() : "null"); 2246d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim first = false; 2256d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if ((builder.length() + val.length()) > maxLen - "...]".length()) { 2266d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim builder.append("..."); 2276d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim break; 2286d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } else { 2296d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim builder.append(val); 2306d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 2316d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 2326d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim builder.append("]"); 2336d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return builder.toString(); 2346d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 2356d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 2366d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 2376d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim // Suppress default constructor for noninstantiability 2386d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim private AssertHelpers() { throw new AssertionError(); } 2396d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim} 240