ControllerProviderOpsTests.java revision b53b1501055cbf5040bfd7b88a9cda084574c398
17c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler/* 27c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * Copyright (C) 2009 The Android Open Source Project 37c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * 47c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * Licensed under the Apache License, Version 2.0 (the "License"); 57c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * you may not use this file except in compliance with the License. 67c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * You may obtain a copy of the License at 77c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * 87c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * http://www.apache.org/licenses/LICENSE-2.0 97c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * 107c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * Unless required by applicable law or agreed to in writing, software 117c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * distributed under the License is distributed on an "AS IS" BASIS, 127c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * See the License for the specific language governing permissions and 147c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * limitations under the License. 157c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler */ 167c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 177c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadlerpackage com.android.email; 187c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 197c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadlerimport com.android.email.provider.EmailContent; 20b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blankimport com.android.email.provider.EmailProvider; 21b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blankimport com.android.email.provider.ProviderTestUtils; 227c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadlerimport com.android.email.provider.EmailContent.Account; 23391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blankimport com.android.email.provider.EmailContent.Body; 248d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blankimport com.android.email.provider.EmailContent.HostAuth; 257c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadlerimport com.android.email.provider.EmailContent.Mailbox; 267c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadlerimport com.android.email.provider.EmailContent.Message; 277c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 287c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadlerimport android.content.Context; 29391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blankimport android.net.Uri; 307c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadlerimport android.test.ProviderTestCase2; 317c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 32fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadlerimport java.util.Locale; 33b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blankimport java.util.concurrent.ExecutionException; 34fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler 357c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler/** 367c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * Tests of the Controller class that depend on the underlying provider. 37206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki * 387c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * NOTE: It would probably make sense to rewrite this using a MockProvider, instead of the 397c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * ProviderTestCase (which is a real provider running on a temp database). This would be more of 407c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * a true "unit test". 41206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki * 427c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * You can run this entire test case with: 437c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * runtest -c com.android.email.ControllerProviderOpsTests email 447c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler */ 457c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadlerpublic class ControllerProviderOpsTests extends ProviderTestCase2<EmailProvider> { 467c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 474be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki private Context mProviderContext; 484be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki private Context mContext; 494be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki private TestController mTestController; 504be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki 517c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 527c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler public ControllerProviderOpsTests() { 537c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler super(EmailProvider.class, EmailProvider.EMAIL_AUTHORITY); 547c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler } 557c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 567c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler @Override 577c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler public void setUp() throws Exception { 587c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler super.setUp(); 597c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler mProviderContext = getMockContext(); 607c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler mContext = getContext(); 614be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki mTestController = new TestController(mProviderContext, mContext); 627c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler } 637c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 647c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler @Override 657c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler public void tearDown() throws Exception { 667c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler super.tearDown(); 674be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki mTestController.cleanupForTest(); 687c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler } 697c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 707c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler /** 717c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * Lightweight subclass of the Controller class allows injection of mock context 727c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler */ 737c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler public static class TestController extends Controller { 747c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 757c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler protected TestController(Context providerContext, Context systemContext) { 76c184f36c2df16431693d7709e28ded593efc3da7Marc Blank super(systemContext); 777c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler setProviderContext(providerContext); 787c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler } 797c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler } 807c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 81fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler /** 82fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler * These are strings that should not change per locale. 83fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler */ 84fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler public void testGetMailboxServerName() { 854be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertEquals("", mTestController.getMailboxServerName(-1)); 86fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler 874be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertEquals("Inbox", mTestController.getMailboxServerName(Mailbox.TYPE_INBOX)); 884be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertEquals("Outbox", mTestController.getMailboxServerName(Mailbox.TYPE_OUTBOX)); 894be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertEquals("Trash", mTestController.getMailboxServerName(Mailbox.TYPE_TRASH)); 904be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertEquals("Sent", mTestController.getMailboxServerName(Mailbox.TYPE_SENT)); 914be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertEquals("Junk", mTestController.getMailboxServerName(Mailbox.TYPE_JUNK)); 92fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler 93fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler // Now try again with translation 94fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler Locale savedLocale = Locale.getDefault(); 95fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler Locale.setDefault(Locale.FRANCE); 964be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertEquals("Inbox", mTestController.getMailboxServerName(Mailbox.TYPE_INBOX)); 974be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertEquals("Outbox", mTestController.getMailboxServerName(Mailbox.TYPE_OUTBOX)); 984be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertEquals("Trash", mTestController.getMailboxServerName(Mailbox.TYPE_TRASH)); 994be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertEquals("Sent", mTestController.getMailboxServerName(Mailbox.TYPE_SENT)); 1004be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertEquals("Junk", mTestController.getMailboxServerName(Mailbox.TYPE_JUNK)); 101fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler Locale.setDefault(savedLocale); 102c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda } 103c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda 104c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda /** 105c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda * Test of Controller.createMailbox(). 106c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda * Sunny day test only - creates a mailbox that does not exist. 107c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda * Does not test duplication, bad accountID, or any other bad input. 108c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda */ 109c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda public void testCreateMailbox() { 110c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda Account account = ProviderTestUtils.setupAccount("mailboxid", true, mProviderContext); 111c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda long accountId = account.mId; 112c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda 113c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda long oldBoxId = Mailbox.findMailboxOfType(mProviderContext, accountId, Mailbox.TYPE_DRAFTS); 114c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda assertEquals(Mailbox.NO_MAILBOX, oldBoxId); 115c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda 1164be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki mTestController.createMailbox(accountId, Mailbox.TYPE_DRAFTS); 117c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda long boxId = Mailbox.findMailboxOfType(mProviderContext, accountId, Mailbox.TYPE_DRAFTS); 118206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki 119c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda // check that the drafts mailbox exists 120c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda assertTrue("mailbox exists", boxId != Mailbox.NO_MAILBOX); 121c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda } 122206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki 123206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki /** 124c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda * Test of Controller.findOrCreateMailboxOfType(). 125c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda * Checks: 126c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda * - finds correctly the ID of existing mailbox 127c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda * - creates non-existing mailbox 128c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda * - creates only once a new mailbox 129c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda * - when accountId or mailboxType are -1, returns NO_MAILBOX 130c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda */ 131c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda public void testFindOrCreateMailboxOfType() { 132c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda Account account = ProviderTestUtils.setupAccount("mailboxid", true, mProviderContext); 133c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda long accountId = account.mId; 134c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda Mailbox box = ProviderTestUtils.setupMailbox("box", accountId, false, mProviderContext); 135c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda final int boxType = Mailbox.TYPE_TRASH; 136c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda box.mType = boxType; 137c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda box.save(mProviderContext); 138c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda long boxId = box.mId; 139c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda 1404be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki long testBoxId = mTestController.findOrCreateMailboxOfType(accountId, boxType); 141c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda 142c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda // check it found the right mailbox id 143c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda assertEquals(boxId, testBoxId); 144c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda 1454be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki long boxId2 = mTestController.findOrCreateMailboxOfType(accountId, Mailbox.TYPE_DRAFTS); 146c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda assertTrue("mailbox created", boxId2 != Mailbox.NO_MAILBOX); 147c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda assertTrue("with different id", testBoxId != boxId2); 148c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda 149c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda // check it doesn't create twice when existing 1504be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki long boxId3 = mTestController.findOrCreateMailboxOfType(accountId, Mailbox.TYPE_DRAFTS); 151c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda assertEquals("don't create if exists", boxId3, boxId2); 152206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki 153c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda // check invalid aruments 1544be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertEquals(Mailbox.NO_MAILBOX, 1554be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki mTestController.findOrCreateMailboxOfType(-1, Mailbox.TYPE_DRAFTS)); 1564be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertEquals(Mailbox.NO_MAILBOX, mTestController.findOrCreateMailboxOfType(accountId, -1)); 157c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda } 158c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda 1597c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler /** 160b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank * Test the "move message" function. 161b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank * @throws ExecutionException 162b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank * @throws InterruptedException 163b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank */ 164b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank public void testMoveMessage() throws InterruptedException, ExecutionException { 165b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank Account account1 = ProviderTestUtils.setupAccount("message-move", true, mProviderContext); 166b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank long account1Id = account1.mId; 167b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mProviderContext); 168b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank long box1Id = box1.mId; 169b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank Mailbox box2 = ProviderTestUtils.setupMailbox("box2", account1Id, true, mProviderContext); 170b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank long box2Id = box2.mId; 171b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank 172b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 173b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank true, mProviderContext); 174b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank long message1Id = message1.mId; 175b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank 176b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank // Because moveMessage runs asynchronously, call get() to force it to complete 177b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank mTestController.moveMessage(message1Id, box2Id).get(); 178b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank 179b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank // now read back a fresh copy and confirm it's in the trash 180b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank Message message1get = EmailContent.Message.restoreMessageWithId(mProviderContext, 181b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank message1Id); 182b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank assertEquals(box2Id, message1get.mMailboxKey); 183b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank } 184b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank 185b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank /** 1867c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * Test the "delete message" function. Sunny day: 1877c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * - message/mailbox/account all exist 1887c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * - trash mailbox exists 189b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank * @throws ExecutionException 190b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank * @throws InterruptedException 1917c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler */ 192b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank public void testDeleteMessage() throws InterruptedException, ExecutionException { 1937c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("message-delete", true, mProviderContext); 1947c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler long account1Id = account1.mId; 1957c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mProviderContext); 1967c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler long box1Id = box1.mId; 1977c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler Mailbox box2 = ProviderTestUtils.setupMailbox("box2", account1Id, false, mProviderContext); 1987c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler box2.mType = EmailContent.Mailbox.TYPE_TRASH; 1997c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler box2.save(mProviderContext); 2007c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler long box2Id = box2.mId; 2017c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 2027c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 2037c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler true, mProviderContext); 2047c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler long message1Id = message1.mId; 2057c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 206b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank // Because deleteMessage now runs asynchronously, call get() to force it to complete 207b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank mTestController.deleteMessage(message1Id, account1Id).get(); 2087c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 2097c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler // now read back a fresh copy and confirm it's in the trash 2107c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler Message message1get = EmailContent.Message.restoreMessageWithId(mProviderContext, 2117c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler message1Id); 2127c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler assertEquals(box2Id, message1get.mMailboxKey); 2137c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 2147c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler // Now repeat test with accountId "unknown" 2157c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler Message message2 = ProviderTestUtils.setupMessage("message2", account1Id, box1Id, false, 2167c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler true, mProviderContext); 2177c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler long message2Id = message2.mId; 2187c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 219b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank mTestController.deleteMessage(message2Id, -1).get(); 2207c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 2217c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler // now read back a fresh copy and confirm it's in the trash 2227c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler Message message2get = EmailContent.Message.restoreMessageWithId(mProviderContext, 2237c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler message2Id); 2247c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler assertEquals(box2Id, message2get.mMailboxKey); 2257c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler } 2267c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 2277c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler /** 2287c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler * Test deleting message when there is no trash mailbox 229b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank * @throws ExecutionException 230b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank * @throws InterruptedException 2317c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler */ 232b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank public void testDeleteMessageNoTrash() throws InterruptedException, ExecutionException { 2337c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler Account account1 = 2347c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler ProviderTestUtils.setupAccount("message-delete-notrash", true, mProviderContext); 2357c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler long account1Id = account1.mId; 2367c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mProviderContext); 2377c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler long box1Id = box1.mId; 2387c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 2397c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler Message message1 = 2407c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, true, 2417c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler mProviderContext); 2427c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler long message1Id = message1.mId; 2437c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 244b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank // Because deleteMessage now runs asynchronously, call get() to force it to complete 245b53b1501055cbf5040bfd7b88a9cda084574c398Marc Blank mTestController.deleteMessage(message1Id, account1Id).get(); 2467c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 2477c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler // now read back a fresh copy and confirm it's in the trash 2487c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler Message message1get = 2497c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler EmailContent.Message.restoreMessageWithId(mProviderContext, message1Id); 2507c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 2517c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler // check the new mailbox and see if it looks right 2527c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler assertFalse(-1 == message1get.mMailboxKey); 2537c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler assertFalse(box1Id == message1get.mMailboxKey); 2547c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler Mailbox mailbox2get = EmailContent.Mailbox.restoreMailboxWithId(mProviderContext, 2557c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler message1get.mMailboxKey); 2567c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler assertEquals(EmailContent.Mailbox.TYPE_TRASH, mailbox2get.mType); 2577c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler } 2587c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler 2597c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler /** 2606ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler * Test read/unread flag 2616ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler */ 2626ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler public void testReadUnread() { 263fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("read-unread", false, mProviderContext); 264fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler account1.mHostAuthRecv 265fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler = ProviderTestUtils.setupHostAuth("read-unread", 0, false, mProviderContext); 266fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler account1.save(mProviderContext); 267fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler long account1Id = account1.mId; 2686ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler long box1Id = 2; 2696ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler 2706ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler Message message1 = 2716ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, true, 2726ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler mProviderContext); 2736ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler long message1Id = message1.mId; 2746ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler 2756ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler // test setting to "read" 2764be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki mTestController.setMessageRead(message1Id, true); 2776ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler Message message1get = Message.restoreMessageWithId(mProviderContext, message1Id); 2786ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler assertTrue(message1get.mFlagRead); 2796ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler 2806ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler // test setting to "unread" 2814be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki mTestController.setMessageRead(message1Id, false); 2826ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler message1get = Message.restoreMessageWithId(mProviderContext, message1Id); 2836ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler assertFalse(message1get.mFlagRead); 2846ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler } 2856ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler 2866ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler /** 2876ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler * Test favorites flag 2886ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler */ 2896ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler public void testFavorites() { 290fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("favorites", false, mProviderContext); 291fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler account1.mHostAuthRecv 292fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler = ProviderTestUtils.setupHostAuth("favorites", 0, false, mProviderContext); 293fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler account1.save(mProviderContext); 294fa52e6c95674aef6461a5cfc670a052e1c5b7f2fAndrew Stadler long account1Id = account1.mId; 2956ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler long box1Id = 2; 2966ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler 2976ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler Message message1 = 2986ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, true, 2996ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler mProviderContext); 3006ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler long message1Id = message1.mId; 3016ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler 3026ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler // test setting to "favorite" 3034be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki mTestController.setMessageFavorite(message1Id, true); 3046ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler Message message1get = Message.restoreMessageWithId(mProviderContext, message1Id); 3056ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler assertTrue(message1get.mFlagFavorite); 3066ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler 3076ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler // test setting to "not favorite" 3084be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki mTestController.setMessageFavorite(message1Id, false); 3096ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler message1get = Message.restoreMessageWithId(mProviderContext, message1Id); 3106ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler assertFalse(message1get.mFlagFavorite); 3116ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler } 3126ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler 313391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank public void testGetAndDeleteAttachmentMailbox() { 3144be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki Mailbox box = mTestController.getAttachmentMailbox(); 315391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertNotNull(box); 3164be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki Mailbox anotherBox = mTestController.getAttachmentMailbox(); 317391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertNotNull(anotherBox); 318391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank // We should always get back the same Mailbox row 319391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertEquals(box.mId, anotherBox.mId); 320391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank // Add two messages to this mailbox 321391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank ProviderTestUtils.setupMessage("message1", 0, box.mId, false, true, 322391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank mProviderContext); 323391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank ProviderTestUtils.setupMessage("message2", 0, box.mId, false, true, 324391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank mProviderContext); 325391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank // Make sure we can find them where they are expected 326391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertEquals(2, EmailContent.count(mProviderContext, Message.CONTENT_URI, 327391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank Message.MAILBOX_KEY + "=?", new String[] {Long.toString(box.mId)})); 328391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank // Delete them 3294be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki mTestController.deleteAttachmentMessages(); 330391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank // Make sure they're gone 331391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertEquals(0, EmailContent.count(mProviderContext, Message.CONTENT_URI, 332391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank Message.MAILBOX_KEY + "=?", new String[] {Long.toString(box.mId)})); 333391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank } 334391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank 335206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki public void testLoadMessageFromUri() throws Exception { 336391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank // Create a simple message 337391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank Message msg = new Message(); 338391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank String text = "This is some text"; 339391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank msg.mText = text; 340391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank String sender = "sender@host.com"; 341391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank msg.mFrom = sender; 342391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank // Save this away 343391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank msg.save(mProviderContext); 344391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank 345206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki Uri fileUri = ProviderTestUtils.createTempEmlFile(mProviderContext, msg, 346206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki mContext.getFilesDir()); 347391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank 348391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank // Load the message via Controller and a Uri 3494be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki Message loadedMsg = mTestController.loadMessageFromUri(fileUri); 350391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank 351391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank // Check server id, mailbox key, account key, and from 352391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertNotNull(loadedMsg); 353391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertTrue(loadedMsg.mServerId.startsWith(Controller.ATTACHMENT_MESSAGE_UID_PREFIX)); 3544be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki Mailbox box = mTestController.getAttachmentMailbox(); 355391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertNotNull(box); 356391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertEquals(box.mId, loadedMsg.mMailboxKey); 357391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertEquals(0, loadedMsg.mAccountKey); 358391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertEquals(loadedMsg.mFrom, sender); 359391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank // Check body text 360391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank String loadedMsgText = Body.restoreBodyTextWithMessageId(mProviderContext, loadedMsg.mId); 361391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank assertEquals(text, loadedMsgText); 362391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank } 363391ae25c43a38829cc0990af18c36bdc7cc374cfMarc Blank 3646ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler /** 3658d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank * Create a simple HostAuth with protocol 3667c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler */ 3678d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank private HostAuth setupSimpleHostAuth(String protocol) { 3688d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank HostAuth hostAuth = new HostAuth(); 3698d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank hostAuth.mProtocol = protocol; 3708d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank return hostAuth; 3718d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank } 3728d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank 3738d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank public void testIsMessagingController() { 3748d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank Account account1 = ProviderTestUtils.setupAccount("account1", false, 3758d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank mProviderContext); 3768d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank account1.mHostAuthRecv = setupSimpleHostAuth("eas"); 3778d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank account1.save(mProviderContext); 3784be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertFalse(mTestController.isMessagingController(account1)); 3798d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank Account account2 = ProviderTestUtils.setupAccount("account2", false, 3808d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank mProviderContext); 3818d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank account2.mHostAuthRecv = setupSimpleHostAuth("imap"); 3828d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank account2.save(mProviderContext); 3834be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertTrue(mTestController.isMessagingController(account2)); 3848d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank Account account3 = ProviderTestUtils.setupAccount("account3", false, 3858d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank mProviderContext); 3868d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank account3.mHostAuthRecv = setupSimpleHostAuth("pop3"); 3878d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank account3.save(mProviderContext); 3884be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertTrue(mTestController.isMessagingController(account3)); 3898d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank Account account4 = ProviderTestUtils.setupAccount("account4", false, 3908d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank mProviderContext); 3918d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank account4.mHostAuthRecv = setupSimpleHostAuth("smtp"); 3928d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank account4.save(mProviderContext); 3934be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertFalse(mTestController.isMessagingController(account4)); 3948d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank // There should be values for all of these accounts in the legacy map 3954be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertNotNull(mTestController.mLegacyControllerMap.get(account1.mId)); 3964be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertNotNull(mTestController.mLegacyControllerMap.get(account2.mId)); 3974be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertNotNull(mTestController.mLegacyControllerMap.get(account3.mId)); 3984be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertNotNull(mTestController.mLegacyControllerMap.get(account4.mId)); 3998d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank // The map should have the expected values 4004be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertFalse(mTestController.mLegacyControllerMap.get(account1.mId)); 4014be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertTrue(mTestController.mLegacyControllerMap.get(account2.mId)); 4024be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertTrue(mTestController.mLegacyControllerMap.get(account3.mId)); 4034be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertFalse(mTestController.mLegacyControllerMap.get(account4.mId)); 4048d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank // This second pass should pull values from the cache 4054be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertFalse(mTestController.isMessagingController(account1)); 4064be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertTrue(mTestController.isMessagingController(account2)); 4074be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertTrue(mTestController.isMessagingController(account3)); 4084be3bc1ec8a52308ee1998f0a31d7e491e06b3c1Makoto Onuki assertFalse(mTestController.isMessagingController(account4)); 4098d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank } 4106ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler 4116ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler /** 4128d8f86e899165772a7d91250b98dfc3c0d78b538Marc Blank * TODO: releasing associated data (e.g. attachments, embedded images) 4136ae38e4a3937898c5d3fec11a9dc2fb4bab8eab6Andrew Stadler */ 4147c3cca80a0b4dacb7bcb48c65a9999138b5df82bAndrew Stadler} 415