| /* |
| * Copyright (C) 2010 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.emailcommon.utility; |
| |
| import android.content.Context; |
| import android.net.Uri; |
| import android.test.ProviderTestCase2; |
| import android.test.suitebuilder.annotation.MediumTest; |
| import android.test.suitebuilder.annotation.Suppress; |
| |
| import com.android.email.provider.EmailProvider; |
| import com.android.email.provider.ProviderTestUtils; |
| import com.android.emailcommon.provider.Account; |
| import com.android.emailcommon.provider.EmailContent; |
| import com.android.emailcommon.provider.EmailContent.Attachment; |
| import com.android.emailcommon.provider.EmailContent.Message; |
| import com.android.emailcommon.provider.Mailbox; |
| |
| import java.io.File; |
| import java.io.FileWriter; |
| import java.io.IOException; |
| |
| /** |
| * This is a series of medium tests for the Utility class. These tests must be locally |
| * complete - no server(s) required. |
| * |
| * You can run this entire test case with: |
| * runtest -c com.android.emailcommon.utility.UtilityMediumTests email |
| */ |
| @Suppress |
| @MediumTest |
| public class UtilityMediumTests extends ProviderTestCase2<EmailProvider> { |
| |
| EmailProvider mProvider; |
| Context mMockContext; |
| |
| public UtilityMediumTests() { |
| super(EmailProvider.class, EmailContent.AUTHORITY); |
| } |
| |
| @Override |
| public void setUp() throws Exception { |
| super.setUp(); |
| mMockContext = getMockContext(); |
| } |
| |
| public void testFindExistingAccount() { |
| // Create two accounts |
| Account account1 = ProviderTestUtils.setupAccount("account1", false, mMockContext); |
| account1.mHostAuthRecv = ProviderTestUtils.setupHostAuth("ha1", -1, false, mMockContext); |
| account1.mHostAuthSend = ProviderTestUtils.setupHostAuth("ha1", -1, false, mMockContext); |
| account1.save(mMockContext); |
| Account account2 = ProviderTestUtils.setupAccount("account2", false, mMockContext); |
| account2.mHostAuthRecv = ProviderTestUtils.setupHostAuth("ha2", -1, false, mMockContext); |
| account2.mHostAuthSend = ProviderTestUtils.setupHostAuth("ha2", -1, false, mMockContext); |
| account2.save(mMockContext); |
| // Make sure we can find them |
| Account acct = Utility.findExistingAccount(mMockContext, -1, "address-ha1", "login-ha1"); |
| assertNotNull(acct); |
| assertEquals("account1", acct.mDisplayName); |
| acct = Utility.findExistingAccount(mMockContext, -1, "address-ha2", "login-ha2"); |
| assertNotNull(acct); |
| assertEquals("account2", acct.mDisplayName); |
| // We shouldn't find account |
| acct = Utility.findExistingAccount(mMockContext, -1, "address-ha3", "login-ha3"); |
| assertNull(acct); |
| // Try to find account1, excluding account1 |
| acct = Utility.findExistingAccount(mMockContext, account1.mId, "address-ha1", "login-ha1"); |
| assertNull(acct); |
| |
| // Make sure we properly handle an underscore in the login name |
| Account account3 = ProviderTestUtils.setupAccount("account3", false, mMockContext); |
| account3.mHostAuthRecv = ProviderTestUtils.setupHostAuth("foo_ba", -1, false, mMockContext); |
| account3.mHostAuthSend = ProviderTestUtils.setupHostAuth("foo_ba", -1, false, mMockContext); |
| account3.save(mMockContext); |
| acct = Utility.findExistingAccount(mMockContext, -1, "address-foo_ba", "login-foo.ba"); |
| assertNull(acct); |
| acct = Utility.findExistingAccount(mMockContext, -1, "address-foo_ba", "login-foo_ba"); |
| assertNotNull(acct); |
| } |
| |
| public void testAttachmentExists() throws IOException { |
| Account account = ProviderTestUtils.setupAccount("account", true, mMockContext); |
| // We return false with null attachment |
| assertFalse(Utility.attachmentExists(mMockContext, null)); |
| |
| Mailbox mailbox = |
| ProviderTestUtils.setupMailbox("mailbox", account.mId, true, mMockContext); |
| Message message = ProviderTestUtils.setupMessage("foo", account.mId, mailbox.mId, false, |
| true, mMockContext); |
| Attachment attachment = ProviderTestUtils.setupAttachment(message.mId, "filename.ext", |
| 69105, true, mMockContext); |
| attachment.mContentBytes = null; |
| // With no contentUri, we should return false |
| assertFalse(Utility.attachmentExists(mMockContext, attachment)); |
| |
| attachment.mContentBytes = new byte[0]; |
| // With contentBytes set, we should return true |
| assertTrue(Utility.attachmentExists(mMockContext, attachment)); |
| |
| attachment.mContentBytes = null; |
| // Generate a file name in our data directory, and use that for contentUri |
| File file = mMockContext.getFileStreamPath("test.att"); |
| // Delete the file if it already exists |
| if (file.exists()) { |
| assertTrue(file.delete()); |
| } |
| // Should return false, because the file doesn't exist |
| assertFalse(Utility.attachmentExists(mMockContext, attachment)); |
| |
| assertTrue(file.createNewFile()); |
| // Put something in the file |
| FileWriter writer = new FileWriter(file); |
| writer.write("Foo"); |
| writer.flush(); |
| writer.close(); |
| attachment.setContentUri("file://" + file.getAbsolutePath()); |
| // Now, this should return true |
| assertTrue(Utility.attachmentExists(mMockContext, attachment)); |
| } |
| |
| public void testBuildLimitOneUri() { |
| // EmailProvider supports "?limit=" |
| assertEquals(Uri.parse("content://com.android.mail.provider?limit=1"), |
| Utility.buildLimitOneUri(Uri.parse("content://com.android.mail.provider"))); |
| |
| // Others don't -- so don't add it. |
| assertEquals(Uri.parse("content://com.android.mail.attachmentprovider"), |
| Utility.buildLimitOneUri(Uri.parse("content://com.android.mail.attachmentprovider" |
| ))); |
| assertEquals(Uri.parse("content://gmail-ls/android@gmail.com"), |
| Utility.buildLimitOneUri(Uri.parse("content://gmail-ls/android@gmail.com" |
| ))); |
| } |
| |
| public void testGetFirstRowLong() { |
| Account account1 = ProviderTestUtils.setupAccount("1", true, mMockContext); |
| Account account2 = ProviderTestUtils.setupAccount("X1", true, mMockContext); |
| Account account3 = ProviderTestUtils.setupAccount("X2", true, mMockContext); |
| |
| // case 1. Account found |
| assertEquals((Long) account2.mId, Utility.getFirstRowLong( |
| mMockContext, Account.CONTENT_URI, EmailContent.ID_PROJECTION, |
| Account.DISPLAY_NAME + " like :1", new String[] {"X%"}, |
| Account.DISPLAY_NAME, |
| EmailContent.ID_PROJECTION_COLUMN)); |
| // different sort order |
| assertEquals((Long) account3.mId, Utility.getFirstRowLong( |
| mMockContext, Account.CONTENT_URI, EmailContent.ID_PROJECTION, |
| Account.DISPLAY_NAME + " like :1", new String[] {"X%"}, |
| Account.DISPLAY_NAME + " desc", |
| EmailContent.ID_PROJECTION_COLUMN)); |
| |
| // case 2. no row found |
| assertEquals(null, Utility.getFirstRowLong( |
| mMockContext, Account.CONTENT_URI, EmailContent.ID_PROJECTION, |
| Account.DISPLAY_NAME + " like :1", new String[] {"NO SUCH ACCOUNT"}, |
| null, |
| EmailContent.ID_PROJECTION_COLUMN)); |
| |
| // case 3. no row found with default value |
| assertEquals((Long) (-1L), Utility.getFirstRowLong( |
| mMockContext, Account.CONTENT_URI, EmailContent.ID_PROJECTION, |
| Account.DISPLAY_NAME + " like :1", new String[] {"NO SUCH ACCOUNT"}, |
| null, |
| EmailContent.ID_PROJECTION_COLUMN, -1L)); |
| } |
| |
| public void testGetFirstRowInt() { |
| Account account1 = ProviderTestUtils.setupAccount("1", true, mMockContext); |
| Account account2 = ProviderTestUtils.setupAccount("X1", true, mMockContext); |
| Account account3 = ProviderTestUtils.setupAccount("X2", true, mMockContext); |
| |
| // case 1. Account found |
| assertEquals((Integer)(int) account2.mId, Utility.getFirstRowInt( |
| mMockContext, Account.CONTENT_URI, EmailContent.ID_PROJECTION, |
| Account.DISPLAY_NAME + " like :1", new String[] {"X%"}, |
| Account.DISPLAY_NAME, |
| EmailContent.ID_PROJECTION_COLUMN)); |
| // different sort order |
| assertEquals((Integer)(int) account3.mId, Utility.getFirstRowInt( |
| mMockContext, Account.CONTENT_URI, EmailContent.ID_PROJECTION, |
| Account.DISPLAY_NAME + " like :1", new String[] {"X%"}, |
| Account.DISPLAY_NAME + " desc", |
| EmailContent.ID_PROJECTION_COLUMN)); |
| |
| // case 2. no row found |
| assertEquals(null, Utility.getFirstRowInt( |
| mMockContext, Account.CONTENT_URI, EmailContent.ID_PROJECTION, |
| Account.DISPLAY_NAME + " like :1", new String[] {"NO SUCH ACCOUNT"}, |
| null, |
| EmailContent.ID_PROJECTION_COLUMN)); |
| |
| // case 3. no row found with default value |
| assertEquals((Integer) (-1), Utility.getFirstRowInt( |
| mMockContext, Account.CONTENT_URI, EmailContent.ID_PROJECTION, |
| Account.DISPLAY_NAME + " like :1", new String[] {"NO SUCH ACCOUNT"}, |
| null, |
| EmailContent.ID_PROJECTION_COLUMN, -1)); |
| } |
| |
| public void testGetFirstRowString() { |
| final String[] DISPLAY_NAME_PROJECTION = new String[] {Account.DISPLAY_NAME}; |
| |
| Account account1 = ProviderTestUtils.setupAccount("1", true, mMockContext); |
| Account account2 = ProviderTestUtils.setupAccount("X1", true, mMockContext); |
| Account account3 = ProviderTestUtils.setupAccount("X2", true, mMockContext); |
| |
| // case 1. Account found |
| assertEquals(account2.mDisplayName, Utility.getFirstRowString( |
| mMockContext, Account.CONTENT_URI, DISPLAY_NAME_PROJECTION, |
| Account.DISPLAY_NAME + " like :1", new String[] {"X%"}, |
| Account.DISPLAY_NAME, 0)); |
| |
| // different sort order |
| assertEquals(account3.mDisplayName, Utility.getFirstRowString( |
| mMockContext, Account.CONTENT_URI, DISPLAY_NAME_PROJECTION, |
| Account.DISPLAY_NAME + " like :1", new String[] {"X%"}, |
| Account.DISPLAY_NAME + " desc", 0)); |
| |
| // case 2. no row found |
| assertEquals(null, Utility.getFirstRowString( |
| mMockContext, Account.CONTENT_URI, DISPLAY_NAME_PROJECTION, |
| Account.DISPLAY_NAME + " like :1", new String[] {"NO SUCH ACCOUNT"}, |
| null, 0)); |
| |
| // case 3. no row found with default value |
| assertEquals("-", Utility.getFirstRowString( |
| mMockContext, Account.CONTENT_URI, DISPLAY_NAME_PROJECTION, |
| Account.DISPLAY_NAME + " like :1", new String[] {"NO SUCH ACCOUNT"}, |
| null, 0, "-")); |
| } |
| } |