19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.test; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport junit.framework.Assert; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Arrays; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.HashMap; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.HashSet; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Map; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Set; 2697eb32e2cad1871f89f9d7e91681b2977c8a4d19Karl Rosaenimport java.util.ArrayList; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.regex.MatchResult; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.regex.Matcher; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.regex.Pattern; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Contains additional assertion methods not found in JUnit. 33b51617f4668ef8cf0e6d8d0fc3284eae51dbd8caStephan Linzner * @deprecated Use 34b51617f4668ef8cf0e6d8d0fc3284eae51dbd8caStephan Linzner * <a href="https://github.com/hamcrest">Hamcrest matchers</a> instead. 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 36b51617f4668ef8cf0e6d8d0fc3284eae51dbd8caStephan Linzner@Deprecated 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic final class MoreAsserts { 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private MoreAsserts() { } 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Asserts that the class {@code expected} is assignable from the object 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@code actual}. This verifies {@code expected} is a parent class or a 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * interface that {@code actual} implements. 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void assertAssignableFrom(Class<?> expected, Object actual) { 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertAssignableFrom(expected, actual.getClass()); 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Asserts that class {@code expected} is assignable from the class 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@code actual}. This verifies {@code expected} is a parent class or a 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * interface that {@code actual} implements. 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void assertAssignableFrom(Class<?> expected, Class<?> actual) { 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertTrue( 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Expected " + expected.getCanonicalName() + 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " to be assignable from actual class " + actual.getCanonicalName(), 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project expected.isAssignableFrom(actual)); 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Asserts that {@code actual} is not equal {@code unexpected}, according 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to both {@code ==} and {@link Object#equals}. 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void assertNotEqual( 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String message, Object unexpected, Object actual) { 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (equal(unexpected, actual)) { 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failEqual(message, unexpected); 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Variant of {@link #assertNotEqual(String,Object,Object)} using a 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * generic message. 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void assertNotEqual(Object unexpected, Object actual) { 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertNotEqual(null, unexpected, actual); 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Asserts that array {@code actual} is the same size and every element equals 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * those in array {@code expected}. On failure, message indicates specific 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * element mismatch. 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void assertEquals( 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String message, byte[] expected, byte[] actual) { 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (expected.length != actual.length) { 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failWrongLength(message, expected.length, actual.length); 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < expected.length; i++) { 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (expected[i] != actual[i]) { 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failWrongElement(message, i, expected[i], actual[i]); 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Asserts that array {@code actual} is the same size and every element equals 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * those in array {@code expected}. On failure, message indicates specific 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * element mismatch. 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void assertEquals(byte[] expected, byte[] actual) { 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(null, expected, actual); 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Asserts that array {@code actual} is the same size and every element equals 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * those in array {@code expected}. On failure, message indicates first 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specific element mismatch. 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void assertEquals( 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String message, int[] expected, int[] actual) { 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (expected.length != actual.length) { 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failWrongLength(message, expected.length, actual.length); 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < expected.length; i++) { 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (expected[i] != actual[i]) { 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failWrongElement(message, i, expected[i], actual[i]); 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Asserts that array {@code actual} is the same size and every element equals 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * those in array {@code expected}. On failure, message indicates first 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specific element mismatch. 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void assertEquals(int[] expected, int[] actual) { 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(null, expected, actual); 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 134874d0d4032dc940327a81359f144d38d3cb580a3dcashman * @hide Asserts that array {@code actual} is the same size and every element equals 135874d0d4032dc940327a81359f144d38d3cb580a3dcashman * those in array {@code expected}. On failure, message indicates first 136874d0d4032dc940327a81359f144d38d3cb580a3dcashman * specific element mismatch. 137874d0d4032dc940327a81359f144d38d3cb580a3dcashman */ 138874d0d4032dc940327a81359f144d38d3cb580a3dcashman public static void assertEquals( 139874d0d4032dc940327a81359f144d38d3cb580a3dcashman String message, long[] expected, long[] actual) { 140874d0d4032dc940327a81359f144d38d3cb580a3dcashman if (expected.length != actual.length) { 141874d0d4032dc940327a81359f144d38d3cb580a3dcashman failWrongLength(message, expected.length, actual.length); 142874d0d4032dc940327a81359f144d38d3cb580a3dcashman } 143874d0d4032dc940327a81359f144d38d3cb580a3dcashman for (int i = 0; i < expected.length; i++) { 144874d0d4032dc940327a81359f144d38d3cb580a3dcashman if (expected[i] != actual[i]) { 145874d0d4032dc940327a81359f144d38d3cb580a3dcashman failWrongElement(message, i, expected[i], actual[i]); 146874d0d4032dc940327a81359f144d38d3cb580a3dcashman } 147874d0d4032dc940327a81359f144d38d3cb580a3dcashman } 148874d0d4032dc940327a81359f144d38d3cb580a3dcashman } 149874d0d4032dc940327a81359f144d38d3cb580a3dcashman 150874d0d4032dc940327a81359f144d38d3cb580a3dcashman /** 151874d0d4032dc940327a81359f144d38d3cb580a3dcashman * @hide Asserts that array {@code actual} is the same size and every element equals 152874d0d4032dc940327a81359f144d38d3cb580a3dcashman * those in array {@code expected}. On failure, message indicates first 153874d0d4032dc940327a81359f144d38d3cb580a3dcashman * specific element mismatch. 154874d0d4032dc940327a81359f144d38d3cb580a3dcashman */ 155874d0d4032dc940327a81359f144d38d3cb580a3dcashman public static void assertEquals(long[] expected, long[] actual) { 156874d0d4032dc940327a81359f144d38d3cb580a3dcashman assertEquals(null, expected, actual); 157874d0d4032dc940327a81359f144d38d3cb580a3dcashman } 158874d0d4032dc940327a81359f144d38d3cb580a3dcashman 159874d0d4032dc940327a81359f144d38d3cb580a3dcashman 160874d0d4032dc940327a81359f144d38d3cb580a3dcashman /** 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Asserts that array {@code actual} is the same size and every element equals 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * those in array {@code expected}. On failure, message indicates first 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specific element mismatch. 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void assertEquals( 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String message, double[] expected, double[] actual) { 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (expected.length != actual.length) { 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failWrongLength(message, expected.length, actual.length); 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < expected.length; i++) { 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (expected[i] != actual[i]) { 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failWrongElement(message, i, expected[i], actual[i]); 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Asserts that array {@code actual} is the same size and every element equals 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * those in array {@code expected}. On failure, message indicates first 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specific element mismatch. 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void assertEquals(double[] expected, double[] actual) { 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(null, expected, actual); 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Asserts that array {@code actual} is the same size and every element 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is the same as those in array {@code expected}. Note that this uses 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@code equals()} instead of {@code ==} to compare the objects. 190a45746efadd11bb7dfab026fb3c81a25fae74ca4Jeff Smith * {@code null} will be considered equal to {@code null} (unlike SQL). 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * On failure, message indicates first specific element mismatch. 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void assertEquals( 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String message, Object[] expected, Object[] actual) { 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (expected.length != actual.length) { 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failWrongLength(message, expected.length, actual.length); 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < expected.length; i++) { 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Object exp = expected[i]; 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Object act = actual[i]; 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // The following borrowed from java.util.equals(Object[], Object[]). 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!((exp==null) ? act==null : exp.equals(act))) { 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failWrongElement(message, i, exp, act); 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Asserts that array {@code actual} is the same size and every element 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is the same as those in array {@code expected}. Note that this uses 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@code ==} instead of {@code equals()} to compare the objects. 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * On failure, message indicates first specific element mismatch. 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void assertEquals(Object[] expected, Object[] actual) { 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(null, expected, actual); 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Asserts that two sets contain the same elements. */ 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void assertEquals( 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String message, Set<? extends Object> expected, Set<? extends Object> actual) { 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Set<Object> onlyInExpected = new HashSet<Object>(expected); 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onlyInExpected.removeAll(actual); 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Set<Object> onlyInActual = new HashSet<Object>(actual); 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onlyInActual.removeAll(expected); 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (onlyInExpected.size() != 0 || onlyInActual.size() != 0) { 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Set<Object> intersection = new HashSet<Object>(expected); 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project intersection.retainAll(actual); 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failWithMessage( 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project message, 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Sets do not match.\nOnly in expected: " + onlyInExpected 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + "\nOnly in actual: " + onlyInActual 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + "\nIntersection: " + intersection); 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Asserts that two sets contain the same elements. */ 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void assertEquals(Set<? extends Object> expected, Set<? extends Object> actual) { 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(null, expected, actual); 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Asserts that {@code expectedRegex} exactly matches {@code actual} and 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * fails with {@code message} if it does not. The MatchResult is returned 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in case the test needs access to any captured groups. Note that you can 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * also use this for a literal string, by wrapping your expected string in 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Pattern#quote}. 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static MatchResult assertMatchesRegex( 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String message, String expectedRegex, String actual) { 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (actual == null) { 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failNotMatches(message, expectedRegex, actual); 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Matcher matcher = getMatcher(expectedRegex, actual); 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!matcher.matches()) { 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failNotMatches(message, expectedRegex, actual); 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return matcher; 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Variant of {@link #assertMatchesRegex(String,String,String)} using a 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * generic message. 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static MatchResult assertMatchesRegex( 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String expectedRegex, String actual) { 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return assertMatchesRegex(null, expectedRegex, actual); 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Asserts that {@code expectedRegex} matches any substring of {@code actual} 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and fails with {@code message} if it does not. The Matcher is returned in 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * case the test needs access to any captured groups. Note that you can also 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * use this for a literal string, by wrapping your expected string in 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Pattern#quote}. 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static MatchResult assertContainsRegex( 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String message, String expectedRegex, String actual) { 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (actual == null) { 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failNotContains(message, expectedRegex, actual); 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Matcher matcher = getMatcher(expectedRegex, actual); 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!matcher.find()) { 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failNotContains(message, expectedRegex, actual); 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return matcher; 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Variant of {@link #assertContainsRegex(String,String,String)} using a 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * generic message. 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static MatchResult assertContainsRegex( 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String expectedRegex, String actual) { 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return assertContainsRegex(null, expectedRegex, actual); 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Asserts that {@code expectedRegex} does not exactly match {@code actual}, 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and fails with {@code message} if it does. Note that you can also use 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this for a literal string, by wrapping your expected string in 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Pattern#quote}. 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void assertNotMatchesRegex( 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String message, String expectedRegex, String actual) { 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Matcher matcher = getMatcher(expectedRegex, actual); 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (matcher.matches()) { 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failMatch(message, expectedRegex, actual); 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Variant of {@link #assertNotMatchesRegex(String,String,String)} using a 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * generic message. 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void assertNotMatchesRegex( 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String expectedRegex, String actual) { 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertNotMatchesRegex(null, expectedRegex, actual); 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Asserts that {@code expectedRegex} does not match any substring of 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@code actual}, and fails with {@code message} if it does. Note that you 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * can also use this for a literal string, by wrapping your expected string 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in {@link Pattern#quote}. 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void assertNotContainsRegex( 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String message, String expectedRegex, String actual) { 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Matcher matcher = getMatcher(expectedRegex, actual); 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (matcher.find()) { 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failContains(message, expectedRegex, actual); 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Variant of {@link #assertNotContainsRegex(String,String,String)} using a 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * generic message. 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void assertNotContainsRegex( 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String expectedRegex, String actual) { 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertNotContainsRegex(null, expectedRegex, actual); 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Asserts that {@code actual} contains precisely the elements 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@code expected}, and in the same order. 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void assertContentsInOrder( 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String message, Iterable<?> actual, Object... expected) { 34997eb32e2cad1871f89f9d7e91681b2977c8a4d19Karl Rosaen ArrayList actualList = new ArrayList(); 35097eb32e2cad1871f89f9d7e91681b2977c8a4d19Karl Rosaen for (Object o : actual) { 35197eb32e2cad1871f89f9d7e91681b2977c8a4d19Karl Rosaen actualList.add(o); 35297eb32e2cad1871f89f9d7e91681b2977c8a4d19Karl Rosaen } 35397eb32e2cad1871f89f9d7e91681b2977c8a4d19Karl Rosaen Assert.assertEquals(message, Arrays.asList(expected), actualList); 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Variant of assertContentsInOrder(String, Iterable<?>, Object...) 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * using a generic message. 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void assertContentsInOrder( 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Iterable<?> actual, Object... expected) { 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertContentsInOrder((String) null, actual, expected); 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Asserts that {@code actual} contains precisely the elements 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@code expected}, but in any order. 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void assertContentsInAnyOrder(String message, Iterable<?> actual, 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Object... expected) { 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project HashMap<Object, Object> expectedMap = new HashMap<Object, Object>(expected.length); 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Object expectedObj : expected) { 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project expectedMap.put(expectedObj, expectedObj); 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Object actualObj : actual) { 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (expectedMap.remove(actualObj) == null) { 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failWithMessage(message, "Extra object in actual: (" + actualObj.toString() + ")"); 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 381b51617f4668ef8cf0e6d8d0fc3284eae51dbd8caStephan Linzner 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (expectedMap.size() > 0) { 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failWithMessage(message, "Extra objects in expected."); 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Variant of assertContentsInAnyOrder(String, Iterable<?>, Object...) 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * using a generic message. 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void assertContentsInAnyOrder(Iterable<?> actual, Object... expected) { 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertContentsInAnyOrder((String)null, actual, expected); 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Asserts that {@code iterable} is empty. 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void assertEmpty(String message, Iterable<?> iterable) { 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (iterable.iterator().hasNext()) { 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failNotEmpty(message, iterable.toString()); 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Variant of {@link #assertEmpty(String, Iterable)} using a 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * generic message. 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void assertEmpty(Iterable<?> iterable) { 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEmpty(null, iterable); 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Asserts that {@code map} is empty. 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void assertEmpty(String message, Map<?,?> map) { 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!map.isEmpty()) { 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failNotEmpty(message, map.toString()); 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Variant of {@link #assertEmpty(String, Map)} using a generic 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * message. 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void assertEmpty(Map<?,?> map) { 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEmpty(null, map); 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Asserts that {@code iterable} is not empty. 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void assertNotEmpty(String message, Iterable<?> iterable) { 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!iterable.iterator().hasNext()) { 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failEmpty(message); 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Variant of assertNotEmpty(String, Iterable<?>) 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * using a generic message. 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void assertNotEmpty(Iterable<?> iterable) { 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertNotEmpty(null, iterable); 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Asserts that {@code map} is not empty. 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void assertNotEmpty(String message, Map<?,?> map) { 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (map.isEmpty()) { 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failEmpty(message); 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Variant of {@link #assertNotEmpty(String, Map)} using a generic 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * message. 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void assertNotEmpty(Map<?,?> map) { 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertNotEmpty(null, map); 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Utility for testing equals() and hashCode() results at once. 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Tests that lhs.equals(rhs) matches expectedResult, as well as 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rhs.equals(lhs). Also tests that hashCode() return values are 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * equal if expectedResult is true. (hashCode() is not tested if 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * expectedResult is false, as unequal objects can have equal hashCodes.) 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param lhs An Object for which equals() and hashCode() are to be tested. 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param rhs As lhs. 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param expectedResult True if the objects should compare equal, 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * false if not. 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void checkEqualsAndHashCodeMethods( 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String message, Object lhs, Object rhs, boolean expectedResult) { 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((lhs == null) && (rhs == null)) { 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertTrue( 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Your check is dubious...why would you expect null != null?", 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project expectedResult); 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((lhs == null) || (rhs == null)) { 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertFalse( 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Your check is dubious...why would you expect an object " 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + "to be equal to null?", expectedResult); 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (lhs != null) { 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals(message, expectedResult, lhs.equals(rhs)); 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (rhs != null) { 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals(message, expectedResult, rhs.equals(lhs)); 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (expectedResult) { 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String hashMessage = 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "hashCode() values for equal objects should be the same"; 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (message != null) { 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project hashMessage += ": " + message; 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertTrue(hashMessage, lhs.hashCode() == rhs.hashCode()); 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Variant of 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * checkEqualsAndHashCodeMethods(String,Object,Object,boolean...)} 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * using a generic message. 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void checkEqualsAndHashCodeMethods(Object lhs, Object rhs, 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean expectedResult) { 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project checkEqualsAndHashCodeMethods((String) null, lhs, rhs, expectedResult); 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static Matcher getMatcher(String expectedRegex, String actual) { 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Pattern pattern = Pattern.compile(expectedRegex); 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return pattern.matcher(actual); 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static void failEqual(String message, Object unexpected) { 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failWithMessage(message, "expected not to be:<" + unexpected + ">"); 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static void failWrongLength( 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String message, int expected, int actual) { 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failWithMessage(message, "expected array length:<" + expected 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + "> but was:<" + actual + '>'); 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static void failWrongElement( 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String message, int index, Object expected, Object actual) { 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failWithMessage(message, "expected array element[" + index + "]:<" 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + expected + "> but was:<" + actual + '>'); 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static void failNotMatches( 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String message, String expectedRegex, String actual) { 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String actualDesc = (actual == null) ? "null" : ('<' + actual + '>'); 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failWithMessage(message, "expected to match regex:<" + expectedRegex 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + "> but was:" + actualDesc); 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static void failNotContains( 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String message, String expectedRegex, String actual) { 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String actualDesc = (actual == null) ? "null" : ('<' + actual + '>'); 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failWithMessage(message, "expected to contain regex:<" + expectedRegex 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + "> but was:" + actualDesc); 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static void failMatch( 5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String message, String expectedRegex, String actual) { 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failWithMessage(message, "expected not to match regex:<" + expectedRegex 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + "> but was:<" + actual + '>'); 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static void failContains( 5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String message, String expectedRegex, String actual) { 5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failWithMessage(message, "expected not to contain regex:<" + expectedRegex 5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + "> but was:<" + actual + '>'); 5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static void failNotEmpty( 5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String message, String actual) { 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failWithMessage(message, "expected to be empty, but contained: <" 5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + actual + ">"); 5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static void failEmpty(String message) { 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failWithMessage(message, "expected not to be empty, but was"); 5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static void failWithMessage(String userMessage, String ourMessage) { 5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.fail((userMessage == null) 5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ? ourMessage 5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : userMessage + ' ' + ourMessage); 5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static boolean equal(Object a, Object b) { 5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return a == b || (a != null && a.equals(b)); 5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 586