/* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.emergency.view; import static com.google.common.truth.Truth.assertThat; import android.app.Instrumentation; import android.content.Context; import android.content.Intent; import android.support.test.uiautomator.UiDevice; import android.util.Pair; import android.view.Surface; import android.view.View; import android.widget.TextView; import android.widget.ViewFlipper; import androidx.fragment.app.Fragment; import androidx.preference.PreferenceManager; import androidx.test.InstrumentationRegistry; import androidx.test.runner.AndroidJUnit4; import com.android.emergency.ContactTestUtils; import com.android.emergency.PreferenceKeys; import com.android.emergency.R; import com.android.emergency.edit.EditInfoActivity; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import java.util.ArrayList; /** Unit tests for {@link ViewInfoActivity}. */ @RunWith(AndroidJUnit4.class) public class ViewInfoActivityTest { private Instrumentation mInstrumentation; private Context mTargetContext; private UiDevice mDevice; private int mInitialRotation; private ViewInfoActivity mActivity; @Before public void setUp() { mInstrumentation = InstrumentationRegistry.getInstrumentation(); mTargetContext = mInstrumentation.getTargetContext(); mDevice = UiDevice.getInstance(mInstrumentation); mInitialRotation = mDevice.getDisplayRotation(); } @After public void tearDown() { // Restore orientation prior to starting test. try { switch (mInitialRotation) { case Surface.ROTATION_90: mDevice.setOrientationRight(); break; case Surface.ROTATION_270: mDevice.setOrientationLeft(); break; default: mDevice.setOrientationNatural(); break; } } catch (Exception e) { // Squelch and move along. } PreferenceManager.getDefaultSharedPreferences(mTargetContext).edit().clear().commit(); } @Test public void testInitialState() { ViewInfoActivity activity = startViewInfoActivity(); assertThat(activity.getFragments()).isEmpty(); assertThat(activity.findViewById(R.id.name_and_dob_linear_layout).getVisibility()) .isEqualTo(View.GONE); assertThat(activity.getTabLayout().getVisibility()).isEqualTo(View.GONE); ViewFlipper viewFlipper = (ViewFlipper) activity.findViewById(R.id.view_flipper); int noInfoIndex = viewFlipper.indexOfChild(activity.findViewById(R.id.no_info)); assertThat(viewFlipper.getDisplayedChild()).isEqualTo(noInfoIndex); } @Test public void testNameSet() { final String name = "John"; PreferenceManager.getDefaultSharedPreferences(mTargetContext) .edit().putString(PreferenceKeys.KEY_NAME, name).commit(); ViewInfoActivity activity = startViewInfoActivity(); assertThat(activity.getFragments()).isEmpty(); assertThat(activity.getTabLayout().getVisibility()).isEqualTo(View.GONE); assertThat(activity.findViewById(R.id.no_info).getVisibility()) .isEqualTo(View.VISIBLE); ViewFlipper viewFlipper = (ViewFlipper) activity.findViewById(R.id.view_flipper); int noInfoIndex = viewFlipper.indexOfChild(activity.findViewById(R.id.no_info)); assertThat(viewFlipper.getDisplayedChild()).isEqualTo(noInfoIndex); TextView personalCardLargeItem = (TextView) activity.findViewById(R.id.personal_card_large); assertThat(personalCardLargeItem.getVisibility()).isEqualTo(View.VISIBLE); assertThat(personalCardLargeItem.getText()).isEqualTo(name); } @Test public void testMedicalInfoSet() { final String allergies = "Peanuts"; PreferenceManager.getDefaultSharedPreferences(mTargetContext) .edit().putString(PreferenceKeys.KEY_ALLERGIES, allergies).commit(); ViewInfoActivity activity = startViewInfoActivity(); assertThat(activity.getTabLayout().getVisibility()).isEqualTo(View.GONE); ViewFlipper viewFlipper = (ViewFlipper) activity.findViewById(R.id.view_flipper); int tabsIndex = viewFlipper.indexOfChild(activity.findViewById(R.id.tabs)); assertThat(viewFlipper.getDisplayedChild()).isEqualTo(tabsIndex); ArrayList> fragments = activity.getFragments(); assertThat(fragments).hasSize(1); ViewEmergencyInfoFragment viewEmergencyInfoFragment = (ViewEmergencyInfoFragment) fragments.get(0).second; assertThat(viewEmergencyInfoFragment).isNotNull(); } @Test public void testEmergencyContactsSet() { final String emergencyContact = ContactTestUtils.createContact(mTargetContext.getContentResolver(), "John", "123").toString(); PreferenceManager.getDefaultSharedPreferences(mTargetContext) .edit().putString(PreferenceKeys.KEY_EMERGENCY_CONTACTS, emergencyContact).commit(); ViewInfoActivity activity = startViewInfoActivity(); ViewFlipper viewFlipper = (ViewFlipper) activity.findViewById(R.id.view_flipper); int tabsIndex = viewFlipper.indexOfChild(activity.findViewById(R.id.tabs)); assertThat(viewFlipper.getDisplayedChild()).isEqualTo(tabsIndex); ArrayList> fragments = activity.getFragments(); assertThat(fragments).hasSize(1); ViewEmergencyContactsFragment viewEmergencyContactsFragment = (ViewEmergencyContactsFragment) fragments.get(0).second; assertThat(viewEmergencyContactsFragment).isNotNull(); assertThat( ContactTestUtils.deleteContact(mTargetContext.getContentResolver(), "John", "123")) .isTrue(); } @Test public void testMedicalInfoAndEmergencyContactsSet() { final String emergencyContact = ContactTestUtils.createContact(mTargetContext.getContentResolver(), "John", "123").toString(); PreferenceManager.getDefaultSharedPreferences(mTargetContext) .edit().putString(PreferenceKeys.KEY_EMERGENCY_CONTACTS, emergencyContact).commit(); final String allergies = "Peanuts"; PreferenceManager.getDefaultSharedPreferences(mTargetContext) .edit().putString(PreferenceKeys.KEY_ALLERGIES, allergies).commit(); ViewInfoActivity activity = startViewInfoActivity(); ViewFlipper viewFlipper = (ViewFlipper) activity.findViewById(R.id.view_flipper); int tabsIndex = viewFlipper.indexOfChild(activity.findViewById(R.id.tabs)); assertThat(viewFlipper.getDisplayedChild()).isEqualTo(tabsIndex); ArrayList> fragments = activity.getFragments(); assertThat(fragments).hasSize(2); ViewEmergencyInfoFragment viewEmergencyInfoFragment = (ViewEmergencyInfoFragment) fragments.get(0).second; assertThat(viewEmergencyInfoFragment).isNotNull(); ViewEmergencyContactsFragment viewEmergencyContactsFragment = (ViewEmergencyContactsFragment) fragments.get(1).second; assertThat(viewEmergencyContactsFragment).isNotNull(); assertThat( ContactTestUtils.deleteContact(mTargetContext.getContentResolver(), "John", "123")) .isTrue(); } @Test public void testCanGoToEditInfoActivityFromMenu() { ViewInfoActivity activity = startViewInfoActivity(); Instrumentation.ActivityMonitor activityMonitor = mInstrumentation.addMonitor(EditInfoActivity.class.getName(), null /* result */, false /* block */); activity.getMenu().performIdentifierAction(R.id.action_edit, 0 /* flags */); EditInfoActivity editInfoActivity = (EditInfoActivity) mInstrumentation.waitForMonitorWithTimeout(activityMonitor, 1000 /* timeOut */); assertThat(editInfoActivity).isNotNull(); assertThat(mInstrumentation.checkMonitorHit(activityMonitor, 1 /* minHits */)).isTrue(); editInfoActivity.finish(); } @Test public void testRotate_shouldNotCrash() throws Exception { ViewInfoActivity activity = startViewInfoActivity(); // Rotate the device. mDevice.setOrientationLeft(); mDevice.setOrientationNatural(); mDevice.setOrientationRight(); } private ViewInfoActivity startViewInfoActivity() { final Intent viewActivityIntent = new Intent(mTargetContext, ViewInfoActivity.class); return (ViewInfoActivity) mInstrumentation.startActivitySync(viewActivityIntent); } }