diff options
author | Juan Lang <juanlang@google.com> | 2017-06-08 17:14:27 -0700 |
---|---|---|
committer | Juan Lang <juanlang@google.com> | 2017-06-12 15:34:40 -0700 |
commit | 6ad3b5f952e78cb905e7812f44504aab6254ee58 (patch) | |
tree | 6aed90411ccf9bf17c689ac6201a152bbf11e6f9 /tests | |
parent | aaaabf3231d9307b74ed8c3ca206e563ddb7bc8d (diff) | |
download | EmergencyInfo-6ad3b5f952e78cb905e7812f44504aab6254ee58.tar.gz |
Add robolectric tests for EmergencyContactsPreference.
Remove instrumentation tests they replace.
Bug: 30046624
Test: make RunEmergencyInfoRoboTests
Change-Id: I3ef549d55b573bd2132930ac1aea22c1627433c0
(cherry picked from commit ec15f8b319f9e38c064f8b521dba6c2dfa0a4117)
Diffstat (limited to 'tests')
3 files changed, 170 insertions, 97 deletions
diff --git a/tests/instrumentation/src/com/android/emergency/preferences/EmergencyContactsPreferenceTest.java b/tests/instrumentation/src/com/android/emergency/preferences/EmergencyContactsPreferenceTest.java index 45bea8b7..ac4b1e08 100644 --- a/tests/instrumentation/src/com/android/emergency/preferences/EmergencyContactsPreferenceTest.java +++ b/tests/instrumentation/src/com/android/emergency/preferences/EmergencyContactsPreferenceTest.java @@ -77,101 +77,6 @@ public class EmergencyContactsPreferenceTest super.tearDown(); } - public void testEmptyState() { - assertThat(mEmergencyContactsPreference).isNotNull(); - assertThat(mEmergencyContactsPreference.isPersistent()).isTrue(); - assertThat(mEmergencyContactsPreference.isNotSet()).isTrue(); - assertThat(mEmergencyContactsPreference.getEmergencyContacts()).isEmpty(); - assertThat(mEmergencyContactsPreference.getPreferenceCount()).isEqualTo(0); - } - - public void testAddAndRemoveEmergencyContact() throws Throwable { - final String name = "Jane"; - final String phoneNumber = "456"; - - final Uri phoneUri = - ContactTestUtils.createContact(mContentResolver, name, phoneNumber); - runTestOnUiThread(new Runnable() { - @Override - public void run() { - mEmergencyContactsPreference.addNewEmergencyContact(phoneUri); - } - }); - - assertThat(mEmergencyContactsPreference.getEmergencyContacts().size()).isEqualTo(1); - assertThat(mEmergencyContactsPreference.getPreferenceCount()).isEqualTo(1); - ContactPreference contactPreference = (ContactPreference) - mEmergencyContactsPreference.getPreference(0); - - assertThat(contactPreference.getPhoneUri()).isEqualTo(phoneUri); - assertThat(contactPreference.getTitle()).isEqualTo(name); - assertThat((String) contactPreference.getSummary()).contains(phoneNumber); - - runTestOnUiThread(new Runnable() { - @Override - public void run() { - mEmergencyContactsPreference.onRemoveContactPreference( - (ContactPreference) mEmergencyContactsPreference.getPreference(0)); - } - }); - - assertThat(mEmergencyContactsPreference.getEmergencyContacts()).isEmpty(); - assertThat(mEmergencyContactsPreference.getPreferenceCount()).isEqualTo(0); - - // Clean up the inserted contact - assertThat(ContactTestUtils.deleteContact(mContentResolver, name, phoneNumber)).isTrue(); - } - - public void testReloadFromPreference() throws Throwable { - final String nameJane = "Jane"; - final String phoneNumberJane = "456"; - final Uri emergencyContactJane = ContactTestUtils - .createContact(mContentResolver, nameJane, phoneNumberJane); - - final String nameJohn = "John"; - final String phoneNumberJohn = "123"; - final Uri emergencyContactJohn = ContactTestUtils - .createContact(mContentResolver, nameJohn, phoneNumberJohn); - - final List<Uri> emergencyContacts = new ArrayList<>(); - emergencyContacts.add(emergencyContactJane); - emergencyContacts.add(emergencyContactJohn); - runTestOnUiThread(new Runnable() { - @Override - public void run() { - mEmergencyContactsPreference.setEmergencyContacts(emergencyContacts); - } - }); - - assertThat(mEmergencyContactsPreference.getEmergencyContacts().size()).isEqualTo(2); - assertThat(mEmergencyContactsPreference.getPreferenceCount()).isEqualTo(2); - - // Delete Jane from another app (e.g. contacts) - assertThat(ContactTestUtils - .deleteContact(mContentResolver, nameJane, phoneNumberJane)).isTrue(); - getInstrumentation().waitForIdleSync(); - - runTestOnUiThread(new Runnable() { - @Override - public void run() { - mEmergencyContactsPreference.reloadFromPreference(); - } - }); - - getInstrumentation().waitForIdleSync(); - - // Assert the only remaining contact is John - assertThat(mEmergencyContactsPreference.getEmergencyContacts().size()).isEqualTo(1); - assertThat(mEmergencyContactsPreference.getPreferenceCount()).isEqualTo(1); - ContactPreference contactPreference = (ContactPreference) - mEmergencyContactsPreference.getPreference(0); - assertThat(contactPreference.getPhoneUri()).isEqualTo(emergencyContactJohn); - - // Clean up the inserted contact - assertThat(ContactTestUtils - .deleteContact(mContentResolver, nameJohn, phoneNumberJohn)).isTrue(); - } - public void testWidgetClick_positiveButton() throws Throwable { final String name = "Jane"; final String phoneNumber = "456"; diff --git a/tests/robolectric/src/com/android/emergency/preferences/ContactPreferencesTest.java b/tests/robolectric/src/com/android/emergency/preferences/ContactPreferencesTest.java index 81493f7f..7a039e4b 100644 --- a/tests/robolectric/src/com/android/emergency/preferences/ContactPreferencesTest.java +++ b/tests/robolectric/src/com/android/emergency/preferences/ContactPreferencesTest.java @@ -22,9 +22,7 @@ import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; -import android.app.Instrumentation; import android.content.ComponentName; -import android.content.Context; import android.content.ContextWrapper; import android.content.Intent; import android.content.IntentFilter; diff --git a/tests/robolectric/src/com/android/emergency/preferences/EmergencyContactsPreferenceTest.java b/tests/robolectric/src/com/android/emergency/preferences/EmergencyContactsPreferenceTest.java new file mode 100644 index 00000000..b13e4c3b --- /dev/null +++ b/tests/robolectric/src/com/android/emergency/preferences/EmergencyContactsPreferenceTest.java @@ -0,0 +1,170 @@ +/* + * 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 com.google.common.truth.Truth.assertThat; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyString; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + +import android.content.ContextWrapper; +import android.content.SharedPreferences; +import android.content.pm.PackageManager; +import android.net.Uri; +import android.preference.PreferenceGroup; +import android.preference.PreferenceManager; +import android.preference.PreferenceScreen; +import android.test.suitebuilder.annotation.SmallTest; + +import com.android.emergency.ContactTestUtils; +import com.android.emergency.EmergencyContactManager; +import com.android.emergency.PreferenceKeys; +import com.android.emergency.TestConfig; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; + +/** Unit tests for {@link EmergencyContactsPreference}. */ +@SmallTest +@RunWith(RobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +public class EmergencyContactsPreferenceTest { + @Mock private PackageManager mPackageManager; + @Mock private PreferenceManager mPreferenceManager; + @Mock private SharedPreferences mSharedPreferences; + @Mock private EmergencyContactsPreference.ContactValidator mContactValidator; + @Mock private ContactPreference.ContactFactory mContactFactory; + private ContextWrapper mContext; + private EmergencyContactsPreference mPreference; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + + when(mPreferenceManager.getSharedPreferences()).thenReturn(mSharedPreferences); + + mContext = spy(RuntimeEnvironment.application); + doReturn(mPackageManager).when(mContext).getPackageManager(); + + mPreference = spy(new EmergencyContactsPreference(RuntimeEnvironment.application, + null /* attrs */, mContactValidator, mContactFactory)); + + PreferenceGroup prefRoot = spy(new PreferenceScreen(mContext, null /* attrs */)); + when(prefRoot.getPreferenceManager()).thenReturn(mPreferenceManager); + prefRoot.addPreference(mPreference); + } + + @Test + public void testDefaultProperties() { + assertThat(mPreference.isPersistent()).isTrue(); + assertThat(mPreference.isNotSet()).isTrue(); + assertThat(mPreference.getEmergencyContacts()).isEmpty(); + assertThat(mPreference.getPreferenceCount()).isEqualTo(0); + } + + @Test + public void testAddAndRemoveEmergencyContact() throws Throwable { + final String name = "Jane"; + final String phoneNumber = "456"; + + when(mContactValidator.isValidEmergencyContact(any(), any())).thenReturn(true); + + EmergencyContactManager.Contact contact = mock(EmergencyContactManager.Contact.class); + when(mContactFactory.getContact(any(), any())).thenReturn(contact); + when(contact.getName()).thenReturn(name); + when(contact.getPhoneNumber()).thenReturn(phoneNumber); + + Uri uri = mock(Uri.class); + when(contact.getPhoneUri()).thenReturn(uri); + + mPreference.addNewEmergencyContact(uri); + + assertThat(mPreference.getEmergencyContacts()).hasSize(1); + assertThat(mPreference.getPreferenceCount()).isEqualTo(1); + ContactPreference contactPreference = (ContactPreference) mPreference.getPreference(0); + + assertThat(contactPreference.getPhoneUri()).isEqualTo(uri); + assertThat(contactPreference.getTitle()).isEqualTo(name); + assertThat((String) contactPreference.getSummary()).contains(phoneNumber); + + mPreference.onRemoveContactPreference((ContactPreference) mPreference.getPreference(0)); + + assertThat(mPreference.getEmergencyContacts()).isEmpty(); + assertThat(mPreference.getPreferenceCount()).isEqualTo(0); + } + + @Test + public void testReloadFromPreference() throws Throwable { + final String nameJane = "Jane"; + final String phoneNumberJane = "456"; + Uri contactUriJane = Uri.parse("tel:" + phoneNumberJane); + EmergencyContactManager.Contact contactJane = mock(EmergencyContactManager.Contact.class); + when(mContactFactory.getContact(any(), eq(contactUriJane))).thenReturn(contactJane); + when(contactJane.getName()).thenReturn(nameJane); + when(contactJane.getPhoneNumber()).thenReturn(phoneNumberJane); + when(contactJane.getPhoneUri()).thenReturn(contactUriJane); + + final String nameJohn = "John"; + final String phoneNumberJohn = "123"; + Uri contactUriJohn = Uri.parse("tel:" + phoneNumberJohn); + EmergencyContactManager.Contact contactJohn = mock(EmergencyContactManager.Contact.class); + when(mContactFactory.getContact(any(), eq(contactUriJohn))).thenReturn(contactJohn); + when(contactJohn.getName()).thenReturn(nameJohn); + when(contactJohn.getPhoneNumber()).thenReturn(phoneNumberJohn); + when(contactJohn.getPhoneUri()).thenReturn(contactUriJohn); + + final List<Uri> emergencyContacts = new ArrayList<>(); + emergencyContacts.add(contactUriJane); + emergencyContacts.add(contactUriJohn); + mPreference.setEmergencyContacts(emergencyContacts); + + assertThat(mPreference.getEmergencyContacts().size()).isEqualTo(2); + assertThat(mPreference.getPreferenceCount()).isEqualTo(2); + + // "Delete" Jane by reloading from preferences. The mock SharedPreferences still have both + // contacts stored, but the validator only believes John is valid. + mPreference.setKey(PreferenceKeys.KEY_EMERGENCY_CONTACTS); + when(mSharedPreferences.getString(eq(mPreference.getKey()), any())) + .thenReturn(mPreference.serialize(emergencyContacts)); + when(mContactValidator.isValidEmergencyContact(any(), eq(contactUriJane))) + .thenReturn(false); + when(mContactValidator.isValidEmergencyContact(any(), eq(contactUriJohn))).thenReturn(true); + // Override the preference's persist behavior, to avoid EmergencyContactsPreference + // attempting to write to SharedPreferences. (Preference's default behavior is unmockable.) + doNothing().when(mPreference).persistEmergencyContacts(any()); + mPreference.reloadFromPreference(); + + // Assert the only remaining contact is John + assertThat(mPreference.getEmergencyContacts()).hasSize(1); + assertThat(mPreference.getPreferenceCount()).isEqualTo(1); + ContactPreference contactPreference = (ContactPreference) mPreference.getPreference(0); + assertThat(contactPreference.getPhoneUri()).isEqualTo(contactUriJohn); + } +} |