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 static com.google.common.truth.Truth.assertThat; 19 20 import android.app.Fragment; 21 import android.app.Instrumentation; 22 import android.content.Context; 23 import android.content.Intent; 24 import android.support.v7.preference.PreferenceManager; 25 import android.support.test.InstrumentationRegistry; 26 import android.support.test.runner.AndroidJUnit4; 27 import android.support.test.uiautomator.UiDevice; 28 import android.util.Pair; 29 import android.view.Surface; 30 import android.view.View; 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 41 import org.junit.After; 42 import org.junit.Before; 43 import org.junit.Test; 44 import org.junit.runner.RunWith; 45 46 /** Unit tests for {@link ViewInfoActivity}. */ 47 @RunWith(AndroidJUnit4.class) 48 public class ViewInfoActivityTest { 49 private Instrumentation mInstrumentation; 50 private Context mTargetContext; 51 private UiDevice mDevice; 52 private int mInitialRotation; 53 private ViewInfoActivity mActivity; 54 55 @Before setUp()56 public void setUp() { 57 mInstrumentation = InstrumentationRegistry.getInstrumentation(); 58 mTargetContext = mInstrumentation.getTargetContext(); 59 mDevice = UiDevice.getInstance(mInstrumentation); 60 mInitialRotation = mDevice.getDisplayRotation(); 61 } 62 63 @After tearDown()64 public void tearDown() { 65 // Restore orientation prior to starting test. 66 try { 67 switch (mInitialRotation) { 68 case Surface.ROTATION_90: 69 mDevice.setOrientationRight(); 70 break; 71 case Surface.ROTATION_270: 72 mDevice.setOrientationLeft(); 73 break; 74 default: 75 mDevice.setOrientationNatural(); 76 break; 77 } 78 } catch (Exception e) { 79 // Squelch and move along. 80 } 81 PreferenceManager.getDefaultSharedPreferences(mTargetContext).edit().clear().commit(); 82 } 83 84 @Test testInitialState()85 public void testInitialState() { 86 ViewInfoActivity activity = startViewInfoActivity(); 87 88 assertThat(activity.getFragments()).isEmpty(); 89 assertThat(activity.findViewById(R.id.name_and_dob_linear_layout).getVisibility()) 90 .isEqualTo(View.GONE); 91 assertThat(activity.getTabLayout().getVisibility()).isEqualTo(View.GONE); 92 93 ViewFlipper viewFlipper = (ViewFlipper) activity.findViewById(R.id.view_flipper); 94 int noInfoIndex = viewFlipper.indexOfChild(activity.findViewById(R.id.no_info)); 95 assertThat(viewFlipper.getDisplayedChild()).isEqualTo(noInfoIndex); 96 } 97 98 @Test testNameSet()99 public void testNameSet() { 100 final String name = "John"; 101 PreferenceManager.getDefaultSharedPreferences(mTargetContext) 102 .edit().putString(PreferenceKeys.KEY_NAME, name).commit(); 103 104 ViewInfoActivity activity = startViewInfoActivity(); 105 106 assertThat(activity.getFragments()).isEmpty(); 107 assertThat(activity.getTabLayout().getVisibility()).isEqualTo(View.GONE); 108 assertThat(activity.findViewById(R.id.no_info).getVisibility()) 109 .isEqualTo(View.VISIBLE); 110 111 ViewFlipper viewFlipper = (ViewFlipper) activity.findViewById(R.id.view_flipper); 112 int noInfoIndex = viewFlipper.indexOfChild(activity.findViewById(R.id.no_info)); 113 assertThat(viewFlipper.getDisplayedChild()).isEqualTo(noInfoIndex); 114 115 TextView personalCardLargeItem = (TextView) activity.findViewById(R.id.personal_card_large); 116 assertThat(personalCardLargeItem.getVisibility()).isEqualTo(View.VISIBLE); 117 assertThat(personalCardLargeItem.getText()).isEqualTo(name); 118 } 119 120 @Test testMedicalInfoSet()121 public void testMedicalInfoSet() { 122 final String allergies = "Peanuts"; 123 PreferenceManager.getDefaultSharedPreferences(mTargetContext) 124 .edit().putString(PreferenceKeys.KEY_ALLERGIES, allergies).commit(); 125 126 ViewInfoActivity activity = startViewInfoActivity(); 127 128 assertThat(activity.getTabLayout().getVisibility()).isEqualTo(View.GONE); 129 ViewFlipper viewFlipper = (ViewFlipper) activity.findViewById(R.id.view_flipper); 130 int tabsIndex = viewFlipper.indexOfChild(activity.findViewById(R.id.tabs)); 131 assertThat(viewFlipper.getDisplayedChild()).isEqualTo(tabsIndex); 132 133 ArrayList<Pair<String, Fragment>> fragments = activity.getFragments(); 134 assertThat(fragments).hasSize(1); 135 ViewEmergencyInfoFragment viewEmergencyInfoFragment = 136 (ViewEmergencyInfoFragment) fragments.get(0).second; 137 assertThat(viewEmergencyInfoFragment).isNotNull(); 138 } 139 140 @Test testEmergencyContactsSet()141 public void testEmergencyContactsSet() { 142 final String emergencyContact = 143 ContactTestUtils.createContact(mTargetContext.getContentResolver(), 144 "John", "123").toString(); 145 PreferenceManager.getDefaultSharedPreferences(mTargetContext) 146 .edit().putString(PreferenceKeys.KEY_EMERGENCY_CONTACTS, emergencyContact).commit(); 147 148 ViewInfoActivity activity = startViewInfoActivity(); 149 150 ViewFlipper viewFlipper = (ViewFlipper) activity.findViewById(R.id.view_flipper); 151 int tabsIndex = viewFlipper.indexOfChild(activity.findViewById(R.id.tabs)); 152 assertThat(viewFlipper.getDisplayedChild()).isEqualTo(tabsIndex); 153 154 ArrayList<Pair<String, Fragment>> fragments = activity.getFragments(); 155 assertThat(fragments).hasSize(1); 156 ViewEmergencyContactsFragment viewEmergencyContactsFragment = 157 (ViewEmergencyContactsFragment) fragments.get(0).second; 158 assertThat(viewEmergencyContactsFragment).isNotNull(); 159 160 assertThat( 161 ContactTestUtils.deleteContact(mTargetContext.getContentResolver(), "John", "123")) 162 .isTrue(); 163 } 164 165 @Test testMedicalInfoAndEmergencyContactsSet()166 public void testMedicalInfoAndEmergencyContactsSet() { 167 final String emergencyContact = 168 ContactTestUtils.createContact(mTargetContext.getContentResolver(), 169 "John", "123").toString(); 170 PreferenceManager.getDefaultSharedPreferences(mTargetContext) 171 .edit().putString(PreferenceKeys.KEY_EMERGENCY_CONTACTS, emergencyContact).commit(); 172 final String allergies = "Peanuts"; 173 PreferenceManager.getDefaultSharedPreferences(mTargetContext) 174 .edit().putString(PreferenceKeys.KEY_ALLERGIES, allergies).commit(); 175 176 ViewInfoActivity activity = startViewInfoActivity(); 177 178 ViewFlipper viewFlipper = (ViewFlipper) activity.findViewById(R.id.view_flipper); 179 int tabsIndex = viewFlipper.indexOfChild(activity.findViewById(R.id.tabs)); 180 assertThat(viewFlipper.getDisplayedChild()).isEqualTo(tabsIndex); 181 182 ArrayList<Pair<String, Fragment>> fragments = activity.getFragments(); 183 assertThat(fragments).hasSize(2); 184 ViewEmergencyInfoFragment viewEmergencyInfoFragment = 185 (ViewEmergencyInfoFragment) fragments.get(0).second; 186 assertThat(viewEmergencyInfoFragment).isNotNull(); 187 ViewEmergencyContactsFragment viewEmergencyContactsFragment = 188 (ViewEmergencyContactsFragment) fragments.get(1).second; 189 assertThat(viewEmergencyContactsFragment).isNotNull(); 190 191 assertThat( 192 ContactTestUtils.deleteContact(mTargetContext.getContentResolver(), "John", "123")) 193 .isTrue(); 194 } 195 196 @Test testCanGoToEditInfoActivityFromMenu()197 public void testCanGoToEditInfoActivityFromMenu() { 198 ViewInfoActivity activity = startViewInfoActivity(); 199 200 Instrumentation.ActivityMonitor activityMonitor = 201 mInstrumentation.addMonitor(EditInfoActivity.class.getName(), 202 null /* result */, false /* block */); 203 204 activity.getMenu().performIdentifierAction(R.id.action_edit, 0 /* flags */); 205 206 EditInfoActivity editInfoActivity = (EditInfoActivity) 207 mInstrumentation.waitForMonitorWithTimeout(activityMonitor, 1000 /* timeOut */); 208 assertThat(editInfoActivity).isNotNull(); 209 assertThat(mInstrumentation.checkMonitorHit(activityMonitor, 1 /* minHits */)).isTrue(); 210 editInfoActivity.finish(); 211 } 212 213 @Test testRotate_shouldNotCrash()214 public void testRotate_shouldNotCrash() throws Exception { 215 ViewInfoActivity activity = startViewInfoActivity(); 216 217 // Rotate the device. 218 mDevice.setOrientationLeft(); 219 mDevice.setOrientationNatural(); 220 mDevice.setOrientationRight(); 221 } 222 startViewInfoActivity()223 private ViewInfoActivity startViewInfoActivity() { 224 final Intent viewActivityIntent = new Intent(mTargetContext, ViewInfoActivity.class); 225 return (ViewInfoActivity) mInstrumentation.startActivitySync(viewActivityIntent); 226 } 227 } 228