Fixed broken + commented out tests.

They were all due to the addition of "application label" to the
installed app cache. This commit adds a mock ApplicationInfo
to the mock package manager and also specifies the label while
inserting into the test content provider.
This commit is contained in:
Peter Serwylo 2015-03-24 19:55:29 +11:00
parent 9dfa18aead
commit a16bc22c4a
5 changed files with 51 additions and 26 deletions

View File

@ -0,0 +1,19 @@
package mock;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
public class MockApplicationInfo extends ApplicationInfo {
private final PackageInfo info;
public MockApplicationInfo(PackageInfo info) {
this.info = info;
}
@Override
public CharSequence loadLabel(PackageManager pm) {
return "Mock app: " + info.packageName;
}
}

View File

@ -1,5 +1,6 @@
package mock;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.test.mock.MockPackageManager;
@ -9,7 +10,7 @@ import java.util.List;
public class MockInstallablePackageManager extends MockPackageManager {
private List<PackageInfo> info = new ArrayList<PackageInfo>();
private List<PackageInfo> info = new ArrayList<>();
@Override
public List<PackageInfo> getInstalledPackages(int flags) {
@ -30,6 +31,11 @@ public class MockInstallablePackageManager extends MockPackageManager {
}
}
@Override
public ApplicationInfo getApplicationInfo(String packageName, int flags) throws NameNotFoundException {
return new MockApplicationInfo(getPackageInfo(packageName));
}
public PackageInfo getPackageInfo(String id) {
for (PackageInfo i : info) {
if (i.packageName.equals(id)) {

View File

@ -1,14 +1,18 @@
package org.fdroid.fdroid;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.res.Resources;
import android.database.Cursor;
import mock.MockCategoryResources;
import mock.MockContextSwappableComponents;
import mock.MockInstallablePackageManager;
import org.fdroid.fdroid.data.ApkProvider;
import org.fdroid.fdroid.data.App;
import org.fdroid.fdroid.data.AppProvider;
import org.fdroid.fdroid.data.InstalledAppCacheUpdater;
import java.util.ArrayList;
import java.util.List;
@ -43,7 +47,6 @@ public class AppProviderTest extends FDroidProviderTest<AppProvider> {
* the AppProvider used to stumble across this bug when asking for installed apps,
* and the device had over 1000 apps installed.
*/
/* TODO fix me
public void testMaxSqliteParams() {
MockInstallablePackageManager pm = new MockInstallablePackageManager();
@ -74,7 +77,7 @@ public class AppProviderTest extends FDroidProviderTest<AppProvider> {
assertResultCount(3, AppProvider.getInstalledUri());
}
*/
public void testCantFindApp() {
assertNull(AppProvider.Helper.findById(getMockContentResolver(), "com.example.doesnt-exist"));
}
@ -92,7 +95,7 @@ public class AppProviderTest extends FDroidProviderTest<AppProvider> {
App app = new App();
app.id = "org.fdroid.fdroid";
List<App> apps = new ArrayList<App>(1);
List<App> apps = new ArrayList<>(1);
apps.add(app);
assertValidUri(AppProvider.getContentUri(app));
@ -105,7 +108,6 @@ public class AppProviderTest extends FDroidProviderTest<AppProvider> {
assertNotNull(cursor);
}
/* TODO fix me
private void insertApps(int count) {
for (int i = 0; i < count; i ++) {
insertApp("com.example.test." + i, "Test app " + i);
@ -122,7 +124,7 @@ public class AppProviderTest extends FDroidProviderTest<AppProvider> {
values.put(AppProvider.DataColumns.IGNORE_THISUPDATE, ignoreVercode);
insertApp(id, "App: " + id, values);
TestUtils.installAndBroadcast(getMockContext(), packageManager, id, installedVercode, "v" + installedVercode);
TestUtils.installAndBroadcast(getSwappableContext(), packageManager, id, installedVercode, "v" + installedVercode);
}
public void testCanUpdate() {
@ -173,7 +175,7 @@ public class AppProviderTest extends FDroidProviderTest<AppProvider> {
Cursor canUpdateCursor = r.query(AppProvider.getCanUpdateUri(), AppProvider.DataColumns.ALL, null, null, null);
canUpdateCursor.moveToFirst();
List<String> canUpdateIds = new ArrayList<String>(canUpdateCursor.getCount());
List<String> canUpdateIds = new ArrayList<>(canUpdateCursor.getCount());
while (!canUpdateCursor.isAfterLast()) {
canUpdateIds.add(new App(canUpdateCursor).id);
canUpdateCursor.moveToNext();
@ -224,7 +226,7 @@ public class AppProviderTest extends FDroidProviderTest<AppProvider> {
}
private void assertContainsOnlyIds(List<App> actualApps, String[] expectedIds) {
List<String> actualIds = new ArrayList<String>(actualApps.size());
List<String> actualIds = new ArrayList<>(actualApps.size());
for (App app : actualApps) {
actualIds.add(app.id);
}
@ -241,12 +243,11 @@ public class AppProviderTest extends FDroidProviderTest<AppProvider> {
assertResultCount(0, AppProvider.getInstalledUri());
for (int i = 10; i < 20; i ++) {
TestUtils.installAndBroadcast(getMockContext(), pm, "com.example.test." + i, i, "v1");
TestUtils.installAndBroadcast(getSwappableContext(), pm, "com.example.test." + i, i, "v1");
}
assertResultCount(10, AppProvider.getInstalledUri());
}
*/
public void testInsert() {

View File

@ -37,7 +37,6 @@ public class InstalledAppProviderTest extends FDroidProviderTest<InstalledAppPro
assertValidUri(InstalledAppProvider.getAppUri("blah"));
}
/* TODO fix me
public void testInsert() {
assertResultCount(0, InstalledAppProvider.getContentUri());
@ -134,7 +133,7 @@ public class InstalledAppProviderTest extends FDroidProviderTest<InstalledAppPro
assertIsInstalledVersionInDb("com.example.toKeep", 1, "v0.1");
}
*/
@Override
protected String[] getMinimalProjection() {
return new String[] {
@ -153,6 +152,7 @@ public class InstalledAppProviderTest extends FDroidProviderTest<InstalledAppPro
if (appId != null) {
values.put(InstalledAppProvider.DataColumns.APP_ID, appId);
}
values.put(InstalledAppProvider.DataColumns.APPLICATION_LABEL, "Mock app: " + appId);
values.put(InstalledAppProvider.DataColumns.VERSION_CODE, versionCode);
values.put(InstalledAppProvider.DataColumns.VERSION_NAME, versionNumber);
return values;
@ -164,15 +164,15 @@ public class InstalledAppProviderTest extends FDroidProviderTest<InstalledAppPro
}
private void removeAndBroadcast(String appId) {
TestUtils.removeAndBroadcast(getMockContext(), getPackageManager(), appId);
TestUtils.removeAndBroadcast(getSwappableContext(), getPackageManager(), appId);
}
private void upgradeAndBroadcast(String appId, int versionCode, String versionName) {
TestUtils.upgradeAndBroadcast(getMockContext(), getPackageManager(), appId, versionCode, versionName);
TestUtils.upgradeAndBroadcast(getSwappableContext(), getPackageManager(), appId, versionCode, versionName);
}
private void installAndBroadcast(String appId, int versionCode, String versionName) {
TestUtils.installAndBroadcast(getMockContext(), getPackageManager(), appId, versionCode, versionName);
TestUtils.installAndBroadcast(getSwappableContext(), getPackageManager(), appId, versionCode, versionName);
}
}

View File

@ -6,6 +6,8 @@ import android.net.Uri;
import android.os.Environment;
import android.util.Log;
import junit.framework.AssertionFailedError;
import mock.MockContextSwappableComponents;
import mock.MockInstallablePackageManager;
import org.fdroid.fdroid.data.ApkProvider;
import org.fdroid.fdroid.data.AppProvider;
@ -134,17 +136,12 @@ public class TestUtils {
* Will tell {@code pm} that we are installing {@code appId}, and then alert the
* {@link org.fdroid.fdroid.PackageAddedReceiver}. This will in turn update the
* "installed apps" table in the database.
*
* Note: in order for this to work, the {@link AppProviderTest#getSwappableContext()}
* will need to be aware of the package manager that we have passed in. Therefore,
* you will have to have called
* {@link mock.MockContextSwappableComponents#setPackageManager(android.content.pm.PackageManager)}
* on the {@link AppProviderTest#getSwappableContext()} before invoking this method.
*/
public static void installAndBroadcast(
Context context, MockInstallablePackageManager pm,
MockContextSwappableComponents context, MockInstallablePackageManager pm,
String appId, int versionCode, String versionName) {
context.setPackageManager(pm);
pm.install(appId, versionCode, versionName);
Intent installIntent = new Intent(Intent.ACTION_PACKAGE_ADDED);
installIntent.setData(Uri.parse("package:" + appId));
@ -153,15 +150,16 @@ public class TestUtils {
}
/**
* @see org.fdroid.fdroid.TestUtils#installAndBroadcast(android.content.Context context, mock.MockInstallablePackageManager, String, int, String)
* @see org.fdroid.fdroid.TestUtils#installAndBroadcast(mock.MockContextSwappableComponents, mock.MockInstallablePackageManager, String, int, String)
*/
public static void upgradeAndBroadcast(
Context context, MockInstallablePackageManager pm,
MockContextSwappableComponents context, MockInstallablePackageManager pm,
String appId, int versionCode, String versionName) {
/*
removeAndBroadcast(context, pm, appId);
installAndBroadcast(context, pm, appId, versionCode, versionName);
*/
context.setPackageManager(pm);
pm.install(appId, versionCode, versionName);
Intent installIntent = new Intent(Intent.ACTION_PACKAGE_CHANGED);
installIntent.setData(Uri.parse("package:" + appId));
@ -170,10 +168,11 @@ public class TestUtils {
}
/**
* @see org.fdroid.fdroid.TestUtils#installAndBroadcast(android.content.Context context, mock.MockInstallablePackageManager, String, int, String)
* @see org.fdroid.fdroid.TestUtils#installAndBroadcast(mock.MockContextSwappableComponents, mock.MockInstallablePackageManager, String, int, String)
*/
public static void removeAndBroadcast(Context context, MockInstallablePackageManager pm, String appId) {
public static void removeAndBroadcast(MockContextSwappableComponents context, MockInstallablePackageManager pm, String appId) {
context.setPackageManager(pm);
pm.remove(appId);
Intent installIntent = new Intent(Intent.ACTION_PACKAGE_REMOVED);
installIntent.setData(Uri.parse("package:" + appId));