• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
17 package com.android.email.activity;
18 
19 import com.android.email.Clock;
20 import com.android.email.Controller;
21 import com.android.email.MockClock;
22 import com.android.email.RefreshManager;
23 
24 import android.content.Context;
25 import android.os.Handler;
26 import android.test.AndroidTestCase;
27 import android.test.suitebuilder.annotation.SmallTest;
28 
29 import 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
39 public class UIControllerTwoPaneRefreshTaskTest extends AndroidTestCase {
40     private MockClock mClock = new MockClock();
41     private MockRefreshManager mRefreshManager;
42 
43     @Override
setUp()44     protected void setUp() throws Exception {
45         super.setUp();
46         mRefreshManager = new MockRefreshManager(getContext(), Controller.getInstance(getContext()),
47                 mClock, null);
48     }
49 
50     @Override
tearDown()51     protected void tearDown() throws Exception {
52         super.tearDown();
53         mRefreshManager.cleanUpForTest();
54     }
55 
testShouldRefreshMailboxList()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 
testShouldAutoRefreshInbox()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 
MockRefreshManager( Context context, Controller controller, Clock clock, Handler handler)161         protected MockRefreshManager(
162                 Context context, Controller controller, Clock clock, Handler handler) {
163             super(context, controller, clock, handler);
164         }
165 
166         @Override
isMailboxListRefreshing(long accountId)167         public boolean isMailboxListRefreshing(long accountId) {
168             Assert.assertEquals(mExpectedAccountId, accountId);
169             return mIsMailboxListRefreshing;
170         }
171 
172         @Override
getLastMailboxListRefreshTime(long accountId)173         public long getLastMailboxListRefreshTime(long accountId) {
174             Assert.assertEquals(mExpectedAccountId, accountId);
175             return mLastMailboxListRefresTime;
176         }
177 
178         @Override
isMessageListRefreshing(long mailboxId)179         public boolean isMessageListRefreshing(long mailboxId) {
180             Assert.assertEquals(mExpectedMailboxId, mailboxId);
181             return mIsMessageListRefreshing;
182         }
183 
184         @Override
getLastMessageListRefreshTime(long mailboxId)185         public long getLastMessageListRefreshTime(long mailboxId) {
186             Assert.assertEquals(mExpectedMailboxId, mailboxId);
187             return mLastMessageListRefresTime;
188         }
189     }
190 }
191