diff options
author | Brandon Maxwell <maxwelb@google.com> | 2016-02-02 19:36:46 -0800 |
---|---|---|
committer | Brandon Maxwell <maxwelb@google.com> | 2016-02-04 12:19:55 -0800 |
commit | 9cd03e1e3c319f7633638615074da3028eb45c2b (patch) | |
tree | abf35f13b7223224d498acc2aa664a3cdc78b442 /InCallUI/tests/src | |
parent | f68dac28d412c277a83db1e81147651c75cd22ef (diff) |
Fixes for FBE behavior changes
+ This change ensures that the Dialer doesn't try to use the
ContactsPreferences object (which uses information in unavailable
storage) while in File based encryption locked mode. Without these
checks, the Dialer crashes on receiving an incoming call while FBE
locked.
+ Added Factory method to create ContactsPreferences for tests/while
FBE locked/while FBE unlocked
+ Added tests for CallCardPresenter and StatusBarNotifier FBE related
code
Bug=26822105
Change-Id: I5df93526e70b7350885c7261982945c32b7e86a0
Diffstat (limited to 'InCallUI/tests/src')
3 files changed, 270 insertions, 0 deletions
diff --git a/InCallUI/tests/src/com/android/incallui/CallCardPresenterTest.java b/InCallUI/tests/src/com/android/incallui/CallCardPresenterTest.java new file mode 100644 index 000000000..79545ce4b --- /dev/null +++ b/InCallUI/tests/src/com/android/incallui/CallCardPresenterTest.java @@ -0,0 +1,121 @@ +/* + * 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.incallui; + +import android.test.AndroidTestCase; +import android.test.suitebuilder.annotation.MediumTest; + +import com.android.contacts.common.preference.ContactsPreferences; +import com.android.incallui.ContactInfoCache.ContactCacheEntry; + +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; + +@MediumTest +public class CallCardPresenterTest extends AndroidTestCase { + + private static final String NAME_PRIMARY = "Full Name"; + private static final String NAME_ALTERNATIVE = "Name, Full"; + private static final String LOCATION = "US"; + private static final String NUMBER = "8006459001"; + + @Mock private ContactsPreferences mContactsPreferences; + private ContactCacheEntry mUnlockedContactInfo; + private ContactCacheEntry mLockedContactInfo; + + @Override + public void setUp() throws Exception { + super.setUp(); + MockitoAnnotations.initMocks(this); + + Mockito.when(mContactsPreferences.getDisplayOrder()) + .thenReturn(ContactsPreferences.DISPLAY_ORDER_PRIMARY); + + // Unlocked all contact info is available + mUnlockedContactInfo = new ContactCacheEntry(); + mUnlockedContactInfo.namePrimary = NAME_PRIMARY; + mUnlockedContactInfo.nameAlternative = NAME_ALTERNATIVE; + mUnlockedContactInfo.location = LOCATION; + mUnlockedContactInfo.number = NUMBER; + + // Locked only number and location are available + mLockedContactInfo = new ContactCacheEntry(); + mLockedContactInfo .location = LOCATION; + mLockedContactInfo .number = NUMBER; + } + + @Override + public void tearDown() throws Exception { + super.tearDown(); + ContactsPreferencesFactory.setTestInstance(null); + } + + public void testGetNameForCall_Unlocked() { + ContactsPreferencesFactory.setTestInstance(mContactsPreferences); + CallCardPresenter presenter = new CallCardPresenter(); + presenter.init(getContext(), null); + + assertEquals(NAME_PRIMARY, presenter.getNameForCall(mUnlockedContactInfo)); + } + + public void testGetNameForCall_Locked() { + ContactsPreferencesFactory.setTestInstance(null); + CallCardPresenter presenter = new CallCardPresenter(); + presenter.init(getContext(), null); + + assertEquals(NUMBER, presenter.getNameForCall(mLockedContactInfo)); + } + + public void testGetNameForCall_EmptyPreferredName() { + ContactCacheEntry contactInfo = new ContactCacheEntry(); + contactInfo.number = NUMBER; + + ContactsPreferencesFactory.setTestInstance(null); + CallCardPresenter presenter = new CallCardPresenter(); + presenter.init(getContext(), null); + + assertEquals(NUMBER, presenter.getNameForCall(contactInfo)); + } + + public void testGetNumberForCall_Unlocked() { + ContactsPreferencesFactory.setTestInstance(mContactsPreferences); + CallCardPresenter presenter = new CallCardPresenter(); + presenter.init(getContext(), null); + + assertEquals(NUMBER, presenter.getNumberForCall(mUnlockedContactInfo)); + } + + public void testGetNumberForCall_Locked() { + ContactsPreferencesFactory.setTestInstance(null); + CallCardPresenter presenter = new CallCardPresenter(); + presenter.init(getContext(), null); + + assertEquals(LOCATION, presenter.getNumberForCall(mLockedContactInfo)); + } + + public void testGetNumberForCall_EmptyPreferredName() { + ContactCacheEntry contactInfo = new ContactCacheEntry(); + contactInfo.location = LOCATION; + + ContactsPreferencesFactory.setTestInstance(null); + CallCardPresenter presenter = new CallCardPresenter(); + presenter.init(getContext(), null); + + assertEquals(LOCATION, presenter.getNumberForCall(contactInfo)); + } +} diff --git a/InCallUI/tests/src/com/android/incallui/ContactsPreferencesFactoryTest.java b/InCallUI/tests/src/com/android/incallui/ContactsPreferencesFactoryTest.java new file mode 100644 index 000000000..bf915553b --- /dev/null +++ b/InCallUI/tests/src/com/android/incallui/ContactsPreferencesFactoryTest.java @@ -0,0 +1,51 @@ +/* + * 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.incallui; + +import com.android.dialer.compat.UserManagerCompat; +import android.test.AndroidTestCase; +import android.test.suitebuilder.annotation.SmallTest; + +import com.android.contacts.common.preference.ContactsPreferences; + +import org.mockito.Mockito; + +@SmallTest +public class ContactsPreferencesFactoryTest extends AndroidTestCase { + + public void testNewContactsPreferences_Unlocked() { + if (!UserManagerCompat.isUserUnlocked(getContext())) { + return; + } + assertNotNull(ContactsPreferencesFactory.newContactsPreferences(getContext())); + } + + public void testNewContactsPreferences_Locked() { + if (UserManagerCompat.isUserUnlocked(getContext())) { + return; + } + assertNull(ContactsPreferencesFactory.newContactsPreferences(getContext())); + } + + public void testNewContactsPreferences_TestInstance() { + ContactsPreferences testInstance = Mockito.mock(ContactsPreferences.class); + ContactsPreferencesFactory.setTestInstance(testInstance); + // Assert that it returns the same object always + assertSame(testInstance, ContactsPreferencesFactory.newContactsPreferences(getContext())); + assertSame(testInstance, ContactsPreferencesFactory.newContactsPreferences(getContext())); + } +} diff --git a/InCallUI/tests/src/com/android/incallui/StatusBarNotifierTest.java b/InCallUI/tests/src/com/android/incallui/StatusBarNotifierTest.java new file mode 100644 index 000000000..4c55ddcc0 --- /dev/null +++ b/InCallUI/tests/src/com/android/incallui/StatusBarNotifierTest.java @@ -0,0 +1,98 @@ +/* + * 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.incallui; + +import android.test.AndroidTestCase; +import android.test.suitebuilder.annotation.MediumTest; + +import com.android.contacts.common.preference.ContactsPreferences; +import com.android.incallui.ContactInfoCache.ContactCacheEntry; + +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; + +@MediumTest +public class StatusBarNotifierTest extends AndroidTestCase { + + private static final String NAME_PRIMARY = "Full Name"; + private static final String NAME_ALTERNATIVE = "Name, Full"; + private static final String LOCATION = "US"; + private static final String NUMBER = "8006459001"; + + @Mock private Call mCall; + @Mock private ContactsPreferences mContactsPreferences; + private ContactCacheEntry mUnlockedContactInfo; + private ContactCacheEntry mLockedContactInfo; + + @Override + public void setUp() throws Exception { + super.setUp(); + MockitoAnnotations.initMocks(this); + + Mockito.when(mContactsPreferences.getDisplayOrder()) + .thenReturn(ContactsPreferences.DISPLAY_ORDER_PRIMARY); + + // Unlocked all contact info is available + mUnlockedContactInfo = new ContactCacheEntry(); + mUnlockedContactInfo.namePrimary = NAME_PRIMARY; + mUnlockedContactInfo.nameAlternative = NAME_ALTERNATIVE; + mUnlockedContactInfo.location = LOCATION; + mUnlockedContactInfo.number = NUMBER; + + // Locked only number and location are available + mLockedContactInfo = new ContactCacheEntry(); + mLockedContactInfo .location = LOCATION; + mLockedContactInfo .number = NUMBER; + } + + @Override + public void tearDown() throws Exception { + super.tearDown(); + ContactsPreferencesFactory.setTestInstance(null); + } + + public void testGetContentTitle_ConferenceCall() { + ContactsPreferencesFactory.setTestInstance(null); + StatusBarNotifier statusBarNotifier = new StatusBarNotifier(mContext, null); + + Mockito.when(mCall.isConferenceCall()).thenReturn(true); + Mockito.when(mCall.hasProperty(Mockito.anyInt())).thenReturn(false); + + assertEquals(mContext.getResources().getString(R.string.card_title_conf_call), + statusBarNotifier.getContentTitle(null, mCall)); + } + + public void testGetContentTitle_Unlocked() { + ContactsPreferencesFactory.setTestInstance(mContactsPreferences); + StatusBarNotifier statusBarNotifier = new StatusBarNotifier(mContext, null); + assertEquals(NAME_PRIMARY, statusBarNotifier.getContentTitle(mUnlockedContactInfo, mCall)); + } + + public void testGetContentTitle_Locked() { + ContactsPreferencesFactory.setTestInstance(null); + StatusBarNotifier statusBarNotifier = new StatusBarNotifier(mContext, null); + assertEquals(NUMBER, statusBarNotifier.getContentTitle(mLockedContactInfo, mCall)); + } + + public void testGetContentTitle_EmptyPreferredName() { + ContactCacheEntry contactCacheEntry = new ContactCacheEntry(); + contactCacheEntry.number = NUMBER; + StatusBarNotifier statusBarNotifier = new StatusBarNotifier(mContext, null); + assertEquals(NUMBER, statusBarNotifier.getContentTitle(contactCacheEntry, mCall)); + } +} |