package com.applang.berichtsheft.test; import com.applang.berichtsheft.BerichtsheftApp; import com.applang.berichtsheft.R; import com.applang.provider.NotePad; import com.applang.provider.NotePadProvider; import com.applang.provider.NotePad.NoteColumns; import java.io.File; import junit.framework.TestCase; import android.app.Activity; import android.content.ContentProvider; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.os.Environment; import static com.applang.Util.*; import static com.applang.Util1.*; import static com.applang.Util2.*; public class InfraTests<T extends Activity> extends TestCase { String mPackage, mDataDir; Class<?> mActivityClass; boolean mInitialTouchMode = false; Intent mActivityIntent = null; public InfraTests() { mPackage = getPackageNameByClass(R.class); mActivityClass = Activity.class; } public InfraTests(String pkg, Class<T> activityClass) { mPackage = pkg; mActivityClass = activityClass; } @Override protected void setUp() throws Exception { mDataDir = Environment.getDataDirectory().getPath(); BerichtsheftApp.loadSettings(); mActivity = getActivity(); } @Override protected void tearDown() throws Exception { } public Activity getActivity() { Activity a; try { a = (Activity) mActivityClass.newInstance(); a.setPackageInfo(mPackage, mDataDir); } catch (Exception e) { return null; } return (Activity) a; } protected Activity mActivity; protected int androidLevel = 0; public static boolean impex(Activity activity, String[] fileNames, boolean export) { return true; }; public void testContext() throws Exception { File dir = Environment.getDataDirectory(); println(dir); assertTrue(dir.exists()); Context context = new Context(); context.setPackageInfo(mPackage, mDataDir); dir = context.getDataDirectory(); assertTrue(dir.exists()); String flavor = NotePad.AUTHORITY; String dbName = databaseName(flavor); File dbFile = context.getDatabasePath(dbName); makeSureExists(flavor, dbFile); String[] databaseList = context.databaseList(); assertTrue(asList(databaseList).contains(dbName)); String dbPath = dbFile.getPath(); assertEquals(fileOf(mDataDir, "data", mPackage, "databases", NotePadProvider.DATABASE_NAME).getPath(), dbPath); dbPath = new File(dbPath).getCanonicalPath(); Uri uri = new Uri.Builder() .scheme("file") .path(dbPath) .build(); assertFalse(notNullOrEmpty(uri.getAuthority())); assertTrue(notNullOrEmpty(uri.getPath())); Uri uri2 = Uri.fromFile(dbFile); ValList tables = tables(context, uri2); println(tables); for (String table : NotePadProvider.DATABASE_TABLES) assertTrue(tables.contains(table)); uri = uri.buildUpon() .fragment("notes") .query("" + 1) .build(); uri = Uri.parse(uri.toString()); println(uri); println(uri.getPath(), uri.getFragment(), uri.getQuery()); uri = uri.buildUpon().query("").build(); Object[] params = new Object[]{0}; ContentProvider contentProvider = new ContentProvider(); contentProvider.setContext(context); Cursor cursor = contentProvider.query(uri, null, null, null, null); assertEquals(cursor.getCount() > 0, traverse(cursor, new Job<Cursor>() { public void perform(Cursor c, Object[] params) throws Exception { println(getRow(c)); params[0] = 1 + (Integer)params[0]; } }, params)); contentProvider.close(); assertEquals((Integer)params[0], (Integer)recordCount(context, uri)); uri = contentUri(flavor, null); assertFalse(notNullOrEmpty(uri.getPath())); assertTrue(notNullOrEmpty(uri.getAuthority())); assertEquals("content://" + flavor, uri.toString()); uri2 = contentUri(flavor, NotePadProvider.tableName(NotePadProvider.NOTES)); assertEquals(NoteColumns.CONTENT_URI.toString(), uri2.toString()); uri2 = Uri.parse(flavor); assertTrue(notNullOrEmpty(uri2.getPath())); assertFalse(notNullOrEmpty(uri2.getAuthority())); assertEquals(uri.toString(), "content://" + uri2.toString()); uri2 = Uri.parse(dbPath); assertTrue(notNullOrEmpty(uri2.getPath())); assertFalse(notNullOrEmpty(uri2.getAuthority())); assertEquals(Uri.fromFile(new File(dbPath)).toString(), "file://" + uri2.toString()); } }