Home | History | Annotate | Download | only in setup
      1 /*
      2  * Copyright (C) 2009 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.email.activity.setup;
     18 
     19 import android.content.Context;
     20 import android.content.Intent;
     21 import android.test.ActivityInstrumentationTestCase2;
     22 import android.test.suitebuilder.annotation.MediumTest;
     23 import android.test.suitebuilder.annotation.Suppress;
     24 import android.view.View;
     25 import android.widget.CheckBox;
     26 import android.widget.Spinner;
     27 import android.widget.SpinnerAdapter;
     28 
     29 import com.android.email.R;
     30 import com.android.email.setup.AuthenticatorSetupIntentHelper;
     31 import com.android.emailcommon.provider.Account;
     32 import com.android.emailcommon.provider.HostAuth;
     33 
     34 import java.net.URISyntaxException;
     35 
     36 /**
     37  * Tests of basic UI logic in the AccountSetupOptions screen.
     38  * You can run this entire test case with:
     39  *   runtest -c com.android.email.activity.setup.AccountSetupOptionsTests email
     40  */
     41 @Suppress
     42 @MediumTest
     43 public class AccountSetupOptionsTests
     44         extends ActivityInstrumentationTestCase2<AccountSetupFinal> {
     45 
     46     private AccountSetupFinal mActivity;
     47     private Spinner mCheckFrequencyView;
     48     private CheckBox mBackgroundAttachmentsView;
     49 
     50     public AccountSetupOptionsTests() {
     51         super(AccountSetupFinal.class);
     52     }
     53 
     54     /**
     55      * Test that POP accounts aren't displayed with a push option
     56      */
     57     public void testPushOptionPOP()
     58             throws URISyntaxException {
     59         Intent i = getTestIntent("Name", "pop3://user:password (at) server.com");
     60         this.setActivityIntent(i);
     61 
     62         getActivityAndFields();
     63 
     64         boolean hasPush = frequencySpinnerHasValue(Account.CHECK_INTERVAL_PUSH);
     65         assertFalse(hasPush);
     66     }
     67 
     68     /**
     69      * Test that IMAP accounts aren't displayed with a push option
     70      */
     71     public void testPushOptionIMAP()
     72             throws URISyntaxException {
     73         Intent i = getTestIntent("Name", "imap://user:password (at) server.com");
     74         this.setActivityIntent(i);
     75 
     76         getActivityAndFields();
     77 
     78         boolean hasPush = frequencySpinnerHasValue(Account.CHECK_INTERVAL_PUSH);
     79         assertFalse(hasPush);
     80     }
     81 
     82     /**
     83      * Test that EAS accounts are displayed with a push option
     84      */
     85     public void testPushOptionEAS()
     86             throws URISyntaxException {
     87         Intent i = getTestIntent("Name", "eas://user:password (at) server.com");
     88         this.setActivityIntent(i);
     89 
     90         getActivityAndFields();
     91 
     92         boolean hasPush = frequencySpinnerHasValue(Account.CHECK_INTERVAL_PUSH);
     93         assertTrue(hasPush);
     94     }
     95 
     96     /**
     97      * Test that POP3 accounts don't have a "background attachments" checkbox
     98      */
     99     public void testBackgroundAttachmentsPop()
    100             throws URISyntaxException {
    101         checkBackgroundAttachments("pop3://user:password (at) server.com", false);
    102     }
    103 
    104     /**
    105      * Test that IMAP accounts have a "background attachments" checkbox
    106      */
    107     public void testBackgroundAttachmentsImap()
    108             throws URISyntaxException {
    109         checkBackgroundAttachments("imap://user:password (at) server.com", true);
    110     }
    111 
    112     /**
    113      * Test that EAS accounts have a "background attachments" checkbox
    114      */
    115     public void testBackgroundAttachmentsEas()
    116             throws URISyntaxException {
    117         checkBackgroundAttachments("eas://user:password (at) server.com", true);
    118     }
    119 
    120     /**
    121      * Common code to check that the "background attachments" checkbox is shown/hidden properly
    122      */
    123     private void checkBackgroundAttachments(String storeUri, boolean expectVisible)
    124             throws URISyntaxException {
    125         Intent i = getTestIntent("Name", storeUri);
    126         this.setActivityIntent(i);
    127         getActivityAndFields();
    128 
    129         boolean isNull = mBackgroundAttachmentsView == null;
    130         boolean isVisible = !isNull && (mBackgroundAttachmentsView.getVisibility() == View.VISIBLE);
    131 
    132         if (!expectVisible) {
    133             assertTrue(!isVisible);
    134         } else {
    135             assertTrue(!isNull);
    136             assertTrue(isVisible);
    137         }
    138     }
    139 
    140     /**
    141      * Get the activity (which causes it to be started, using our intent) and get the UI fields
    142      */
    143     private void getActivityAndFields() {
    144         mActivity = getActivity();
    145         mCheckFrequencyView = (Spinner) mActivity.findViewById(R.id.account_check_frequency);
    146         mBackgroundAttachmentsView = (CheckBox) mActivity.findViewById(
    147                 R.id.account_background_attachments);
    148     }
    149 
    150     /**
    151      * Test the frequency values list for a particular value
    152      */
    153     private boolean frequencySpinnerHasValue(int value) {
    154         SpinnerAdapter sa = mCheckFrequencyView.getAdapter();
    155 
    156         for (int i = 0; i < sa.getCount(); ++i) {
    157             SpinnerOption so = (SpinnerOption) sa.getItem(i);
    158             if (so != null && ((Integer)so.value) == value) {
    159                 return true;
    160             }
    161         }
    162         return false;
    163     }
    164 
    165     /**
    166      * Create an intent with the Account in it
    167      */
    168     private Intent getTestIntent(String name, String storeUri)
    169             throws URISyntaxException {
    170         final Account account = new Account();
    171         account.setSenderName(name);
    172         final Context context = getInstrumentation().getTargetContext();
    173         final HostAuth auth = account.getOrCreateHostAuthRecv(context);
    174         auth.setHostAuthFromString(storeUri);
    175         final SetupDataFragment setupDataFragment =
    176                 new SetupDataFragment();
    177         setupDataFragment.setFlowMode(AuthenticatorSetupIntentHelper.FLOW_MODE_NORMAL);
    178         setupDataFragment.setAccount(account);
    179         final Intent i = new Intent(AccountSetupFinal.ACTION_JUMP_TO_OPTIONS);
    180         i.putExtra(SetupDataFragment.EXTRA_SETUP_DATA, setupDataFragment);
    181         return i;
    182     }
    183 
    184 }
    185