diff --git a/src/com/android/email/activity/MailboxFinder.java b/src/com/android/email/activity/MailboxFinder.java index 45f58bbb5..7c8c6ffad 100644 --- a/src/com/android/email/activity/MailboxFinder.java +++ b/src/com/android/email/activity/MailboxFinder.java @@ -41,6 +41,10 @@ import android.util.Log; public class MailboxFinder { private final Context mContext; private final Controller mController; + + // Actual Controller.Result that will wrapped by ControllerResultUiThreadWrapper. + // Unit tests directly use it to avoid asynchronicity caused by ControllerResultUiThreadWrapper. + private final ControllerResults mInnerControllerResults; private Controller.Result mControllerResults; // Not final, we null it out when done. private final long mAccountId; @@ -75,8 +79,9 @@ public class MailboxFinder { mAccountId = accountId; mMailboxType = mailboxType; mCallback = callback; + mInnerControllerResults = new ControllerResults(); mControllerResults = new ControllerResultUiThreadWrapper( - new Handler(), new ControllerResults()); + new Handler(), mInnerControllerResults); mController.addResultCallback(mControllerResults); } @@ -255,6 +260,6 @@ public class MailboxFinder { } /* package */ Controller.Result getControllerResultsForTest() { - return mControllerResults; + return mInnerControllerResults; } } diff --git a/tests/src/com/android/email/DBTestHelper.java b/tests/src/com/android/email/DBTestHelper.java index b83699f6e..d67caae34 100644 --- a/tests/src/com/android/email/DBTestHelper.java +++ b/tests/src/com/android/email/DBTestHelper.java @@ -17,6 +17,7 @@ package com.android.email; import com.android.email.provider.AttachmentProvider; +import com.android.email.provider.ContentCache; import com.android.email.provider.EmailContent; import com.android.email.provider.EmailProvider; @@ -202,7 +203,10 @@ public final class DBTestHelper { } } - // Based on ProviderTestCase2.setUp(). + /** + * Return {@link Context} with isolated EmailProvider and AttachmentProvider. This method + * also invalidates the DB cache. + */ public static Context getProviderContext(Context context) throws Exception { MockContentResolver resolver = new MockContentResolver(); final String filenamePrefix = "test."; @@ -222,6 +226,9 @@ public final class DBTestHelper { final AttachmentProvider ap = new AttachmentProvider(); ap.attachInfo(providerContext, null); resolver.addProvider(AttachmentProvider.AUTHORITY, ap); + + ContentCache.invalidateAllCachesForTest(); + return providerContext; } } diff --git a/tests/src/com/android/email/activity/MessageViewTest.java b/tests/src/com/android/email/activity/MessageViewTest.java index 47ac6520b..77855e1ec 100644 --- a/tests/src/com/android/email/activity/MessageViewTest.java +++ b/tests/src/com/android/email/activity/MessageViewTest.java @@ -18,10 +18,6 @@ package com.android.email.activity; import com.android.email.DBTestHelper; import com.android.email.TestUtils; -import com.android.email.provider.EmailContent.Account; -import com.android.email.provider.EmailContent.Mailbox; -import com.android.email.provider.EmailContent.Message; -import com.android.email.provider.ProviderTestUtils; import android.content.Context; import android.content.Intent; @@ -80,33 +76,35 @@ public class MessageViewTest extends ActivityInstrumentationTestCase2 { +public class SmtpSenderUnitTests extends AndroidTestCase { EmailProvider mProvider; Context mProviderContext; @@ -62,19 +63,16 @@ public class SmtpSenderUnitTests extends ProviderTestCase2 { private final static String TEST_STRING = "Hello, world"; private final static String TEST_STRING_BASE64 = "SGVsbG8sIHdvcmxk"; - public SmtpSenderUnitTests() { - super(EmailProvider.class, EmailProvider.EMAIL_AUTHORITY); - } - /** * Setup code. We generate a lightweight SmtpSender for testing. */ @Override protected void setUp() throws Exception { super.setUp(); - mProviderContext = getMockContext(); + mProviderContext = DBTestHelper.ProviderContextSetupHelper.getProviderContext( + getContext()); mContext = getContext(); - + // These are needed so we can get at the inner classes mSender = (SmtpSender) SmtpSender.newInstance(mProviderContext, "smtp://user:password@server:999"); @@ -84,14 +82,14 @@ public class SmtpSenderUnitTests extends ProviderTestCase2 { * Confirms simple non-SSL non-TLS login */ public void testSimpleLogin() throws Exception { - + MockTransport mockTransport = openAndInjectMockTransport(); - + // try to open it setupOpen(mockTransport, null); mSender.open(); } - + /** * TODO: Test with SSL negotiation (faked) * TODO: Test with SSL required but not supported @@ -100,7 +98,7 @@ public class SmtpSenderUnitTests extends ProviderTestCase2 { * TODO: Test other capabilities. * TODO: Test AUTH LOGIN */ - + /** * Test: Open and send a single message (sunny day) */ @@ -285,7 +283,7 @@ public class SmtpSenderUnitTests extends ProviderTestCase2 { * Prepare to receive a simple message (see setupSimpleMessage) */ private void expectSimpleMessage(MockTransport mockTransport) { - mockTransport.expect("MAIL FROM: ", + mockTransport.expect("MAIL FROM: ", "250 2.1.0 sender ok"); mockTransport.expect("RCPT TO: ", "250 2.1.5 recipient ok"); @@ -347,14 +345,14 @@ public class SmtpSenderUnitTests extends ProviderTestCase2 { */ public void testEmptyLineResponse() throws Exception { MockTransport mockTransport = openAndInjectMockTransport(); - + // Since SmtpSender.sendMessage() does a close then open, we need to preset for the open mockTransport.expectClose(); - + // Load up just the bare minimum to expose the error mockTransport.expect(null, "220 MockTransport 2000 Ready To Assist You Peewee"); mockTransport.expect("EHLO " + Pattern.quote(LOCAL_ADDRESS), ""); - + // Now trigger the transmission // Note, a null message is sufficient here, as we won't even get past open() try { @@ -365,7 +363,7 @@ public class SmtpSenderUnitTests extends ProviderTestCase2 { // TODO maybe expect a particular exception? } } - + /** * Set up a basic MockTransport. open it, and inject it into mStore */ @@ -377,10 +375,10 @@ public class SmtpSenderUnitTests extends ProviderTestCase2 { mockTransport.setMockLocalAddress(InetAddress.getByName(LOCAL_ADDRESS)); return mockTransport; } - + /** * Helper which stuffs the mock with enough strings to satisfy a call to SmtpSender.open() - * + * * @param mockTransport the mock transport we're using * @param capabilities if non-null, comma-separated list of capabilities */