From 3ebad383d648715b13b690a7462ea39a66dbdc3a Mon Sep 17 00:00:00 2001 From: Peter Serwylo <peter@ivt.com.au> Date: Sun, 23 Mar 2014 22:31:06 +1100 Subject: [PATCH] Refactored the recent MR for dynamicly adding default repos. The idea was good: reduce the amount of copied/pasted code where ContentValues were initialized, populated, then inserted. I've kept the idea, by putting it in its own method which is called twice. But the resources are not loaded dynamically any more. This is so that the compiler will be able to pick up if we reference a missing resource. Also, I took the opportunity to replace the field name string literals with references to RepoProvider.DataColumns.* constants. Finally, changed the tests around because now we need to have the "getInteger()" call mocked in resources correctly (for priority/inUse). --- src/org/fdroid/fdroid/data/DBHelper.java | 83 +++++++++---------- test/src/mock/MockCategoryResources.java | 7 +- test/src/mock/MockFDroidResources.java | 36 ++++++++ .../org/fdroid/fdroid/AppProviderTest.java | 8 +- .../org/fdroid/fdroid/FDroidProviderTest.java | 9 ++ 5 files changed, 95 insertions(+), 48 deletions(-) create mode 100644 test/src/mock/MockFDroidResources.java diff --git a/src/org/fdroid/fdroid/data/DBHelper.java b/src/org/fdroid/fdroid/data/DBHelper.java index feb323d91..c75fe67e9 100644 --- a/src/org/fdroid/fdroid/data/DBHelper.java +++ b/src/org/fdroid/fdroid/data/DBHelper.java @@ -177,55 +177,46 @@ public class DBHelper extends SQLiteOpenHelper { public void onCreate(SQLiteDatabase db) { createAppApk(db); - db.execSQL(CREATE_TABLE_REPO); - Resources ress = context.getResources(); + insertRepo( + db, + context.getString(R.string.default_repo_name1), + context.getString(R.string.default_repo_address1), + context.getString(R.string.default_repo_description1), + context.getString(R.string.default_repo_pubkey1), + context.getResources().getInteger(R.integer.default_repo_inuse1), + context.getResources().getInteger(R.integer.default_repo_priority1) + ); - int repoCount = ress.getInteger(R.integer.default_repo_count); - for (int i = 1; i <= repoCount; i++) { - ContentValues values = new ContentValues(); - String repoName = context.getString(ress.getIdentifier( - "default_repo_name" + i, - "string", - "org.fdroid.fdroid" - )); - values.put("address", - context.getString(ress.getIdentifier( - "default_repo_address" + i, - "string", - "org.fdroid.fdroid" - ))); - values.put("name",repoName); - values.put("description", - context.getString(ress.getIdentifier( - "default_repo_description" + i, - "string", - "org.fdroid.fdroid" - ))); - String pubkey = context.getString(ress.getIdentifier( - "default_repo_pubkey" + i, - "string", - "org.fdroid.fdroid" - )); - String fingerprint = Utils.calcFingerprint(pubkey); - values.put("pubkey", pubkey); - values.put("fingerprint", fingerprint); - values.put("maxage", 0); - values.put("inuse", ress.getInteger(ress.getIdentifier( - "default_repo_inuse" + i, - "integer", - "org.fdroid.fdroid" - ))); - values.put("priority", ress.getInteger(ress.getIdentifier( - "default_repo_priority" + i, - "integer", - "org.fdroid.fdroid" - ))); - values.put("lastetag", (String) null); - Log.i("FDroid", "Add repository " + repoName); - db.insert(TABLE_REPO, null, values); - } + insertRepo( + db, + context.getString(R.string.default_repo_name2), + context.getString(R.string.default_repo_address2), + context.getString(R.string.default_repo_description2), + context.getString(R.string.default_repo_pubkey2), + context.getResources().getInteger(R.integer.default_repo_inuse2), + context.getResources().getInteger(R.integer.default_repo_priority2) + ); + } + + private void insertRepo( + SQLiteDatabase db, String name, String address, String description, + String pubKey, int inUse, int priority) { + + ContentValues values = new ContentValues(); + values.put(RepoProvider.DataColumns.ADDRESS, address); + values.put(RepoProvider.DataColumns.NAME, name); + values.put(RepoProvider.DataColumns.DESCRIPTION, description); + values.put(RepoProvider.DataColumns.PUBLIC_KEY, pubKey); + values.put(RepoProvider.DataColumns.FINGERPRINT, Utils.calcFingerprint(pubKey)); + values.put(RepoProvider.DataColumns.MAX_AGE, 0); + values.put(RepoProvider.DataColumns.IN_USE, inUse); + values.put(RepoProvider.DataColumns.PRIORITY, priority); + values.put(RepoProvider.DataColumns.LAST_ETAG, (String)null); + + Log.i("FDroid", "Adding repository " + name); + db.insert(TABLE_REPO, null, values); } @Override diff --git a/test/src/mock/MockCategoryResources.java b/test/src/mock/MockCategoryResources.java index 669ddd1d0..2831049d8 100644 --- a/test/src/mock/MockCategoryResources.java +++ b/test/src/mock/MockCategoryResources.java @@ -1,9 +1,14 @@ package mock; +import android.content.Context; import android.test.mock.*; import org.fdroid.fdroid.*; -public class MockCategoryResources extends MockResources { +public class MockCategoryResources extends MockFDroidResources { + + public MockCategoryResources(Context getStringDelegatingContext) { + super(getStringDelegatingContext); + } @Override public String getString(int id) { diff --git a/test/src/mock/MockFDroidResources.java b/test/src/mock/MockFDroidResources.java new file mode 100644 index 000000000..c2b716d2f --- /dev/null +++ b/test/src/mock/MockFDroidResources.java @@ -0,0 +1,36 @@ +package mock; + +import android.content.Context; +import android.content.res.Resources; +import android.test.mock.*; +import org.fdroid.fdroid.*; + +public class MockFDroidResources extends MockResources { + + private Context getStringDelegatingContext; + + public MockFDroidResources(Context getStringDelegatingContext) { + this.getStringDelegatingContext = getStringDelegatingContext; + } + + @Override + public String getString(int id) { + return getStringDelegatingContext.getString(id); + } + + @Override + public int getInteger(int id) { + if (id == R.integer.default_repo_inuse1) { + return 1; + } else if (id == R.integer.default_repo_inuse2) { + return 0; + } else if (id == R.integer.default_repo_priority1) { + return 10; + } else if (id == R.integer.default_repo_priority2) { + return 20; + } else { + return 0; + } +} + +} diff --git a/test/src/org/fdroid/fdroid/AppProviderTest.java b/test/src/org/fdroid/fdroid/AppProviderTest.java index 80e19bd72..e36a32ba3 100644 --- a/test/src/org/fdroid/fdroid/AppProviderTest.java +++ b/test/src/org/fdroid/fdroid/AppProviderTest.java @@ -2,6 +2,7 @@ package org.fdroid.fdroid; import android.content.ContentResolver; import android.content.ContentValues; +import android.content.res.Resources; import android.database.Cursor; import mock.MockCategoryResources; @@ -24,7 +25,12 @@ public class AppProviderTest extends FDroidProviderTest<AppProvider> { @Override public void setUp() throws Exception { super.setUp(); - getSwappableContext().setResources(new MockCategoryResources()); + getSwappableContext().setResources(new MockCategoryResources(getContext())); + } + + @Override + protected Resources getMockResources() { + return new MockCategoryResources(getContext()); } @Override diff --git a/test/src/org/fdroid/fdroid/FDroidProviderTest.java b/test/src/org/fdroid/fdroid/FDroidProviderTest.java index 7a4c4a6d6..a2b4a8a18 100644 --- a/test/src/org/fdroid/fdroid/FDroidProviderTest.java +++ b/test/src/org/fdroid/fdroid/FDroidProviderTest.java @@ -3,13 +3,16 @@ package org.fdroid.fdroid; import android.annotation.TargetApi; import android.content.ContentValues; import android.content.Context; +import android.content.res.Resources; import android.database.Cursor; import android.net.Uri; import android.os.Build; import android.provider.ContactsContract; import android.test.ProviderTestCase2MockContext; +import mock.MockCategoryResources; import mock.MockContextEmptyComponents; import mock.MockContextSwappableComponents; +import mock.MockFDroidResources; import org.fdroid.fdroid.data.FDroidProvider; import org.fdroid.fdroid.mock.MockInstalledApkCache; @@ -23,10 +26,15 @@ public abstract class FDroidProviderTest<T extends FDroidProvider> extends Provi super(providerClass, providerAuthority); } + protected Resources getMockResources() { + return new MockFDroidResources(getContext()); + } + @Override public void setUp() throws Exception { super.setUp(); Utils.setupInstalledApkCache(new MockInstalledApkCache()); + getSwappableContext().setResources(getMockResources()); // The *Provider.Helper.* functions tend to take a Context as their // first parameter. This context is used to connect to the relevant @@ -34,6 +42,7 @@ public abstract class FDroidProviderTest<T extends FDroidProvider> extends Provi // to the mock content resolver, in order to reach the provider // under test. getSwappableContext().setContentResolver(getMockContentResolver()); + } @TargetApi(Build.VERSION_CODES.ECLAIR)