121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki/* 221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki * Copyright (C) 2010 The Android Open Source Project 321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki * 421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki * Licensed under the Apache License, Version 2.0 (the "License"); 521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki * you may not use this file except in compliance with the License. 621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki * You may obtain a copy of the License at 721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki * 821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki * http://www.apache.org/licenses/LICENSE-2.0 921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki * 1021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki * Unless required by applicable law or agreed to in writing, software 1121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki * distributed under the License is distributed on an "AS IS" BASIS, 1221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki * See the License for the specific language governing permissions and 1421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki * limitations under the License. 1521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki */ 1621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 1721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onukipackage com.android.email; 1821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 1903cd72805dab0379ed255d151f1c17cc60655fc3Marc Blankimport com.android.email.provider.ProviderTestUtils; 2003cd72805dab0379ed255d151f1c17cc60655fc3Marc Blankimport com.android.emailcommon.Logging; 2103cd72805dab0379ed255d151f1c17cc60655fc3Marc Blankimport com.android.emailcommon.mail.MessagingException; 2203cd72805dab0379ed255d151f1c17cc60655fc3Marc Blankimport com.android.emailcommon.provider.Account; 2303cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank 2421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onukiimport android.content.Context; 25f52afae9424fe41071cc34a8d6cbcb82b992a411Makoto Onukiimport android.test.InstrumentationTestCase; 26f52afae9424fe41071cc34a8d6cbcb82b992a411Makoto Onukiimport android.test.suitebuilder.annotation.LargeTest; 2721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 2821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onukiimport junit.framework.Assert; 2921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 30f52afae9424fe41071cc34a8d6cbcb82b992a411Makoto Onuki@LargeTest 31f52afae9424fe41071cc34a8d6cbcb82b992a411Makoto Onukipublic class RefreshManagerTest extends InstrumentationTestCase { 32f52afae9424fe41071cc34a8d6cbcb82b992a411Makoto Onuki private static final int WAIT_UNTIL_TIMEOUT_SECONDS = 15; 3321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki private MockClock mClock; 3421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki private MockController mController; 3521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki private RefreshManager mTarget; 3621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki private RefreshListener mListener; 3721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 38f52afae9424fe41071cc34a8d6cbcb82b992a411Makoto Onuki private Context mContext; 39f52afae9424fe41071cc34a8d6cbcb82b992a411Makoto Onuki 4021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki // Isolated Context for providers. 4121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki private Context mProviderContext; 4221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 4321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki private static final MessagingException EXCEPTION = new MessagingException("test"); 4421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 4521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki // Looks silly, but it'll make it more readable. 4621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki private static final long ACCOUNT_1 = 1; 4721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki private static final long ACCOUNT_2 = 2; 4821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki private static final long MAILBOX_1 = 3; 4921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki private static final long MAILBOX_2 = 4; 5021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 5121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki @Override 5221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki protected void setUp() throws Exception { 5321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki super.setUp(); 5421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 5521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mClock = new MockClock(); 56f52afae9424fe41071cc34a8d6cbcb82b992a411Makoto Onuki mContext = getInstrumentation().getTargetContext(); 57c184f36c2df16431693d7709e28ded593efc3da7Marc Blank mController = new MockController(mContext); 5821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mListener = new RefreshListener(); 59d1ee5b8fa5fe92df1ded5953a9e3f001b38a1ac7Makoto Onuki mProviderContext = DBTestHelper.ProviderContextSetupHelper.getProviderContext(mContext); 6021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mTarget = new RefreshManager(mProviderContext, mController, mClock, null); 6121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mTarget.registerListener(mListener); 6221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki } 6321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 6403cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank @Override 6503cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank protected void tearDown() throws Exception { 6603cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank super.tearDown(); 6703cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank mController.cleanupForTest(); 6803cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank } 6903cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank 7021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki public void testRegisterUnregisterListener() { 7121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki // mListener is already registered 7221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(1, mTarget.getListenersForTest().size()); 7321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 7421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mTarget.unregisterListener(mListener); 7521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(0, mTarget.getListenersForTest().size()); 7621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki } 7721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 7821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki public void testRefreshStatus() { 7921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki RefreshManager.Status s = new RefreshManager.Status(); 8021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertFalse(s.isRefreshing()); 8121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(s.canRefresh()); 8221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(0, s.getLastRefreshTime()); 8321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 8421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki // Request refresh 8521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki s.onRefreshRequested(); 8621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(s.isRefreshing()); 8721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertFalse(s.canRefresh()); 8821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(0, s.getLastRefreshTime()); 8921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 9021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki // Refresh start 9121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki s.onCallback(null, 0, mClock); 9221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(s.isRefreshing()); 9321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertFalse(s.canRefresh()); 9421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(0, s.getLastRefreshTime()); 9521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 9621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki // Refresh 50% done -- nothing changes 9721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki s.onCallback(null, 50, mClock); 9821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(s.isRefreshing()); 9921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertFalse(s.canRefresh()); 10021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(0, s.getLastRefreshTime()); 10121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 10221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki // Refresh finish 10321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki s.onCallback(null, 100, mClock); 10421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertFalse(s.isRefreshing()); 10521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(s.canRefresh()); 10621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(mClock.mTime, s.getLastRefreshTime()); 10721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 10821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki // Refresh start without request 10921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki s.onCallback(null, 0, mClock); 11021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(s.isRefreshing()); 11121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertFalse(s.canRefresh()); 11221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(mClock.mTime, s.getLastRefreshTime()); 11321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 11421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mClock.advance(); 11521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 11621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki // Refresh finish with error. 11721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki s.onCallback(EXCEPTION, 0, mClock); 11821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertFalse(s.isRefreshing()); 11921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(s.canRefresh()); 12021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(mClock.mTime, s.getLastRefreshTime()); 12121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki } 12221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 12321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki public void testRefreshMailboxList() { 12421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki // request refresh for account 1 12521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(mTarget.refreshMailboxList(ACCOUNT_1)); 12621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 12721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(mListener.mCalledOnRefreshStatusChanged); 12821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertFalse(mListener.mCalledOnConnectionError); 12921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(ACCOUNT_1, mListener.mAccountId); 13021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(-1, mListener.mMailboxId); 13121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mListener.reset(); 13221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(mController.mCalledUpdateMailboxList); 13321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(ACCOUNT_1, mController.mAccountId); 13421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(-1, mController.mMailboxId); 13521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mController.reset(); 13621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(mTarget.isMailboxListRefreshing(ACCOUNT_1)); 137c1e8c95d053464e0821d45347704bd6c27e7e546Andy Stadler assertTrue(mTarget.isRefreshingAnyMailboxListForTest()); 13821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 13921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki // Request again -- shouldn't be accepted. 14021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertFalse(mTarget.refreshMailboxList(ACCOUNT_1)); 14121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 14221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertFalse(mListener.mCalledOnRefreshStatusChanged); 14321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertFalse(mListener.mCalledOnConnectionError); 14421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mListener.reset(); 14521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertFalse(mController.mCalledUpdateMailboxList); 14621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mController.reset(); 14721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 14821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki // request refresh for account 2 14921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(mTarget.refreshMailboxList(ACCOUNT_2)); 15021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 15121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(mListener.mCalledOnRefreshStatusChanged); 15221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertFalse(mListener.mCalledOnConnectionError); 15321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(ACCOUNT_2, mListener.mAccountId); 15421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(-1, mListener.mMailboxId); 15521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mListener.reset(); 15621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(mController.mCalledUpdateMailboxList); 15721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(ACCOUNT_2, mController.mAccountId); 15821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(-1, mController.mMailboxId); 15921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mController.reset(); 16021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(mTarget.isMailboxListRefreshing(ACCOUNT_2)); 161c1e8c95d053464e0821d45347704bd6c27e7e546Andy Stadler assertTrue(mTarget.isRefreshingAnyMailboxListForTest()); 16221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 16321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki // Refreshing for account 1... 16421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mController.mListener.updateMailboxListCallback(null, ACCOUNT_1, 0); 16521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 16621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(mListener.mCalledOnRefreshStatusChanged); 16721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertFalse(mListener.mCalledOnConnectionError); 16821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(ACCOUNT_1, mListener.mAccountId); 16921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(-1, mListener.mMailboxId); 17021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mListener.reset(); 17121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(mTarget.isMailboxListRefreshing(ACCOUNT_1)); 17221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(0, mTarget.getMailboxListStatusForTest(ACCOUNT_1).getLastRefreshTime()); 17321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 17421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki // Done. 175560bfadc3151f7a06f3b06e9a6c92cfa534c63ecScott Kennedy LogUtils.w(Logging.LOG_TAG, "" + mController.mListener.getClass()); 17621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mController.mListener.updateMailboxListCallback(null, ACCOUNT_1, 100); 17721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 17821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(mListener.mCalledOnRefreshStatusChanged); 17921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertFalse(mListener.mCalledOnConnectionError); 18021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(ACCOUNT_1, mListener.mAccountId); 18121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(-1, mListener.mMailboxId); 18221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mListener.reset(); 18321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertFalse(mTarget.isMailboxListRefreshing(ACCOUNT_1)); 18421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(mClock.mTime, mTarget.getMailboxListStatusForTest(ACCOUNT_1) 18521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki .getLastRefreshTime()); 18621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 18721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki // Check "any" method. 188c1e8c95d053464e0821d45347704bd6c27e7e546Andy Stadler assertTrue(mTarget.isRefreshingAnyMailboxListForTest()); // still refreshing account 2 18921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 19021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki // Refreshing for account 2... 19121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mClock.advance(); 19221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 19321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mController.mListener.updateMailboxListCallback(null, ACCOUNT_2, 0); 19421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 19521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(mListener.mCalledOnRefreshStatusChanged); 19621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertFalse(mListener.mCalledOnConnectionError); 19721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(ACCOUNT_2, mListener.mAccountId); 19821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(-1, mListener.mMailboxId); 19921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mListener.reset(); 20021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(mTarget.isMailboxListRefreshing(ACCOUNT_2)); 20121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(0, mTarget.getMailboxListStatusForTest(ACCOUNT_2).getLastRefreshTime()); 20221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 20321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki // Done with exception. 20421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mController.mListener.updateMailboxListCallback(EXCEPTION, ACCOUNT_2, 0); 20521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 20621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(mListener.mCalledOnRefreshStatusChanged); 20721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(mListener.mCalledOnConnectionError); 20821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(ACCOUNT_2, mListener.mAccountId); 20921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(-1, mListener.mMailboxId); 21031d9acbf0623872f9d4a2b3210b5970854b654c7Marc Blank assertEquals(MessagingExceptionStrings.getErrorString(mContext, EXCEPTION), 21131d9acbf0623872f9d4a2b3210b5970854b654c7Marc Blank mListener.mMessage); 21221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mListener.reset(); 21321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertFalse(mTarget.isMailboxListRefreshing(ACCOUNT_2)); 21421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(mClock.mTime, mTarget.getMailboxListStatusForTest(ACCOUNT_2) 21521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki .getLastRefreshTime()); 21621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 21721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki // Check "any" method. 218c1e8c95d053464e0821d45347704bd6c27e7e546Andy Stadler assertFalse(mTarget.isRefreshingAnyMailboxListForTest()); 21921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki } 22021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 22121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki public void testRefreshMessageList() { 22221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki // request refresh mailbox 1 223cbdd9f78b2605e87e45e4f6761b0a8c444a8cd4cMarc Blank assertTrue(mTarget.refreshMessageList(ACCOUNT_1, MAILBOX_1, false)); 22421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 22521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(mListener.mCalledOnRefreshStatusChanged); 22621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertFalse(mListener.mCalledOnConnectionError); 22721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(ACCOUNT_1, mListener.mAccountId); 22821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(MAILBOX_1, mListener.mMailboxId); 22921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mListener.reset(); 23021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(mController.mCalledUpdateMailbox); 23121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(ACCOUNT_1, mController.mAccountId); 23221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(MAILBOX_1, mController.mMailboxId); 23321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mController.reset(); 23421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(mTarget.isMessageListRefreshing(MAILBOX_1)); 235c1e8c95d053464e0821d45347704bd6c27e7e546Andy Stadler assertTrue(mTarget.isRefreshingAnyMessageListForTest()); 23621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 23721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki // Request again -- shouldn't be accepted. 238cbdd9f78b2605e87e45e4f6761b0a8c444a8cd4cMarc Blank assertFalse(mTarget.refreshMessageList(ACCOUNT_1, MAILBOX_1, false)); 23921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 24021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertFalse(mListener.mCalledOnRefreshStatusChanged); 24121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertFalse(mListener.mCalledOnConnectionError); 24221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mListener.reset(); 24321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertFalse(mController.mCalledUpdateMailbox); 24421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mController.reset(); 24521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 24621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki // request refresh mailbox 2 247cbdd9f78b2605e87e45e4f6761b0a8c444a8cd4cMarc Blank assertTrue(mTarget.refreshMessageList(ACCOUNT_2, MAILBOX_2, false)); 24821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 24921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(mListener.mCalledOnRefreshStatusChanged); 25021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertFalse(mListener.mCalledOnConnectionError); 25121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(ACCOUNT_2, mListener.mAccountId); 25221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(MAILBOX_2, mListener.mMailboxId); 25321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mListener.reset(); 25421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(mController.mCalledUpdateMailbox); 25521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(ACCOUNT_2, mController.mAccountId); 25621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(MAILBOX_2, mController.mMailboxId); 25721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mController.reset(); 25821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(mTarget.isMessageListRefreshing(MAILBOX_2)); 259c1e8c95d053464e0821d45347704bd6c27e7e546Andy Stadler assertTrue(mTarget.isRefreshingAnyMessageListForTest()); 26021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 26121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki // Refreshing mailbox 1... 262c4cdb11d24c19428dd39f986b00c1a29e75e1505Todd Kennedy mController.mListener.updateMailboxCallback(null, ACCOUNT_1, MAILBOX_1, 0, 0, null); 26321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 26421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(mListener.mCalledOnRefreshStatusChanged); 26521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertFalse(mListener.mCalledOnConnectionError); 26621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(ACCOUNT_1, mListener.mAccountId); 26721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(MAILBOX_1, mListener.mMailboxId); 26821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mListener.reset(); 26921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(mTarget.isMessageListRefreshing(MAILBOX_1)); 27021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(0, mTarget.getMessageListStatusForTest(MAILBOX_1).getLastRefreshTime()); 27121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 27221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki // Done. 273560bfadc3151f7a06f3b06e9a6c92cfa534c63ecScott Kennedy LogUtils.w(Logging.LOG_TAG, "" + mController.mListener.getClass()); 274c4cdb11d24c19428dd39f986b00c1a29e75e1505Todd Kennedy mController.mListener.updateMailboxCallback(null, ACCOUNT_1, MAILBOX_1, 100, 0, null); 27521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 27621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(mListener.mCalledOnRefreshStatusChanged); 27721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertFalse(mListener.mCalledOnConnectionError); 27821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(ACCOUNT_1, mListener.mAccountId); 27921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(MAILBOX_1, mListener.mMailboxId); 28021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mListener.reset(); 28121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertFalse(mTarget.isMessageListRefreshing(MAILBOX_1)); 28221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(mClock.mTime, mTarget.getMessageListStatusForTest(MAILBOX_1) 28321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki .getLastRefreshTime()); 28421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 28521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki // Check "any" method. 286c1e8c95d053464e0821d45347704bd6c27e7e546Andy Stadler assertTrue(mTarget.isRefreshingAnyMessageListForTest()); // still refreshing mailbox 2 28721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 28821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki // Refreshing mailbox 2... 28921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mClock.advance(); 29021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 291c4cdb11d24c19428dd39f986b00c1a29e75e1505Todd Kennedy mController.mListener.updateMailboxCallback(null, ACCOUNT_2, MAILBOX_2, 0, 0, null); 29221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 29321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(mListener.mCalledOnRefreshStatusChanged); 29421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertFalse(mListener.mCalledOnConnectionError); 29521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(ACCOUNT_2, mListener.mAccountId); 29621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(MAILBOX_2, mListener.mMailboxId); 29721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mListener.reset(); 29821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(mTarget.isMessageListRefreshing(MAILBOX_2)); 29921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(0, mTarget.getMessageListStatusForTest(MAILBOX_2).getLastRefreshTime()); 30021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 30121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki // Done with exception. 302c4cdb11d24c19428dd39f986b00c1a29e75e1505Todd Kennedy mController.mListener.updateMailboxCallback(EXCEPTION, ACCOUNT_2, MAILBOX_2, 0, 0, null); 30321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 30421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(mListener.mCalledOnRefreshStatusChanged); 30521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertTrue(mListener.mCalledOnConnectionError); 30621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(ACCOUNT_2, mListener.mAccountId); 30721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(MAILBOX_2, mListener.mMailboxId); 30831d9acbf0623872f9d4a2b3210b5970854b654c7Marc Blank assertEquals(MessagingExceptionStrings.getErrorString(mContext, EXCEPTION), 30931d9acbf0623872f9d4a2b3210b5970854b654c7Marc Blank mListener.mMessage); 31021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mListener.reset(); 31121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertFalse(mTarget.isMessageListRefreshing(MAILBOX_2)); 31221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki assertEquals(mClock.mTime, mTarget.getMessageListStatusForTest(MAILBOX_2) 31321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki .getLastRefreshTime()); 31421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 31521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki // Check "any" method. 316c1e8c95d053464e0821d45347704bd6c27e7e546Andy Stadler assertFalse(mTarget.isRefreshingAnyMessageListForTest()); 31721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki } 31821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 31903cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank public void testSendPendingMessages() { 32003cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank // request sending for account 1 32103cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank assertTrue(mTarget.sendPendingMessages(ACCOUNT_1)); 32203cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank 32303cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank assertTrue(mListener.mCalledOnRefreshStatusChanged); 32403cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank assertFalse(mListener.mCalledOnConnectionError); 32503cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank assertEquals(ACCOUNT_1, mListener.mAccountId); 32603cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank assertEquals(-1, mListener.mMailboxId); 32703cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank mListener.reset(); 32803cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank assertTrue(mController.mCalledSendPendingMessages); 32903cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank assertEquals(ACCOUNT_1, mController.mAccountId); 33003cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank assertEquals(-1, mController.mMailboxId); 33103cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank mController.reset(); 33203cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank 33303cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank // request sending for account 2 33403cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank assertTrue(mTarget.sendPendingMessages(ACCOUNT_2)); 33503cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank 33603cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank assertFalse(mListener.mCalledOnConnectionError); 33703cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank assertEquals(ACCOUNT_2, mListener.mAccountId); 33803cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank assertEquals(-1, mListener.mMailboxId); 33903cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank mListener.reset(); 34003cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank assertTrue(mController.mCalledSendPendingMessages); 34103cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank assertEquals(ACCOUNT_2, mController.mAccountId); 34203cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank assertEquals(-1, mController.mMailboxId); 34303cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank mController.reset(); 34403cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank 34503cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank // Sending start for account 1... 34603cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank // batch send start. (message id == -1, progress == 0) 34703cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank mController.mListener.sendMailCallback(null, ACCOUNT_1, -1, 0); 34803cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank 34903cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank assertFalse(mListener.mCalledOnConnectionError); 35003cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank mListener.reset(); 35103cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank 35203cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank // Per message callback 35303cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank mController.mListener.sendMailCallback(null, ACCOUNT_1, 100, 0); 35403cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank mController.mListener.sendMailCallback(null, ACCOUNT_1, 101, 0); 35503cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank 35603cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank assertFalse(mListener.mCalledOnConnectionError); 35703cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank mListener.reset(); 35803cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank 35903cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank // Exception -- first error will be reported. 36003cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank mController.mListener.sendMailCallback(EXCEPTION, ACCOUNT_1, 102, 0); 36103cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank 36203cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank assertTrue(mListener.mCalledOnConnectionError); 36303cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank assertEquals(MessagingExceptionStrings.getErrorString(mContext, EXCEPTION), 36403cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank mListener.mMessage); 36503cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank mListener.reset(); 36603cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank 36703cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank // Exception again -- no more error callbacks 36803cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank mController.mListener.sendMailCallback(null, ACCOUNT_1, 103, 0); 36903cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank mController.mListener.sendMailCallback(EXCEPTION, ACCOUNT_1, 104, 0); 37003cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank 37103cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank assertFalse(mListener.mCalledOnConnectionError); 37203cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank mListener.reset(); 37303cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank 37403cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank // Done. 375560bfadc3151f7a06f3b06e9a6c92cfa534c63ecScott Kennedy LogUtils.w(Logging.LOG_TAG, "" + mController.mListener.getClass()); 37603cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank mController.mListener.sendMailCallback(null, ACCOUNT_1, -1, 100); 37703cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank 37803cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank assertFalse(mListener.mCalledOnConnectionError); 37903cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank mListener.reset(); 38003cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank } 38103cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank 38203cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank public void testSendPendingMessagesForAllAccounts() throws Throwable { 38303cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank Account acct1 = ProviderTestUtils.setupAccount("acct1", true, mProviderContext); 38403cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank Account acct2 = ProviderTestUtils.setupAccount("acct2", true, mProviderContext); 38503cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank 38603cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank // AsyncTask needs to be created on the UI thread. 38703cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank runTestOnUiThread(new Runnable() { 38803cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank @Override 38903cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank public void run() { 39003cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank mTarget.sendPendingMessagesForAllAccounts(); 39103cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank } 39203cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank }); 39303cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank 39403cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank // sendPendingMessagesForAllAccounts uses Utility.ForEachAccount, which has it's own test, 39503cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank // so we don't really have to check everything. 39603cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank // Here, we just check if sendPendingMessages() has been called at least for once, 39703cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank // which is a enough check. 39803cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank TestUtils.waitUntil(new TestUtils.Condition() { 39903cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank @Override 40003cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank public boolean isMet() { 40103cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank // The write to this is done on the UI thread, but we're checking it here 40203cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank // on the test thread, so mCalledSendPendingMessages needs to be volatile. 40303cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank return mController.mCalledSendPendingMessages; 40403cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank } 40503cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank }, WAIT_UNTIL_TIMEOUT_SECONDS); 40603cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank } 40703cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank 408a796fbab0237c094aa943de68f85d201dd22503bMakoto Onuki public void testLoadMoreMessages() { 409a796fbab0237c094aa943de68f85d201dd22503bMakoto Onuki final long ACCOUNT_ID = 123; 410a796fbab0237c094aa943de68f85d201dd22503bMakoto Onuki final long MAILBOX_ID = 456; 411a796fbab0237c094aa943de68f85d201dd22503bMakoto Onuki 412a796fbab0237c094aa943de68f85d201dd22503bMakoto Onuki mTarget.loadMoreMessages(ACCOUNT_ID, MAILBOX_ID); 413a796fbab0237c094aa943de68f85d201dd22503bMakoto Onuki 414a796fbab0237c094aa943de68f85d201dd22503bMakoto Onuki assertTrue(mController.mCalledLoadMoreMessages); 415a796fbab0237c094aa943de68f85d201dd22503bMakoto Onuki assertEquals(mController.mMailboxId, MAILBOX_ID); 416a796fbab0237c094aa943de68f85d201dd22503bMakoto Onuki assertFalse(mController.mCalledUpdateMailbox); 417a796fbab0237c094aa943de68f85d201dd22503bMakoto Onuki } 418a796fbab0237c094aa943de68f85d201dd22503bMakoto Onuki 419f52afae9424fe41071cc34a8d6cbcb82b992a411Makoto Onuki // volatile is necessary for testSendPendingMessagesForAllAccounts(). 420f52afae9424fe41071cc34a8d6cbcb82b992a411Makoto Onuki // (Not all of them are actually necessary, but added for consistency.) 42121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki private static class MockController extends Controller { 422f52afae9424fe41071cc34a8d6cbcb82b992a411Makoto Onuki public volatile long mAccountId = -1; 423f52afae9424fe41071cc34a8d6cbcb82b992a411Makoto Onuki public volatile long mMailboxId = -1; 42403cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank public volatile boolean mCalledSendPendingMessages; 425f52afae9424fe41071cc34a8d6cbcb82b992a411Makoto Onuki public volatile boolean mCalledUpdateMailbox; 426f52afae9424fe41071cc34a8d6cbcb82b992a411Makoto Onuki public volatile boolean mCalledUpdateMailboxList; 427a796fbab0237c094aa943de68f85d201dd22503bMakoto Onuki public volatile boolean mCalledLoadMoreMessages; 428f52afae9424fe41071cc34a8d6cbcb82b992a411Makoto Onuki public volatile Result mListener; 42921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 430c184f36c2df16431693d7709e28ded593efc3da7Marc Blank protected MockController(Context context) { 431c184f36c2df16431693d7709e28ded593efc3da7Marc Blank super(context); 43221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki } 43321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 43421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki public void reset() { 43521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mAccountId = -1; 43621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mMailboxId = -1; 43703cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank mCalledSendPendingMessages = false; 43821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mCalledUpdateMailbox = false; 43921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mCalledUpdateMailboxList = false; 44021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki } 44121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 44221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki @Override 44321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki public void sendPendingMessages(long accountId) { 44403cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank mCalledSendPendingMessages = true; 44521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mAccountId = accountId; 44621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki } 44721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 44821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki @Override 449cbdd9f78b2605e87e45e4f6761b0a8c444a8cd4cMarc Blank public void updateMailbox(long accountId, long mailboxId, boolean userRequest) { 45021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mCalledUpdateMailbox = true; 45121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mAccountId = accountId; 45221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mMailboxId = mailboxId; 45321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki } 45421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 45521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki @Override 45621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki public void updateMailboxList(long accountId) { 45721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mCalledUpdateMailboxList = true; 45821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mAccountId = accountId; 45921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki } 46021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 46121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki @Override 462a796fbab0237c094aa943de68f85d201dd22503bMakoto Onuki public void loadMoreMessages(long mailboxId) { 463a796fbab0237c094aa943de68f85d201dd22503bMakoto Onuki mCalledLoadMoreMessages = true; 464a796fbab0237c094aa943de68f85d201dd22503bMakoto Onuki mAccountId = -1; 465a796fbab0237c094aa943de68f85d201dd22503bMakoto Onuki mMailboxId = mailboxId; 466a796fbab0237c094aa943de68f85d201dd22503bMakoto Onuki } 467a796fbab0237c094aa943de68f85d201dd22503bMakoto Onuki 468a796fbab0237c094aa943de68f85d201dd22503bMakoto Onuki @Override 46921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki public void addResultCallback(Result listener) { 47021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki Assert.assertTrue(mListener == null); 47121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mListener = listener; 47202a750dd6478689612d2c49a552c229919bd9553Makoto Onuki 47302a750dd6478689612d2c49a552c229919bd9553Makoto Onuki // Let it call listener.setRegistered(). Otherwise callbacks won't fire. 47402a750dd6478689612d2c49a552c229919bd9553Makoto Onuki super.addResultCallback(listener); 47521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki } 47621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki } 47721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 47821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki private static class RefreshListener implements RefreshManager.Listener { 47921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki public long mAccountId = -1; 48021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki public long mMailboxId = -1; 48121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki public String mMessage; 48221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki public boolean mCalledOnConnectionError; 48321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki public boolean mCalledOnRefreshStatusChanged; 48421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 48521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki public void reset() { 48621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mAccountId = -1; 48721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mMailboxId = -1; 48821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mMessage = null; 48921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mCalledOnConnectionError = false; 49021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mCalledOnRefreshStatusChanged = false; 49121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki } 49221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 49321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki @Override 49421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki public void onRefreshStatusChanged(long accountId, long mailboxId) { 49521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mAccountId = accountId; 49621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mMailboxId = mailboxId; 49721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mCalledOnRefreshStatusChanged = true; 49821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki } 49921efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki 50021efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki @Override 50121efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki public void onMessagingError(long accountId, long mailboxId, String message) { 50221efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mAccountId = accountId; 50321efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mMailboxId = mailboxId; 50421efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mMessage = message; 50521efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki mCalledOnConnectionError = true; 50621efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki } 50721efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki } 50821efedb67fdfff208cef3a18804771fd1d1fff30Makoto Onuki} 509