diff options
| author | 2023-08-25 20:20:12 +0000 | |
|---|---|---|
| committer | 2023-08-25 20:20:12 +0000 | |
| commit | 0d5aca042000ada84d67a0029b84a5126e8c3100 (patch) | |
| tree | 216b1fe4870d310eaee7ba2f81e2a5e24fe69006 | |
| parent | 4e26941433a437a09d82a9e3faffd567cb9dba59 (diff) | |
| parent | 8057d856715970b7987d71ae2813385e35197137 (diff) | |
Merge "[SettingsProvider] use a mock SettingsProvider in unit test" into udc-qpr-dev
| -rw-r--r-- | packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperTest.java | 254 |
1 files changed, 108 insertions, 146 deletions
diff --git a/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperTest.java b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperTest.java index ef062dfd3ec3..4b10b56f49fb 100644 --- a/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperTest.java +++ b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperTest.java @@ -23,14 +23,16 @@ import static junit.framework.Assert.assertEquals; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verifyZeroInteractions; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import android.content.ContentProvider; -import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; import android.content.pm.ApplicationInfo; +import android.content.res.AssetFileDescriptor; import android.content.res.Resources; import android.database.Cursor; import android.database.MatrixCursor; @@ -44,8 +46,8 @@ import android.provider.Settings; import android.telephony.TelephonyManager; import android.test.mock.MockContentProvider; import android.test.mock.MockContentResolver; +import android.util.ArrayMap; -import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.runner.AndroidJUnit4; import com.android.internal.R; @@ -77,13 +79,14 @@ public class SettingsHelperTest { @Mock private Context mContext; @Mock private Resources mResources; - @Mock private ContentResolver mContentResolver; @Mock private AudioManager mAudioManager; @Mock private TelephonyManager mTelephonyManager; + @Mock private MockContentResolver mContentResolver; + private MockSettingsProvider mSettingsProvider; + @Before public void setUp() { - clearLongPressPowerValues(); MockitoAnnotations.initMocks(this); when(mContext.getSystemService(eq(Context.AUDIO_SERVICE))).thenReturn(mAudioManager); when(mContext.getSystemService(eq(Context.TELEPHONY_SERVICE))).thenReturn( @@ -91,14 +94,20 @@ public class SettingsHelperTest { when(mContext.getResources()).thenReturn(mResources); when(mContext.getApplicationContext()).thenReturn(mContext); when(mContext.getApplicationInfo()).thenReturn(new ApplicationInfo()); - when(mContext.getContentResolver()).thenReturn(getContentResolver()); mSettingsHelper = spy(new SettingsHelper(mContext)); + mContentResolver = spy(new MockContentResolver()); + when(mContext.getContentResolver()).thenReturn(mContentResolver); + mSettingsProvider = new MockSettingsProvider(mContext); + mContentResolver.addProvider(Settings.AUTHORITY, mSettingsProvider); } @After public void tearDown() { - clearLongPressPowerValues(); + Settings.Global.putString(mContentResolver, Settings.Global.POWER_BUTTON_LONG_PRESS, + null); + Settings.Global.putString(mContentResolver, Settings.Global.KEY_CHORD_POWER_VOLUME_UP, + null); } @Test @@ -123,33 +132,30 @@ public class SettingsHelperTest { mSettingsHelper.restoreValue(mContext, mContentResolver, new ContentValues(), Uri.EMPTY, SETTING_KEY, SETTING_VALUE, /* restoredFromSdkInt */ 0); - verifyZeroInteractions(mContentResolver); + // The only time of interaction happened during setUp() + verify(mContentResolver, times(1)) + .addProvider(Settings.AUTHORITY, mSettingsProvider); + + verifyNoMoreInteractions(mContentResolver); } @Test public void testRestoreValue_lppForAssistantEnabled_updatesValue() { - ContentResolver cr = - InstrumentationRegistry.getInstrumentation().getTargetContext() - .getContentResolver(); when(mResources.getBoolean( R.bool.config_longPressOnPowerForAssistantSettingAvailable)).thenReturn( true); - mSettingsHelper.restoreValue(mContext, cr, new ContentValues(), Uri.EMPTY, + mSettingsHelper.restoreValue(mContext, mContentResolver, new ContentValues(), Uri.EMPTY, Settings.Global.POWER_BUTTON_LONG_PRESS, "5", 0); - assertThat( - Settings.Global.getInt(cr, Settings.Global.POWER_BUTTON_LONG_PRESS, -1)) - .isEqualTo(5); - assertThat(Settings.Global.getInt(cr, Settings.Global.KEY_CHORD_POWER_VOLUME_UP, - -1)).isEqualTo(2); + assertThat(Settings.Global.getInt( + mContentResolver, Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo(5); + assertThat(Settings.Global.getInt( + mContentResolver, Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo(2); } @Test public void testRestoreValue_lppForAssistantNotEnabled_updatesValueToDefaultConfig() { - ContentResolver cr = - InstrumentationRegistry.getInstrumentation().getTargetContext() - .getContentResolver(); when(mResources.getBoolean( R.bool.config_longPressOnPowerForAssistantSettingAvailable)).thenReturn( true); @@ -161,21 +167,17 @@ public class SettingsHelperTest { R.integer.config_keyChordPowerVolumeUp)).thenReturn( 1); - mSettingsHelper.restoreValue(mContext, cr, new ContentValues(), Uri.EMPTY, + mSettingsHelper.restoreValue(mContext, mContentResolver, new ContentValues(), Uri.EMPTY, Settings.Global.POWER_BUTTON_LONG_PRESS, "2", 0); - assertThat( - Settings.Global.getInt(cr, Settings.Global.POWER_BUTTON_LONG_PRESS, -1)) - .isEqualTo(1); - assertThat(Settings.Global.getInt(cr, Settings.Global.KEY_CHORD_POWER_VOLUME_UP, - -1)).isEqualTo(1); + assertThat(Settings.Global.getInt( + mContentResolver, Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo(1); + assertThat(Settings.Global.getInt( + mContentResolver, Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo(1); } @Test public void testRestoreValue_lppForAssistantNotEnabledDefaultConfig_updatesValue() { - ContentResolver cr = - InstrumentationRegistry.getInstrumentation().getTargetContext() - .getContentResolver(); when(mResources.getBoolean( R.bool.config_longPressOnPowerForAssistantSettingAvailable)).thenReturn( true); @@ -187,47 +189,39 @@ public class SettingsHelperTest { R.integer.config_keyChordPowerVolumeUp)).thenReturn( 1); - mSettingsHelper.restoreValue(mContext, cr, new ContentValues(), Uri.EMPTY, + mSettingsHelper.restoreValue(mContext, mContentResolver, new ContentValues(), Uri.EMPTY, Settings.Global.POWER_BUTTON_LONG_PRESS, "2", 0); - assertThat( - Settings.Global.getInt(cr, Settings.Global.POWER_BUTTON_LONG_PRESS, -1)) - .isEqualTo(1); - assertThat(Settings.Global.getInt(cr, Settings.Global.KEY_CHORD_POWER_VOLUME_UP, - -1)).isEqualTo(1); + assertThat(Settings.Global.getInt( + mContentResolver, Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo(1); + assertThat(Settings.Global.getInt( + mContentResolver, Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo(1); } @Test public void testRestoreValue_lppForAssistantNotAvailable_doesNotRestore() { - ContentResolver cr = - InstrumentationRegistry.getInstrumentation().getTargetContext() - .getContentResolver(); - when(mResources.getBoolean( - R.bool.config_longPressOnPowerForAssistantSettingAvailable)).thenReturn( - false); + when(mResources.getBoolean(R.bool.config_longPressOnPowerForAssistantSettingAvailable)) + .thenReturn(false); - mSettingsHelper.restoreValue(mContext, cr, new ContentValues(), Uri.EMPTY, - Settings.Global.POWER_BUTTON_LONG_PRESS, "5", 0); + mSettingsHelper.restoreValue(mContext, mContentResolver, new ContentValues(), Uri.EMPTY, + Settings.Global.POWER_BUTTON_LONG_PRESS, "500", 0); - assertThat((Settings.Global.getInt(cr, Settings.Global.POWER_BUTTON_LONG_PRESS, - -1))).isEqualTo(-1); + assertThat((Settings.Global.getInt( + mContentResolver, Settings.Global.POWER_BUTTON_LONG_PRESS, -1))).isEqualTo(-1); } @Test public void testRestoreValue_lppForAssistantInvalid_doesNotRestore() { - ContentResolver cr = - InstrumentationRegistry.getInstrumentation().getTargetContext() - .getContentResolver(); when(mResources.getBoolean( R.bool.config_longPressOnPowerForAssistantSettingAvailable)).thenReturn( false); - mSettingsHelper.restoreValue(mContext, cr, new ContentValues(), Uri.EMPTY, + mSettingsHelper.restoreValue(mContext, mContentResolver, new ContentValues(), Uri.EMPTY, Settings.Global.POWER_BUTTON_LONG_PRESS, "trees", 0); - assertThat((Settings.Global.getInt(cr, Settings.Global.POWER_BUTTON_LONG_PRESS, - -1))).isEqualTo(-1); + assertThat((Settings.Global.getInt( + mContentResolver, Settings.Global.POWER_BUTTON_LONG_PRESS, -1))).isEqualTo(-1); } @Test @@ -363,9 +357,6 @@ public class SettingsHelperTest { final String newRingtoneValueCanonicalized = "content://media/internal/audio/media/100?title=Song&canonical=1"; - MockContentResolver mMockContentResolver = new MockContentResolver(); - when(mContext.getContentResolver()).thenReturn(mMockContentResolver); - ContentProvider mockMediaContentProvider = new MockContentProvider(mContext) { @Override @@ -386,25 +377,22 @@ public class SettingsHelperTest { } }; - ContentProvider mockSettingsContentProvider = - new MockSettingsProvider(mContext, getContentResolver()); - mMockContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); - mMockContentResolver.addProvider(Settings.AUTHORITY, mockSettingsContentProvider); + mContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); - resetRingtoneSettingsToDefault(mMockContentResolver); - assertThat(Settings.System.getString(mMockContentResolver, Settings.System.RINGTONE)) + resetRingtoneSettingsToDefault(); + assertThat(Settings.System.getString(mContentResolver, Settings.System.RINGTONE)) .isEqualTo(DEFAULT_RINGTONE_VALUE); mSettingsHelper.restoreValue( mContext, - mMockContentResolver, + mContentResolver, new ContentValues(), Uri.EMPTY, Settings.System.RINGTONE, sourceRingtoneValue, 0); - assertThat(Settings.System.getString(mMockContentResolver, Settings.System.RINGTONE)) + assertThat(Settings.System.getString(mContentResolver, Settings.System.RINGTONE)) .isEqualTo(newRingtoneValueCanonicalized); } @@ -417,9 +405,6 @@ public class SettingsHelperTest { final String newRingtoneValueCanonicalized = "content://0@media/external/audio/media/100?title=Song&canonical=1"; - MockContentResolver mMockContentResolver = new MockContentResolver(); - when(mContext.getContentResolver()).thenReturn(mMockContentResolver); - MatrixCursor cursor = new MatrixCursor(new String[] {BaseColumns._ID}); cursor.addRow(new Object[] {100L}); @@ -458,24 +443,21 @@ public class SettingsHelperTest { } }; - ContentProvider mockSettingsContentProvider = - new MockSettingsProvider(mContext, getContentResolver()); - mMockContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); - mMockContentResolver.addProvider("0@" + MediaStore.AUTHORITY, mockMediaContentProvider); - mMockContentResolver.addProvider(Settings.AUTHORITY, mockSettingsContentProvider); + mContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); + mContentResolver.addProvider("0@" + MediaStore.AUTHORITY, mockMediaContentProvider); - resetRingtoneSettingsToDefault(mMockContentResolver); + resetRingtoneSettingsToDefault(); mSettingsHelper.restoreValue( mContext, - mMockContentResolver, + mContentResolver, new ContentValues(), Uri.EMPTY, Settings.System.RINGTONE, sourceRingtoneValue, 0); - assertThat(Settings.System.getString(mMockContentResolver, Settings.System.RINGTONE)) + assertThat(Settings.System.getString(mContentResolver, Settings.System.RINGTONE)) .isEqualTo(newRingtoneValueCanonicalized); } @@ -488,9 +470,6 @@ public class SettingsHelperTest { final String newRingtoneValueCanonicalized = "content://0@media/external/audio/media/200?title=notificationPing&canonicalize=1"; - MockContentResolver mMockContentResolver = new MockContentResolver(); - when(mContext.getContentResolver()).thenReturn(mMockContentResolver); - MatrixCursor cursor = new MatrixCursor(new String[] {BaseColumns._ID}); cursor.addRow(new Object[] {200L}); @@ -529,17 +508,14 @@ public class SettingsHelperTest { } }; - ContentProvider mockSettingsContentProvider = - new MockSettingsProvider(mContext, getContentResolver()); - mMockContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); - mMockContentResolver.addProvider("0@" + MediaStore.AUTHORITY, mockMediaContentProvider); - mMockContentResolver.addProvider(Settings.AUTHORITY, mockSettingsContentProvider); + mContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); + mContentResolver.addProvider("0@" + MediaStore.AUTHORITY, mockMediaContentProvider); - resetRingtoneSettingsToDefault(mMockContentResolver); + resetRingtoneSettingsToDefault(); mSettingsHelper.restoreValue( mContext, - mMockContentResolver, + mContentResolver, new ContentValues(), Uri.EMPTY, Settings.System.NOTIFICATION_SOUND, @@ -548,7 +524,7 @@ public class SettingsHelperTest { assertThat( Settings.System.getString( - mMockContentResolver, Settings.System.NOTIFICATION_SOUND)) + mContentResolver, Settings.System.NOTIFICATION_SOUND)) .isEqualTo(newRingtoneValueCanonicalized); } @@ -561,9 +537,6 @@ public class SettingsHelperTest { final String newRingtoneValueCanonicalized = "content://0@media/external/audio/media/300?title=alarmSound&canonical=1"; - MockContentResolver mMockContentResolver = new MockContentResolver(); - when(mContext.getContentResolver()).thenReturn(mMockContentResolver); - MatrixCursor cursor = new MatrixCursor(new String[] {BaseColumns._ID}); cursor.addRow(new Object[] {300L}); @@ -600,26 +573,29 @@ public class SettingsHelperTest { assertThat(selectionArgs).isEqualTo(new String[] {"alarmSound"}); return cursor; } + + @Override + public AssetFileDescriptor openTypedAssetFile(Uri url, String mimeType, + Bundle opts) { + return null; + } }; - ContentProvider mockSettingsContentProvider = - new MockSettingsProvider(mContext, getContentResolver()); - mMockContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); - mMockContentResolver.addProvider("0@" + MediaStore.AUTHORITY, mockMediaContentProvider); - mMockContentResolver.addProvider(Settings.AUTHORITY, mockSettingsContentProvider); + mContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); + mContentResolver.addProvider("0@" + MediaStore.AUTHORITY, mockMediaContentProvider); - resetRingtoneSettingsToDefault(mMockContentResolver); + resetRingtoneSettingsToDefault(); mSettingsHelper.restoreValue( mContext, - mMockContentResolver, + mContentResolver, new ContentValues(), Uri.EMPTY, Settings.System.ALARM_ALERT, sourceRingtoneValue, 0); - assertThat(Settings.System.getString(mMockContentResolver, Settings.System.ALARM_ALERT)) + assertThat(Settings.System.getString(mContentResolver, Settings.System.ALARM_ALERT)) .isEqualTo(newRingtoneValueCanonicalized); } @@ -628,9 +604,6 @@ public class SettingsHelperTest { final String sourceRingtoneValue = "content://0@media/external/audio/media/1?title=Song&canonical=1"; - MockContentResolver mMockContentResolver = new MockContentResolver(); - when(mContext.getContentResolver()).thenReturn(mMockContentResolver); - // This is to mock the case that there are multiple results by querying title + // ringtone_type. MatrixCursor cursor = new MatrixCursor(new String[] {BaseColumns._ID}); @@ -651,32 +624,26 @@ public class SettingsHelperTest { } }; - ContentProvider mockSettingsContentProvider = - new MockSettingsProvider(mContext, getContentResolver()); - mMockContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); - mMockContentResolver.addProvider("0@" + MediaStore.AUTHORITY, mockMediaContentProvider); - mMockContentResolver.addProvider(Settings.AUTHORITY, mockSettingsContentProvider); + mContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); + mContentResolver.addProvider("0@" + MediaStore.AUTHORITY, mockMediaContentProvider); - resetRingtoneSettingsToDefault(mMockContentResolver); + resetRingtoneSettingsToDefault(); mSettingsHelper.restoreValue( mContext, - mMockContentResolver, + mContentResolver, new ContentValues(), Uri.EMPTY, Settings.System.RINGTONE, sourceRingtoneValue, 0); - assertThat(Settings.System.getString(mMockContentResolver, Settings.System.RINGTONE)) + assertThat(Settings.System.getString(mContentResolver, Settings.System.RINGTONE)) .isEqualTo(DEFAULT_RINGTONE_VALUE); } @Test public void testRestoreValue_customRingtone_restoreSilentValue() { - MockContentResolver mMockContentResolver = new MockContentResolver(); - when(mContext.getContentResolver()).thenReturn(mMockContentResolver); - ContentProvider mockMediaContentProvider = new MockContentProvider(mContext) { @Override @@ -691,37 +658,46 @@ public class SettingsHelperTest { } }; - ContentProvider mockSettingsContentProvider = - new MockSettingsProvider(mContext, getContentResolver()); - mMockContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); - mMockContentResolver.addProvider(Settings.AUTHORITY, mockSettingsContentProvider); + mContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); - resetRingtoneSettingsToDefault(mMockContentResolver); + resetRingtoneSettingsToDefault(); mSettingsHelper.restoreValue( mContext, - mMockContentResolver, + mContentResolver, new ContentValues(), Uri.EMPTY, Settings.System.RINGTONE, "_silent", 0); - assertThat(Settings.System.getString(mMockContentResolver, Settings.System.RINGTONE)) + assertThat(Settings.System.getString(mContentResolver, Settings.System.RINGTONE)) .isEqualTo(null); } - public static class MockSettingsProvider extends MockContentProvider { - ContentResolver mBaseContentResolver; - - public MockSettingsProvider(Context context, ContentResolver baseContentResolver) { + private static class MockSettingsProvider extends MockContentProvider { + private final ArrayMap<String, String> mKeyValueStore = new ArrayMap<>(); + MockSettingsProvider(Context context) { super(context); - this.mBaseContentResolver = baseContentResolver; } @Override public Bundle call(String method, String request, Bundle args) { - return mBaseContentResolver.call(Settings.AUTHORITY, method, request, args); + if (method.startsWith("PUT_")) { + mKeyValueStore.put(request, args.getString("value")); + return null; + } else if (method.startsWith("GET_")) { + return Bundle.forPair("value", mKeyValueStore.getOrDefault(request, "")); + } + return null; + } + + @Override + public Uri insert(Uri uri, ContentValues values) { + String name = values.getAsString("name"); + String value = values.getAsString("value"); + mKeyValueStore.put(name, value); + return null; } } @@ -752,15 +728,13 @@ public class SettingsHelperTest { } private int getAutoRotationSettingValue() { - return Settings.System.getInt( - getContentResolver(), + return Settings.System.getInt(mContentResolver, Settings.System.ACCELEROMETER_ROTATION, /* default= */ -1); } private void setAutoRotationSettingValue(int value) { - Settings.System.putInt( - getContentResolver(), + Settings.System.putInt(mContentResolver, Settings.System.ACCELEROMETER_ROTATION, value ); @@ -769,7 +743,7 @@ public class SettingsHelperTest { private void restoreAutoRotationSetting(int newValue) { mSettingsHelper.restoreValue( mContext, - getContentResolver(), + mContentResolver, new ContentValues(), /* destination= */ Settings.System.CONTENT_URI, /* name= */ Settings.System.ACCELEROMETER_ROTATION, @@ -777,31 +751,19 @@ public class SettingsHelperTest { /* restoredFromSdkInt= */ 0); } - private ContentResolver getContentResolver() { - return InstrumentationRegistry.getInstrumentation().getTargetContext() - .getContentResolver(); - } - - private void clearLongPressPowerValues() { - ContentResolver cr = InstrumentationRegistry.getInstrumentation().getTargetContext() - .getContentResolver(); - Settings.Global.putString(cr, Settings.Global.POWER_BUTTON_LONG_PRESS, null); - Settings.Global.putString(cr, Settings.Global.KEY_CHORD_POWER_VOLUME_UP, null); - } - - private void resetRingtoneSettingsToDefault(ContentResolver contentResolver) { + private void resetRingtoneSettingsToDefault() { Settings.System.putString( - contentResolver, Settings.System.RINGTONE, DEFAULT_RINGTONE_VALUE); + mContentResolver, Settings.System.RINGTONE, DEFAULT_RINGTONE_VALUE); Settings.System.putString( - contentResolver, Settings.System.NOTIFICATION_SOUND, DEFAULT_NOTIFICATION_VALUE); + mContentResolver, Settings.System.NOTIFICATION_SOUND, DEFAULT_NOTIFICATION_VALUE); Settings.System.putString( - contentResolver, Settings.System.ALARM_ALERT, DEFAULT_ALARM_VALUE); + mContentResolver, Settings.System.ALARM_ALERT, DEFAULT_ALARM_VALUE); - assertThat(Settings.System.getString(contentResolver, Settings.System.RINGTONE)) + assertThat(Settings.System.getString(mContentResolver, Settings.System.RINGTONE)) .isEqualTo(DEFAULT_RINGTONE_VALUE); - assertThat(Settings.System.getString(contentResolver, Settings.System.NOTIFICATION_SOUND)) + assertThat(Settings.System.getString(mContentResolver, Settings.System.NOTIFICATION_SOUND)) .isEqualTo(DEFAULT_NOTIFICATION_VALUE); - assertThat(Settings.System.getString(contentResolver, Settings.System.ALARM_ALERT)) + assertThat(Settings.System.getString(mContentResolver, Settings.System.ALARM_ALERT)) .isEqualTo(DEFAULT_ALARM_VALUE); } } |