128010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler/* 228010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler * Copyright (C) 2009 The Android Open Source Project 328010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler * 428010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler * Licensed under the Apache License, Version 2.0 (the "License"); 528010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler * you may not use this file except in compliance with the License. 628010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler * You may obtain a copy of the License at 728010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler * 828010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler * http://www.apache.org/licenses/LICENSE-2.0 928010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler * 1028010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler * Unless required by applicable law or agreed to in writing, software 1128010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler * distributed under the License is distributed on an "AS IS" BASIS, 1228010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1328010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler * See the License for the specific language governing permissions and 1428010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler * limitations under the License. 1528010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler */ 1628010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler 1728010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadlerpackage com.android.email.activity.setup; 1828010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler 19040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedyimport android.content.Context; 2028010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadlerimport android.content.Intent; 2128010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadlerimport android.test.ActivityInstrumentationTestCase2; 2228010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadlerimport android.test.suitebuilder.annotation.MediumTest; 23946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadlerimport android.view.View; 24946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadlerimport android.widget.CheckBox; 2528010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadlerimport android.widget.Spinner; 2628010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadlerimport android.widget.SpinnerAdapter; 2728010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler 280b8e04c84def3a06ef45126b48efc485fa0a7628Marc Blankimport com.android.email.R; 290b8e04c84def3a06ef45126b48efc485fa0a7628Marc Blankimport com.android.emailcommon.provider.Account; 300b8e04c84def3a06ef45126b48efc485fa0a7628Marc Blankimport com.android.emailcommon.provider.HostAuth; 310b8e04c84def3a06ef45126b48efc485fa0a7628Marc Blank 32040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedyimport java.net.URISyntaxException; 33040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 3428010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler/** 3528010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler * Tests of basic UI logic in the AccountSetupOptions screen. 36e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank * You can run this entire test case with: 37e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank * runtest -c com.android.email.activity.setup.AccountSetupOptionsTests email 3828010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler */ 3928010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler@MediumTest 40040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedypublic class AccountSetupOptionsTests 4128010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler extends ActivityInstrumentationTestCase2<AccountSetupOptions> { 4228010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler 4328010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler private AccountSetupOptions mActivity; 4428010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler private Spinner mCheckFrequencyView; 45946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler private CheckBox mBackgroundAttachmentsView; 46040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 4728010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler public AccountSetupOptionsTests() { 4883457b0235b8a13e2d885d5b7550784ad470bb9cMakoto Onuki super(AccountSetupOptions.class); 4928010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler } 5028010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler 5128010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler /** 5228010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler * Test that POP accounts aren't displayed with a push option 5328010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler */ 54040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy public void testPushOptionPOP() 55040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy throws URISyntaxException { 5628010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler Intent i = getTestIntent("Name", "pop3://user:password@server.com"); 5728010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler this.setActivityIntent(i); 58040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 5928010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler getActivityAndFields(); 60040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 61f5418f1f93b02e7fab9f15eb201800b65510998eMarc Blank boolean hasPush = frequencySpinnerHasValue(Account.CHECK_INTERVAL_PUSH); 6228010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler assertFalse(hasPush); 6328010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler } 64040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 6528010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler /** 6628010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler * Test that IMAP accounts aren't displayed with a push option 6728010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler */ 68040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy public void testPushOptionIMAP() 69040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy throws URISyntaxException { 7028010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler Intent i = getTestIntent("Name", "imap://user:password@server.com"); 7128010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler this.setActivityIntent(i); 72040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 7328010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler getActivityAndFields(); 74040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 75f5418f1f93b02e7fab9f15eb201800b65510998eMarc Blank boolean hasPush = frequencySpinnerHasValue(Account.CHECK_INTERVAL_PUSH); 7628010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler assertFalse(hasPush); 7728010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler } 78040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 7928010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler /** 8028010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler * Test that EAS accounts are displayed with a push option 8128010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler */ 82040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy public void testPushOptionEAS() 83040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy throws URISyntaxException { 8428010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler Intent i = getTestIntent("Name", "eas://user:password@server.com"); 8528010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler this.setActivityIntent(i); 86040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 8728010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler getActivityAndFields(); 88040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 89f5418f1f93b02e7fab9f15eb201800b65510998eMarc Blank boolean hasPush = frequencySpinnerHasValue(Account.CHECK_INTERVAL_PUSH); 9028010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler assertTrue(hasPush); 9128010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler } 92946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler 93946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler /** 94946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler * Test that POP3 accounts don't have a "background attachments" checkbox 95946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler */ 96040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy public void testBackgroundAttachmentsPop() 97040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy throws URISyntaxException { 98946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler checkBackgroundAttachments("pop3://user:password@server.com", false); 99946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler } 100946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler 101946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler /** 102946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler * Test that IMAP accounts have a "background attachments" checkbox 103946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler */ 104040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy public void testBackgroundAttachmentsImap() 105040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy throws URISyntaxException { 106946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler checkBackgroundAttachments("imap://user:password@server.com", true); 107946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler } 108946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler 109946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler /** 110946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler * Test that EAS accounts have a "background attachments" checkbox 111946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler */ 112040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy public void testBackgroundAttachmentsEas() 113040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy throws URISyntaxException { 114946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler checkBackgroundAttachments("eas://user:password@server.com", true); 115946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler } 116946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler 117946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler /** 118040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy * Common code to check that the "background attachments" checkbox is shown/hidden properly 119946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler */ 120040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy private void checkBackgroundAttachments(String storeUri, boolean expectVisible) 121040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy throws URISyntaxException { 122946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler Intent i = getTestIntent("Name", storeUri); 123946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler this.setActivityIntent(i); 124946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler getActivityAndFields(); 125946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler 126946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler boolean isNull = mBackgroundAttachmentsView == null; 127946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler boolean isVisible = !isNull && (mBackgroundAttachmentsView.getVisibility() == View.VISIBLE); 128946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler 129946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler if (!expectVisible) { 130946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler assertTrue(!isVisible); 131946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler } else { 132946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler assertTrue(!isNull); 133946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler assertTrue(isVisible); 134946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler } 135946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler } 136946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler 13728010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler /** 13828010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler * Get the activity (which causes it to be started, using our intent) and get the UI fields 13928010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler */ 14028010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler private void getActivityAndFields() { 14128010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler mActivity = getActivity(); 14228010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler mCheckFrequencyView = (Spinner) mActivity.findViewById(R.id.account_check_frequency); 143946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler mBackgroundAttachmentsView = (CheckBox) mActivity.findViewById( 144946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler R.id.account_background_attachments); 14528010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler } 146040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 14728010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler /** 14828010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler * Test the frequency values list for a particular value 14928010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler */ 15028010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler private boolean frequencySpinnerHasValue(int value) { 15128010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler SpinnerAdapter sa = mCheckFrequencyView.getAdapter(); 15228010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler 15328010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler for (int i = 0; i < sa.getCount(); ++i) { 15428010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler SpinnerOption so = (SpinnerOption) sa.getItem(i); 15528010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler if (so != null && ((Integer)so.value).intValue() == value) { 15628010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler return true; 15728010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler } 15828010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler } 15928010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler return false; 16028010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler } 161040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 16228010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler /** 16328010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler * Create an intent with the Account in it 16428010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler */ 165040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy private Intent getTestIntent(String name, String storeUri) 166040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy throws URISyntaxException { 167f5418f1f93b02e7fab9f15eb201800b65510998eMarc Blank Account account = new Account(); 1689e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler account.setSenderName(name); 169040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy Context context = getInstrumentation().getTargetContext(); 170040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy HostAuth auth = account.getOrCreateHostAuthRecv(context); 171313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo HostAuth.setHostAuthFromString(auth, storeUri); 172e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank SetupData.init(SetupData.FLOW_MODE_NORMAL, account); 173e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank return new Intent(Intent.ACTION_MAIN); 17428010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler } 175040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 17628010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler} 177