1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage junit.framework; 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Thrown when an assert equals for Strings failed. 5de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro * 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Inspired by a patch from Alex Chaffee mailto:alex@purpletech.com 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class ComparisonFailure extends AssertionFailedError { 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private String fExpected; 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private String fActual; 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constructs a comparison failure. 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param message the identifying message or null 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param expected the expected string value 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param actual the actual string value 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public ComparisonFailure (String message, String expected, String actual) { 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super (message); 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fExpected= expected; 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fActual= actual; 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 23de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns "..." in place of common prefix and "..." in 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * place of common suffix between expected and actual. 27de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro * 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.lang.Throwable#getMessage() 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String getMessage() { 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (fExpected == null || fActual == null) 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return Assert.format(super.getMessage(), fExpected, fActual); 33de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int end= Math.min(fExpected.length(), fActual.length()); 35de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int i= 0; 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for(; i < end; i++) { 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (fExpected.charAt(i) != fActual.charAt(i)) 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project break; 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int j= fExpected.length()-1; 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int k= fActual.length()-1; 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (; k >= i && j >= i; k--,j--) { 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (fExpected.charAt(j) != fActual.charAt(k)) 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project break; 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String actual, expected; 48de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // equal strings 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (j < i && k < i) { 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project expected= fExpected; 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project actual= fActual; 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project expected= fExpected.substring(i, j+1); 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project actual= fActual.substring(i, k+1); 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (i <= end && i > 0) { 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project expected= "..."+expected; 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project actual= "..."+actual; 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 60de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (j < fExpected.length()-1) 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project expected= expected+"..."; 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (k < fActual.length()-1) 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project actual= actual+"..."; 65de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro } 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return Assert.format(super.getMessage(), expected, actual); 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 69