247 lines
11 KiB
Java
247 lines
11 KiB
Java
/*
|
|
* 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 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.EmailContent.MessageColumns;
|
|
import com.android.emailcommon.provider.Mailbox;
|
|
|
|
import android.content.Context;
|
|
import android.net.Uri;
|
|
import android.test.ProviderTestCase2;
|
|
import android.test.suitebuilder.annotation.MediumTest;
|
|
|
|
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
|
|
*/
|
|
@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.mContentUri = "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, "-"));
|
|
}
|
|
}
|