diff options
Diffstat (limited to 'tests/src/com/android/launcher3/AppWidgetsRestoredReceiverTest.kt')
-rw-r--r-- | tests/src/com/android/launcher3/AppWidgetsRestoredReceiverTest.kt | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/tests/src/com/android/launcher3/AppWidgetsRestoredReceiverTest.kt b/tests/src/com/android/launcher3/AppWidgetsRestoredReceiverTest.kt new file mode 100644 index 0000000000..21abab4d49 --- /dev/null +++ b/tests/src/com/android/launcher3/AppWidgetsRestoredReceiverTest.kt @@ -0,0 +1,171 @@ +package com.android.launcher3 + +import android.appwidget.AppWidgetManager.ACTION_APPWIDGET_DELETED +import android.appwidget.AppWidgetManager.ACTION_APPWIDGET_HOST_RESTORED +import android.appwidget.AppWidgetManager.EXTRA_APPWIDGET_IDS +import android.appwidget.AppWidgetManager.EXTRA_APPWIDGET_OLD_IDS +import android.appwidget.AppWidgetManager.EXTRA_HOST_ID +import android.content.Intent +import android.platform.uiautomator_helpers.DeviceHelpers +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.filters.SmallTest +import com.android.launcher3.LauncherPrefs.Companion.APP_WIDGET_IDS +import com.android.launcher3.LauncherPrefs.Companion.OLD_APP_WIDGET_IDS +import com.android.launcher3.util.IntArray +import com.android.launcher3.util.LauncherModelHelper.TEST_PACKAGE +import com.android.launcher3.widget.LauncherWidgetHolder.APPWIDGET_HOST_ID +import com.google.common.truth.Truth.assertThat +import org.junit.After +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith + +/** Tests for [AppWidgetsRestoredReceiver] */ +@SmallTest +@RunWith(AndroidJUnit4::class) +class AppWidgetsRestoredReceiverTest { + private lateinit var launcherPrefs: LauncherPrefs + private lateinit var receiverUnderTest: AppWidgetsRestoredReceiver + + @Before + fun setup() { + launcherPrefs = LauncherPrefs(DeviceHelpers.context) + receiverUnderTest = AppWidgetsRestoredReceiver() + } + + @After + fun tearDown() { + launcherPrefs.remove(OLD_APP_WIDGET_IDS, APP_WIDGET_IDS) + } + + @Test + fun `When AppWidgetsRestoredReceiver gets valid broadcast it sets old and new app widget ids`() { + // Given + val oldIds = intArrayOf(1, 2, 10) + val newIds = intArrayOf(10, 11, 12) + val expectedOldIds = IntArray.wrap(*oldIds).toConcatString() + val expectedNewIds = IntArray.wrap(*newIds).toConcatString() + val intent = + Intent().apply { + component = null + `package` = TEST_PACKAGE + action = ACTION_APPWIDGET_HOST_RESTORED + putExtra(EXTRA_APPWIDGET_OLD_IDS, oldIds) + putExtra(EXTRA_APPWIDGET_IDS, newIds) + putExtra(EXTRA_HOST_ID, APPWIDGET_HOST_ID) + } + + // When + receiverUnderTest.onReceive(DeviceHelpers.context, intent) + + // Then + assertThat(launcherPrefs.get(OLD_APP_WIDGET_IDS)).isEqualTo(expectedOldIds) + assertThat(launcherPrefs.get(APP_WIDGET_IDS)).isEqualTo(expectedNewIds) + } + + @Test + fun `AppWidgetsRestoredReceiver does not set widget ids when Intent action is invalid`() { + // Given + val oldIds = intArrayOf(1, 2, 10) + val newIds = intArrayOf(10, 11, 12) + val intent = + Intent().apply { + component = null + `package` = TEST_PACKAGE + action = ACTION_APPWIDGET_DELETED + putExtra(EXTRA_APPWIDGET_OLD_IDS, oldIds) + putExtra(EXTRA_APPWIDGET_IDS, newIds) + putExtra(EXTRA_HOST_ID, APPWIDGET_HOST_ID) + } + + // When + receiverUnderTest.onReceive(DeviceHelpers.context, intent) + + // Then + assertThat(launcherPrefs.has(OLD_APP_WIDGET_IDS, APP_WIDGET_IDS)).isFalse() + } + + @Test + fun `AppWidgetsRestoredReceiver does not set widget ids when Intent host id is not Launcher`() { + // Given + val oldIds = intArrayOf(1, 2, 10) + val newIds = intArrayOf(10, 11, 12) + val intent = + Intent().apply { + component = null + `package` = TEST_PACKAGE + action = ACTION_APPWIDGET_HOST_RESTORED + putExtra(EXTRA_APPWIDGET_OLD_IDS, oldIds) + putExtra(EXTRA_APPWIDGET_IDS, newIds) + putExtra(EXTRA_HOST_ID, 999999999) + } + + // When + receiverUnderTest.onReceive(DeviceHelpers.context, intent) + + // Then + assertThat(launcherPrefs.has(OLD_APP_WIDGET_IDS, APP_WIDGET_IDS)).isFalse() + } + + @Test + fun `AppWidgetsRestoredReceiver does not set ids when new and old ids differ in length`() { + // Given + val oldIds = intArrayOf(10) + val newIds = intArrayOf(10, 11, 12) + val intent = + Intent().apply { + component = null + `package` = TEST_PACKAGE + action = ACTION_APPWIDGET_HOST_RESTORED + putExtra(EXTRA_APPWIDGET_OLD_IDS, oldIds) + putExtra(EXTRA_APPWIDGET_IDS, newIds) + putExtra(EXTRA_HOST_ID, APPWIDGET_HOST_ID) + } + + // When + receiverUnderTest.onReceive(DeviceHelpers.context, intent) + + // Then + assertThat(launcherPrefs.has(OLD_APP_WIDGET_IDS, APP_WIDGET_IDS)).isFalse() + } + + @Test + fun `AppWidgetsRestoredReceiver does not set widget ids when old ids not set`() { + // Given + val newIds = intArrayOf(10, 11, 12) + val intent = + Intent().apply { + component = null + `package` = TEST_PACKAGE + action = ACTION_APPWIDGET_HOST_RESTORED + putExtra(EXTRA_APPWIDGET_IDS, newIds) + putExtra(EXTRA_HOST_ID, APPWIDGET_HOST_ID) + } + + // When + receiverUnderTest.onReceive(DeviceHelpers.context, intent) + + // Then + assertThat(launcherPrefs.has(OLD_APP_WIDGET_IDS, APP_WIDGET_IDS)).isFalse() + } + + @Test + fun `AppWidgetsRestoredReceiver does not set widget ids when new ids not set`() { + // Given + val oldIds = intArrayOf(10, 11, 12) + val intent = + Intent().apply { + component = null + `package` = TEST_PACKAGE + action = ACTION_APPWIDGET_HOST_RESTORED + putExtra(EXTRA_APPWIDGET_OLD_IDS, oldIds) + putExtra(EXTRA_HOST_ID, APPWIDGET_HOST_ID) + } + + // When + receiverUnderTest.onReceive(DeviceHelpers.context, intent) + + // Then + assertThat(launcherPrefs.has(OLD_APP_WIDGET_IDS, APP_WIDGET_IDS)).isFalse() + } +} |