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