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 org.hamcrest.CoreMatchers; 206d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimimport org.hamcrest.Matcher; 216d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimimport org.junit.rules.ErrorCollector; 226d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 236d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimimport android.graphics.Rect; 246d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimimport android.hardware.camera2.CameraCharacteristics; 256d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimimport android.hardware.camera2.CaptureRequest; 266d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimimport android.hardware.camera2.CaptureRequest.Builder; 276d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimimport android.hardware.camera2.CaptureResult; 286d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimimport android.hardware.camera2.params.MeteringRectangle; 296d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimimport android.media.Image; 306d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimimport android.util.Log; 316d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimimport android.util.Size; 326d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 336d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimimport java.util.ArrayList; 346d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimimport java.util.Arrays; 356d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimimport java.util.HashSet; 366d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimimport java.util.List; 376d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimimport java.util.Objects; 386d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimimport java.util.Set; 396d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 406d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim/** 416d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * A camera test ErrorCollector class to gather the test failures during a test, 426d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * instead of failing the test immediately for each failure. 436d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 446d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim/** 456d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * (non-Javadoc) 466d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @see android.hardware.camera2.cts.helpers.CameraErrorCollector 476d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 486d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimpublic class CameraErrorCollector extends ErrorCollector { 496d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 506d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim private static final String TAG = "CameraErrorCollector"; 516d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim private static final boolean LOG_ERRORS = Log.isLoggable(TAG, Log.ERROR); 526d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 536d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim private String mCameraMsg = ""; 546d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 556d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim @Override 566d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public void verify() throws Throwable { 576d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim // Do not remove if using JUnit 3 test runners. super.verify() is protected. 586d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim super.verify(); 596d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 606d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 616d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 626d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Adds an unconditional error to the table. 636d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 646d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * <p>Execution continues, but test will fail at the end.</p> 656d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 666d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param message A string containing the failure reason. 676d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 686d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public void addMessage(String message) { 696d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim addErrorSuper(new Throwable(mCameraMsg + message)); 706d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 716d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 726d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 736d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Adds a Throwable to the table. <p>Execution continues, but the test will fail at the end.</p> 746d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 756d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim @Override 766d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public void addError(Throwable error) { 776d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim addErrorSuper(new Throwable(mCameraMsg + error.getMessage(), error)); 786d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 796d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 806d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim private void addErrorSuper(Throwable error) { 816d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (LOG_ERRORS) Log.e(TAG, error.getMessage()); 826d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim super.addError(error); 836d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 846d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 856d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 866d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Adds a failure to the table if {@code matcher} does not match {@code value}. 876d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Execution continues, but the test will fail at the end if the match fails. 886d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * The camera id is included into the failure log. 896d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 906d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim @Override 916d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T> void checkThat(final T value, final Matcher<T> matcher) { 926d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim super.checkThat(mCameraMsg, value, matcher); 936d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 946d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 956d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 966d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Adds a failure with the given {@code reason} to the table if 976d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * {@code matcher} does not match {@code value}. Execution continues, but 986d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * the test will fail at the end if the match fails. The camera id is 996d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * included into the failure log. 1006d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 1016d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim @Override 1026d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T> void checkThat(final String reason, final T value, final Matcher<T> matcher) { 1036d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim super.checkThat(mCameraMsg + reason, value, matcher); 1046d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 1056d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 1066d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 1076d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Set the camera id to this error collector object for logging purpose. 1086d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 1096d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param id The camera id to be set. 1106d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 1116d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public void setCameraId(String id) { 1126d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (id != null) { 1136d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim mCameraMsg = "Test failed for camera " + id + ": "; 1146d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } else { 1156d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim mCameraMsg = ""; 1166d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 1176d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 1186d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 1196d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 1206d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Adds a failure to the table if {@code condition} is not {@code true}. 1216d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * <p> 1226d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Execution continues, but the test will fail at the end if the condition 1236d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * failed. 1246d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * </p> 1256d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 1266d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param msg Message to be logged when check fails. 1276d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param condition Log the failure if it is not true. 1286d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 1296d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public boolean expectTrue(String msg, boolean condition) { 1306d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (!condition) { 1316d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim addMessage(msg); 1326d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 1336d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 1346d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return condition; 1356d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 1366d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 1376d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 1386d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check if the two values are equal. 1396d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 1406d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param msg Message to be logged when check fails. 1416d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param expected Expected value to be checked against. 1426d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param actual Actual value to be checked. 1436d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @return {@code true} if the two values are equal, {@code false} otherwise. 1446d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 1456d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @throws IllegalArgumentException if {@code expected} was {@code null} 1466d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 1476d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T> boolean expectEquals(String msg, T expected, T actual) { 1486d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (expected == null) { 1496d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim throw new IllegalArgumentException("expected value shouldn't be null"); 1506d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 1516d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 1526d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (!Objects.equals(expected, actual)) { 1536d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim addMessage(String.format("%s (expected = %s, actual = %s) ", msg, expected, 1546d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim actual)); 1556d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return false; 1566d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 1576d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 1586d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return true; 1596d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 1606d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 1616d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 1626d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check if the two values are not equal. 1636d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 1646d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param msg Message to be logged when check fails. 1656d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param expected Expected value to be checked against. 1666d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param actual Actual value to be checked. 1676d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @return {@code true} if the two values are not equal, {@code false} otherwise. 1686d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 1696d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T> boolean expectNotEquals(String msg, T expected, T actual) { 1706d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (Objects.equals(expected, actual)) { 1716d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim addMessage(String.format("%s (expected = %s, actual = %s) ", msg, expected, 1726d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim actual)); 1736d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return false; 1746d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 1756d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 1766d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return true; 1776d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 1786d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 1796d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 1806d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check if the two arrays of values are deeply equal. 1816d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 1826d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param msg Message to be logged when check fails. 1836d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param expected Expected array of values to be checked against. 1846d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param actual Actual array of values to be checked. 1856d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @return {@code true} if the two arrays of values are deeply equal, {@code false} otherwise. 1866d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 1876d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @throws IllegalArgumentException if {@code expected} was {@code null} 1886d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 1896d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T> boolean expectEquals(String msg, T[] expected, T[] actual) { 1906d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (expected == null) { 1916d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim throw new IllegalArgumentException("expected value shouldn't be null"); 1926d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 1936d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 1946d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (!Arrays.deepEquals(expected, actual)) { 1956d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim addMessage(String.format("%s (expected = %s, actual = %s) ", msg, 1966d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim Arrays.deepToString(expected), Arrays.deepToString(actual))); 1976d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return false; 1986d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 1996d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 2006d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return true; 2016d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 2026d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 2036d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 2046d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check if the two arrays of values are not deeply equal. 2056d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 2066d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param msg Message to be logged when check fails. 2076d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param expected Expected array of values to be checked against. 2086d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param actual Actual array of values to be checked. 2096d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @return {@code true} if the two arrays of values are not deeply equal, {@code false} 2106d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * otherwise. 2116d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 2126d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @throws IllegalArgumentException if {@code expected} was {@code null} 2136d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 2146d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T> boolean expectNotEquals(String msg, T[] expected, T[] actual) { 2156d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (expected == null) { 2166d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim throw new IllegalArgumentException("expected value shouldn't be null"); 2176d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 2186d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 2196d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (Arrays.deepEquals(expected, actual)) { 2206d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim addMessage(String.format("%s (expected = %s, actual = %s) ", msg, 2216d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim Arrays.deepToString(expected), Arrays.deepToString(actual))); 2226d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return false; 2236d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 2246d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 2256d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return true; 2266d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 2276d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 2286d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 2296d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check that the {@code actual} value is greater than the {@code expected} value. 2306d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 2316d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param msg Message to be logged when check fails. 2326d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param expected The expected value to check that the actual value is larger than. 2336d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param actual Actual value to check. 2346d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @return {@code true} if {@code actual} is greater than {@code expected}. 2356d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 2366d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T extends Comparable<? super T>> boolean expectGreater(String msg, T expected, 2376d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim T actual) { 2386d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return expectTrue(String.format("%s: (expected = %s was not greater than actual = %s) ", 2396d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim msg, expected, actual), actual.compareTo(expected) > 0); 2406d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 2416d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 2426d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 2436d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check that the {@code actual} value is greater than or equal to the {@code expected} value. 2446d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 2456d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param msg Message to be logged when check fails. 2466d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param expected The expected value to check that the actual value is larger than or equal to. 2476d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param actual Actual value to check. 2486d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @return {@code true} if {@code actual} is greater than or equal to {@code expected}. 2496d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 2506d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T extends Comparable<? super T>> boolean expectGreaterOrEqual(String msg, T expected, 2516d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim T actual) { 2526d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return expectTrue(String.format("%s: (expected = %s was not greater than actual = %s) ", 2536d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim msg, expected, actual), actual.compareTo(expected) >= 0); 2546d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 2556d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 2566d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 2576d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check that the {@code actual} value is less than the {@code expected} value. 2586d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 2596d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param msg Message to be logged when check fails. 2606d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param expected The expected value to check that the actual value is less than. 2616d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param actual Actual value to check. 2626d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @return {@code true} if {@code actual} is less than {@code expected}. 2636d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 2646d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T extends Comparable<? super T>> boolean expectLess(String msg, T expected, 2656d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim T actual) { 2666d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return expectTrue(String.format("%s: (expected = %s was not greater than actual = %s) ", 2676d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim msg, expected, actual), actual.compareTo(expected) < 0); 2686d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 2696d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 2706d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 2716d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check that the {@code actual} value is less than or equal to the {@code expected} value. 2726d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 2736d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param msg Message to be logged when check fails. 2746d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param expected The expected value to check that the actual value is less than or equal to. 2756d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param actual Actual value to check. 2766d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @return {@code true} if {@code actual} is less than or equal to {@code expected}. 2776d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 2786d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T extends Comparable<? super T>> boolean expectLessOrEqual(String msg, T expected, 2796d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim T actual) { 2806d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return expectTrue(String.format("%s: (expected = %s was not greater than actual = %s) ", 2816d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim msg, expected, actual), actual.compareTo(expected) <= 0); 2826d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 2836d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 2846d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 2856d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check if the two float values are equal with given error tolerance. 2866d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 2876d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param msg Message to be logged when check fails. 2886d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param expected Expected value to be checked against. 2896d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param actual Actual value to be checked. 2906d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param tolerance The error margin for the equality check. 2916d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @return {@code true} if the two values are equal, {@code false} otherwise. 2926d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 2936d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T> boolean expectEquals(String msg, float expected, float actual, float tolerance) { 2946d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (expected == actual) { 2956d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return true; 2966d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 2976d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 2986d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (!(Math.abs(expected - actual) <= tolerance)) { 2996d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim addMessage(String.format("%s (expected = %s, actual = %s, tolerance = %s) ", msg, 3006d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim expected, actual, tolerance)); 3016d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return false; 3026d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 3036d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 3046d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return true; 3056d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 3066d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 3076d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 3086d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check if the two double values are equal with given error tolerance. 3096d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 3106d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param msg Message to be logged when check fails. 3116d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param expected Expected value to be checked against. 3126d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param actual Actual value to be checked. 3136d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param tolerance The error margin for the equality check 3146d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @return {@code true} if the two values are equal, {@code false} otherwise. 3156d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 3166d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T> boolean expectEquals(String msg, double expected, double actual, double tolerance) { 3176d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (expected == actual) { 3186d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return true; 3196d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 3206d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 3216d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (!(Math.abs(expected - actual) <= tolerance)) { 3226d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim addMessage(String.format("%s (expected = %s, actual = %s, tolerance = %s) ", msg, 3236d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim expected, actual, tolerance)); 3246d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return false; 3256d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 3266d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 3276d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return true; 3286d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 3296d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 3306d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 3316d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check that all values in the list are greater than or equal to the min value. 3326d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 3336d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param msg Message to be logged when check fails 3346d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param list The list of values to be checked 3356d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param min The smallest allowed value 3366d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 3376d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T extends Comparable<? super T>> void expectValuesGreaterOrEqual(String msg, 3386d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim List<T> list, T min) { 3396d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim for (T value : list) { 3406d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim expectTrue(msg + String.format(", array value " + value.toString() + 3416d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim " is less than %s", 3426d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim min.toString()), value.compareTo(min) >= 0); 3436d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 3446d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 3456d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 3466d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 3476d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check that all values in the array are greater than or equal to the min value. 3486d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 3496d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param msg Message to be logged when check fails 3506d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param array The array of values to be checked 3516d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param min The smallest allowed value 3526d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 3536d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T extends Comparable<? super T>> void expectValuesGreaterOrEqual(String msg, 3546d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim T[] array, T min) { 3556d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim expectValuesGreaterOrEqual(msg, Arrays.asList(array), min); 3566d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 3576d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 3586d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 3596d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Expect the list of values are in the range. 3606d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 3616d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param msg Message to be logged 3626d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param list The list of values to be checked 3636d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param min The min value of the range 3646d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param max The max value of the range 3656d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 3666d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T extends Comparable<? super T>> void expectValuesInRange(String msg, List<T> list, 3676d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim T min, T max) { 3686d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim for (T value : list) { 3696d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim expectTrue(msg + String.format(", array value " + value.toString() + 3706d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim " is out of range [%s, %s]", 3716d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim min.toString(), max.toString()), 3726d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim value.compareTo(max)<= 0 && value.compareTo(min) >= 0); 3736d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 3746d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 3756d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 3766d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 3776d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Expect the array of values are in the range. 3786d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 3796d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param msg Message to be logged 3806d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param array The array of values to be checked 3816d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param min The min value of the range 3826d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param max The max value of the range 3836d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 3846d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T extends Comparable<? super T>> void expectValuesInRange(String msg, T[] array, 3856d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim T min, T max) { 3866d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim expectValuesInRange(msg, Arrays.asList(array), min, max); 3876d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 3886d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 3896d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 3906d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Expect the array of values are in the range. 3916d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 3926d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param msg Message to be logged 3936d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param array The array of values to be checked 3946d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param min The min value of the range 3956d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param max The max value of the range 3966d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 3976d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public void expectValuesInRange(String msg, int[] array, int min, int max) { 3986d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim ArrayList<Integer> l = new ArrayList<>(array.length); 3996d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim for (int i : array) { 4006d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim l.add(i); 4016d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 4026d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim expectValuesInRange(msg, l, min, max); 4036d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 4046d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 4056d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 4066d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Expect the value is in the range. 4076d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 4086d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param msg Message to be logged 4096d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param value The value to be checked 4106d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param min The min value of the range 4116d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param max The max value of the range 4126d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 4136d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @return {@code true} if the value was in range, {@code false} otherwise 4146d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 4156d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T extends Comparable<? super T>> boolean expectInRange(String msg, T value, 4166d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim T min, T max) { 4176d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return expectTrue(msg + String.format(", value " + value.toString() 4186d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim + " is out of range [%s, %s]", 4196d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim min.toString(), max.toString()), 4206d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim value.compareTo(max)<= 0 && value.compareTo(min) >= 0); 4216d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 4226d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 4236d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 4246d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 4256d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check that two metering region arrays are similar enough by ensuring that each of their width, 4266d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * height, and all corners are within {@code errorPercent} of each other. 4276d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 4286d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * <p>Note that the length of the arrays must be the same, and each weight must be the same 4296d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * as well. We assume the order is also equivalent.</p> 4306d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 4316d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * <p>At most 1 error per each dissimilar metering region is collected.</p> 4326d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 4336d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param msg Message to be logged 4346d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param expected The reference 'expected' values to be used to check against 4356d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param actual The actual values that were received 4366d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param errorPercent Within how many percent the components should be 4376d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 4386d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @return {@code true} if all expects passed, {@code false} otherwise 4396d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 4406d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public boolean expectMeteringRegionsAreSimilar(String msg, 4416d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim MeteringRectangle[] expected, MeteringRectangle[] actual, 4426d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim float errorPercent) { 4436d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim String expectedActualMsg = String.format("expected (%s), actual (%s)", 4446d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim Arrays.deepToString(expected), Arrays.deepToString(actual)); 4456d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 4466d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim String differentSizesMsg = String.format( 4476d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim "%s: rect lists are different sizes; %s", 4486d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim msg, expectedActualMsg); 4496d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 4506d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim String differentWeightsMsg = String.format( 4516d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim "%s: rect weights are different; %s", 4526d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim msg, expectedActualMsg); 4536d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 4546d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (!expectTrue(differentSizesMsg, actual != null)) { 4556d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return false; 4566d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 4576d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 4586d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (!expectEquals(differentSizesMsg, expected.length, actual.length)) return false; 4596d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 4606d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim boolean succ = true; 4616d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim for (int i = 0; i < expected.length; ++i) { 4626d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (i < actual.length) { 4636d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim // Avoid printing multiple errors for the same rectangle 4646d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (!expectRectsAreSimilar( 4656d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim msg, expected[i].getRect(), actual[i].getRect(), errorPercent)) { 4666d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim succ = false; 4676d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim continue; 4686d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 4696d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (!expectEquals(differentWeightsMsg, 4706d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim expected[i].getMeteringWeight(), actual[i].getMeteringWeight())) { 4716d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim succ = false; 4726d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim continue; 4736d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 4746d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 4756d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 4766d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 4776d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return succ; 4786d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 4796d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 4806d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 4816d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check that two rectangles are similar enough by ensuring that their width, height, 4826d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * and all corners are within {@code errorPercent} of each other. 4836d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 4846d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * <p>Only the first error is collected, to avoid spamming several error messages when 4856d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * the rectangle is hugely dissimilar.</p> 4866d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 4876d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param msg Message to be logged 4886d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param expected The reference 'expected' value to be used to check against 4896d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param actual The actual value that was received 4906d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param errorPercent Within how many percent the components should be 4916d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 4926d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @return {@code true} if all expects passed, {@code false} otherwise 4936d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 4946d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public boolean expectRectsAreSimilar(String msg, Rect expected, Rect actual, 4956d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim float errorPercent) { 4966d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim String formattedMsg = String.format("%s: rects are not similar enough; expected (%s), " + 4976d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim "actual (%s), error percent (%s), reason: ", 4986d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim msg, expected, actual, errorPercent); 4996d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 5006d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (!expectSimilarValues( 5016d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim formattedMsg, "too wide", "too narrow", actual.width(), expected.width(), 5026d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim errorPercent)) return false; 5036d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 5046d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (!expectSimilarValues( 5056d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim formattedMsg, "too tall", "too short", actual.height(), expected.height(), 5066d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim errorPercent)) return false; 5076d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 5086d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (!expectSimilarValues( 5096d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim formattedMsg, "left pt too right", "left pt too left", actual.left, expected.left, 5106d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim errorPercent)) return false; 5116d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 5126d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (!expectSimilarValues( 5136d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim formattedMsg, "right pt too right", "right pt too left", 5146d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim actual.right, expected.right, errorPercent)) return false; 5156d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 5166d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (!expectSimilarValues( 5176d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim formattedMsg, "top pt too low", "top pt too high", actual.top, expected.top, 5186d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim errorPercent)) return false; 5196d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 5206d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (!expectSimilarValues( 5216d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim formattedMsg, "bottom pt too low", "bottom pt too high", actual.top, expected.top, 5226d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim errorPercent)) return false; 5236d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 5246d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return true; 5256d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 5266d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 5276d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 5286d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check that two sizes are similar enough by ensuring that their width and height 5296d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * are within {@code errorPercent} of each other. 5306d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 5316d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * <p>Only the first error is collected, to avoid spamming several error messages when 5326d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * the rectangle is hugely dissimilar.</p> 5336d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 5346d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param msg Message to be logged 5356d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param expected The reference 'expected' value to be used to check against 5366d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param actual The actual value that was received 5376d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param errorPercent Within how many percent the components should be 5386d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 5396d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @return {@code true} if all expects passed, {@code false} otherwise 5406d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 5416d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public boolean expectSizesAreSimilar(String msg, Size expected, Size actual, 5426d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim float errorPercent) { 5436d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim String formattedMsg = String.format("%s: rects are not similar enough; expected (%s), " + 5446d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim "actual (%s), error percent (%s), reason: ", 5456d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim msg, expected, actual, errorPercent); 5466d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 5476d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (!expectSimilarValues( 5486d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim formattedMsg, "too wide", "too narrow", actual.getWidth(), expected.getWidth(), 5496d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim errorPercent)) return false; 5506d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 5516d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (!expectSimilarValues( 5526d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim formattedMsg, "too tall", "too short", actual.getHeight(), expected.getHeight(), 5536d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim errorPercent)) return false; 5546d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 5556d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return true; 5566d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 5576d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 5586d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 5596d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check that the rectangle is centered within a certain tolerance of {@code errorPercent}, 5606d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * with respect to the {@code bounds} bounding rectangle. 5616d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 5626d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param msg Message to be logged 5636d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param expectedBounds The width/height of the bounding rectangle 5646d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param actual The actual value that was received 5656d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param errorPercent Within how many percent the centering should be 5666d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 5676d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public void expectRectCentered(String msg, Size expectedBounds, Rect actual, 5686d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim float errorPercent) { 5696d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim String formattedMsg = String.format("%s: rect should be centered; expected bounds (%s), " + 5706d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim "actual (%s), error percent (%s), reason: ", 5716d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim msg, expectedBounds, actual, errorPercent); 5726d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 5736d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim int centerBoundX = expectedBounds.getWidth() / 2; 5746d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim int centerBoundY = expectedBounds.getHeight() / 2; 5756d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 5766d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim expectSimilarValues( 5776d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim formattedMsg, "too low", "too high", actual.centerY(), centerBoundY, 5786d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim errorPercent); 5796d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 5806d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim expectSimilarValues( 5816d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim formattedMsg, "too right", "too left", actual.centerX(), centerBoundX, 5826d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim errorPercent); 5836d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 5846d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 5856d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim private boolean expectSimilarValues( 5866d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim String formattedMsg, String tooSmall, String tooLarge, int actualValue, 5876d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim int expectedValue, float errorPercent) { 5886d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim boolean succ = true; 5896d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim succ = expectTrue(formattedMsg + tooLarge, 5906d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim actualValue <= (expectedValue * (1.0f + errorPercent))) && succ; 5916d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim succ = expectTrue(formattedMsg + tooSmall, 5926d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim actualValue >= (expectedValue * (1.0f - errorPercent))) && succ; 5936d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 5946d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return succ; 5956d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 5966d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 5976d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public void expectNotNull(String msg, Object obj) { 5986d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim checkThat(msg, obj, CoreMatchers.notNullValue()); 5996d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 6006d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 6016d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public void expectNull(String msg, Object obj) { 6026d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (obj != null) { 6036d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim addMessage(msg); 6046d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 6056d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 6066d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 6076d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 6086d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check if the values in the array are monotonically increasing (decreasing) and not all 6096d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * equal. 6106d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 6116d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param array The array of values to be checked 6126d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param ascendingOrder The monotonicity ordering to be checked with 6136d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 6146d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T extends Comparable<? super T>> void checkArrayMonotonicityAndNotAllEqual(T[] array, 6156d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim boolean ascendingOrder) { 6166d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim String orderMsg = ascendingOrder ? ("increasing order") : ("decreasing order"); 6176d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim for (int i = 0; i < array.length - 1; i++) { 6186d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim int compareResult = array[i + 1].compareTo(array[i]); 6196d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim boolean condition = compareResult >= 0; 6206d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (!ascendingOrder) { 6216d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim condition = compareResult <= 0; 6226d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 6236d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 6246d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim expectTrue(String.format("Adjacent values (%s and %s) %s monotonicity is broken", 6256d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim array[i].toString(), array[i + 1].toString(), orderMsg), condition); 6266d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 6276d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 6286d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim expectTrue("All values of this array are equal: " + array[0].toString(), 6296d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim array[0].compareTo(array[array.length - 1]) != 0); 6306d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 6316d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 6326d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 6336d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check if the key value is not null and return the value. 6346d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 6356d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param characteristics The {@link CameraCharacteristics} to get the key from. 6366d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param key The {@link CameraCharacteristics} key to be checked. 6376d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 6386d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @return The value of the key. 6396d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 6406d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T> T expectKeyValueNotNull(CameraCharacteristics characteristics, 6416d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim CameraCharacteristics.Key<T> key) { 6426d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 6436d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim T value = characteristics.get(key); 6446d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (value == null) { 6456d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim addMessage("Key " + key.getName() + " shouldn't be null"); 6466d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 6476d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 6486d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return value; 6496d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 6506d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 6516d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 6526d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check if the key value is not null and return the value. 6536d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 6546d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param request The {@link CaptureRequest} to get the key from. 6556d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param key The {@link CaptureRequest} key to be checked. 6566d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 6576d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @return The value of the key. 6586d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 6596d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T> T expectKeyValueNotNull(CaptureRequest request, 6606d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim CaptureRequest.Key<T> key) { 6616d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 6626d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim T value = request.get(key); 6636d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (value == null) { 6646d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim addMessage("Key " + key.getName() + " shouldn't be null"); 6656d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 6666d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 6676d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return value; 6686d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 6696d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 6706d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 6716d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check if the key value is not null and return the value. 6726d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 6736d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param request The {@link CaptureRequest#Builder} to get the key from. 6746d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param key The {@link CaptureRequest} key to be checked. 6756d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @return The value of the key. 6766d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 6776d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T> T expectKeyValueNotNull(Builder request, CaptureRequest.Key<T> key) { 6786d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 6796d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim T value = request.get(key); 6806d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (value == null) { 6816d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim addMessage("Key " + key.getName() + " shouldn't be null"); 6826d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 6836d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 6846d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return value; 6856d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 6866d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 6876d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 6886d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check if the key value is not null and return the value. 6896d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 6906d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param result The {@link CaptureResult} to get the key from. 6916d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param key The {@link CaptureResult} key to be checked. 6926d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @return The value of the key. 6936d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 6946d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T> T expectKeyValueNotNull(CaptureResult result, CaptureResult.Key<T> key) { 6956d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return expectKeyValueNotNull("", result, key); 6966d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 6976d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 6986d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 6996d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check if the key value is not null and return the value. 7006d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 7016d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param msg The message to be logged. 7026d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param result The {@link CaptureResult} to get the key from. 7036d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param key The {@link CaptureResult} key to be checked. 7046d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @return The value of the key. 7056d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 7066d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T> T expectKeyValueNotNull(String msg, CaptureResult result, CaptureResult.Key<T> key) { 7076d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 7086d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim T value = result.get(key); 7096d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (value == null) { 7106d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim addMessage(msg + " Key " + key.getName() + " shouldn't be null"); 7116d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 7126d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 7136d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return value; 7146d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 7156d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 7166d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 7176d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check if the key is non-null and the value is not equal to target. 7186d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 7196d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param request The The {@link CaptureRequest#Builder} to get the key from. 7206d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param key The {@link CaptureRequest} key to be checked. 7216d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param expected The expected value of the CaptureRequest key. 7226d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 7236d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T> void expectKeyValueNotEquals( 7246d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim Builder request, CaptureRequest.Key<T> key, T expected) { 7256d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (request == null || key == null || expected == null) { 7266d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim throw new IllegalArgumentException("request, key and expected shouldn't be null"); 7276d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 7286d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 7296d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim T value; 7306d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if ((value = expectKeyValueNotNull(request, key)) == null) { 7316d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return; 7326d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 7336d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 7346d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim String reason = "Key " + key.getName() + " shouldn't have value " + value.toString(); 7356d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim checkThat(reason, value, CoreMatchers.not(expected)); 7366d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 7376d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 7386d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 7396d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check if the key is non-null and the value is not equal to target. 7406d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 7416d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param result The {@link CaptureResult} to get the key from. 7426d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param key The {@link CaptureResult} key to be checked. 7436d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param expected The expected value of the CaptureResult key. 7446d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 7456d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T> void expectKeyValueNotEquals( 7466d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim CaptureResult result, CaptureResult.Key<T> key, T expected) { 7476d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (result == null || key == null || expected == null) { 7486d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim throw new IllegalArgumentException("result, key and expected shouldn't be null"); 7496d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 7506d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 7516d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim T value; 7526d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if ((value = expectKeyValueNotNull(result, key)) == null) { 7536d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return; 7546d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 7556d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 7566d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim String reason = "Key " + key.getName() + " shouldn't have value " + value.toString(); 7576d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim checkThat(reason, value, CoreMatchers.not(expected)); 7586d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 7596d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 7606d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 7616d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check if the value is non-null and the value is equal to target. 7626d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 7636d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param result The {@link CaptureResult} to lookup the value in. 7646d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param key The {@link CaptureResult} key to be checked. 7656d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param expected The expected value of the {@link CaptureResult} key. 7666d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 7676d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T> void expectKeyValueEquals(CaptureResult result, CaptureResult.Key<T> key, 7686d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim T expected) { 7696d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (result == null || key == null || expected == null) { 7706d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim throw new IllegalArgumentException("request, key and expected shouldn't be null"); 7716d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 7726d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 7736d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim T value; 7746d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if ((value = expectKeyValueNotNull(result, key)) == null) { 7756d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return; 7766d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 7776d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 7786d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim String reason = "Key " + key.getName() + " value " + value.toString() 7796d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim + " doesn't match the expected value " + expected.toString(); 7806d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim checkThat(reason, value, CoreMatchers.equalTo(expected)); 7816d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 7826d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 7836d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 7846d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check if the key is non-null and the value is equal to target. 7856d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 7866d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * <p>Only check non-null if the target is null.</p> 7876d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 7886d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param request The The {@link CaptureRequest#Builder} to get the key from. 7896d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param key The {@link CaptureRequest} key to be checked. 7906d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param expected The expected value of the CaptureRequest key. 7916d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 7926d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T> void expectKeyValueEquals(Builder request, CaptureRequest.Key<T> key, T expected) { 7936d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (request == null || key == null || expected == null) { 7946d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim throw new IllegalArgumentException("request, key and expected shouldn't be null"); 7956d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 7966d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 7976d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim T value; 7986d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if ((value = expectKeyValueNotNull(request, key)) == null) { 7996d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return; 8006d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 8016d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 8026d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim String reason = "Key " + key.getName() + " value " + value.toString() 8036d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim + " doesn't match the expected value " + expected.toString(); 8046d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim checkThat(reason, value, CoreMatchers.equalTo(expected)); 8056d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 8066d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 8076d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 8086d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check if the key is non-null, and the key value is greater than the expected value. 8096d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 8106d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param result {@link CaptureResult} to check. 8116d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param key The {@link CaptureResult} key to be checked. 8126d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param expected The expected to be compared to the value for the given key. 8136d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 8146d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T extends Comparable<? super T>> void expectKeyValueGreaterOrEqual( 8156d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim CaptureResult result, CaptureResult.Key<T> key, T expected) { 8166d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim T value; 8176d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if ((value = expectKeyValueNotNull(result, key)) == null) { 8186d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return; 8196d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 8206d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 8216d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim expectGreaterOrEqual(key.getName(), expected, value); 8226d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 8236d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 8246d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 8256d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check if the key is non-null, and the key value is greater than the expected value. 8266d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 8276d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param characteristics {@link CameraCharacteristics} to check. 8286d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param key The {@link CameraCharacteristics} key to be checked. 8296d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param expected The expected to be compared to the value for the given key. 8306d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 8316d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T extends Comparable<? super T>> void expectKeyValueGreaterThan( 8326d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim CameraCharacteristics characteristics, CameraCharacteristics.Key<T> key, T expected) { 8336d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim T value; 8346d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if ((value = expectKeyValueNotNull(characteristics, key)) == null) { 8356d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return; 8366d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 8376d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 8386d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim expectGreater(key.getName(), expected, value); 8396d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 8406d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 8416d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 8426d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check if the key is non-null, and the key value is in the expected range. 8436d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 8446d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param characteristics {@link CameraCharacteristics} to check. 8456d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param key The {@link CameraCharacteristics} key to be checked. 8466d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param min The min value of the range 8476d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param max The max value of the range 8486d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 8496d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T extends Comparable<? super T>> void expectKeyValueInRange( 8506d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim CameraCharacteristics characteristics, CameraCharacteristics.Key<T> key, T min, T max) { 8516d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim T value; 8526d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if ((value = expectKeyValueNotNull(characteristics, key)) == null) { 8536d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return; 8546d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 8556d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim expectInRange(key.getName(), value, min, max); 8566d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 8576d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 8586d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 8596d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check if the key is non-null, and the key value is one of the expected values. 8606d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 8616d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param characteristics {@link CameraCharacteristics} to check. 8626d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param key The {@link CameraCharacteristics} key to be checked. 8636d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param expected The expected values for the given key. 8646d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 8656d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T> void expectKeyValueIsIn(CameraCharacteristics characteristics, 8666d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim CameraCharacteristics.Key<T> key, T... expected) { 8676d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim T value = expectKeyValueNotNull(characteristics, key); 8686d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (value == null) { 8696d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return; 8706d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 8716d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim String reason = "Key " + key.getName() + " value " + value 8726d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim + " isn't one of the expected values " + Arrays.deepToString(expected); 8736d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim expectContains(reason, expected, value); 8746d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 8756d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 8766d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 8776d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check if the key is non-null, and the key value is one of the expected values. 8786d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 8796d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param request The The {@link CaptureRequest#Builder} to get the key from. 8806d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param key The {@link CaptureRequest} key to be checked. 8816d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param expected The expected values of the CaptureRequest key. 8826d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 8836d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T> void expectKeyValueIsIn(Builder request, CaptureRequest.Key<T> key, T... expected) { 8846d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim T value = expectKeyValueNotNull(request, key); 8856d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (value == null) { 8866d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return; 8876d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 8886d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim String reason = "Key " + key.getName() + " value " + value 8896d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim + " isn't one of the expected values " + Arrays.deepToString(expected); 8906d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim expectContains(reason, expected, value); 8916d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 8926d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 8936d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 8946d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check if the key is non-null, and the key value contains the expected element. 8956d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 8966d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param characteristics {@link CameraCharacteristics} to check. 8976d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param key The {@link CameraCharacteristics} key to be checked. 8986d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param expected The expected element to be contained in the value for the given key. 8996d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 9006d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T> void expectKeyValueContains(CameraCharacteristics characteristics, 9016d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim CameraCharacteristics.Key<T[]> key, T expected) { 9026d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim T[] value; 9036d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if ((value = expectKeyValueNotNull(characteristics, key)) == null) { 9046d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return; 9056d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 9066d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim String reason = "Key " + key.getName() + " value " + value 9076d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim + " doesn't contain the expected value " + expected; 9086d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim expectContains(reason, value, expected); 9096d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 9106d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 9116d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 9126d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check if the key is non-null, and the key value contains the expected element. 9136d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 9146d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param characteristics {@link CameraCharacteristics} to check. 9156d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param key The {@link CameraCharacteristics} key to be checked. 9166d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param expected The expected element to be contained in the value for the given key. 9176d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 9186d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public void expectKeyValueContains(CameraCharacteristics characteristics, 9196d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim CameraCharacteristics.Key<int[]> key, int expected) { 9206d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim int[] value; 9216d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if ((value = expectKeyValueNotNull(characteristics, key)) == null) { 9226d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return; 9236d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 9246d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim String reason = "Key " + key.getName() + " value " + value 9256d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim + " doesn't contain the expected value " + expected; 9266d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim expectContains(reason, value, expected); 9276d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 9286d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 9296d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 9306d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check if the key is non-null, and the key value contains the expected element. 9316d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 9326d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param characteristics {@link CameraCharacteristics} to check. 9336d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param key The {@link CameraCharacteristics} key to be checked. 9346d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param expected The expected element to be contained in the value for the given key. 9356d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 9366d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public void expectKeyValueContains(CameraCharacteristics characteristics, 9376d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim CameraCharacteristics.Key<boolean[]> key, boolean expected) { 9386d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim boolean[] value; 9396d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if ((value = expectKeyValueNotNull(characteristics, key)) == null) { 9406d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return; 9416d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 9426d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim String reason = "Key " + key.getName() + " value " + value 9436d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim + " doesn't contain the expected value " + expected; 9446d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim expectContains(reason, value, expected); 9456d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 9466d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 9476d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 9486d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check if the {@code values} array contains the expected element. 9496d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 9506d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param reason reason to print for failure. 9516d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param values array to check for membership in. 9526d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param expected the value to check. 9536d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 9546d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T> void expectContains(String reason, T[] values, T expected) { 9556d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (values == null) { 9566d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim throw new NullPointerException(); 9576d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 9586d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim checkThat(reason, expected, InMatcher.in(values)); 9596d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 9606d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 9616d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T> void expectContains(T[] values, T expected) { 9626d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim String reason = "Expected value " + expected 9636d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim + " is not contained in the given values " + values; 9646d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim expectContains(reason, values, expected); 9656d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 9666d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 9676d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 9686d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Specialize {@link InMatcher} class for integer primitive array. 9696d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 9706d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim private static class IntInMatcher extends InMatcher<Integer> { 9716d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public IntInMatcher(int[] values) { 9726d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim Preconditions.checkNotNull("values", values); 9736d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim mValues = new ArrayList<>(values.length); 9746d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim for (int i : values) { 9756d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim mValues.add(i); 9766d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 9776d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 9786d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 9796d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 9806d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 9816d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check if the {@code values} array contains the expected element. 9826d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 9836d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * <p>Specialized for primitive int arrays</p> 9846d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 9856d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param reason reason to print for failure. 9866d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param values array to check for membership in. 9876d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param expected the value to check. 9886d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 9896d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public void expectContains(String reason, int[] values, int expected) { 9906d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (values == null) { 9916d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim throw new NullPointerException(); 9926d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 9936d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 9946d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim checkThat(reason, expected, new IntInMatcher(values)); 9956d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 9966d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 9976d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public void expectContains(int[] values, int expected) { 9986d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim String reason = "Expected value " + expected 9996d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim + " is not contained in the given values " + values; 10006d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim expectContains(reason, values, expected); 10016d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 10026d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 10036d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 10046d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Specialize {@link BooleanInMatcher} class for boolean primitive array. 10056d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 10066d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim private static class BooleanInMatcher extends InMatcher<Boolean> { 10076d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public BooleanInMatcher(boolean[] values) { 10086d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim Preconditions.checkNotNull("values", values); 10096d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim mValues = new ArrayList<>(values.length); 10106d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim for (boolean i : values) { 10116d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim mValues.add(i); 10126d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 10136d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 10146d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 10156d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 10166d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 10176d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check if the {@code values} array contains the expected element. 10186d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 10196d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * <p>Specialized for primitive boolean arrays</p> 10206d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 10216d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param reason reason to print for failure. 10226d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param values array to check for membership in. 10236d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param expected the value to check. 10246d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 10256d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public void expectContains(String reason, boolean[] values, boolean expected) { 10266d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (values == null) { 10276d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim throw new NullPointerException(); 10286d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 10296d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 10306d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim checkThat(reason, expected, new BooleanInMatcher(values)); 10316d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 10326d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 10336d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 10346d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check if the {@code values} array contains the expected element. 10356d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 10366d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * <p>Specialized for primitive boolean arrays</p> 10376d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 10386d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param values array to check for membership in. 10396d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param expected the value to check. 10406d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 10416d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public void expectContains(boolean[] values, boolean expected) { 10426d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim String reason = "Expected value " + expected 10436d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim + " is not contained in the given values " + values; 10446d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim expectContains(reason, values, expected); 10456d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 10466d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 10476d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 10486d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Check if the element inside of the list are unique. 10496d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 10506d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param msg The message to be logged 10516d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param list The list of values to be checked 10526d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 10536d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public <T> void expectValuesUnique(String msg, List<T> list) { 10546d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim Set<T> sizeSet = new HashSet<T>(list); 10556d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim expectTrue(msg + " each element must be distinct", sizeSet.size() == list.size()); 10566d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 10576d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 10586d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public void expectImageProperties(String msg, Image image, int format, Size size, 10596d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim long timestampNs) { 10606d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim expectEquals(msg + "Image format is wrong.", image.getFormat(), format); 10616d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim expectEquals(msg + "Image width is wrong.", image.getWidth(), size.getWidth()); 10626d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim expectEquals(msg + "Image height is wrong.", image.getHeight(), size.getHeight()); 10636d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim expectEquals(msg + "Image timestamp is wrong.", image.getTimestamp(), timestampNs); 10646d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 10656d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 10666d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim} 1067