diff options
author | Juan Lang <juanlang@google.com> | 2017-06-16 08:38:02 -0700 |
---|---|---|
committer | Juan Lang <juanlang@google.com> | 2017-06-19 10:15:16 -0700 |
commit | e979201f94608dd6817e836a486c5d1d3510d05a (patch) | |
tree | f4c2f961c2532921a30bb76c3e982a090ff74b36 /tests | |
parent | 1df3cdae0d5a05731b2511ac4dc343c3446747a9 (diff) | |
download | EmergencyInfo-e979201f94608dd6817e836a486c5d1d3510d05a.tar.gz |
Rewrite EmergencyContactsPreferenceTest as a unit test.
The instrumentation test runner is deprecated.
Rewriting the tests paves the way to migrating to the support
library, which the new UX relies on.
Bug: 30046624
Test: runtest --path packages/apps/EmergencyInfo/tests
Change-Id: I73b820dc352713768a41e32713b02b4388b80452
Diffstat (limited to 'tests')
2 files changed, 123 insertions, 177 deletions
diff --git a/tests/instrumentation/src/com/android/emergency/preferences/EmergencyContactsPreferenceTest.java b/tests/instrumentation/src/com/android/emergency/preferences/EmergencyContactsPreferenceTest.java deleted file mode 100644 index ac4b1e08..00000000 --- a/tests/instrumentation/src/com/android/emergency/preferences/EmergencyContactsPreferenceTest.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * 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.preferences; - -import static com.google.common.truth.Truth.assertThat; - -import android.app.AlertDialog; -import android.content.ContentResolver; -import android.content.DialogInterface; -import android.net.Uri; -import android.preference.PreferenceFragment; -import android.preference.PreferenceManager; -import android.test.ActivityInstrumentationTestCase2; -import android.test.suitebuilder.annotation.LargeTest; -import android.view.View; - -import com.android.emergency.ContactTestUtils; -import com.android.emergency.PreferenceKeys; -import com.android.emergency.R; -import com.android.emergency.edit.EditInfoActivity; - -import java.util.ArrayList; -import java.util.List; - -/** - * Tests for {@link EmergencyContactsPreference}. - */ -@LargeTest -public class EmergencyContactsPreferenceTest - extends ActivityInstrumentationTestCase2<EditInfoActivity> { - private PreferenceFragment mEditInfoFragment; - private EmergencyContactsPreference mEmergencyContactsPreference; - private ContentResolver mContentResolver; - - public EmergencyContactsPreferenceTest() { - super(EditInfoActivity.class); - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - mEditInfoFragment = getActivity().getFragment(); - - mEmergencyContactsPreference = - (EmergencyContactsPreference) mEditInfoFragment - .findPreference(PreferenceKeys.KEY_EMERGENCY_CONTACTS); - try { - runTestOnUiThread(new Runnable() { - @Override - public void run() { - mEmergencyContactsPreference.setEmergencyContacts(new ArrayList<Uri>()); - } - }); - } catch (Throwable throwable) { - fail("Should not throw exception: " + throwable.getMessage()); - } - - mContentResolver = getActivity().getContentResolver(); - } - - @Override - protected void tearDown() throws Exception { - PreferenceManager.getDefaultSharedPreferences(getActivity()).edit().clear().commit(); - super.tearDown(); - } - - public void testWidgetClick_positiveButton() throws Throwable { - final String name = "Jane"; - final String phoneNumber = "456"; - - final Uri emergencyPhoneUri = - ContactTestUtils.createContact(mContentResolver, name, phoneNumber); - runTestOnUiThread(new Runnable() { - @Override - public void run() { - mEmergencyContactsPreference.addNewEmergencyContact(emergencyPhoneUri); - } - }); - - assertThat(mEmergencyContactsPreference.getEmergencyContacts().size()).isEqualTo(1); - assertThat(mEmergencyContactsPreference.getPreferenceCount()).isEqualTo(1); - ContactPreference contactPreference = (ContactPreference) - mEmergencyContactsPreference.getPreference(0); - - View contactPreferenceView = contactPreference.getView(null, null); - assertThat(contactPreferenceView).isNotNull(); - final View deleteContactWidget = contactPreferenceView.findViewById(R.id.delete_contact); - assertThat(deleteContactWidget.getVisibility()).isEqualTo(View.VISIBLE); - - runTestOnUiThread(new Runnable() { - @Override - public void run() { - deleteContactWidget.performClick(); - } - }); - - getInstrumentation().waitForIdleSync(); - final AlertDialog removeContactDialog = contactPreference.getRemoveContactDialog(); - assertThat(removeContactDialog.isShowing()).isTrue(); - - runTestOnUiThread(new Runnable() { - @Override - public void run() { - removeContactDialog.getButton(DialogInterface.BUTTON_POSITIVE).performClick(); - } - }); - getInstrumentation().waitForIdleSync(); - - assertThat(mEmergencyContactsPreference.getEmergencyContacts()).isEmpty(); - assertThat(mEmergencyContactsPreference.getPreferenceCount()).isEqualTo(0); - - // Clean up the inserted contact - assertThat(ContactTestUtils.deleteContact(mContentResolver, name, phoneNumber)).isTrue(); - } - - public void testWidgetClick_negativeButton() throws Throwable { - final String name = "Jane"; - final String phoneNumber = "456"; - - final Uri emergencyPhoneUri = - ContactTestUtils.createContact(mContentResolver, name, phoneNumber); - runTestOnUiThread(new Runnable() { - @Override - public void run() { - mEmergencyContactsPreference.addNewEmergencyContact(emergencyPhoneUri); - } - }); - - assertThat(mEmergencyContactsPreference.getEmergencyContacts().size()).isEqualTo(1); - assertThat(mEmergencyContactsPreference.getPreferenceCount()).isEqualTo(1); - ContactPreference contactPreference = (ContactPreference) - mEmergencyContactsPreference.getPreference(0); - - View contactPreferenceView = contactPreference.getView(null, null); - assertThat(contactPreferenceView).isNotNull(); - final View deleteContactWidget = contactPreferenceView.findViewById(R.id.delete_contact); - assertThat(deleteContactWidget.getVisibility()).isEqualTo(View.VISIBLE); - - runTestOnUiThread(new Runnable() { - @Override - public void run() { - deleteContactWidget.performClick(); - } - }); - getInstrumentation().waitForIdleSync(); - - getInstrumentation().waitForIdleSync(); - final AlertDialog removeContactDialog = contactPreference.getRemoveContactDialog(); - assertThat(removeContactDialog.isShowing()).isTrue(); - - runTestOnUiThread(new Runnable() { - @Override - public void run() { - removeContactDialog.getButton(DialogInterface.BUTTON_NEGATIVE).performClick(); - } - }); - - assertThat(mEmergencyContactsPreference.getEmergencyContacts().size()).isEqualTo(1); - assertThat(mEmergencyContactsPreference.getPreferenceCount()).isEqualTo(1); - - // Clean up the inserted contact - assertThat(ContactTestUtils.deleteContact(mContentResolver, name, phoneNumber)).isTrue(); - } -} diff --git a/tests/unit/src/com/android/emergency/preferences/EmergencyContactsPreferenceTest.java b/tests/unit/src/com/android/emergency/preferences/EmergencyContactsPreferenceTest.java new file mode 100644 index 00000000..f79964fc --- /dev/null +++ b/tests/unit/src/com/android/emergency/preferences/EmergencyContactsPreferenceTest.java @@ -0,0 +1,123 @@ +/* + * Copyright (C) 2017 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.preferences; + +import static android.support.test.espresso.Espresso.onView; +import static android.support.test.espresso.action.ViewActions.click; +import static android.support.test.espresso.matcher.ViewMatchers.withId; +import static android.support.test.espresso.matcher.ViewMatchers.withText; +import static com.google.common.truth.Truth.assertThat; + +import android.app.Instrumentation; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.os.Looper; +import android.preference.PreferenceManager; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; +import android.view.View; + +import com.android.emergency.ContactTestUtils; +import com.android.emergency.PreferenceKeys; +import com.android.emergency.R; +import com.android.emergency.edit.EditInfoActivity; +import com.android.emergency.edit.EditInfoFragment; + +import org.junit.After; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; + +/** Unit tests for {@link EmergencyContactsPreference}. */ +@RunWith(AndroidJUnit4.class) +public final class EmergencyContactsPreferenceTest { + private static final String NAME = "Jane"; + private static final String PHONE_NUMBER = "456"; + + private Instrumentation mInstrumentation; + private Context mTargetContext; + private EmergencyContactsPreference mPreference; + + @BeforeClass + public static void oneTimeSetup() { + if (Looper.myLooper() == null) { + Looper.prepare(); + } + } + + @Before + public void setUp() { + mInstrumentation = InstrumentationRegistry.getInstrumentation(); + mTargetContext = mInstrumentation.getTargetContext(); + + // In case a previous test crashed or failed, clear any previous shared preference value. + PreferenceManager.getDefaultSharedPreferences(mTargetContext).edit().clear().commit(); + + // Create a contact that'll be used in each unit test. + final Uri contactUri = ContactTestUtils.createContact( + mTargetContext.getContentResolver(), NAME, PHONE_NUMBER); + PreferenceManager.getDefaultSharedPreferences(mTargetContext) + .edit().putString(PreferenceKeys.KEY_EMERGENCY_CONTACTS, contactUri.toString()) + .commit(); + + mPreference = startActivityAndGetEmergencyContactsPreference(); + mPreference.addNewEmergencyContact(contactUri); + } + + @After + public void tearDown() { + // Clean up the inserted contact + assertThat(ContactTestUtils.deleteContact( + mTargetContext.getContentResolver(), NAME, PHONE_NUMBER)).isTrue(); + PreferenceManager.getDefaultSharedPreferences(mTargetContext).edit().clear().commit(); + } + + @Test + public void testWidgetClick_positiveButton() { + assertThat(mPreference.getEmergencyContacts()).hasSize(1); + assertThat(mPreference.getPreferenceCount()).isEqualTo(1); + + onView(withId(R.id.delete_contact)).perform(click()); + onView(withText(R.string.remove)).perform(click()); + + assertThat(mPreference.getEmergencyContacts()).isEmpty(); + assertThat(mPreference.getPreferenceCount()).isEqualTo(0); + } + + @Test + public void testWidgetClick_negativeButton() { + assertThat(mPreference.getEmergencyContacts()).hasSize(1); + assertThat(mPreference.getPreferenceCount()).isEqualTo(1); + + onView(withId(R.id.delete_contact)).perform(click()); + onView(withText(android.R.string.cancel)).perform(click()); + + assertThat(mPreference.getEmergencyContacts()).hasSize(1); + assertThat(mPreference.getPreferenceCount()).isEqualTo(1); + } + + private EmergencyContactsPreference startActivityAndGetEmergencyContactsPreference() { + final Intent editActivityIntent = new Intent(mTargetContext, EditInfoActivity.class); + EditInfoActivity activity = + (EditInfoActivity) mInstrumentation.startActivitySync(editActivityIntent); + EditInfoFragment fragment = (EditInfoFragment) activity.getFragment(); + + return (EmergencyContactsPreference) fragment.findPreference( + PreferenceKeys.KEY_EMERGENCY_CONTACTS); + } +} |