1dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki/* 2dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki * Copyright (C) 2012 The Android Open Source Project 3dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki * 4dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki * Licensed under the Apache License, Version 2.0 (the "License"); 5dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki * you may not use this file except in compliance with the License. 6dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki * You may obtain a copy of the License at 7dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki * 8dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki * http://www.apache.org/licenses/LICENSE-2.0 9dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki * 10dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki * Unless required by applicable law or agreed to in writing, software 11dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki * distributed under the License is distributed on an "AS IS" BASIS, 12dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki * See the License for the specific language governing permissions and 14dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki * limitations under the License. 15dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki */ 16dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki 17dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onukipackage com.android.providers.contacts; 18dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki 19dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onukiimport android.content.ContentValues; 2087426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onukiimport android.content.Context; 2187426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onukiimport android.database.Cursor; 2287426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onukiimport android.util.Log; 2387426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki 2438210445730ee04c351c7cc1b3800cfe23e34325Makoto Onukiimport junit.framework.Assert; 2538210445730ee04c351c7cc1b3800cfe23e34325Makoto Onuki 2687426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onukiimport java.io.File; 2787426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onukiimport java.io.FileOutputStream; 2887426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onukiimport java.io.IOException; 29dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki 30dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onukipublic class TestUtils { 31dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki private TestUtils() { 32dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki } 33dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki 34dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki /** Convenient method to create a ContentValues */ 35dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki public static ContentValues cv(Object... namesAndValues) { 36dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki Assert.assertTrue((namesAndValues.length % 2) == 0); 37dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki 38dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki final ContentValues ret = new ContentValues(); 39dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki for (int i = 1; i < namesAndValues.length; i += 2) { 40dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki final String name = namesAndValues[i - 1].toString(); 41dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki final Object value = namesAndValues[i]; 42dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki if (value == null) { 43dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki ret.putNull(name); 44dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki } else if (value instanceof String) { 45dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki ret.put(name, (String) value); 46dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki } else if (value instanceof Integer) { 47dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki ret.put(name, (Integer) value); 48dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki } else if (value instanceof Long) { 49dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki ret.put(name, (Long) value); 50dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki } else { 51dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki Assert.fail("Unsupported type: " + value.getClass().getSimpleName()); 52dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki } 53dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki } 54dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki return ret; 55dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki } 5687426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki 5787426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki /** 5887426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki * Writes the content of a cursor to the log. 5987426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki */ 6087426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki public static final void dumpCursor(Cursor c) { 6187426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki final String TAG = "contacts"; 6287426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki 6387426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki final StringBuilder sb = new StringBuilder(); 6487426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki for (int i = 0; i < c.getColumnCount(); i++) { 6587426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki if (sb.length() > 0) sb.append("|"); 6687426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki sb.append(c.getColumnName(i)); 6787426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki } 6887426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki Log.i(TAG, sb.toString()); 6987426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki 7087426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki c.moveToPosition(-1); 7187426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki while (c.moveToNext()) { 7287426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki sb.setLength(0); 7387426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki for (int i = 0; i < c.getColumnCount(); i++) { 7487426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki if (sb.length() > 0) sb.append("|"); 7587426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki 76af3fc698cbf359f17ae658b6f1e2088472662937Makoto Onuki if (c.getType(i) == Cursor.FIELD_TYPE_BLOB) { 77af3fc698cbf359f17ae658b6f1e2088472662937Makoto Onuki byte[] blob = c.getBlob(i); 78af3fc698cbf359f17ae658b6f1e2088472662937Makoto Onuki sb.append("([blob] "); 79af3fc698cbf359f17ae658b6f1e2088472662937Makoto Onuki sb.append(blob == null ? "null" : blob.length + "b"); 80af3fc698cbf359f17ae658b6f1e2088472662937Makoto Onuki sb.append(")"); 81af3fc698cbf359f17ae658b6f1e2088472662937Makoto Onuki } else { 82af3fc698cbf359f17ae658b6f1e2088472662937Makoto Onuki sb.append(c.getString(i)); 83af3fc698cbf359f17ae658b6f1e2088472662937Makoto Onuki } 8487426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki } 8587426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki Log.i(TAG, sb.toString()); 8687426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki } 8787426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki } 8887426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki 8987426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki /** 9087426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki * Writes an arbitrary byte array to the test apk's cache directory. 9187426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki */ 9287426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki public static final String dumpToCacheDir(Context context, String prefix, String suffix, 9387426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki byte[] data) { 9487426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki try { 9587426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki File file = File.createTempFile(prefix, suffix, context.getCacheDir()); 9687426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki FileOutputStream fos = new FileOutputStream(file); 9787426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki fos.write(data); 9887426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki fos.close(); 9987426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki return file.getAbsolutePath(); 10087426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki } catch (IOException e) { 10187426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki return "[Failed to write to file: " + e.getMessage() + "]"; 10287426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki } 10387426833d4c2c626e032f5d0b84a08b58024daf6Makoto Onuki } 104dfab50ecd585e55769dea451cb3a47ff69b8b86dMakoto Onuki} 105