• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2011 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.providers.contacts;
18 
19 import android.content.Context;
20 import android.graphics.BitmapFactory;
21 
22 import com.google.android.collect.Sets;
23 
24 import junit.framework.Assert;
25 
26 import java.io.ByteArrayOutputStream;
27 import java.io.IOException;
28 import java.io.InputStream;
29 import java.util.Arrays;
30 import java.util.Set;
31 
32 /**
33  * Contains additional assertion methods not found in Junit or MoreAsserts.
34  */
35 public final class EvenMoreAsserts {
36     // Non instantiable.
EvenMoreAsserts()37     private EvenMoreAsserts() { }
38 
assertThrows(Class<T> exception, Runnable r)39     public static <T extends Exception> void assertThrows(Class<T> exception, Runnable r) {
40         assertThrows(null, exception, r);
41     }
42 
assertThrows(String message, Class<T> exception, Runnable r)43     public static <T extends Exception> void assertThrows(String message, Class<T> exception,
44             Runnable r) {
45         try {
46             r.run();
47            // Cannot invoke Assert.fail() here because it will be caught by the try/catch below
48            // and, if we are expecting an AssertionError or AssertionFailedError (depending on
49            // the platform), we might incorrectly identify that as a success.
50         } catch (Exception caught) {
51             if (!exception.isInstance(caught)) {
52                 Assert.fail(appendUserMessage("Exception " + exception + " expected but " +
53                         caught +" thrown.", message));
54             }
55             return;
56         }
57         Assert.fail(appendUserMessage(
58                 "Exception " + exception + " expected but no exception was thrown.",
59                 message));
60     }
61 
appendUserMessage(String errorMsg, String userMsg)62     private static String appendUserMessage(String errorMsg, String userMsg) {
63         return userMsg == null ? errorMsg : errorMsg + userMsg;
64     }
65 
assertImageRawData(Context context, byte[] expected, InputStream actualStream)66     public static void assertImageRawData(Context context, byte[] expected,
67             InputStream actualStream)
68             throws IOException {
69         ByteArrayOutputStream baos = new ByteArrayOutputStream();
70 
71         final byte[] buffer = new byte[4096];
72         int count;
73         while ((count = actualStream.read(buffer)) != -1) {
74             baos.write(buffer, 0, count);
75         }
76         actualStream.close();
77 
78         assertImageRawData(context, expected, baos.toByteArray());
79     }
80 
assertImageRawData(Context context, byte[] expected, byte[] actual)81     public static void assertImageRawData(Context context, byte[] expected, byte[] actual) {
82         String failReason = null;
83         if (expected.length != actual.length) {
84             failReason = "Different data lengths:" +
85                     " expected=" + expected.length + " actual=" + actual.length;
86         } else if (!Arrays.equals(expected, actual)) {
87             failReason = "Different data:";
88         }
89         if (failReason == null) {
90             return;
91         }
92         String expectedFile = TestUtils.dumpToCacheDir(context, "expected", ".jpg", expected);
93         String actualFile = TestUtils.dumpToCacheDir(context, "actual", ".jpg", actual);
94 
95         // Length or hashCode is different.  We'll fail, but put the dimensions in the message.
96         Assert.fail(failReason + ", expected dimentions=" + getImageDimensions(expected) +
97                 " actual dimentions=" + getImageDimensions(actual) +
98                 " Data written to " + expectedFile + " and " + actualFile);
99     }
100 
getImageDimensions(byte[] imageData)101     private static final String getImageDimensions(byte[] imageData) {
102         BitmapFactory.Options o = new BitmapFactory.Options();
103         o.inJustDecodeBounds = true;
104         BitmapFactory.decodeByteArray(imageData, 0, imageData.length, o);
105 
106         return "[" + o.outWidth + " x " + o.outHeight + "]";
107     }
108 
assertUnique(Object... values)109     public static void assertUnique(Object... values) {
110         Set<Object> set = Sets.newHashSet();
111         for (Object o : values) {
112             Assert.assertFalse("Duplicate found: " + o, set.contains(o));
113             set.add(o);
114         }
115     }
116 }
117