diff --git a/src/com/android/email/Email.java b/src/com/android/email/Email.java index 7f00237d5..2828b187a 100644 --- a/src/com/android/email/Email.java +++ b/src/com/android/email/Email.java @@ -19,7 +19,6 @@ package com.android.email; import com.android.email.activity.AccountShortcutPicker; import com.android.email.activity.Debug; import com.android.email.activity.MessageCompose; -import com.android.email.mail.internet.BinaryTempFileBody; import com.android.email.provider.EmailContent; import com.android.email.service.BootReceiver; import com.android.email.service.MailService; @@ -185,14 +184,20 @@ public class Email extends Application { public static int getAccountColorResourceId(long accountId) { return ACCOUNT_COLOR_CHIP_RES_IDS[getColorIndexFromAccountId(accountId)]; } - + public static int getAccountColor(long accountId) { return ACCOUNT_COLOR_CHIP_RGBS[getColorIndexFromAccountId(accountId)]; } + public static void setTempDirectory(Context context) { + sTempDirectory = context.getCacheDir(); + } + public static File getTempDirectory() { if (sTempDirectory == null) { - throw new RuntimeException("TempDirectory not set. Application hasn't started??"); + throw new RuntimeException( + "TempDirectory not set. " + + "If in a unit test, call Email.setTempDirectory(context) in setUp()."); } return sTempDirectory; } @@ -265,7 +270,7 @@ public class Email extends Application { Preferences prefs = Preferences.getPreferences(this); DEBUG = prefs.getEnableDebugLogging(); DEBUG_SENSITIVE = prefs.getEnableSensitiveLogging(); - sTempDirectory = getCacheDir(); + setTempDirectory(this); // Reset all accounts to default visible window Controller.getInstance(this).resetVisibleLimits(); diff --git a/tests/src/com/android/email/activity/MessageViewTests.java b/tests/src/com/android/email/activity/MessageViewTests.java index b0eb16b46..2bc422295 100644 --- a/tests/src/com/android/email/activity/MessageViewTests.java +++ b/tests/src/com/android/email/activity/MessageViewTests.java @@ -65,6 +65,7 @@ public class MessageViewTests super.setUp(); mContext = getInstrumentation().getTargetContext(); + Email.setTempDirectory(mContext); Email.setServicesEnabled(mContext); // setup an intent to spin up this activity with something useful diff --git a/tests/src/com/android/email/mail/internet/EmailHtmlUtilTest.java b/tests/src/com/android/email/mail/internet/EmailHtmlUtilTest.java index f9580f053..b25d6bb62 100755 --- a/tests/src/com/android/email/mail/internet/EmailHtmlUtilTest.java +++ b/tests/src/com/android/email/mail/internet/EmailHtmlUtilTest.java @@ -16,6 +16,7 @@ package com.android.email.mail.internet; +import com.android.email.Email; import com.android.email.mail.Message; import com.android.email.mail.MessageTestUtils; import com.android.email.mail.MessagingException; @@ -54,6 +55,7 @@ public class EmailHtmlUtilTest extends AndroidTestCase { super.setUp(); // Force assignment of a default account, and retrieve it Context context = getContext(); + Email.setTempDirectory(context); // Force assignment of a default account long accountId = Account.getDefaultAccountId(context); diff --git a/tests/src/com/android/email/mail/store/ImapStoreUnitTests.java b/tests/src/com/android/email/mail/store/ImapStoreUnitTests.java index bb9b28357..d95108dad 100644 --- a/tests/src/com/android/email/mail/store/ImapStoreUnitTests.java +++ b/tests/src/com/android/email/mail/store/ImapStoreUnitTests.java @@ -16,6 +16,7 @@ package com.android.email.mail.store; +import com.android.email.Email; import com.android.email.mail.Address; import com.android.email.mail.FetchProfile; import com.android.email.mail.Flag; @@ -30,7 +31,6 @@ import com.android.email.mail.Message.RecipientType; import com.android.email.mail.internet.MimeUtility; import com.android.email.mail.internet.TextBody; import com.android.email.mail.store.ImapStore.ImapMessage; -import com.android.email.mail.transport.DiscourseLogger; import com.android.email.mail.transport.MockTransport; import android.test.AndroidTestCase; @@ -38,9 +38,7 @@ import android.test.MoreAsserts; import android.test.suitebuilder.annotation.SmallTest; import java.util.ArrayList; -import java.util.Date; import java.util.HashMap; -import java.util.Locale; /** * This is a series of unit tests for the ImapStore class. These tests must be locally @@ -52,20 +50,21 @@ import java.util.Locale; @SmallTest public class ImapStoreUnitTests extends AndroidTestCase { private final static String[] NO_REPLY = new String[0]; - + /* These values are provided by setUp() */ private ImapStore mStore = null; private ImapStore.ImapFolder mFolder = null; private int mNextTag; - + /** * Setup code. We generate a lightweight ImapStore and ImapStore.ImapFolder. */ @Override protected void setUp() throws Exception { super.setUp(); - + Email.setTempDirectory(getContext()); + // These are needed so we can get at the inner classes mStore = (ImapStore) ImapStore.newInstance("imap://user:password@server:999", getContext(), null); @@ -76,16 +75,16 @@ public class ImapStoreUnitTests extends AndroidTestCase { * Confirms simple non-SSL non-TLS login */ public void testSimpleLogin() throws MessagingException { - + MockTransport mockTransport = openAndInjectMockTransport(); - + // try to open it setupOpenFolder(mockTransport); mFolder.open(OpenMode.READ_WRITE, null); - + // TODO: inject specific facts in the initial folder SELECT and check them here } - + /** * TODO: Test with SSL negotiation (faked) * TODO: Test with SSL required but not supported @@ -198,7 +197,7 @@ public class ImapStoreUnitTests extends AndroidTestCase { */ private HashMap tokenizeImapId(String id) { // Instead of a true tokenizer, we'll use double-quote as the split. - // We can's use " " because there may be spaces inside the values. + // We can's use " " because there may be spaces inside the values. String[] elements = id.split("\""); HashMap map = new HashMap(); for (int i = 0; i < elements.length; ) { @@ -218,7 +217,7 @@ public class ImapStoreUnitTests extends AndroidTestCase { */ public void testServerId() throws MessagingException { MockTransport mockTransport = openAndInjectMockTransport(); - + // try to open it setupOpenFolder(mockTransport, new String[] { "* ID (\"name\" \"Cyrus\" \"version\" \"1.5\"" + @@ -233,62 +232,30 @@ public class ImapStoreUnitTests extends AndroidTestCase { */ public void testImapIdOkParsing() throws MessagingException { MockTransport mockTransport = openAndInjectMockTransport(); - + // try to open it setupOpenFolder(mockTransport, new String[] { "* ID NIL", "OK [ID] bad-char-%"}, "READ-WRITE"); mFolder.open(OpenMode.READ_WRITE, null); } - + /** * Test BAD response to IMAP ID - also with bad parser chars */ public void testImapIdBad() throws MessagingException { MockTransport mockTransport = openAndInjectMockTransport(); - + // try to open it setupOpenFolder(mockTransport, new String[] { "BAD unknown command bad-char-%"}, "READ-WRITE"); mFolder.open(OpenMode.READ_WRITE, null); } - - /** - * Confirms that ImapList object correctly returns an appropriate Date object - * without throwning MessagingException when getKeyedDate() is called. - * - * Here, we try a same test twice using two locales, Locale.US and the other. - * ImapList uses Locale class internally, and as a result, there's a - * possibility in which it may throw a MessageException when Locale is - * not Locale.US. Locale.JAPAN is a typical locale which emits different - * date formats, which had caused a bug before. - * @throws MessagingException - */ - public void testImapListWithUsLocale() throws MessagingException { - Locale savedLocale = Locale.getDefault(); - Locale.setDefault(Locale.US); - doTestImapList(); - Locale.setDefault(Locale.JAPAN); - doTestImapList(); - Locale.setDefault(savedLocale); - } - - private void doTestImapList() throws MessagingException { - ImapResponseParser parser = new ImapResponseParser(null, new DiscourseLogger(4)); - ImapResponseParser.ImapList list = parser.new ImapList(); - String key = "key"; - String date = "01-Jan-2009 01:00:00 -0800"; - list.add(key); - list.add(date); - Date result = list.getKeyedDate(key); - // "01-Jan-2009 09:00:00 +0000" => 1230800400000L - assertEquals(1230800400000L, result.getTime()); - } - + /** * TODO: Test the operation of checkSettings() * TODO: Test small Store & Folder functions that manage folders & namespace - */ + */ /** * Test small Folder functions that don't really do anything in Imap @@ -310,27 +277,27 @@ public class ImapStoreUnitTests extends AndroidTestCase { /** * Lightweight test to confirm that IMAP hasn't implemented any folder roles yet. - * + * * TODO: Test this with multiple folders provided by mock server * TODO: Implement XLIST and then support this */ public void testNoFolderRolesYet() { - assertEquals(Folder.FolderRole.UNKNOWN, mFolder.getRole()); + assertEquals(Folder.FolderRole.UNKNOWN, mFolder.getRole()); } - + /** * Lightweight test to confirm that IMAP isn't requesting structure prefetch. */ public void testNoStructurePrefetch() { - assertFalse(mStore.requireStructurePrefetch()); + assertFalse(mStore.requireStructurePrefetch()); } - + /** * Lightweight test to confirm that IMAP is requesting sent-message-upload. * TODO: Implement Gmail-specific cases and handle this server-side */ public void testSentUploadRequested() { - assertTrue(mStore.requireCopyMessageToSentFolder()); + assertTrue(mStore.requireCopyMessageToSentFolder()); } /** @@ -338,7 +305,7 @@ public class ImapStoreUnitTests extends AndroidTestCase { */ /** - * TODO: Test the scenario where the transport is "open" but not really (e.g. server closed). + * TODO: Test the scenario where the transport is "open" but not really (e.g. server closed). /** * Set up a basic MockTransport. open it, and inject it into mStore */ @@ -395,7 +362,7 @@ public class ImapStoreUnitTests extends AndroidTestCase { "* CAPABILITY IMAP4rev1 STARTTLS AUTH=GSSAPI LOGINDISABLED", "1 OK CAPABILITY completed"}); mockTransport.expect("2 ID \\(.*\\)", imapIdResponse); - mockTransport.expect("3 LOGIN user \"password\"", + mockTransport.expect("3 LOGIN user \"password\"", "3 OK user authenticated (Success)"); mockTransport.expect("4 SELECT \"INBOX\"", new String[] { "* FLAGS (\\Answered \\Flagged \\Draft \\Deleted \\Seen)", diff --git a/tests/src/com/android/email/mail/store/LocalStoreUnitTests.java b/tests/src/com/android/email/mail/store/LocalStoreUnitTests.java index e69683bdf..ebc1695f8 100644 --- a/tests/src/com/android/email/mail/store/LocalStoreUnitTests.java +++ b/tests/src/com/android/email/mail/store/LocalStoreUnitTests.java @@ -81,6 +81,7 @@ public class LocalStoreUnitTests extends AndroidTestCase { @Override protected void setUp() throws Exception { super.setUp(); + Email.setTempDirectory(getContext()); // These are needed so we can get at the inner classes // Create a dummy database (be sure to delete it in tearDown()) diff --git a/tests/src/com/android/email/mail/store/Pop3StoreUnitTests.java b/tests/src/com/android/email/mail/store/Pop3StoreUnitTests.java index 8a0106019..4a210262d 100644 --- a/tests/src/com/android/email/mail/store/Pop3StoreUnitTests.java +++ b/tests/src/com/android/email/mail/store/Pop3StoreUnitTests.java @@ -16,6 +16,7 @@ package com.android.email.mail.store; +import com.android.email.Email; import com.android.email.mail.Address; import com.android.email.mail.FetchProfile; import com.android.email.mail.Flag; @@ -53,7 +54,8 @@ public class Pop3StoreUnitTests extends AndroidTestCase { @Override protected void setUp() throws Exception { super.setUp(); - + Email.setTempDirectory(getContext()); + // These are needed so we can get at the inner classes mStore = (Pop3Store) Pop3Store.newInstance("pop3://user:password@server:999", getContext(), null);