PageRenderTime 2ms CodeModel.GetById 55ms app.highlight 15ms RepoModel.GetById 0ms app.codeStats 0ms

/tests/src/com/android/email/activity/RecentMailboxManagerTest.java

https://bitbucket.org/beginnerjyh/android_packages_apps_email
Java | 253 lines | 175 code | 33 blank | 45 comment | 4 complexity | 5fd6c743b731a29b5edb3756fbc16c53 MD5 | raw file
  1/*
  2 * Copyright (C) 2011 The Android Open Source Project
  3 *
  4 * Licensed under the Apache License, Version 2.0 (the "License");
  5 * you may not use this file except in compliance with the License.
  6 * You may obtain a copy of the License at
  7 *
  8 *      http://www.apache.org/licenses/LICENSE-2.0
  9 *
 10 * Unless required by applicable law or agreed to in writing, software
 11 * distributed under the License is distributed on an "AS IS" BASIS,
 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 13 * See the License for the specific language governing permissions and
 14 * limitations under the License.
 15 */
 16
 17package com.android.email.activity;
 18
 19import android.content.ContentValues;
 20import android.content.Context;
 21import android.test.AndroidTestCase;
 22import android.test.suitebuilder.annotation.MediumTest;
 23
 24import com.android.email.Controller;
 25import com.android.email.DBTestHelper;
 26import com.android.email.MockClock;
 27import com.android.email.provider.ContentCache;
 28import com.android.email.provider.ProviderTestUtils;
 29import com.android.emailcommon.provider.EmailContent.MailboxColumns;
 30import com.android.emailcommon.provider.Mailbox;
 31
 32import java.util.ArrayList;
 33import java.util.HashSet;
 34import java.util.Set;
 35
 36/**
 37 * Tests for the recent mailbox manager.
 38 *
 39 * You can run this entire test case with:
 40 *   runtest -c com.android.email.activity.RecentMailboxManagerTest email
 41 */
 42@MediumTest
 43public class RecentMailboxManagerTest extends AndroidTestCase {
 44
 45    private Context mMockContext;
 46    private MockClock mMockClock;
 47    private RecentMailboxManager mManager;
 48    private Mailbox[] mMailboxArray;
 49
 50    public RecentMailboxManagerTest() {
 51    }
 52
 53    @Override
 54    public void setUp() throws Exception {
 55        super.setUp();
 56        mMockContext = DBTestHelper.ProviderContextSetupHelper.getProviderContext(
 57                getContext());
 58        mMockClock = new MockClock();
 59        RecentMailboxManager.sClock = mMockClock;
 60        mManager = RecentMailboxManager.getInstance(mMockContext);
 61        Controller.getInstance(mMockContext).setProviderContext(mMockContext);
 62        mMailboxArray = new Mailbox[] {
 63            ProviderTestUtils.setupMailbox("inbox", 1L, true, mMockContext, Mailbox.TYPE_INBOX),
 64            ProviderTestUtils.setupMailbox("drafts", 1L, true, mMockContext, Mailbox.TYPE_DRAFTS),
 65            ProviderTestUtils.setupMailbox("outbox", 1L, true, mMockContext, Mailbox.TYPE_OUTBOX),
 66            ProviderTestUtils.setupMailbox("sent", 1L, true, mMockContext, Mailbox.TYPE_SENT),
 67            ProviderTestUtils.setupMailbox("trash", 1L, true, mMockContext, Mailbox.TYPE_TRASH),
 68            ProviderTestUtils.setupMailbox("junk", 1L, true, mMockContext, Mailbox.TYPE_JUNK),
 69            ProviderTestUtils.setupMailbox("abbott", 1L, true, mMockContext, Mailbox.TYPE_MAIL),
 70            ProviderTestUtils.setupMailbox("costello", 1L, true, mMockContext, Mailbox.TYPE_MAIL),
 71            ProviderTestUtils.setupMailbox("bud_lou", 1L, true, mMockContext, Mailbox.TYPE_MAIL),
 72            ProviderTestUtils.setupMailbox("laurel", 1L, true, mMockContext, Mailbox.TYPE_MAIL),
 73            ProviderTestUtils.setupMailbox("hardy", 1L, true, mMockContext, Mailbox.TYPE_MAIL)
 74        };
 75        // Invalidate all caches, since we reset the database for each test
 76        ContentCache.invalidateAllCaches();
 77    }
 78
 79    @Override
 80    protected void tearDown() throws Exception {
 81        RecentMailboxManager.sInstance = null;
 82        super.tearDown();
 83    }
 84
 85    public void testTouch() throws Exception {
 86        Set<Integer> defaultRecents = new HashSet<Integer>() {{
 87            for (int type : RecentMailboxManager.DEFAULT_RECENT_TYPES) {
 88                add(type);
 89            }
 90        }};
 91
 92        // Ensure all accounts can be touched
 93        for (Mailbox mailbox : mMailboxArray) {
 94            // Safety ... default touch time
 95            Mailbox untouchedMailbox = Mailbox.restoreMailboxWithId(mMockContext, mailbox.mId);
 96            if (!defaultRecents.contains(mailbox.mType)) {
 97                assertEquals(0L, untouchedMailbox.mLastTouchedTime);
 98            }
 99
100            // Touch the mailbox
101            mManager.touch(1L, mailbox.mId).get();
102
103            // Touch time is actually set
104            Mailbox touchedMailbox = Mailbox.restoreMailboxWithId(mMockContext, mailbox.mId);
105            assertEquals(mMockClock.getTime(), touchedMailbox.mLastTouchedTime);
106
107            mMockClock.advance(1000L);
108        }
109        // Now ensure touching one didn't affect the others
110        long touchTime = MockClock.DEFAULT_TIME;
111        for (Mailbox mailbox : mMailboxArray) {
112            // Touch time is actually set
113            Mailbox touchedMailbox = Mailbox.restoreMailboxWithId(mMockContext, mailbox.mId);
114            assertEquals(touchTime, touchedMailbox.mLastTouchedTime);
115            touchTime += 1000L;
116        }
117    }
118
119    /** Test default list */
120    public void testGetMostRecent01() throws Exception {
121        ArrayList<Long> testList;
122
123        // test default list
124        // With exclusions
125        testList = mManager.getMostRecent(1L, true);
126        assertEquals("w/ exclusions", 0, testList.size());
127
128        // Without exclusions -- we'll get "default" list.
129        testList = mManager.getMostRecent(1L, false);
130        assertEquals("w/o exclusions", 2, testList.size());
131
132        assertEquals(mMailboxArray[1].mId, (long) testList.get(0)); // Drafts
133        assertEquals(mMailboxArray[3].mId, (long) testList.get(1)); // Sent
134    }
135
136    /** Test recent list not full */
137    public void testGetMostRecent02() throws Exception {
138        ArrayList<Long> testList;
139        // need to wait for the last one to ensure getMostRecent() has something to work on
140        mMockClock.advance(1000L); mManager.touch(1L, mMailboxArray[7].mId).get(); // costello
141
142        // test recent list not full, so is padded with default mailboxes
143        testList = mManager.getMostRecent(1L, false);
144        assertEquals(3, testList.size());
145        assertEquals(mMailboxArray[7].mId, (long) testList.get(0)); // costello
146        assertEquals(mMailboxArray[1].mId, (long) testList.get(1)); // Drafts
147        assertEquals(mMailboxArray[3].mId, (long) testList.get(2)); // Sent
148        testList = mManager.getMostRecent(1L, true);
149        assertEquals(1, testList.size());
150        assertEquals(mMailboxArray[7].mId, (long) testList.get(0));
151    }
152
153    /** Test full recent list */
154    public void testGetMostRecent03() throws Exception {
155        ArrayList<Long> testList;
156
157        // touch some more mailboxes
158        mMockClock.advance(1000L); mManager.touch(1L, mMailboxArray[3].mId); // sent
159        mMockClock.advance(1000L); mManager.touch(1L, mMailboxArray[4].mId); // trash
160        mMockClock.advance(1000L); mManager.touch(1L, mMailboxArray[2].mId); // outbox
161        mMockClock.advance(1000L); mManager.touch(1L, mMailboxArray[8].mId); // bud_lou
162        mMockClock.advance(1000L); mManager.touch(1L, mMailboxArray[7].mId); // costello
163        mMockClock.advance(1000L); mManager.touch(1L, mMailboxArray[9].mId).get(); // laurel
164
165        // test full recent list
166        testList = mManager.getMostRecent(1L, false);
167        assertEquals(5, testList.size());
168        assertEquals(mMailboxArray[8].mId, (long) testList.get(0)); // bud_lou
169        assertEquals(mMailboxArray[7].mId, (long) testList.get(1)); // costello
170        assertEquals(mMailboxArray[9].mId, (long) testList.get(2)); // laurel
171        assertEquals(mMailboxArray[2].mId, (long) testList.get(3)); // outbox
172        assertEquals(mMailboxArray[4].mId, (long) testList.get(4)); // trash
173        testList = mManager.getMostRecent(1L, true);
174        assertEquals(3, testList.size());
175        assertEquals(mMailboxArray[8].mId, (long) testList.get(0));
176        assertEquals(mMailboxArray[7].mId, (long) testList.get(1));
177        assertEquals(mMailboxArray[9].mId, (long) testList.get(2));
178    }
179
180    /** Test limit for system mailboxes */
181    public void testGetMostRecent04() throws Exception {
182        ArrayList<Long> testList;
183
184        mMockClock.advance(1000L); mManager.touch(1L, mMailboxArray[0].mId); // inbox
185        mMockClock.advance(1000L); mManager.touch(1L, mMailboxArray[1].mId); // drafts
186        mMockClock.advance(1000L); mManager.touch(1L, mMailboxArray[2].mId); // outbox
187        mMockClock.advance(1000L); mManager.touch(1L, mMailboxArray[3].mId); // sent
188        mMockClock.advance(1000L); mManager.touch(1L, mMailboxArray[4].mId).get(); // trash
189
190        // nothing but system mailboxes, but inbox is never included
191        testList = mManager.getMostRecent(1L, false);
192        assertEquals(4, testList.size());
193        assertEquals(mMailboxArray[1].mId, (long) testList.get(0));
194        assertEquals(mMailboxArray[2].mId, (long) testList.get(1));
195        assertEquals(mMailboxArray[3].mId, (long) testList.get(2));
196        assertEquals(mMailboxArray[4].mId, (long) testList.get(3));
197        testList = mManager.getMostRecent(1L, true);
198        assertEquals(0, testList.size());
199    }
200
201    /** Test limit for user mailboxes */
202    public void testGetMostRecent05() throws Exception {
203        ArrayList<Long> testList;
204
205        // test limit for the filtered list
206        mMockClock.advance(1000L); mManager.touch(1L, mMailboxArray[6].mId); // abbott
207        mMockClock.advance(1000L); mManager.touch(1L, mMailboxArray[7].mId); // costello
208        mMockClock.advance(1000L); mManager.touch(1L, mMailboxArray[8].mId); // bud_lou
209        mMockClock.advance(1000L); mManager.touch(1L, mMailboxArray[9].mId); // laurel
210        mMockClock.advance(1000L); mManager.touch(1L, mMailboxArray[10].mId); // hardy
211        mMockClock.advance(1000L); mManager.touch(1L, mMailboxArray[1].mId); // drafts
212        mMockClock.advance(1000L); mManager.touch(1L, mMailboxArray[2].mId); // outbox
213        mMockClock.advance(1000L); mManager.touch(1L, mMailboxArray[3].mId); // sent
214        mMockClock.advance(1000L); mManager.touch(1L, mMailboxArray[4].mId); // trash
215        mMockClock.advance(1000L); mManager.touch(1L, mMailboxArray[5].mId).get(); // junk
216
217        // nothing but user mailboxes
218        testList = mManager.getMostRecent(1L, false);
219        assertEquals(5, testList.size());
220        assertEquals(mMailboxArray[1].mId, (long) testList.get(0));
221        assertEquals(mMailboxArray[5].mId, (long) testList.get(1));
222        assertEquals(mMailboxArray[2].mId, (long) testList.get(2));
223        assertEquals(mMailboxArray[3].mId, (long) testList.get(3));
224        assertEquals(mMailboxArray[4].mId, (long) testList.get(4));
225        testList = mManager.getMostRecent(1L, true);
226        assertEquals(5, testList.size());
227        assertEquals(mMailboxArray[6].mId, (long) testList.get(0));
228        assertEquals(mMailboxArray[8].mId, (long) testList.get(1));
229        assertEquals(mMailboxArray[7].mId, (long) testList.get(2));
230        assertEquals(mMailboxArray[10].mId, (long) testList.get(3));
231        assertEquals(mMailboxArray[9].mId, (long) testList.get(4));
232    }
233
234    public void testDoesNotIncludeExtraMailboxes() throws Exception {
235        ArrayList<Long> testList;
236
237        // The search mailbox should not be visible.
238        Mailbox searchMailbox = ProviderTestUtils.setupMailbox(
239                "search", 1L, true, mMockContext, Mailbox.TYPE_SEARCH);
240        ContentValues cv = new ContentValues();
241        cv.put(MailboxColumns.FLAG_VISIBLE, false);
242        searchMailbox.mFlagVisible = false;
243        searchMailbox.update(mMockContext, cv);
244
245        mMockClock.advance(1000L); mManager.touch(1L, searchMailbox.mId).get();
246
247        // Ensure search mailbox isn't returned
248        testList = mManager.getMostRecent(1L, false);
249        assertFalse(testList.contains(searchMailbox.mId));
250        testList = mManager.getMostRecent(1L, true);
251        assertFalse(testList.contains(searchMailbox.mId));
252    }
253}