Merge "Fix unit tests"

This commit is contained in:
Makoto Onuki 2010-12-13 16:45:50 -08:00 committed by Android (Google) Code Review
commit 9afd6bc59f
5 changed files with 68 additions and 58 deletions

View File

@ -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<ControllerResults>(
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;
}
}

View File

@ -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;
}
}

View File

@ -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<MessageVie
}, TIMEOUT);
}
/**
* Set up account/mailbox/message, and open the activity.
*
* Expected: Message opens.
*/
public void testOpenMessage() throws Exception {
final Context c = mProviderContext;
final Account acct1 = ProviderTestUtils.setupAccount("test1", true, c);
final Account acct2 = ProviderTestUtils.setupAccount("test2", true, c);
final Mailbox acct2inbox = ProviderTestUtils.setupMailbox("inbox", acct2.mId, true, c);
final Message msg1 = ProviderTestUtils.setupMessage("message1", acct2.mId, acct2inbox.mId,
true, true, c);
final Message msg2 = ProviderTestUtils.setupMessage("message2", acct2.mId, acct2inbox.mId,
true, true, c);
setUpIntent(msg2.mId, msg2.mMailboxKey, false);
final MessageView activity = getActivity();
TestUtils.waitUntil(new TestUtils.Condition() {
@Override
public boolean isMet() {
MessageViewFragment f = activity.getFragment();
return f != null && f.isMessageLoadedForTest();
}
}, TIMEOUT);
// TODO Check UI elements, once our UI is settled.
}
// This test doesn't work, because it sets up messages in an separated context, but
// the main activity looks at the actual context and fails to find the message.
// /**
// * Set up account/mailbox/message, and open the activity.
// *
// * Expected: Message opens.
// */
// public void testOpenMessage() throws Exception {
// final Context c = mProviderContext;
// final Account acct1 = ProviderTestUtils.setupAccount("test1", true, c);
// final Account acct2 = ProviderTestUtils.setupAccount("test2", true, c);
// final Mailbox acct2inbox = ProviderTestUtils.setupMailbox("inbox", acct2.mId, true, c);
// final Message msg1 = ProviderTestUtils.setupMessage("message1", acct2.mId, acct2inbox.mId,
// true, true, c);
// final Message msg2 = ProviderTestUtils.setupMessage("message2", acct2.mId, acct2inbox.mId,
// true, true, c);
//
// setUpIntent(msg2.mId, msg2.mMailboxKey, false);
//
// final MessageView activity = getActivity();
//
// TestUtils.waitUntil(new TestUtils.Condition() {
// @Override
// public boolean isMet() {
// MessageViewFragment f = activity.getFragment();
// return f != null && f.isMessageLoadedForTest();
// }
// }, TIMEOUT);
//
// // TODO Check UI elements, once our UI is settled.
// }
}

View File

@ -17,6 +17,7 @@
package com.android.email.data;
import com.android.email.DBTestHelper;
import com.android.email.provider.ContentCache;
import com.android.email.provider.EmailContent.Account;
import com.android.email.provider.EmailContent.Mailbox;
import com.android.email.provider.ProviderTestUtils;
@ -36,8 +37,9 @@ public class MailboxAccountLoaderTestCase extends LoaderTestCase {
private long createAccount(boolean isEas) {
Account acct = ProviderTestUtils.setupAccount("acct1", false, mProviderContext);
String proto = isEas ? "eas" : "non-eas";
acct.mHostAuthRecv = ProviderTestUtils.setupHostAuth(proto, "hostauth", -1, false,
acct.mHostAuthRecv = ProviderTestUtils.setupHostAuth(proto, "hostauth", -1, true,
mProviderContext);
acct.mHostAuthKeyRecv = acct.mHostAuthRecv.mId;
acct.save(mProviderContext);
return acct.mId;
}
@ -66,7 +68,7 @@ public class MailboxAccountLoaderTestCase extends LoaderTestCase {
}
/**
* Load - isEas = true
* Load -- isEas = true
*/
public void testLoadEas() {
final long accountId = createAccount(true);

View File

@ -16,18 +16,19 @@
package com.android.email.mail.transport;
import com.android.email.DBTestHelper;
import com.android.email.mail.Address;
import com.android.email.mail.MessagingException;
import com.android.email.mail.Transport;
import com.android.email.provider.EmailProvider;
import com.android.email.provider.EmailContent.Attachment;
import com.android.email.provider.EmailContent.Body;
import com.android.email.provider.EmailContent.Message;
import com.android.email.provider.EmailProvider;
import org.apache.commons.io.IOUtils;
import android.content.Context;
import android.test.ProviderTestCase2;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
import java.io.ByteArrayInputStream;
@ -48,7 +49,7 @@ import java.util.regex.Pattern;
* runtest -c com.android.email.mail.transport.SmtpSenderUnitTests email
*/
@SmallTest
public class SmtpSenderUnitTests extends ProviderTestCase2<EmailProvider> {
public class SmtpSenderUnitTests extends AndroidTestCase {
EmailProvider mProvider;
Context mProviderContext;
@ -62,19 +63,16 @@ public class SmtpSenderUnitTests extends ProviderTestCase2<EmailProvider> {
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<EmailProvider> {
* 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<EmailProvider> {
* 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<EmailProvider> {
* Prepare to receive a simple message (see setupSimpleMessage)
*/
private void expectSimpleMessage(MockTransport mockTransport) {
mockTransport.expect("MAIL FROM: <Jones@Registry.Org>",
mockTransport.expect("MAIL FROM: <Jones@Registry.Org>",
"250 2.1.0 <Jones@Registry.Org> sender ok");
mockTransport.expect("RCPT TO: <Smith@Registry.Org>",
"250 2.1.5 <Smith@Registry.Org> recipient ok");
@ -347,14 +345,14 @@ public class SmtpSenderUnitTests extends ProviderTestCase2<EmailProvider> {
*/
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<EmailProvider> {
// 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<EmailProvider> {
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
*/