Home | History | Annotate | Download | only in activity
      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
     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