Home | History | Annotate | Download | only in view
      1 /*
      2  * Copyright (C) 2016 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 package com.android.emergency.view;
     17 
     18 import android.app.Fragment;
     19 import android.app.Instrumentation;
     20 import android.content.ComponentName;
     21 import android.content.Intent;
     22 import android.content.IntentFilter;
     23 import android.content.pm.PackageManager;
     24 import android.preference.PreferenceManager;
     25 import android.test.ActivityInstrumentationTestCase2;
     26 import android.test.suitebuilder.annotation.LargeTest;
     27 import android.util.Pair;
     28 import android.view.KeyEvent;
     29 import android.view.View;
     30 import android.widget.LinearLayout;
     31 import android.widget.TextView;
     32 import android.widget.ViewFlipper;
     33 
     34 import com.android.emergency.ContactTestUtils;
     35 import com.android.emergency.PreferenceKeys;
     36 import com.android.emergency.R;
     37 import com.android.emergency.edit.EditInfoActivity;
     38 
     39 import java.util.ArrayList;
     40 import java.util.Calendar;
     41 
     42 /**
     43  * Tests for {@link ViewInfoActivity}.
     44  */
     45 @LargeTest
     46 public class ViewInfoActivityTest extends ActivityInstrumentationTestCase2<ViewInfoActivity> {
     47     private ArrayList<Pair<String, Fragment>> mFragments;
     48     private LinearLayout mPersonalCard;
     49     private TextView mPersonalCardLargeItem;
     50     private ViewFlipper mViewFlipper;
     51     private int mNoInfoIndex;
     52     private int mTabsIndex;
     53 
     54     public ViewInfoActivityTest() {
     55         super(ViewInfoActivity.class);
     56     }
     57 
     58     @Override
     59     protected void setUp() throws Exception {
     60         super.setUp();
     61         mPersonalCard = (LinearLayout)  getActivity().findViewById(R.id.name_and_dob_linear_layout);
     62         mPersonalCardLargeItem = (TextView)  getActivity().findViewById(R.id.personal_card_large);
     63         mViewFlipper = (ViewFlipper) getActivity().findViewById(R.id.view_flipper);
     64         mNoInfoIndex = mViewFlipper
     65                 .indexOfChild(getActivity().findViewById(R.id.no_info));
     66         mTabsIndex = mViewFlipper.indexOfChild(getActivity().findViewById(R.id.tabs));
     67 
     68         PreferenceManager.getDefaultSharedPreferences(getActivity()).edit().clear().commit();
     69     }
     70 
     71     @Override
     72     protected void tearDown() throws Exception {
     73         PreferenceManager.getDefaultSharedPreferences(getActivity()).edit().clear().commit();
     74         super.tearDown();
     75     }
     76 
     77     public void testInitialState() throws Throwable {
     78         onPause();
     79         onResume();
     80 
     81         mFragments = getActivity().getFragments();
     82         assertEquals(0, mFragments.size());
     83         assertEquals(View.GONE, mPersonalCard.getVisibility());
     84         assertEquals(View.GONE, getActivity().getTabLayout().getVisibility());
     85         assertEquals(mNoInfoIndex, mViewFlipper.getDisplayedChild());
     86     }
     87 
     88     public void testNameSet() throws Throwable {
     89         onPause();
     90 
     91         final String name = "John";
     92         PreferenceManager.getDefaultSharedPreferences(getActivity())
     93                 .edit().putString(PreferenceKeys.KEY_NAME, name).commit();
     94 
     95         onResume();
     96 
     97         mFragments = getActivity().getFragments();
     98         assertEquals(0, mFragments.size());
     99         assertEquals(View.GONE, getActivity().getTabLayout().getVisibility());
    100         assertEquals(View.VISIBLE,
    101                 getActivity().findViewById(R.id.no_info).getVisibility());
    102         assertEquals(mNoInfoIndex, mViewFlipper.getDisplayedChild());
    103         assertEquals(View.VISIBLE, mPersonalCardLargeItem.getVisibility());
    104         assertEquals(name, mPersonalCardLargeItem.getText());
    105     }
    106 
    107     public void testEmergencyInfoSet() throws Throwable {
    108         onPause();
    109 
    110         final String allergies = "Peanuts";
    111         PreferenceManager.getDefaultSharedPreferences(getActivity())
    112                 .edit().putString(PreferenceKeys.KEY_ALLERGIES, allergies).commit();
    113 
    114         onResume();
    115 
    116         mFragments = getActivity().getFragments();
    117         assertEquals(View.GONE, getActivity().getTabLayout().getVisibility());
    118         assertEquals(mTabsIndex, mViewFlipper.getDisplayedChild());
    119         assertEquals(1, mFragments.size());
    120         ViewEmergencyInfoFragment viewEmergencyInfoFragment =
    121                 (ViewEmergencyInfoFragment) mFragments.get(0).second;
    122         assertNotNull(viewEmergencyInfoFragment);
    123     }
    124 
    125     public void testEmergencyContactSet() throws Throwable {
    126         onPause();
    127 
    128         final String emergencyContact =
    129                 ContactTestUtils.createContact(getActivity().getContentResolver(),
    130                         "John", "123").toString();
    131         PreferenceManager.getDefaultSharedPreferences(getActivity())
    132                 .edit().putString(PreferenceKeys.KEY_EMERGENCY_CONTACTS, emergencyContact).commit();
    133 
    134         onResume();
    135 
    136         mFragments = getActivity().getFragments();
    137         assertEquals(mTabsIndex, mViewFlipper.getDisplayedChild());
    138         assertEquals(1, mFragments.size());
    139         assertEquals(View.GONE, getActivity().getTabLayout().getVisibility());
    140         ViewEmergencyContactsFragment viewEmergencyContactsFragment =
    141                 (ViewEmergencyContactsFragment) mFragments.get(0).second;
    142         assertNotNull(viewEmergencyContactsFragment);
    143 
    144         assertTrue(ContactTestUtils.deleteContact(getActivity().getContentResolver(),
    145                 "John", "123"));
    146     }
    147 
    148     public void testInfoAndEmergencyContactsSet() throws Throwable {
    149         onPause();
    150 
    151         final String emergencyContact =
    152                 ContactTestUtils.createContact(getActivity().getContentResolver(),
    153                         "John", "123").toString();
    154         PreferenceManager.getDefaultSharedPreferences(getActivity()).edit()
    155                 .putString(PreferenceKeys.KEY_EMERGENCY_CONTACTS, emergencyContact).commit();
    156 
    157                 final String allergies = "Peanuts";
    158         PreferenceManager.getDefaultSharedPreferences(getActivity())
    159                 .edit().putString(PreferenceKeys.KEY_ALLERGIES, allergies).commit();
    160 
    161         onResume();
    162 
    163         mFragments = getActivity().getFragments();
    164         assertEquals(mTabsIndex, mViewFlipper.getDisplayedChild());
    165         assertEquals(2, mFragments.size());
    166         assertEquals(View.VISIBLE, getActivity().getTabLayout().getVisibility());
    167         ViewEmergencyInfoFragment viewEmergencyInfoFragment =
    168                 (ViewEmergencyInfoFragment) mFragments.get(0).second;
    169         assertNotNull(viewEmergencyInfoFragment);
    170         ViewEmergencyContactsFragment viewEmergencyContactsFragment =
    171                 (ViewEmergencyContactsFragment) mFragments.get(1).second;
    172         assertNotNull(viewEmergencyContactsFragment);
    173 
    174         assertTrue(ContactTestUtils.deleteContact(getActivity().getContentResolver(),
    175                 "John", "123"));
    176     }
    177 
    178     public void testCanGoToEditInfoActivityFromMenu() {
    179         final ViewInfoActivity activity = getActivity();
    180 
    181         Instrumentation.ActivityMonitor activityMonitor =
    182                 getInstrumentation().addMonitor(EditInfoActivity.class.getName(),
    183                         null /* result */, false /* block */);
    184 
    185         getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_MENU);
    186         getInstrumentation().invokeMenuActionSync(activity, R.id.action_edit, 0 /* flags */);
    187 
    188         EditInfoActivity editInfoActivity = (EditInfoActivity)
    189                 getInstrumentation().waitForMonitorWithTimeout(activityMonitor, 1000 /* timeOut */);
    190         assertNotNull(editInfoActivity);
    191         assertEquals(true, getInstrumentation().checkMonitorHit(activityMonitor, 1 /* minHits */));
    192         editInfoActivity.finish();
    193     }
    194 
    195     public void testCanGoToEditInfoActivityFromBroadcast() {
    196         String action = "android.emergency.EDIT_EMERGENCY_CONTACTS";
    197         Instrumentation.ActivityMonitor activityMonitor =
    198                 getInstrumentation().addMonitor(new IntentFilter(action),
    199                         null /* result */, false /* block */);
    200         getActivity().startActivity(new Intent(action));
    201 
    202         getInstrumentation().waitForIdleSync();
    203         assertEquals(true, getInstrumentation().checkMonitorHit(activityMonitor, 1 /* minHits */));
    204 
    205         EditInfoActivity editInfoActivity = (EditInfoActivity)
    206                 getInstrumentation().waitForMonitorWithTimeout(activityMonitor, 1000 /* timeOut */);
    207         assertNotNull(editInfoActivity);
    208         // The contacts tab index is 1
    209         assertEquals(1, editInfoActivity.getSelectedTabPosition());
    210         editInfoActivity.finish();
    211     }
    212 
    213     private void onPause() throws Throwable {
    214         runTestOnUiThread(new Runnable() {
    215             @Override
    216             public void run() {
    217                 getInstrumentation().callActivityOnPause(getActivity());
    218             }
    219         });
    220     }
    221 
    222     private void onResume() throws Throwable {
    223         runTestOnUiThread(new Runnable() {
    224             @Override
    225             public void run() {
    226                 getInstrumentation().callActivityOnResume(getActivity());
    227             }
    228         });
    229         getInstrumentation().waitForIdleSync();
    230     }
    231 }
    232 
    233