1e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki/* 2e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki * Copyright (C) 2010 The Android Open Source Project 3e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki * 4e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki * Licensed under the Apache License, Version 2.0 (the "License"); 5e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki * you may not use this file except in compliance with the License. 6e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki * You may obtain a copy of the License at 7e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki * 8e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki * http://www.apache.org/licenses/LICENSE-2.0 9e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki * 10e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki * Unless required by applicable law or agreed to in writing, software 11e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki * distributed under the License is distributed on an "AS IS" BASIS, 12e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki * See the License for the specific language governing permissions and 14e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki * limitations under the License. 15e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki */ 16e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 17e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onukipackage com.android.email.activity; 18e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 19e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onukiimport com.android.email.Clock; 20e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onukiimport com.android.email.Controller; 21e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onukiimport com.android.email.MockClock; 22e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onukiimport com.android.email.RefreshManager; 23e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 24e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onukiimport android.content.Context; 25e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onukiimport android.os.Handler; 26e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onukiimport android.test.AndroidTestCase; 27e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onukiimport android.test.suitebuilder.annotation.SmallTest; 28e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 29e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onukiimport junit.framework.Assert; 30e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 31e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki/** 328112732376d4cc033ee515a6531852ef42266929Makoto Onuki * Tests for {@link UIControllerTwoPane.RefreshTask}. 33e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki * 34e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki * TOOD Add more tests. 35e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki * Right now, it only has tests for the "shouldXxx" methods, because it's hard to notice when 36e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki * they're subtly broken. (And the spec may change.) 37e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki */ 38e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki@SmallTest 398112732376d4cc033ee515a6531852ef42266929Makoto Onukipublic class UIControllerTwoPaneRefreshTaskTest extends AndroidTestCase { 40e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki private MockClock mClock = new MockClock(); 41e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki private MockRefreshManager mRefreshManager; 42e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 43e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki @Override 44e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki protected void setUp() throws Exception { 45e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki super.setUp(); 46e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mRefreshManager = new MockRefreshManager(getContext(), Controller.getInstance(getContext()), 47e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mClock, null); 48e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki } 49e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 50e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki @Override 51e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki protected void tearDown() throws Exception { 52e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki super.tearDown(); 53e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mRefreshManager.cleanUpForTest(); 54e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki } 55e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 56e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki public void testShouldRefreshMailboxList() { 57e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki final long ACCOUNT_ID = 5; 58e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki final long MAILBOX_ID = 10; 59e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 608112732376d4cc033ee515a6531852ef42266929Makoto Onuki UIControllerTwoPane.RefreshTask task = new UIControllerTwoPane.RefreshTask(null, 618112732376d4cc033ee515a6531852ef42266929Makoto Onuki getContext(), ACCOUNT_ID, MAILBOX_ID, mClock, mRefreshManager); 62e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 63e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mRefreshManager.mExpectedAccountId = ACCOUNT_ID; 64e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 65e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mClock.mTime = 123456789; 66e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 67e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki // Not refreshing, never refreshed == should sync 68e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mRefreshManager.mIsMailboxListRefreshing = false; 69e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mRefreshManager.mLastMailboxListRefresTime = 0; 70e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki assertTrue(task.shouldRefreshMailboxList()); 71e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 72e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki // IS refreshing, never refreshed == should NOT sync 73e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mRefreshManager.mIsMailboxListRefreshing = true; 74e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mRefreshManager.mLastMailboxListRefresTime = 0; 75e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki assertFalse(task.shouldRefreshMailboxList()); 76e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 77e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki // Not refreshing, just refreshed == should NOT sync 78e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mRefreshManager.mIsMailboxListRefreshing = false; 79e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mRefreshManager.mLastMailboxListRefresTime = 1234567890; 80e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mClock.mTime = mRefreshManager.mLastMailboxListRefresTime; 81e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki assertFalse(task.shouldRefreshMailboxList()); 82e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 83e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki // Not refreshing, refreshed 1 ms ago == should NOT sync 84e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mRefreshManager.mLastMailboxListRefresTime = 1234567890; 85e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mClock.mTime = mRefreshManager.mLastMailboxListRefresTime + 1; 86e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki assertFalse(task.shouldRefreshMailboxList()); 87e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 88e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki // Not refreshing, refreshed TIMEOUT-1 ago == should NOT sync 89e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mRefreshManager.mLastMailboxListRefresTime = 1234567890; 90e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mClock.mTime = mRefreshManager.mLastMailboxListRefresTime 918112732376d4cc033ee515a6531852ef42266929Makoto Onuki + UIControllerTwoPane.MAILBOX_REFRESH_MIN_INTERVAL - 1; 92e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki assertFalse(task.shouldRefreshMailboxList()); 93e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 94e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki // 1 ms laster... should sync. 95e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mClock.advance(); 96e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki assertTrue(task.shouldRefreshMailboxList()); 97e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki } 98e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 99e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki public void testShouldAutoRefreshInbox() { 100e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki final long ACCOUNT_ID = 5; 101e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki final long MAILBOX_ID = 10; 102e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 1038112732376d4cc033ee515a6531852ef42266929Makoto Onuki UIControllerTwoPane.RefreshTask task = new UIControllerTwoPane.RefreshTask(null, 1048112732376d4cc033ee515a6531852ef42266929Makoto Onuki getContext(), ACCOUNT_ID, MAILBOX_ID, mClock, mRefreshManager); 105e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 106e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mRefreshManager.mExpectedAccountId = ACCOUNT_ID; 107e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 108e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mClock.mTime = 123456789; 109e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 110e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki // Current mailbox != inbox, not refreshing, never refreshed == should sync 111e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mRefreshManager.mIsMessageListRefreshing = false; 112e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mRefreshManager.mLastMessageListRefresTime = 0; 113e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki task.mInboxId = MAILBOX_ID + 1; 114e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mRefreshManager.mExpectedMailboxId = MAILBOX_ID + 1; 115e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki assertTrue(task.shouldAutoRefreshInbox()); 116e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 117e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki // Current mailbox == inbox should NOT sync. 118e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki task.mInboxId = MAILBOX_ID; 119e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mRefreshManager.mExpectedMailboxId = MAILBOX_ID; 120e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki assertFalse(task.shouldAutoRefreshInbox()); 121e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 122e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki // Fron here, Current mailbox != inbox 123e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki task.mInboxId = MAILBOX_ID + 1; 124e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mRefreshManager.mExpectedMailboxId = MAILBOX_ID + 1; 125e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 126e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki // IS refreshing, never refreshed == should NOT sync 127e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mRefreshManager.mIsMessageListRefreshing = true; 128e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mRefreshManager.mLastMessageListRefresTime = 0; 129e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki assertFalse(task.shouldAutoRefreshInbox()); 130e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 131e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki // Not refreshing, just refreshed == should NOT sync 132e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mRefreshManager.mIsMessageListRefreshing = false; 133e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mRefreshManager.mLastMessageListRefresTime = 1234567890; 134e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mClock.mTime = mRefreshManager.mLastMessageListRefresTime; 135e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki assertFalse(task.shouldAutoRefreshInbox()); 136e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 137e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki // Not refreshing, refreshed 1 ms ago == should NOT sync 138e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mRefreshManager.mLastMessageListRefresTime = 1234567890; 139e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mClock.mTime = mRefreshManager.mLastMessageListRefresTime + 1; 140e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki assertFalse(task.shouldAutoRefreshInbox()); 141e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 142e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki // Not refreshing, refreshed TIMEOUT-1 ago == should NOT sync 143e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mRefreshManager.mLastMessageListRefresTime = 1234567890; 144e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mClock.mTime = mRefreshManager.mLastMessageListRefresTime 1458112732376d4cc033ee515a6531852ef42266929Makoto Onuki + UIControllerTwoPane.INBOX_AUTO_REFRESH_MIN_INTERVAL - 1; 146e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki assertFalse(task.shouldAutoRefreshInbox()); 147e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 148e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki // 1 ms laster... should sync. 149e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki mClock.advance(); 150e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki assertTrue(task.shouldAutoRefreshInbox()); 151e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki } 152e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 153e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki private static class MockRefreshManager extends RefreshManager { 154e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki public long mExpectedAccountId; 155e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki public long mExpectedMailboxId; 156e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki public boolean mIsMailboxListRefreshing; 157e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki public long mLastMailboxListRefresTime; 158e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki public boolean mIsMessageListRefreshing; 159e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki public long mLastMessageListRefresTime; 160e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 161e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki protected MockRefreshManager( 162e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki Context context, Controller controller, Clock clock, Handler handler) { 163e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki super(context, controller, clock, handler); 164e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki } 165e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 166e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki @Override 167e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki public boolean isMailboxListRefreshing(long accountId) { 168e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki Assert.assertEquals(mExpectedAccountId, accountId); 169e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki return mIsMailboxListRefreshing; 170e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki } 171e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 172e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki @Override 173e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki public long getLastMailboxListRefreshTime(long accountId) { 174e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki Assert.assertEquals(mExpectedAccountId, accountId); 175e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki return mLastMailboxListRefresTime; 176e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki } 177e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 178e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki @Override 179e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki public boolean isMessageListRefreshing(long mailboxId) { 180e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki Assert.assertEquals(mExpectedMailboxId, mailboxId); 181e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki return mIsMessageListRefreshing; 182e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki } 183e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki 184e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki @Override 185e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki public long getLastMessageListRefreshTime(long mailboxId) { 186e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki Assert.assertEquals(mExpectedMailboxId, mailboxId); 187e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki return mLastMessageListRefresTime; 188e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki } 189e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki } 190e357f5879187124c7af5c2ece5d7d3e4f60f07d2Makoto Onuki} 191