Remove illegal references to IsolatedContext

This fixes a crash on account deletion, leaving around bad accounts that
were in limbo
Also remove a test for an unsupported operation

Bug: 5051951
Change-Id: Ieebc7f769075614ae1a656cf123d8ce0313e611d
This commit is contained in:
Ben Komalo 2011-07-20 10:15:05 -07:00
parent e12c0522f8
commit 1ecfb5311b
3 changed files with 19 additions and 14 deletions

View File

@ -28,7 +28,6 @@ import android.os.Bundle;
import android.os.IBinder; import android.os.IBinder;
import android.os.RemoteCallbackList; import android.os.RemoteCallbackList;
import android.os.RemoteException; import android.os.RemoteException;
import android.test.IsolatedContext;
import android.util.Log; import android.util.Log;
import com.android.email.mail.store.Pop3Store.Pop3Message; import com.android.email.mail.store.Pop3Store.Pop3Message;
@ -117,6 +116,8 @@ public class Controller {
private static RemoteCallbackList<IEmailServiceCallback> sCallbackList = private static RemoteCallbackList<IEmailServiceCallback> sCallbackList =
new RemoteCallbackList<IEmailServiceCallback>(); new RemoteCallbackList<IEmailServiceCallback>();
private volatile boolean mInUnitTests = false;
protected Controller(Context _context) { protected Controller(Context _context) {
mContext = _context.getApplicationContext(); mContext = _context.getApplicationContext();
mProviderContext = _context; mProviderContext = _context;
@ -124,6 +125,15 @@ public class Controller {
mLegacyController.addListener(mLegacyListener); mLegacyController.addListener(mLegacyListener);
} }
/**
* Mark this controller as being in use in a unit test.
* This is a kludge vs having proper mocks and dependency injection; since the Controller is a
* global singleton there isn't much else we can do.
*/
public void markForUnitTest(boolean inUnitTests) {
mInUnitTests = inUnitTests;
}
/** /**
* Cleanup for test. Mustn't be called for the regular {@link Controller}, as it's a * Cleanup for test. Mustn't be called for the regular {@link Controller}, as it's a
* singleton and lives till the process finishes. * singleton and lives till the process finishes.
@ -472,7 +482,7 @@ public class Controller {
} }
/** /**
* Look for a specific mailbox, creating it if necessary, and return the mailbox id. * Look for a specific system mailbox, creating it if necessary, and return the mailbox id.
* This is a blocking operation and should not be called from the UI thread. * This is a blocking operation and should not be called from the UI thread.
* *
* Synchronized so multiple threads can call it (and not risk creating duplicate boxes). * Synchronized so multiple threads can call it (and not risk creating duplicate boxes).
@ -1148,8 +1158,10 @@ public class Controller {
Uri uri = ContentUris.withAppendedId(Account.CONTENT_URI, accountId); Uri uri = ContentUris.withAppendedId(Account.CONTENT_URI, accountId);
context.getContentResolver().delete(uri, null, null); context.getContentResolver().delete(uri, null, null);
// For unit tests, don't run backup, security, and ui pieces // For unit tests, don't run backup, security, and ui pieces.
if (context instanceof IsolatedContext) return; if (mInUnitTests) {
return;
}
// Clean up // Clean up
AccountBackupRestore.backup(context); AccountBackupRestore.backup(context);

View File

@ -136,15 +136,6 @@ public class ControllerProviderOpsTests extends ProviderTestCase2<EmailProvider>
assertNotNull(testMailbox); assertNotNull(testMailbox);
assertEquals(8, testMailbox.mFlags); // Flags should be "holds mail" assertEquals(8, testMailbox.mFlags); // Flags should be "holds mail"
assertEquals(-1L, testMailbox.mParentKey); // Parent is off the top-level assertEquals(-1L, testMailbox.mParentKey); // Parent is off the top-level
// Test creating user mailbox; some fields have changed
mTestController.createMailbox(1L, Mailbox.TYPE_MAIL);
testMailboxId = Mailbox.findMailboxOfType(mProviderContext, 1L, Mailbox.TYPE_MAIL);
assertTrue(testMailboxId != Mailbox.NO_MAILBOX);
testMailbox = Mailbox.restoreMailboxWithId(mProviderContext, testMailboxId);
assertNotNull(testMailbox);
assertEquals(0, testMailbox.mFlags); // Flags are not set
assertEquals(0L, testMailbox.mParentKey); // Parent is not set
} }
/** /**

View File

@ -58,6 +58,7 @@ public class SecurityPolicyTests extends ProviderTestCase2<EmailProvider> {
mMockContext = new MockContext2(getMockContext(), mContext); mMockContext = new MockContext2(getMockContext(), mContext);
// Invalidate all caches, since we reset the database for each test // Invalidate all caches, since we reset the database for each test
ContentCache.invalidateAllCaches(); ContentCache.invalidateAllCaches();
Controller.getInstance(mMockContext).markForUnitTest(true);
} }
/** /**
@ -65,6 +66,7 @@ public class SecurityPolicyTests extends ProviderTestCase2<EmailProvider> {
*/ */
@Override @Override
protected void tearDown() throws Exception { protected void tearDown() throws Exception {
Controller.getInstance(mMockContext).markForUnitTest(false);
super.tearDown(); super.tearDown();
} }
@ -398,10 +400,10 @@ public class SecurityPolicyTests extends ProviderTestCase2<EmailProvider> {
* Lightweight subclass of the Controller class allows injection of mock context * Lightweight subclass of the Controller class allows injection of mock context
*/ */
public static class TestController extends Controller { public static class TestController extends Controller {
protected TestController(Context providerContext, Context systemContext) { protected TestController(Context providerContext, Context systemContext) {
super(systemContext); super(systemContext);
setProviderContext(providerContext); setProviderContext(providerContext);
markForUnitTest(true);
} }
} }