package com.android.example.leanback.search; import android.content.Context; import android.content.res.Resources; import android.database.sqlite.SQLiteDatabase; import android.test.AndroidTestCase; import android.test.IsolatedContext; import android.test.RenamingDelegatingContext; import android.test.mock.MockContext; import android.util.Log; import java.io.File; public class UniversalSearchContractTest extends AndroidTestCase { private final static String TAG = UniversalSearchContractTest.class.getSimpleName(); private void log(String msg) { Log.i(getClass().getSimpleName(), msg); } private static final String DATABASE = "test.db"; private void assertTables(final UniversalSearchContract.Table[] tables) { assertNotNull(tables); assertEquals(3, tables.length); } private class MockContext2 extends MockContext { @Override public Resources getResources() { return getContext().getResources(); } @Override public File getDir(String name, int mode) { // name the directory so the directory will be separated from // one created through the regular Context return getContext().getDir("mockcontext2_" + name, mode); } @Override public Context getApplicationContext() { return this; } } private SQLiteDatabase createTables(final boolean delete, final UniversalSearchContract.Table... tables) { SQLiteDatabase db = null; final String filenamePrefix = "test."; RenamingDelegatingContext targetContextWrapper = new RenamingDelegatingContext( new MockContext2(), // The context that most methods are //delegated to getContext(), // The context that file methods are delegated to filenamePrefix); final Context context = new IsolatedContext(super.getContext().getContentResolver(), targetContextWrapper); try { db = context.openOrCreateDatabase(DATABASE, 1, null); for (final UniversalSearchContract.Table table : tables) { table.onCreate(db); log("Table " + table + " onCreate successful"); } return db; } finally { if (null != db && delete) { db.close(); context.deleteDatabase(DATABASE); } } } public void testTables() { final UniversalSearchContract.Table[] tables = AbstractContract.tables(UniversalSearchContract.class); assertTables(tables); } public void testTablesDdl() { final UniversalSearchContract.Table[] tables = AbstractContract.tables(UniversalSearchContract.class); assertTables(tables); try { createTables(true, tables); } catch (Exception e) { fail(e.getMessage()); } } public void testMockData() { final UniversalSearchContract.Table[] tables = AbstractContract.tables(UniversalSearchContract.class); assertTables(tables); SQLiteDatabase db = null; try { db = createTables(false, tables); MockData.insert(getContext(), db); } catch (Exception e) { Log.e(TAG, "Cannot test mock data", e); fail(e.getMessage()); } finally { if (null != db) { db.close(); getContext().deleteDatabase(DATABASE); } } } } // EOF