1ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki/* 2ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * Copyright (C) 2010 The Android Open Source Project 3ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * 4ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * Licensed under the Apache License, Version 2.0 (the "License"); 5ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * you may not use this file except in compliance with the License. 6ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * You may obtain a copy of the License at 7ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * 8ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * http://www.apache.org/licenses/LICENSE-2.0 9ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * 10ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * Unless required by applicable law or agreed to in writing, software 11ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * distributed under the License is distributed on an "AS IS" BASIS, 12ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * See the License for the specific language governing permissions and 14ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * limitations under the License. 15ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki */ 16ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 17ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onukipackage com.android.email.activity; 18ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 196e418aa41a17136be0dddb816d843428a0a1e722Marc Blankimport android.content.Context; 206e418aa41a17136be0dddb816d843428a0a1e722Marc Blankimport android.test.InstrumentationTestCase; 216e418aa41a17136be0dddb816d843428a0a1e722Marc Blankimport android.test.ProviderTestCase2; 226e418aa41a17136be0dddb816d843428a0a1e722Marc Blankimport android.test.suitebuilder.annotation.LargeTest; 236e418aa41a17136be0dddb816d843428a0a1e722Marc Blank 24ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onukiimport com.android.email.Controller; 25b8f31d5490eba7f307ee578426020bff2ee528ecMakoto Onukiimport com.android.email.DBTestHelper; 26ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onukiimport com.android.email.Email; 27ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onukiimport com.android.email.TestUtils; 28c184f36c2df16431693d7709e28ded593efc3da7Marc Blankimport com.android.email.provider.ProviderTestUtils; 292193962ca2b3157e79f731736afa2a0c972e778aMarc Blankimport com.android.emailcommon.mail.MessagingException; 30f5418f1f93b02e7fab9f15eb201800b65510998eMarc Blankimport com.android.emailcommon.provider.Account; 3153ea83ebf91f820692e8fa8e781f5cc982dd94dbBen Komaloimport com.android.emailcommon.provider.Mailbox; 32ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 33ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki/** 34ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * Test case for {@link MailboxFinder}. 35ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * 36ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * We need to use {@link InstrumentationTestCase} so that we can create AsyncTasks on the UI thread 37ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * using {@link InstrumentationTestCase#runTestOnUiThread}. This class also needs an isolated 38ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * context, which is provided by {@link ProviderTestCase2}. We can't derive from two classes, 39ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * so we just copy the code for an isolate context to here. 40ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki */ 41ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki@LargeTest 42ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onukipublic class MailboxFinderTest extends InstrumentationTestCase { 43ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki private static final int TIMEOUT = 10; // in seconds 44ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 45ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki // Test target 46ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki private MailboxFinder mMailboxFinder; 47ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 48b8f31d5490eba7f307ee578426020bff2ee528ecMakoto Onuki // Isolted Context for providers. 49b8f31d5490eba7f307ee578426020bff2ee528ecMakoto Onuki private Context mProviderContext; 50b8f31d5490eba7f307ee578426020bff2ee528ecMakoto Onuki 51ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki // Mock to track callback invocations. 52ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki private MockController mMockController; 53ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki private MockCallback mCallback; 54ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 55ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki private Context getContext() { 56ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki return getInstrumentation().getTargetContext(); 57ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki } 58ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 59ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki @Override 60ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki protected void setUp() throws Exception { 61ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki super.setUp(); 62ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 63b8f31d5490eba7f307ee578426020bff2ee528ecMakoto Onuki mProviderContext = DBTestHelper.ProviderContextSetupHelper.getProviderContext( 64d1ee5b8fa5fe92df1ded5953a9e3f001b38a1ac7Makoto Onuki getInstrumentation().getTargetContext()); 65ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki mCallback = new MockCallback(); 66ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki mMockController = new MockController(getContext()); 67ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki Controller.injectMockControllerForTest(mMockController); 68086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki assertEquals(0, mMockController.getResultCallbacksForTest().size()); 69ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki } 70ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 71ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki @Override 72ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki protected void tearDown() throws Exception { 73ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki super.tearDown(); 74086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki if (mMailboxFinder != null) { 75086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki mMailboxFinder.cancel(); 76086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki 77086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki // MailboxFinder should unregister its listener when closed. 78086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki checkControllerResultRemoved(mMockController); 79086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki } 8003cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank mMockController.cleanupForTest(); 81ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki Controller.injectMockControllerForTest(null); 82ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki } 83ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 84ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki /** 85086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki * Make sure no {@link MailboxFinder.Callback} is left registered to the controller. 86086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki */ 87086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki private static void checkControllerResultRemoved(Controller controller) { 88086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki for (Controller.Result callback : controller.getResultCallbacksForTest()) { 89086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki assertFalse(callback instanceof MailboxFinder.Callback); 90086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki } 91086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki } 92086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki 93086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki /** 94ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * Create an account and returns the ID. 95ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki */ 96ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki private long createAccount(boolean securityHold) { 97ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki Account acct = ProviderTestUtils.setupAccount("acct1", false, mProviderContext); 98ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki if (securityHold) { 99ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki acct.mFlags |= Account.FLAGS_SECURITY_HOLD; 100ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki } 101ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki acct.save(mProviderContext); 102ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki return acct.mId; 103ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki } 104ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 105ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki /** 106ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * Create a mailbox and return the ID. 107ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki */ 108ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki private long createMailbox(long accountId, int mailboxType) { 10953ea83ebf91f820692e8fa8e781f5cc982dd94dbBen Komalo Mailbox box = new Mailbox(); 11022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy box.mServerId = box.mDisplayName = "mailbox"; 111ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki box.mAccountKey = accountId; 112ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki box.mType = mailboxType; 113ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki box.mFlagVisible = true; 114ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki box.mVisibleLimit = Email.VISIBLE_LIMIT_DEFAULT; 115ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki box.save(mProviderContext); 116ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki return box.mId; 117ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki } 118ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 119ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki /** 120ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * Create a {@link MailboxFinder} and kick it. 121ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki */ 122ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki private void createAndStartFinder(final long accountId, final int mailboxType) 123ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki throws Throwable { 124ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki runTestOnUiThread(new Runnable() { 125ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki @Override 126ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki public void run() { 127ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki mMailboxFinder = new MailboxFinder(mProviderContext, accountId, mailboxType, 128ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki mCallback); 129ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki mMailboxFinder.startLookup(); 130086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki assertTrue(mMailboxFinder.isStartedForTest()); 131ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki } 132ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki }); 133ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki } 134ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 135ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki /** 136ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * Wait until any of the {@link MailboxFinder.Callback} method or 137ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * {@link Controller#updateMailboxList} is called. 138ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki */ 139ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki private void waitUntilCallbackCalled() { 140ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki TestUtils.waitUntil("", new TestUtils.Condition() { 141ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki @Override 142ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki public boolean isMet() { 143ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki return mCallback.isAnyMethodCalled() || mMockController.mCalledUpdateMailboxList; 144ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki } 145ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki }, TIMEOUT); 146ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki } 147ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 148ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki /** 149ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * Test: Account is on security hold. 150ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki */ 151ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki public void testSecurityHold() throws Throwable { 152ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki final long accountId = createAccount(true); 153ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 154ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki createAndStartFinder(accountId, Mailbox.TYPE_INBOX); 155ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki waitUntilCallbackCalled(); 156ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 157ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mCallback.mCalledAccountNotFound); 158ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertTrue(mCallback.mCalledAccountSecurityHold); 159ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mCallback.mCalledMailboxFound); 160ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mCallback.mCalledMailboxNotFound); 161ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mMockController.mCalledUpdateMailboxList); 162086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki 163086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki assertTrue(mMailboxFinder.isReallyClosedForTest()); 164ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki } 165ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 166ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki /** 167ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * Test: Account does not exist. 168ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki */ 169ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki public void testAccountNotFound() throws Throwable { 170ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki createAndStartFinder(123456, Mailbox.TYPE_INBOX); // No such account. 171ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki waitUntilCallbackCalled(); 172ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 173ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertTrue(mCallback.mCalledAccountNotFound); 174ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mCallback.mCalledAccountSecurityHold); 175ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mCallback.mCalledMailboxFound); 176ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mCallback.mCalledMailboxNotFound); 177ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mMockController.mCalledUpdateMailboxList); 178086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki 179086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki assertTrue(mMailboxFinder.isReallyClosedForTest()); 180ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki } 181ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 182ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki /** 183ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * Test: Mailbox found 184ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki */ 185ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki public void testMailboxFound() throws Throwable { 186ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki final long accountId = createAccount(false); 187ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki final long mailboxId = createMailbox(accountId, Mailbox.TYPE_INBOX); 188ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 189ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki createAndStartFinder(accountId, Mailbox.TYPE_INBOX); 190ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki waitUntilCallbackCalled(); 191ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 192ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mCallback.mCalledAccountNotFound); 193ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mCallback.mCalledAccountSecurityHold); 194ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertTrue(mCallback.mCalledMailboxFound); 195ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mCallback.mCalledMailboxNotFound); 196ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mMockController.mCalledUpdateMailboxList); 197ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 198ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertEquals(accountId, mCallback.mAccountId); 199ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertEquals(mailboxId, mCallback.mMailboxId); 200086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki 201086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki assertTrue(mMailboxFinder.isReallyClosedForTest()); 202ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki } 203ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 204ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki /** 205086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki * Common initialization for tests that involves network-lookup. 206ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki */ 207086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki private void prepareForNetworkLookupTest(final long accountId) throws Throwable { 208086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki // Look for non-existing mailbox. 209ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki createAndStartFinder(accountId, Mailbox.TYPE_INBOX); 210ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki waitUntilCallbackCalled(); 211ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 212086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki // Mailbox not found, so the finder should try network-looking up. 213ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mCallback.mCalledAccountNotFound); 214ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mCallback.mCalledAccountSecurityHold); 215ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mCallback.mCalledMailboxFound); 216ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mCallback.mCalledMailboxNotFound); 217ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 218ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki // Controller.updateMailboxList() should have been called, with the account id. 219ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertTrue(mMockController.mCalledUpdateMailboxList); 220ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertEquals(accountId, mMockController.mPassedAccountId); 221ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 222ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki mMockController.reset(); 223ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 224086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki assertFalse(mMailboxFinder.isReallyClosedForTest()); // Not closed yet 225086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki } 226086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki 227086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki /** 228086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki * Test: Account exists, but mailbox doesn't -> Get {@link Controller} to update the mailbox 229086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki * list -> mailbox still doesn't exist. 230086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki */ 231086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki public void testMailboxNotFound() throws Throwable { 232086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki final long accountId = createAccount(false); 233086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki 234086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki prepareForNetworkLookupTest(accountId); 235086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki 236ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki // Imitate the mCallback... 237ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki runTestOnUiThread(new Runnable() { 238ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki @Override 239ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki public void run() { 240ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki mMailboxFinder.getControllerResultsForTest().updateMailboxListCallback( 241ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki null, accountId, 100); 242ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki } 243ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki }); 244ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 245ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki // Task should have started, so wait for the response... 246ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki waitUntilCallbackCalled(); 247ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 248ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mCallback.mCalledAccountNotFound); 249ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mCallback.mCalledAccountSecurityHold); 250ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mCallback.mCalledMailboxFound); 251ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertTrue(mCallback.mCalledMailboxNotFound); 252ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mMockController.mCalledUpdateMailboxList); 253086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki 254086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki assertTrue(mMailboxFinder.isReallyClosedForTest()); 255ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki } 256ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 257ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki /** 258ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * Test: Account exists, but mailbox doesn't -> Get {@link Controller} to update the mailbox 259ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * list -> found mailbox this time. 260ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki */ 261ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki public void testMailboxFoundOnNetwork() throws Throwable { 262ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki final long accountId = createAccount(false); 263ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 264086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki prepareForNetworkLookupTest(accountId); 265ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 266ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki // Create mailbox at this point. 267ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki final long mailboxId = createMailbox(accountId, Mailbox.TYPE_INBOX); 268ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 269ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki // Imitate the mCallback... 270ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki runTestOnUiThread(new Runnable() { 271ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki @Override 272ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki public void run() { 273ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki mMailboxFinder.getControllerResultsForTest().updateMailboxListCallback( 274ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki null, accountId, 100); 275ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki } 276ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki }); 277ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 278ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki // Task should have started, so wait for the response... 279ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki waitUntilCallbackCalled(); 280ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 281ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mCallback.mCalledAccountNotFound); 282ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mCallback.mCalledAccountSecurityHold); 283ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertTrue(mCallback.mCalledMailboxFound); 284ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mCallback.mCalledMailboxNotFound); 285ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mMockController.mCalledUpdateMailboxList); 286ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 287ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertEquals(accountId, mCallback.mAccountId); 288ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertEquals(mailboxId, mCallback.mMailboxId); 289086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki 290086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki assertTrue(mMailboxFinder.isReallyClosedForTest()); 291ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki } 292ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 293ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki /** 294ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * Test: Account exists, but mailbox doesn't -> Get {@link Controller} to update the mailbox 295ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * list -> network error. 296ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki */ 297ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki public void testMailboxNotFoundNetworkError() throws Throwable { 298ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki final long accountId = createAccount(false); 299ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 300086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki prepareForNetworkLookupTest(accountId); 301086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki 302086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki // Imitate the mCallback... 303086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki runTestOnUiThread(new Runnable() { 304086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki @Override 305086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki public void run() { 306086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki // network error. 307086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki mMailboxFinder.getControllerResultsForTest().updateMailboxListCallback( 308086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki new MessagingException("Network error"), accountId, 0); 309086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki } 310086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki }); 311ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 312ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mCallback.mCalledAccountNotFound); 313ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mCallback.mCalledAccountSecurityHold); 314ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mCallback.mCalledMailboxFound); 315086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki assertTrue(mCallback.mCalledMailboxNotFound); 316086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki assertFalse(mMockController.mCalledUpdateMailboxList); 317ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 318086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki assertTrue(mMailboxFinder.isReallyClosedForTest()); 319086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki } 320ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 321086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki /** 322086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki * Test: updateMailboxListCallback won't respond to update of a non-target account. 323086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki */ 324086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki public void testUpdateMailboxListCallbackNonTarget() throws Throwable { 325086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki final long accountId = createAccount(false); 326ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 327086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki prepareForNetworkLookupTest(accountId); 328086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki 329086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki // Callback from Controller, but for a different account. 330ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki runTestOnUiThread(new Runnable() { 331ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki @Override 332ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki public void run() { 333086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki long nonTargetAccountId = accountId + 1; 334ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki mMailboxFinder.getControllerResultsForTest().updateMailboxListCallback( 335086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki new MessagingException("Network error"), nonTargetAccountId, 0); 336ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki } 337ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki }); 338ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 339086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki // Nothing happened. 340ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mCallback.mCalledAccountNotFound); 341ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mCallback.mCalledAccountSecurityHold); 342ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mCallback.mCalledMailboxFound); 343086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki assertFalse(mCallback.mCalledMailboxNotFound); 344ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mMockController.mCalledUpdateMailboxList); 345086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki 346086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki assertFalse(mMailboxFinder.isReallyClosedForTest()); // Not closed yet 347ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki } 348ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 349ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki /** 350ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * Test: Mailbox not found (mailbox of different type exists) 351ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki */ 352ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki public void testMailboxNotFound2() throws Throwable { 353ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki final long accountId = createAccount(false); 354ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki final long mailboxId = createMailbox(accountId, Mailbox.TYPE_DRAFTS); 355ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 356ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki createAndStartFinder(accountId, Mailbox.TYPE_INBOX); 357ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki waitUntilCallbackCalled(); 358ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 359ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mCallback.mCalledAccountNotFound); 360ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mCallback.mCalledAccountSecurityHold); 361ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mCallback.mCalledMailboxFound); 362ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertFalse(mCallback.mCalledMailboxNotFound); 363ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki assertTrue(mMockController.mCalledUpdateMailboxList); 364086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki 365086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki assertFalse(mMailboxFinder.isReallyClosedForTest()); // Not closed yet -- network lookup. 366086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki } 367086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki 368086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki /** 369086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki * Test: Call {@link MailboxFinder#startLookup()} twice, which should throw an ISE. 370086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki */ 371086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki public void testRunTwice() throws Throwable { 372086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki final long accountId = createAccount(true); 373086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki 374086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki createAndStartFinder(accountId, Mailbox.TYPE_INBOX); 375086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki try { 376086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki mMailboxFinder.startLookup(); 377086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki fail("Expected exception not thrown"); 378086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki } catch (IllegalStateException ok) { 379086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki } 380086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki } 381086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki 382086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki public void testCancel() throws Throwable { 383086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki final long accountId = createAccount(true); 384086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki 385086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki createAndStartFinder(accountId, Mailbox.TYPE_INBOX); 386086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki mMailboxFinder.cancel(); 387086aac2386a575a0e2c78b1fa8dd8ea13825ae2bMakoto Onuki assertTrue(mMailboxFinder.isReallyClosedForTest()); 388ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki } 389ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 390ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki /** 391ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * A {@link Controller} that remembers if updateMailboxList has been called. 392ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki */ 393ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki private static class MockController extends Controller { 394d1a05e1cc32e31494af7a62e0395631bef3e1107Makoto Onuki public volatile long mPassedAccountId; 395d1a05e1cc32e31494af7a62e0395631bef3e1107Makoto Onuki public volatile boolean mCalledUpdateMailboxList; 396ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 397ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki public void reset() { 398ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki mPassedAccountId = -1; 399ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki mCalledUpdateMailboxList = false; 400ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki } 401ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 402ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki protected MockController(Context context) { 403c184f36c2df16431693d7709e28ded593efc3da7Marc Blank super(context); 404ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki } 405ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 406ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki @Override 407ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki public void updateMailboxList(long accountId) { 408ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki mCalledUpdateMailboxList = true; 409ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki mPassedAccountId = accountId; 410ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki } 411ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki } 412ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 413ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki /** 414ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki * Callback that logs what method is called with what arguments. 415ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki */ 416ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki private static class MockCallback implements MailboxFinder.Callback { 417d1a05e1cc32e31494af7a62e0395631bef3e1107Makoto Onuki public volatile boolean mCalledAccountNotFound; 418d1a05e1cc32e31494af7a62e0395631bef3e1107Makoto Onuki public volatile boolean mCalledAccountSecurityHold; 419d1a05e1cc32e31494af7a62e0395631bef3e1107Makoto Onuki public volatile boolean mCalledMailboxFound; 420d1a05e1cc32e31494af7a62e0395631bef3e1107Makoto Onuki public volatile boolean mCalledMailboxNotFound; 421ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 422d1a05e1cc32e31494af7a62e0395631bef3e1107Makoto Onuki public volatile long mAccountId = -1; 423d1a05e1cc32e31494af7a62e0395631bef3e1107Makoto Onuki public volatile long mMailboxId = -1; 424ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 425ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki public boolean isAnyMethodCalled() { 426ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki return mCalledAccountNotFound || mCalledAccountSecurityHold || mCalledMailboxFound 427ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki || mCalledMailboxNotFound; 428ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki } 429ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 430ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki @Override 431ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki public void onAccountNotFound() { 432ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki mCalledAccountNotFound = true; 433ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki } 434ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 435ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki @Override 436ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki public void onAccountSecurityHold(long accountId) { 437ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki mCalledAccountSecurityHold = true; 438ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki mAccountId = accountId; 439ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki } 440ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 441ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki @Override 442ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki public void onMailboxFound(long accountId, long mailboxId) { 443ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki mCalledMailboxFound = true; 444ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki mAccountId = accountId; 445ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki mMailboxId = mailboxId; 446ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki } 447ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki 448ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki @Override 449ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki public void onMailboxNotFound(long accountId) { 450ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki mCalledMailboxNotFound = true; 451ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki mAccountId = accountId; 452ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki } 453ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki } 454ec15f2356e47d621584cc3fc84c9c02557e0a0dfMakoto Onuki} 455