1/* 2 * Copyright (C) 2010 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 com.android.email.Clock; 20import com.android.email.Controller; 21import com.android.email.MockClock; 22import com.android.email.RefreshManager; 23 24import android.content.Context; 25import android.os.Handler; 26import android.test.AndroidTestCase; 27import android.test.suitebuilder.annotation.SmallTest; 28 29import junit.framework.Assert; 30 31/** 32 * Tests for {@link UIControllerTwoPane.RefreshTask}. 33 * 34 * TOOD Add more tests. 35 * Right now, it only has tests for the "shouldXxx" methods, because it's hard to notice when 36 * they're subtly broken. (And the spec may change.) 37 */ 38@SmallTest 39public class UIControllerTwoPaneRefreshTaskTest extends AndroidTestCase { 40 private MockClock mClock = new MockClock(); 41 private MockRefreshManager mRefreshManager; 42 43 @Override 44 protected void setUp() throws Exception { 45 super.setUp(); 46 mRefreshManager = new MockRefreshManager(getContext(), Controller.getInstance(getContext()), 47 mClock, null); 48 } 49 50 @Override 51 protected void tearDown() throws Exception { 52 super.tearDown(); 53 mRefreshManager.cleanUpForTest(); 54 } 55 56 public void testShouldRefreshMailboxList() { 57 final long ACCOUNT_ID = 5; 58 final long MAILBOX_ID = 10; 59 60 UIControllerTwoPane.RefreshTask task = new UIControllerTwoPane.RefreshTask(null, 61 getContext(), ACCOUNT_ID, MAILBOX_ID, mClock, mRefreshManager); 62 63 mRefreshManager.mExpectedAccountId = ACCOUNT_ID; 64 65 mClock.mTime = 123456789; 66 67 // Not refreshing, never refreshed == should sync 68 mRefreshManager.mIsMailboxListRefreshing = false; 69 mRefreshManager.mLastMailboxListRefresTime = 0; 70 assertTrue(task.shouldRefreshMailboxList()); 71 72 // IS refreshing, never refreshed == should NOT sync 73 mRefreshManager.mIsMailboxListRefreshing = true; 74 mRefreshManager.mLastMailboxListRefresTime = 0; 75 assertFalse(task.shouldRefreshMailboxList()); 76 77 // Not refreshing, just refreshed == should NOT sync 78 mRefreshManager.mIsMailboxListRefreshing = false; 79 mRefreshManager.mLastMailboxListRefresTime = 1234567890; 80 mClock.mTime = mRefreshManager.mLastMailboxListRefresTime; 81 assertFalse(task.shouldRefreshMailboxList()); 82 83 // Not refreshing, refreshed 1 ms ago == should NOT sync 84 mRefreshManager.mLastMailboxListRefresTime = 1234567890; 85 mClock.mTime = mRefreshManager.mLastMailboxListRefresTime + 1; 86 assertFalse(task.shouldRefreshMailboxList()); 87 88 // Not refreshing, refreshed TIMEOUT-1 ago == should NOT sync 89 mRefreshManager.mLastMailboxListRefresTime = 1234567890; 90 mClock.mTime = mRefreshManager.mLastMailboxListRefresTime 91 + UIControllerTwoPane.MAILBOX_REFRESH_MIN_INTERVAL - 1; 92 assertFalse(task.shouldRefreshMailboxList()); 93 94 // 1 ms laster... should sync. 95 mClock.advance(); 96 assertTrue(task.shouldRefreshMailboxList()); 97 } 98 99 public void testShouldAutoRefreshInbox() { 100 final long ACCOUNT_ID = 5; 101 final long MAILBOX_ID = 10; 102 103 UIControllerTwoPane.RefreshTask task = new UIControllerTwoPane.RefreshTask(null, 104 getContext(), ACCOUNT_ID, MAILBOX_ID, mClock, mRefreshManager); 105 106 mRefreshManager.mExpectedAccountId = ACCOUNT_ID; 107 108 mClock.mTime = 123456789; 109 110 // Current mailbox != inbox, not refreshing, never refreshed == should sync 111 mRefreshManager.mIsMessageListRefreshing = false; 112 mRefreshManager.mLastMessageListRefresTime = 0; 113 task.mInboxId = MAILBOX_ID + 1; 114 mRefreshManager.mExpectedMailboxId = MAILBOX_ID + 1; 115 assertTrue(task.shouldAutoRefreshInbox()); 116 117 // Current mailbox == inbox should NOT sync. 118 task.mInboxId = MAILBOX_ID; 119 mRefreshManager.mExpectedMailboxId = MAILBOX_ID; 120 assertFalse(task.shouldAutoRefreshInbox()); 121 122 // Fron here, Current mailbox != inbox 123 task.mInboxId = MAILBOX_ID + 1; 124 mRefreshManager.mExpectedMailboxId = MAILBOX_ID + 1; 125 126 // IS refreshing, never refreshed == should NOT sync 127 mRefreshManager.mIsMessageListRefreshing = true; 128 mRefreshManager.mLastMessageListRefresTime = 0; 129 assertFalse(task.shouldAutoRefreshInbox()); 130 131 // Not refreshing, just refreshed == should NOT sync 132 mRefreshManager.mIsMessageListRefreshing = false; 133 mRefreshManager.mLastMessageListRefresTime = 1234567890; 134 mClock.mTime = mRefreshManager.mLastMessageListRefresTime; 135 assertFalse(task.shouldAutoRefreshInbox()); 136 137 // Not refreshing, refreshed 1 ms ago == should NOT sync 138 mRefreshManager.mLastMessageListRefresTime = 1234567890; 139 mClock.mTime = mRefreshManager.mLastMessageListRefresTime + 1; 140 assertFalse(task.shouldAutoRefreshInbox()); 141 142 // Not refreshing, refreshed TIMEOUT-1 ago == should NOT sync 143 mRefreshManager.mLastMessageListRefresTime = 1234567890; 144 mClock.mTime = mRefreshManager.mLastMessageListRefresTime 145 + UIControllerTwoPane.INBOX_AUTO_REFRESH_MIN_INTERVAL - 1; 146 assertFalse(task.shouldAutoRefreshInbox()); 147 148 // 1 ms laster... should sync. 149 mClock.advance(); 150 assertTrue(task.shouldAutoRefreshInbox()); 151 } 152 153 private static class MockRefreshManager extends RefreshManager { 154 public long mExpectedAccountId; 155 public long mExpectedMailboxId; 156 public boolean mIsMailboxListRefreshing; 157 public long mLastMailboxListRefresTime; 158 public boolean mIsMessageListRefreshing; 159 public long mLastMessageListRefresTime; 160 161 protected MockRefreshManager( 162 Context context, Controller controller, Clock clock, Handler handler) { 163 super(context, controller, clock, handler); 164 } 165 166 @Override 167 public boolean isMailboxListRefreshing(long accountId) { 168 Assert.assertEquals(mExpectedAccountId, accountId); 169 return mIsMailboxListRefreshing; 170 } 171 172 @Override 173 public long getLastMailboxListRefreshTime(long accountId) { 174 Assert.assertEquals(mExpectedAccountId, accountId); 175 return mLastMailboxListRefresTime; 176 } 177 178 @Override 179 public boolean isMessageListRefreshing(long mailboxId) { 180 Assert.assertEquals(mExpectedMailboxId, mailboxId); 181 return mIsMessageListRefreshing; 182 } 183 184 @Override 185 public long getLastMessageListRefreshTime(long mailboxId) { 186 Assert.assertEquals(mExpectedMailboxId, mailboxId); 187 return mLastMessageListRefresTime; 188 } 189 } 190} 191