122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy/*
222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy * Copyright (C) 2011 The Android Open Source Project
322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy *
422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy * Licensed under the Apache License, Version 2.0 (the "License");
522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy * you may not use this file except in compliance with the License.
622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy * You may obtain a copy of the License at
722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy *
822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy *      http://www.apache.org/licenses/LICENSE-2.0
922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy *
1022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy * Unless required by applicable law or agreed to in writing, software
1122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy * distributed under the License is distributed on an "AS IS" BASIS,
1222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy * See the License for the specific language governing permissions and
1422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy * limitations under the License.
1522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy */
1622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
1722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedypackage com.android.emailcommon.provider;
1822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
1922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedyimport com.android.email.provider.ContentCache;
2022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedyimport com.android.email.provider.EmailProvider;
2122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedyimport com.android.email.provider.ProviderTestUtils;
2222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedyimport com.android.emailcommon.provider.EmailContent.MailboxColumns;
2322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedyimport com.android.emailcommon.provider.EmailContent.Message;
2422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedyimport com.android.emailcommon.provider.EmailContent.MessageColumns;
2522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedyimport com.android.emailcommon.utility.Utility;
2622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
2722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedyimport android.content.ContentUris;
2822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedyimport android.content.ContentValues;
2922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedyimport android.content.Context;
3022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedyimport android.net.Uri;
31e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komaloimport android.os.Parcel;
3222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedyimport android.test.MoreAsserts;
3322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedyimport android.test.ProviderTestCase2;
3422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedyimport android.test.suitebuilder.annotation.SmallTest;
3522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
36e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komaloimport java.util.Arrays;
37e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo
3822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy/**
3922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy * Unit tests for the Mailbox inner class.
4022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy * These tests must be locally complete - no server(s) required.
4122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy */
4222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy@SmallTest
4322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedypublic class MailboxTests extends ProviderTestCase2<EmailProvider> {
4422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    private static final String TEST_DISPLAY_NAME = "display-name";
4522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    private static final String TEST_PARENT_SERVER_ID = "parent-server-id";
4622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    private static final String TEST_SERVER_ID = "server-id";
4722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    private static final String TEST_SYNC_KEY = "sync-key";
4822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    private static final String TEST_SYNC_STATUS = "sync-status";
4922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
5022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    private Context mMockContext;
5122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    private EmailProvider mProvider;
5222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
5322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    public MailboxTests() {
5422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        super(EmailProvider.class, EmailContent.AUTHORITY);
5522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    }
5622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
5722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    @Override
5822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    public void setUp() throws Exception {
5922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        super.setUp();
6022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        mMockContext = getMockContext();
6122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        mProvider = getProvider();
6222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // Invalidate all caches, since we reset the database for each test
636e418aa41a17136be0dddb816d843428a0a1e722Marc Blank        ContentCache.invalidateAllCaches();
6422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    }
6522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
6622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    //////////////////////////////////////////////////////////
6722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    ////// Utility methods
6822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    //////////////////////////////////////////////////////////
6922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
7022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    /** Returns the number of messages in a mailbox. */
7122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    private int getMessageCount(long mailboxId) {
7222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        return Utility.getFirstRowInt(mMockContext,
7322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                ContentUris.withAppendedId(Mailbox.CONTENT_URI, mailboxId),
7422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                new String[] {MailboxColumns.MESSAGE_COUNT}, null, null, null, 0);
7522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    }
7622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
7722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    /** Creates a new message. */
7822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    private static Message createMessage(Context c, Mailbox b, boolean starred, boolean read,
7922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy            int flagLoaded) {
8022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Message message = ProviderTestUtils.setupMessage(
8122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                "1", b.mAccountKey, b.mId, true, false, c, starred, read);
8222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        message.mFlagLoaded = flagLoaded;
8322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        message.save(c);
8422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        return message;
8522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    }
8622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
8722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    //////////////////////////////////////////////////////////
8822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    ////// The tests
8922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    //////////////////////////////////////////////////////////
9022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
9122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    /**
9222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy     * Test simple mailbox save/retrieve
9322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy     */
9422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    public void testSave() {
9522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        final Context c = mMockContext;
9622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
9722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Account account1 = ProviderTestUtils.setupAccount("mailbox-save", true, c);
9822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        long account1Id = account1.mId;
9922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, c);
10022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        long box1Id = box1.mId;
10122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
10253ea83ebf91f820692e8fa8e781f5cc982dd94dbBen Komalo        Mailbox box2 = Mailbox.restoreMailboxWithId(c, box1Id);
10322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
10422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        ProviderTestUtils.assertMailboxEqual("testMailboxSave", box1, box2);
10522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    }
10622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
10722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    /**
10822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy     * Test delete mailbox
10922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy     */
11022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    public void testDelete() {
11122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        final Context c = mMockContext;
11222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
11322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Account account1 = ProviderTestUtils.setupAccount("mailbox-delete", true, c);
11422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        long account1Id = account1.mId;
11522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, c);
11622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        long box1Id = box1.mId;
11722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox box2 = ProviderTestUtils.setupMailbox("box2", account1Id, true, c);
11822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        long box2Id = box2.mId;
11922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
12022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        String selection = EmailContent.MailboxColumns.ACCOUNT_KEY + "=?";
12122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        String[] selArgs = new String[] { String.valueOf(account1Id) };
12222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
12322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // make sure there are two mailboxes
12422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        int numBoxes = EmailContent.count(c, Mailbox.CONTENT_URI, selection, selArgs);
12522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(2, numBoxes);
12622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
12722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // now delete one of them
12822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Uri uri = ContentUris.withAppendedId(Mailbox.CONTENT_URI, box1Id);
12922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        c.getContentResolver().delete(uri, null, null);
13022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
13122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // make sure there's only one mailbox now
13222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        numBoxes = EmailContent.count(c, Mailbox.CONTENT_URI, selection, selArgs);
13322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(1, numBoxes);
13422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
13522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // now delete the other one
13622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        uri = ContentUris.withAppendedId(Mailbox.CONTENT_URI, box2Id);
13722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        c.getContentResolver().delete(uri, null, null);
13822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
13922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // make sure there are no mailboxes now
14022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        numBoxes = EmailContent.count(c, Mailbox.CONTENT_URI, selection, selArgs);
14122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(0, numBoxes);
14222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    }
14322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
14422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    public void testGetMailboxType() {
14522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        final Context c = mMockContext;
14622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
14722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Account a = ProviderTestUtils.setupAccount("acct1", true, c);
14822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox bi = ProviderTestUtils.setupMailbox("b1", a.mId, true, c, Mailbox.TYPE_INBOX);
14922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox bm = ProviderTestUtils.setupMailbox("b2", a.mId, true, c, Mailbox.TYPE_MAIL);
15022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
15122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(Mailbox.TYPE_INBOX, Mailbox.getMailboxType(c, bi.mId));
15222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(Mailbox.TYPE_MAIL, Mailbox.getMailboxType(c, bm.mId));
15322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(-1, Mailbox.getMailboxType(c, 999999)); // mailbox not found
15422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    }
15522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
15622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    public void testGetDisplayName() {
15722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        final Context c = mMockContext;
15822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
15922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Account a = ProviderTestUtils.setupAccount("acct1", true, c);
16022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox bi = ProviderTestUtils.setupMailbox("b1", a.mId, true, c, Mailbox.TYPE_INBOX);
16122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox bm = ProviderTestUtils.setupMailbox("b2", a.mId, true, c, Mailbox.TYPE_MAIL);
16222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
16322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals("b1", Mailbox.getDisplayName(c, bi.mId));
16422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals("b2", Mailbox.getDisplayName(c, bm.mId));
16522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(null, Mailbox.getDisplayName(c, 999999)); // mailbox not found
16622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    }
16722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
16822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    public void testIsRefreshable() {
16922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        final Context c = mMockContext;
17022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
17122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Account a = ProviderTestUtils.setupAccount("acct1", true, c);
17222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox bi = ProviderTestUtils.setupMailbox("b1", a.mId, true, c, Mailbox.TYPE_INBOX);
17322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox bm = ProviderTestUtils.setupMailbox("b1", a.mId, true, c, Mailbox.TYPE_MAIL);
17422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox bd = ProviderTestUtils.setupMailbox("b1", a.mId, true, c, Mailbox.TYPE_DRAFTS);
17522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox bo = ProviderTestUtils.setupMailbox("b1", a.mId, true, c, Mailbox.TYPE_OUTBOX);
17622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
17722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertTrue(Mailbox.isRefreshable(c, bi.mId));
17822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertTrue(Mailbox.isRefreshable(c, bm.mId));
17922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertFalse(Mailbox.isRefreshable(c, bd.mId));
18022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertFalse(Mailbox.isRefreshable(c, bo.mId));
18122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
18222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // No such mailbox
18322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertFalse(Mailbox.isRefreshable(c, 9999999));
18422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
18522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // Magic mailboxes can't be refreshed.
18622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertFalse(Mailbox.isRefreshable(c, Mailbox.QUERY_ALL_DRAFTS));
18722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertFalse(Mailbox.isRefreshable(c, Mailbox.QUERY_ALL_INBOXES));
18822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    }
18922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
19022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    public void testCanMoveFrom() {
19122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        final Context c = mMockContext;
19222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
19322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Account a = ProviderTestUtils.setupAccount("acct1", true, c);
19422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox bi = ProviderTestUtils.setupMailbox("b1", a.mId, true, c, Mailbox.TYPE_INBOX);
19522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox bm = ProviderTestUtils.setupMailbox("b1", a.mId, true, c, Mailbox.TYPE_MAIL);
19622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox bd = ProviderTestUtils.setupMailbox("b1", a.mId, true, c, Mailbox.TYPE_DRAFTS);
19722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox bo = ProviderTestUtils.setupMailbox("b1", a.mId, true, c, Mailbox.TYPE_OUTBOX);
19822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
19981a153463bd9d2e4f71a0985a102548b16a88ec0Ben Komalo        assertTrue(bi.canHaveMessagesMoved());
20081a153463bd9d2e4f71a0985a102548b16a88ec0Ben Komalo        assertTrue(bm.canHaveMessagesMoved());
20181a153463bd9d2e4f71a0985a102548b16a88ec0Ben Komalo        assertFalse(bd.canHaveMessagesMoved());
20281a153463bd9d2e4f71a0985a102548b16a88ec0Ben Komalo        assertFalse(bo.canHaveMessagesMoved());
20322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    }
20422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
20522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    public void testGetMailboxForMessageId() {
20622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        final Context c = mMockContext;
20722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox b1 = ProviderTestUtils.setupMailbox("box1", 1, true, c, Mailbox.TYPE_MAIL);
20822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox b2 = ProviderTestUtils.setupMailbox("box2", 1, true, c, Mailbox.TYPE_MAIL);
20922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Message m1 = ProviderTestUtils.setupMessage("1", b1.mAccountKey, b1.mId,
21022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                true, true, c, false, false);
21122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Message m2 = ProviderTestUtils.setupMessage("1", b2.mAccountKey, b2.mId,
21222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                true, true, c, false, false);
21322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        ProviderTestUtils.assertMailboxEqual("x", b1, Mailbox.getMailboxForMessageId(c, m1.mId));
21422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        ProviderTestUtils.assertMailboxEqual("x", b2, Mailbox.getMailboxForMessageId(c, m2.mId));
21522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    }
21622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
21722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    public void testRestoreMailboxWithId() {
21822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        final Context c = mMockContext;
21922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox testMailbox;
22022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
22122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        testMailbox = ProviderTestUtils.setupMailbox("box1", 1, true, c, Mailbox.TYPE_MAIL);
22222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        ProviderTestUtils.assertMailboxEqual(
22322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                "x", testMailbox, Mailbox.restoreMailboxWithId(c, testMailbox.mId));
22422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        testMailbox = ProviderTestUtils.setupMailbox("box2", 1, true, c, Mailbox.TYPE_MAIL);
22522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        ProviderTestUtils.assertMailboxEqual(
22622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                "x", testMailbox, Mailbox.restoreMailboxWithId(c, testMailbox.mId));
22722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // Unknown IDs
22822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertNull(Mailbox.restoreMailboxWithId(c, 8));
22922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertNull(Mailbox.restoreMailboxWithId(c, -1));
23022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertNull(Mailbox.restoreMailboxWithId(c, Long.MAX_VALUE));
23122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    }
23222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
23322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    public void testRestoreMailboxForPath() {
23422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        final Context c = mMockContext;
23522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox testMailbox;
23622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        testMailbox = ProviderTestUtils.setupMailbox("a/b/c/box", 1, true, c, Mailbox.TYPE_MAIL);
23722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        ProviderTestUtils.assertMailboxEqual(
23822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                "x", testMailbox, Mailbox.restoreMailboxForPath(c, 1, "a/b/c/box"));
23922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // Same name, different account; no match
24022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertNull(Mailbox.restoreMailboxForPath(c, 2, "a/b/c/box"));
24122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // Substring; no match
24222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertNull(Mailbox.restoreMailboxForPath(c, 1, "a/b/c"));
24322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // Wild cards not supported; no match
24422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertNull(Mailbox.restoreMailboxForPath(c, 1, "a/b/c/%"));
24522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    }
24622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
24722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    public void testFindMailboxOfType() {
24822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        final Context context = mMockContext;
24922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
25022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // Create two accounts and a variety of mailbox types
25122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Account acct1 = ProviderTestUtils.setupAccount("acct1", true, context);
25222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox acct1Inbox =
25322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy            ProviderTestUtils.setupMailbox("Inbox1", acct1.mId, true, context, Mailbox.TYPE_INBOX);
25422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox acct1Calendar =
25522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy            ProviderTestUtils.setupMailbox("Cal1", acct1.mId, true, context, Mailbox.TYPE_CALENDAR);
25622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox acct1Contacts =
25722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy            ProviderTestUtils.setupMailbox("Con1", acct1.mId, true, context, Mailbox.TYPE_CONTACTS);
25822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Account acct2 = ProviderTestUtils.setupAccount("acct1", true, context);
25922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox acct2Inbox =
26022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy            ProviderTestUtils.setupMailbox("Inbox2", acct2.mId, true, context, Mailbox.TYPE_INBOX);
26122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox acct2Calendar =
26222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy            ProviderTestUtils.setupMailbox("Cal2", acct2.mId, true, context, Mailbox.TYPE_CALENDAR);
26322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox acct2Contacts =
26422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy            ProviderTestUtils.setupMailbox("Con2", acct2.mId, true, context, Mailbox.TYPE_CONTACTS);
26522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
26622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // Check that we can find them by type
26722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(acct1Inbox.mId,
26822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                Mailbox.findMailboxOfType(context, acct1.mId, Mailbox.TYPE_INBOX));
26922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(acct2Inbox.mId,
27022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                Mailbox.findMailboxOfType(context, acct2.mId, Mailbox.TYPE_INBOX));
27122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(acct1Calendar.mId,
27222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                Mailbox.findMailboxOfType(context, acct1.mId, Mailbox.TYPE_CALENDAR));
27322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(acct2Calendar.mId,
27422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                Mailbox.findMailboxOfType(context, acct2.mId, Mailbox.TYPE_CALENDAR));
27522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(acct1Contacts.mId,
27622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                Mailbox.findMailboxOfType(context, acct1.mId, Mailbox.TYPE_CONTACTS));
27722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(acct2Contacts.mId,
27822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                Mailbox.findMailboxOfType(context, acct2.mId, Mailbox.TYPE_CONTACTS));
27922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
28022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // Check that nonexistent mailboxes are not returned
28122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(Mailbox.NO_MAILBOX,
28222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                Mailbox.findMailboxOfType(context, acct1.mId, Mailbox.TYPE_DRAFTS));
28322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(Mailbox.NO_MAILBOX,
28422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                Mailbox.findMailboxOfType(context, acct1.mId, Mailbox.TYPE_OUTBOX));
28522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
28622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // delete account 1 and confirm no mailboxes are returned
28722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        context.getContentResolver().delete(
28822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                ContentUris.withAppendedId(Account.CONTENT_URI, acct1.mId), null, null);
28922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(Mailbox.NO_MAILBOX,
29022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                Mailbox.findMailboxOfType(context, acct1.mId, Mailbox.TYPE_INBOX));
29122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(Mailbox.NO_MAILBOX,
29222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                Mailbox.findMailboxOfType(context, acct1.mId, Mailbox.TYPE_CALENDAR));
29322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(Mailbox.NO_MAILBOX,
29422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                Mailbox.findMailboxOfType(context, acct1.mId, Mailbox.TYPE_CONTACTS));
29522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    }
29622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
29722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    public void testRestoreMailboxOfType() {
29822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        final Context context = getMockContext();
29922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
30022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // Create two accounts and a variety of mailbox types
30122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Account acct1 = ProviderTestUtils.setupAccount("acct1", true, context);
30222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox acct1Inbox =
30322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy            ProviderTestUtils.setupMailbox("Inbox1", acct1.mId, true, context, Mailbox.TYPE_INBOX);
30422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox acct1Calendar =
30522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy            ProviderTestUtils.setupMailbox("Cal1", acct1.mId, true, context, Mailbox.TYPE_CALENDAR);
30622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox acct1Contacts =
30722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy            ProviderTestUtils.setupMailbox("Con1", acct1.mId, true, context, Mailbox.TYPE_CONTACTS);
30822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Account acct2 =ProviderTestUtils.setupAccount("acct1", true, context);
30922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox acct2Inbox =
31022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy            ProviderTestUtils.setupMailbox("Inbox2", acct2.mId, true, context, Mailbox.TYPE_INBOX);
31122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox acct2Calendar =
31222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy            ProviderTestUtils.setupMailbox("Cal2", acct2.mId, true, context, Mailbox.TYPE_CALENDAR);
31322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox acct2Contacts =
31422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy            ProviderTestUtils.setupMailbox("Con2", acct2.mId, true, context, Mailbox.TYPE_CONTACTS);
31522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
31622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // Check that we can find them by type
31722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        ProviderTestUtils.assertMailboxEqual("testRestoreMailboxOfType", acct1Inbox,
31822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                Mailbox.restoreMailboxOfType(context, acct1.mId, Mailbox.TYPE_INBOX));
31922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        ProviderTestUtils.assertMailboxEqual("testRestoreMailboxOfType", acct2Inbox,
32022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                Mailbox.restoreMailboxOfType(context, acct2.mId, Mailbox.TYPE_INBOX));
32122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        ProviderTestUtils.assertMailboxEqual("testRestoreMailboxOfType", acct1Calendar,
32222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                Mailbox.restoreMailboxOfType(context, acct1.mId, Mailbox.TYPE_CALENDAR));
32322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        ProviderTestUtils.assertMailboxEqual("testRestoreMailboxOfType", acct2Calendar,
32422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                Mailbox.restoreMailboxOfType(context, acct2.mId, Mailbox.TYPE_CALENDAR));
32522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        ProviderTestUtils.assertMailboxEqual("testRestoreMailboxOfType", acct1Contacts,
32622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                Mailbox.restoreMailboxOfType(context, acct1.mId, Mailbox.TYPE_CONTACTS));
32722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        ProviderTestUtils.assertMailboxEqual("testRestoreMailboxOfType", acct2Contacts,
32822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                Mailbox.restoreMailboxOfType(context, acct2.mId, Mailbox.TYPE_CONTACTS));
32922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    }
33022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
33122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    /**
33222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy     * Test for the message count triggers (insert/delete/move mailbox), and also
33322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy     * {@link EmailProvider#recalculateMessageCount}.
33422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy     *
33522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy     * It also covers:
33622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy     * - {@link Mailbox#getMessageCountByMailboxType(Context, int)}
33722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy     * - {@link Mailbox#getUnreadCountByAccountAndMailboxType(Context, long, int)}
33822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy     * - {@link Mailbox#getUnreadCountByMailboxType(Context, int)}
33922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy     * - {@link Message#getFavoriteMessageCount(Context)}
34022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy     * - {@link Message#getFavoriteMessageCount(Context, long)}
34122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy     */
34222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    public void testMessageCount() {
34322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        final Context c = mMockContext;
34422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
34522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // Create 2 accounts
34622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Account a1 = ProviderTestUtils.setupAccount("holdflag-1", true, c);
34722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Account a2 = ProviderTestUtils.setupAccount("holdflag-2", true, c);
34822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
34922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // Create 2 mailboxes for each account
35022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox b1 = ProviderTestUtils.setupMailbox("box1", a1.mId, true, c, Mailbox.TYPE_INBOX);
35122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox b2 = ProviderTestUtils.setupMailbox("box2", a1.mId, true, c, Mailbox.TYPE_OUTBOX);
35222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox b3 = ProviderTestUtils.setupMailbox("box3", a2.mId, true, c, Mailbox.TYPE_INBOX);
35322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox b4 = ProviderTestUtils.setupMailbox("box4", a2.mId, true, c, Mailbox.TYPE_OUTBOX);
35422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox bt = ProviderTestUtils.setupMailbox("boxT", a2.mId, true, c, Mailbox.TYPE_TRASH);
35522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
35622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // 0. Check the initial values, just in case.
35722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
35822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(0, getMessageCount(b1.mId));
35922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(0, getMessageCount(b2.mId));
36022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(0, getMessageCount(b3.mId));
36122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(0, getMessageCount(b4.mId));
36222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(0, getMessageCount(bt.mId));
36322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
36422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(0, Message.getFavoriteMessageCount(c));
36522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(0, Message.getFavoriteMessageCount(c, a1.mId));
36622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(0, Message.getFavoriteMessageCount(c, a2.mId));
36722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(0, Mailbox.getUnreadCountByMailboxType(c, Mailbox.TYPE_INBOX));
36822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(0, Mailbox.getUnreadCountByMailboxType(c, Mailbox.TYPE_OUTBOX));
36922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(0, Mailbox.getMessageCountByMailboxType(c, Mailbox.TYPE_INBOX));
37022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(0, Mailbox.getMessageCountByMailboxType(c, Mailbox.TYPE_OUTBOX));
37122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(0, Mailbox.getMessageCountByMailboxType(c, Mailbox.TYPE_TRASH));
37222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
37322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(0, Mailbox.getUnreadCountByAccountAndMailboxType(c,
37422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                a1.mId, Mailbox.TYPE_INBOX));
37522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(0, Mailbox.getUnreadCountByAccountAndMailboxType(c,
37622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                a1.mId, Mailbox.TYPE_OUTBOX));
37722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(0, Mailbox.getUnreadCountByAccountAndMailboxType(c,
37822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                a1.mId, Mailbox.TYPE_TRASH));
37922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(0, Mailbox.getUnreadCountByAccountAndMailboxType(c,
38022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                a2.mId, Mailbox.TYPE_INBOX));
38122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(0, Mailbox.getUnreadCountByAccountAndMailboxType(c,
38222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                a2.mId, Mailbox.TYPE_OUTBOX));
38322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(0, Mailbox.getUnreadCountByAccountAndMailboxType(c,
38422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                a2.mId, Mailbox.TYPE_TRASH));
38522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
38622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // 1. Test for insert triggers.
38722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
38822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // Create some messages
38922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // b1 (account 1, inbox): 1 message, including 1 starred
39022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Message m11 = createMessage(c, b1, true, false, Message.FLAG_LOADED_COMPLETE);
39122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
39222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // b2 (account 1, outbox): 2 message, including 1 starred
39322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Message m21 = createMessage(c, b2, false, false, Message.FLAG_LOADED_COMPLETE);
39422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Message m22 = createMessage(c, b2, true, true, Message.FLAG_LOADED_COMPLETE);
39522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
39622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // b3 (account 2, inbox): 3 message, including 1 starred
39722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Message m31 = createMessage(c, b3, false, false, Message.FLAG_LOADED_COMPLETE);
39822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Message m32 = createMessage(c, b3, false, false, Message.FLAG_LOADED_COMPLETE);
39922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Message m33 = createMessage(c, b3, true, true, Message.FLAG_LOADED_COMPLETE);
40022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
40122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // b4 (account 2, outbox) has no messages.
40222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
40322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // bt (account 2, trash) has 3 messages, including 2 starred
40422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Message mt1 = createMessage(c, bt, true, false, Message.FLAG_LOADED_COMPLETE);
40522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Message mt2 = createMessage(c, bt, true, false, Message.FLAG_LOADED_COMPLETE);
40622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Message mt3 = createMessage(c, bt, false, false, Message.FLAG_LOADED_COMPLETE);
40722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
40822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // Check message counts
40922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(1, getMessageCount(b1.mId));
41022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(2, getMessageCount(b2.mId));
41122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(3, getMessageCount(b3.mId));
41222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(0, getMessageCount(b4.mId));
41322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(3, getMessageCount(bt.mId));
41422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
41522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // Check the simple counting methods.
41622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(3, Message.getFavoriteMessageCount(c)); // excludes starred in trash
41722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(2, Message.getFavoriteMessageCount(c, a1.mId));
41822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(1, Message.getFavoriteMessageCount(c, a2.mId)); // excludes starred in trash
41922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(3, Mailbox.getUnreadCountByMailboxType(c, Mailbox.TYPE_INBOX));
42022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(1, Mailbox.getUnreadCountByMailboxType(c, Mailbox.TYPE_OUTBOX));
42122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(4, Mailbox.getMessageCountByMailboxType(c, Mailbox.TYPE_INBOX));
42222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(2, Mailbox.getMessageCountByMailboxType(c, Mailbox.TYPE_OUTBOX));
42322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(3, Mailbox.getMessageCountByMailboxType(c, Mailbox.TYPE_TRASH));
42422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
42522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(1, Mailbox.getUnreadCountByAccountAndMailboxType(c,
42622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                a1.mId, Mailbox.TYPE_INBOX));
42722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(1, Mailbox.getUnreadCountByAccountAndMailboxType(c,
42822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                a1.mId, Mailbox.TYPE_OUTBOX));
42922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(0, Mailbox.getUnreadCountByAccountAndMailboxType(c,
43022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                a1.mId, Mailbox.TYPE_TRASH));
43122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(2, Mailbox.getUnreadCountByAccountAndMailboxType(c,
43222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                a2.mId, Mailbox.TYPE_INBOX));
43322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(0, Mailbox.getUnreadCountByAccountAndMailboxType(c,
43422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                a2.mId, Mailbox.TYPE_OUTBOX));
43522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(3, Mailbox.getUnreadCountByAccountAndMailboxType(c,
43622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                a2.mId, Mailbox.TYPE_TRASH));
43722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
43822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // 2. Check the "move mailbox" trigger.
43922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
44022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // Move m32 (in mailbox 3) to mailbox 4.
44122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        ContentValues values = new ContentValues();
44222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        values.put(MessageColumns.MAILBOX_KEY, b4.mId);
44322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
44422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        getProvider().update(Message.CONTENT_URI, values, EmailContent.ID_SELECTION,
44522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                new String[] {"" + m32.mId});
44622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
44722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // Check message counts
44822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(1, getMessageCount(b1.mId));
44922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(2, getMessageCount(b2.mId));
45022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(2, getMessageCount(b3.mId));
45122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(1, getMessageCount(b4.mId));
45222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
45322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // 3. Check the delete trigger.
45422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
45522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // Delete m11 (in mailbox 1)
45622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        getProvider().delete(Message.CONTENT_URI, EmailContent.ID_SELECTION,
45722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                new String[] {"" + m11.mId});
45822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // Delete m21 (in mailbox 2)
45922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        getProvider().delete(Message.CONTENT_URI, EmailContent.ID_SELECTION,
46022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                new String[] {"" + m21.mId});
46122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
46222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // Check message counts
46322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(0, getMessageCount(b1.mId));
46422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(1, getMessageCount(b2.mId));
46522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(2, getMessageCount(b3.mId));
46622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(1, getMessageCount(b4.mId));
46722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
46822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // No such mailbox type.
46922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(0, Mailbox.getMessageCountByMailboxType(c, 99999));
47022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(0, Mailbox.getUnreadCountByAccountAndMailboxType(c, a1.mId, 99999));
47122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(0, Mailbox.getUnreadCountByMailboxType(c, 99999));
47222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
47322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // No such account
47422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(0, Mailbox.getUnreadCountByAccountAndMailboxType(c,
47522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                99999, Mailbox.TYPE_INBOX));
47622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    }
47722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
47822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    /**
47922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy     * Check if update on MAILBOX_ID_ADD_TO_FIELD updates the cache properly.
48022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy     */
48122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    public void testUpdateCacheMailboxIdAddToField() {
48222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        final Context c = mMockContext;
48322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
48422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Account a1 = ProviderTestUtils.setupAccount("a1", true, c);
48522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Mailbox b1 = ProviderTestUtils.setupMailbox("box1", a1.mId, true, c, Mailbox.TYPE_INBOX);
48622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
48722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        int start = Mailbox.restoreMailboxWithId(c, b1.mId).mSyncInterval;
48822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
48922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // +1 to SYNC_INTERVAL
49022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        ContentValues cv = new ContentValues();
49122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        cv.put(EmailContent.FIELD_COLUMN_NAME, MailboxColumns.SYNC_INTERVAL);
49222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        cv.put(EmailContent.ADD_COLUMN_NAME, 1);
49322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        mProvider.update(ContentUris.withAppendedId(Mailbox.ADD_TO_FIELD_URI, a1.mId), cv,
49422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                null, null);
49522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
49622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // Check
49722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        assertEquals(start + 1, Mailbox.restoreMailboxWithId(c, b1.mId).mSyncInterval);
49822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    }
49922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
500e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo    private Mailbox buildTestMailbox(String serverId) {
501e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo        return buildTestMailbox(serverId, null);
502e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo    }
503e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo
504e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo    private Mailbox buildTestMailbox(String serverId, String name) {
505e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo        name = (name == null) ? TEST_DISPLAY_NAME : name;
50622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
507e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo        Mailbox testMailbox = new Mailbox();
508e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo        testMailbox.mServerId = serverId;
509e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo        testMailbox.mDisplayName = name;
51022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        testMailbox.mParentServerId = TEST_PARENT_SERVER_ID;
51122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        testMailbox.mSyncKey = TEST_SYNC_KEY;
51222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        testMailbox.mSyncStatus = TEST_SYNC_STATUS;
51322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        testMailbox.mAccountKey = 1L;
51422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        testMailbox.mDelimiter = '/';
51522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        testMailbox.mFlags = 2;
51622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        testMailbox.mFlagVisible = true;
51722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        testMailbox.mParentKey = 3L;
51822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        testMailbox.mSyncInterval = 4;
51922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        testMailbox.mSyncLookback = 5;
52022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        testMailbox.mSyncTime = 6L;
52122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        testMailbox.mType = 7;
52222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        testMailbox.mVisibleLimit = 8;
523e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo        testMailbox.mLastSeenMessageKey = 9L;
5247984aa60a012374e286802fa35a6b3e79866bca9Todd Kennedy        testMailbox.mLastTouchedTime = 10L;
525e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo
526e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo        return testMailbox;
527e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo    }
528e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo
529e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo    public void testGetHashes() {
530e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo        final Context c = mMockContext;
531e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo        Mailbox testMailbox = buildTestMailbox(TEST_SERVER_ID);
53222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        testMailbox.save(c);
53322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
53422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        Object[] testHash;
53522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        testHash = new Object[] {
53622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                testMailbox.mId, TEST_DISPLAY_NAME, TEST_SERVER_ID,
53722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                TEST_PARENT_SERVER_ID, 1L /*mAccountKey*/, 7 /*mType */,
53822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                (int)'/' /*mDelimiter */, TEST_SYNC_KEY, 5 /*mSyncLookback*/,
53922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                4 /*mSyncInterval*/,  6L /*mSyncTime*/, true /*mFlagVisible*/, 2 /*mFlags*/,
5407984aa60a012374e286802fa35a6b3e79866bca9Todd Kennedy                8 /*mVisibleLimit*/, TEST_SYNC_STATUS, 3L /*mParentKey*/, 9L /*mLastSeen*/,
5417984aa60a012374e286802fa35a6b3e79866bca9Todd Kennedy                10L /*mLastTouchedTime*/,
54222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        };
54322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        MoreAsserts.assertEquals(testHash, testMailbox.getHashes());
54422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
54522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        // Verify null checks happen correctly
54622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        testMailbox.mDisplayName = null;
54722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        testMailbox.mParentServerId = null;
54822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        testMailbox.mServerId = null;
54922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        testMailbox.mSyncKey = null;
55022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        testMailbox.mSyncStatus = null;
55122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        testMailbox.mFlagVisible = false;
55222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
55322208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        testHash = new Object[] {
55422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                testMailbox.mId, null /*mDisplayname*/, null /*mServerId*/,
55522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                null /*mParentServerId*/, 1L /*mAccountKey*/, 7 /*mType */,
55622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                (int)'/' /*mDelimiter */, null /*mSyncKey*/, 5 /*mSyncLookback*/,
55722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy                4 /*mSyncInterval*/,  6L /*mSyncTime*/, false /*mFlagVisible*/, 2 /*mFlags*/,
5587984aa60a012374e286802fa35a6b3e79866bca9Todd Kennedy                8 /*mVisibleLimit*/, null /*mSyncStatus*/, 3L /*mParentKey*/, 9L /*mLastSeen*/,
5597984aa60a012374e286802fa35a6b3e79866bca9Todd Kennedy                10L /*mLastTouchedTime*/,
56022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        };
56122208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        MoreAsserts.assertEquals(testHash, testMailbox.getHashes());
56222208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy    }
563e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo
564e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo    public void testParcelling() {
565e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo        Mailbox original = buildTestMailbox("serverId", "display name for mailbox");
566e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo
567e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo        Parcel p = Parcel.obtain();
568e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo        original.writeToParcel(p, 0 /* flags */);
569e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo
570e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo        // Reset.
571e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo        p.setDataPosition(0);
572e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo
573e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo        Mailbox unparcelled = Mailbox.CREATOR.createFromParcel(p);
574e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo        MoreAsserts.assertEquals(original.getHashes(), unparcelled.getHashes());
575e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo
576e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo        Mailbox phony = buildTestMailbox("different ID", "display name for mailbox");
577e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo        assertFalse(Arrays.equals(phony.getHashes(), unparcelled.getHashes()));
578e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo
579e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo        p.recycle();
580e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo    }
581e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo
582e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo    public void testParcellingWithPartialMailbox() {
583e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo        Mailbox unpopulated = new Mailbox();
584e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo        unpopulated.mDisplayName = "the only thing filled in for some reason";
585e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo
586e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo        Parcel p = Parcel.obtain();
587e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo        unpopulated.writeToParcel(p, 0 /* flags */);
588e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo
589e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo        // Reset.
590e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo        p.setDataPosition(0);
591e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo
592e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo        Mailbox unparcelled = Mailbox.CREATOR.createFromParcel(p);
593e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo        MoreAsserts.assertEquals(unpopulated.getHashes(), unparcelled.getHashes());
594e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo
595e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo        p.recycle();
596e0bb7e79092a1066f4cf42ec364a81ebb31ac808Ben Komalo    }
59722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy}
59822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy
599