diff options
| author | 2024-11-22 14:32:44 +0000 | |
|---|---|---|
| committer | 2024-11-22 14:32:44 +0000 | |
| commit | 9db8c9c486c77a90521253ff4afd246d758f9665 (patch) | |
| tree | 1878ad79e119c0d3ae58848422aff90a46374623 | |
| parent | c17ed3498d6b1acc451167a293721fe167d33bae (diff) | |
| parent | bbace130bed0c0ebc650c2d34eb19697f1545418 (diff) | |
Merge "Change coroutine testing for kotlinx.coroutines 1.9" into aosp-main-future
4 files changed, 201 insertions, 169 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfigParameterizedStateTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfigParameterizedStateTest.kt index 032979447861..0a4198a99bba 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfigParameterizedStateTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfigParameterizedStateTest.kt @@ -32,7 +32,8 @@ import java.util.Optional import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach -import kotlinx.coroutines.test.runBlockingTest +import kotlinx.coroutines.test.UnconfinedTestDispatcher +import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Test import org.junit.runner.RunWith @@ -125,14 +126,11 @@ class HomeControlsKeyguardQuickAffordanceConfigParameterizedStateTest : SysuiTes ) underTest = - HomeControlsKeyguardQuickAffordanceConfig( - context = context, - component = component, - ) + HomeControlsKeyguardQuickAffordanceConfig(context = context, component = component) } @Test - fun state() = runBlockingTest { + fun state() = runTest(UnconfinedTestDispatcher()) { whenever(component.isEnabled()).thenReturn(isFeatureEnabled) whenever(controlsController.getFavorites()) .thenReturn( diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfigTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfigTest.kt index 7d68cc0a3560..0003d07d1e2f 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfigTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfigTest.kt @@ -19,19 +19,20 @@ package com.android.systemui.keyguard.data.quickaffordance import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest -import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.animation.Expandable import com.android.systemui.controls.controller.ControlsController import com.android.systemui.controls.dagger.ControlsComponent import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceConfig.OnTriggeredResult +import com.android.systemui.res.R import com.android.systemui.util.mockito.mock import com.google.common.truth.Truth.assertThat import java.util.Optional import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach -import kotlinx.coroutines.test.runBlockingTest +import kotlinx.coroutines.test.UnconfinedTestDispatcher +import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Test import org.junit.runner.RunWith @@ -54,14 +55,11 @@ class HomeControlsKeyguardQuickAffordanceConfigTest : SysuiTestCase() { whenever(component.canShowWhileLockedSetting).thenReturn(MutableStateFlow(true)) underTest = - HomeControlsKeyguardQuickAffordanceConfig( - context = context, - component = component, - ) + HomeControlsKeyguardQuickAffordanceConfig(context = context, component = component) } @Test - fun state_whenCannotShowWhileLocked_returnsHidden() = runBlockingTest { + fun state_whenCannotShowWhileLocked_returnsHidden() = runTest(UnconfinedTestDispatcher()) { whenever(component.canShowWhileLockedSetting).thenReturn(MutableStateFlow(false)) whenever(component.isEnabled()).thenReturn(true) whenever(component.getTileImageId()).thenReturn(R.drawable.controls_icon) @@ -81,7 +79,7 @@ class HomeControlsKeyguardQuickAffordanceConfigTest : SysuiTestCase() { } @Test - fun state_whenListingControllerIsMissing_returnsHidden() = runBlockingTest { + fun state_whenListingControllerIsMissing_returnsHidden() = runTest(UnconfinedTestDispatcher()) { whenever(component.isEnabled()).thenReturn(true) whenever(component.getTileImageId()).thenReturn(R.drawable.controls_icon) whenever(component.getTileTitleId()).thenReturn(R.string.quick_controls_title) @@ -100,23 +98,26 @@ class HomeControlsKeyguardQuickAffordanceConfigTest : SysuiTestCase() { } @Test - fun onQuickAffordanceTriggered_canShowWhileLockedSettingIsTrue() = runBlockingTest { - whenever(component.canShowWhileLockedSetting).thenReturn(MutableStateFlow(true)) + fun onQuickAffordanceTriggered_canShowWhileLockedSettingIsTrue() = + runTest(UnconfinedTestDispatcher()) { + whenever(component.canShowWhileLockedSetting).thenReturn(MutableStateFlow(true)) - val onClickedResult = underTest.onTriggered(expandable) + val onClickedResult = underTest.onTriggered(expandable) - assertThat(onClickedResult).isInstanceOf(OnTriggeredResult.StartActivity::class.java) - assertThat((onClickedResult as OnTriggeredResult.StartActivity).canShowWhileLocked).isTrue() - } + assertThat(onClickedResult).isInstanceOf(OnTriggeredResult.StartActivity::class.java) + assertThat((onClickedResult as OnTriggeredResult.StartActivity).canShowWhileLocked) + .isTrue() + } @Test - fun onQuickAffordanceTriggered_canShowWhileLockedSettingIsFalse() = runBlockingTest { - whenever(component.canShowWhileLockedSetting).thenReturn(MutableStateFlow(false)) + fun onQuickAffordanceTriggered_canShowWhileLockedSettingIsFalse() = + runTest(UnconfinedTestDispatcher()) { + whenever(component.canShowWhileLockedSetting).thenReturn(MutableStateFlow(false)) - val onClickedResult = underTest.onTriggered(expandable) + val onClickedResult = underTest.onTriggered(expandable) - assertThat(onClickedResult).isInstanceOf(OnTriggeredResult.StartActivity::class.java) - assertThat((onClickedResult as OnTriggeredResult.StartActivity).canShowWhileLocked) - .isFalse() - } + assertThat(onClickedResult).isInstanceOf(OnTriggeredResult.StartActivity::class.java) + assertThat((onClickedResult as OnTriggeredResult.StartActivity).canShowWhileLocked) + .isFalse() + } } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/data/quickaffordance/QrCodeScannerKeyguardQuickAffordanceConfigTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/data/quickaffordance/QrCodeScannerKeyguardQuickAffordanceConfigTest.kt index ca64cec98b2e..05a74c038cc1 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/data/quickaffordance/QrCodeScannerKeyguardQuickAffordanceConfigTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/data/quickaffordance/QrCodeScannerKeyguardQuickAffordanceConfigTest.kt @@ -29,7 +29,7 @@ import com.android.systemui.util.mockito.whenever import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach -import kotlinx.coroutines.test.runBlockingTest +import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Test @@ -56,60 +56,63 @@ class QrCodeScannerKeyguardQuickAffordanceConfigTest : SysuiTestCase() { } @Test - fun affordance_setsUpRegistrationAndDeliversInitialModel() = runBlockingTest { - whenever(controller.isEnabledForLockScreenButton).thenReturn(true) - var latest: KeyguardQuickAffordanceConfig.LockScreenState? = null - - val job = underTest.lockScreenState.onEach { latest = it }.launchIn(this) + fun affordance_setsUpRegistrationAndDeliversInitialModel() = + runTest(UnconfinedTestDispatcher()) { + whenever(controller.isEnabledForLockScreenButton).thenReturn(true) + var latest: KeyguardQuickAffordanceConfig.LockScreenState? = null + + val job = underTest.lockScreenState.onEach { latest = it }.launchIn(this) + + val callbackCaptor = argumentCaptor<QRCodeScannerController.Callback>() + verify(controller).addCallback(callbackCaptor.capture()) + verify(controller) + .registerQRCodeScannerChangeObservers( + QRCodeScannerController.DEFAULT_QR_CODE_SCANNER_CHANGE, + QRCodeScannerController.QR_CODE_SCANNER_PREFERENCE_CHANGE, + ) + assertVisibleState(latest) - val callbackCaptor = argumentCaptor<QRCodeScannerController.Callback>() - verify(controller).addCallback(callbackCaptor.capture()) - verify(controller) - .registerQRCodeScannerChangeObservers( - QRCodeScannerController.DEFAULT_QR_CODE_SCANNER_CHANGE, - QRCodeScannerController.QR_CODE_SCANNER_PREFERENCE_CHANGE - ) - assertVisibleState(latest) - - job.cancel() - verify(controller).removeCallback(callbackCaptor.value) - } + job.cancel() + verify(controller).removeCallback(callbackCaptor.value) + } @Test - fun affordance_scannerActivityChanged_deliversModelWithUpdatedIntent() = runBlockingTest { - whenever(controller.isEnabledForLockScreenButton).thenReturn(true) - var latest: KeyguardQuickAffordanceConfig.LockScreenState? = null - val job = underTest.lockScreenState.onEach { latest = it }.launchIn(this) - val callbackCaptor = argumentCaptor<QRCodeScannerController.Callback>() - verify(controller).addCallback(callbackCaptor.capture()) + fun affordance_scannerActivityChanged_deliversModelWithUpdatedIntent() = + runTest(UnconfinedTestDispatcher()) { + whenever(controller.isEnabledForLockScreenButton).thenReturn(true) + var latest: KeyguardQuickAffordanceConfig.LockScreenState? = null + val job = underTest.lockScreenState.onEach { latest = it }.launchIn(this) + val callbackCaptor = argumentCaptor<QRCodeScannerController.Callback>() + verify(controller).addCallback(callbackCaptor.capture()) - whenever(controller.intent).thenReturn(INTENT_2) - callbackCaptor.value.onQRCodeScannerActivityChanged() + whenever(controller.intent).thenReturn(INTENT_2) + callbackCaptor.value.onQRCodeScannerActivityChanged() - assertVisibleState(latest) + assertVisibleState(latest) - job.cancel() - verify(controller).removeCallback(callbackCaptor.value) - } + job.cancel() + verify(controller).removeCallback(callbackCaptor.value) + } @Test - fun affordance_scannerPreferenceChanged_deliversVisibleModel() = runBlockingTest { - var latest: KeyguardQuickAffordanceConfig.LockScreenState? = null - val job = underTest.lockScreenState.onEach { latest = it }.launchIn(this) - val callbackCaptor = argumentCaptor<QRCodeScannerController.Callback>() - verify(controller).addCallback(callbackCaptor.capture()) + fun affordance_scannerPreferenceChanged_deliversVisibleModel() = + runTest(UnconfinedTestDispatcher()) { + var latest: KeyguardQuickAffordanceConfig.LockScreenState? = null + val job = underTest.lockScreenState.onEach { latest = it }.launchIn(this) + val callbackCaptor = argumentCaptor<QRCodeScannerController.Callback>() + verify(controller).addCallback(callbackCaptor.capture()) - whenever(controller.isEnabledForLockScreenButton).thenReturn(true) - callbackCaptor.value.onQRCodeScannerPreferenceChanged() + whenever(controller.isEnabledForLockScreenButton).thenReturn(true) + callbackCaptor.value.onQRCodeScannerPreferenceChanged() - assertVisibleState(latest) + assertVisibleState(latest) - job.cancel() - verify(controller).removeCallback(callbackCaptor.value) - } + job.cancel() + verify(controller).removeCallback(callbackCaptor.value) + } @Test - fun affordance_scannerPreferenceChanged_deliversNone() = runBlockingTest { + fun affordance_scannerPreferenceChanged_deliversNone() = runTest(UnconfinedTestDispatcher()) { var latest: KeyguardQuickAffordanceConfig.LockScreenState? = null val job = underTest.lockScreenState.onEach { latest = it }.launchIn(this) val callbackCaptor = argumentCaptor<QRCodeScannerController.Callback>() @@ -128,30 +131,29 @@ class QrCodeScannerKeyguardQuickAffordanceConfigTest : SysuiTestCase() { fun onQuickAffordanceTriggered() { assertThat(underTest.onTriggered(mock())) .isEqualTo( - OnTriggeredResult.StartActivity( - intent = INTENT_1, - canShowWhileLocked = true, - ) + OnTriggeredResult.StartActivity(intent = INTENT_1, canShowWhileLocked = true) ) } @Test - fun getPickerScreenState_enabledIfConfiguredOnDevice_isEnabledForPickerState() = runTest { - whenever(controller.isAllowedOnLockScreen).thenReturn(true) - whenever(controller.isAbleToLaunchScannerActivity).thenReturn(true) + fun getPickerScreenState_enabledIfConfiguredOnDevice_isEnabledForPickerState() = + runTest(UnconfinedTestDispatcher()) { + whenever(controller.isAllowedOnLockScreen).thenReturn(true) + whenever(controller.isAbleToLaunchScannerActivity).thenReturn(true) - assertThat(underTest.getPickerScreenState()) - .isEqualTo(KeyguardQuickAffordanceConfig.PickerScreenState.Default()) - } + assertThat(underTest.getPickerScreenState()) + .isEqualTo(KeyguardQuickAffordanceConfig.PickerScreenState.Default()) + } @Test - fun getPickerScreenState_disabledIfConfiguredOnDevice_isDisabledForPickerState() = runTest { - whenever(controller.isAllowedOnLockScreen).thenReturn(true) - whenever(controller.isAbleToLaunchScannerActivity).thenReturn(false) - - assertThat(underTest.getPickerScreenState()) - .isEqualTo(KeyguardQuickAffordanceConfig.PickerScreenState.UnavailableOnDevice) - } + fun getPickerScreenState_disabledIfConfiguredOnDevice_isDisabledForPickerState() = + runTest(UnconfinedTestDispatcher()) { + whenever(controller.isAllowedOnLockScreen).thenReturn(true) + whenever(controller.isAbleToLaunchScannerActivity).thenReturn(false) + + assertThat(underTest.getPickerScreenState()) + .isEqualTo(KeyguardQuickAffordanceConfig.PickerScreenState.UnavailableOnDevice) + } private fun assertVisibleState(latest: KeyguardQuickAffordanceConfig.LockScreenState?) { assertThat(latest) diff --git a/packages/SystemUI/tests/src/com/android/systemui/broadcast/BroadcastDispatcherTest.kt b/packages/SystemUI/tests/src/com/android/systemui/broadcast/BroadcastDispatcherTest.kt index 2c1718176571..bfbdc50c32b2 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/broadcast/BroadcastDispatcherTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/broadcast/BroadcastDispatcherTest.kt @@ -24,9 +24,9 @@ import android.os.Handler import android.os.Looper import android.os.PatternMatcher import android.os.UserHandle -import androidx.test.filters.SmallTest import android.testing.AndroidTestingRunner import android.testing.TestableLooper +import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.broadcast.logging.BroadcastDispatcherLogger import com.android.systemui.dump.DumpManager @@ -40,8 +40,9 @@ import java.util.concurrent.Executor import junit.framework.Assert.assertSame import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch +import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.advanceUntilIdle -import kotlinx.coroutines.test.runBlockingTest +import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Test import org.junit.runner.RunWith @@ -68,39 +69,28 @@ class BroadcastDispatcherTest : SysuiTestCase() { val DEFAULT_PERMISSION: String? = null fun <T> capture(argumentCaptor: ArgumentCaptor<T>): T = argumentCaptor.capture() + const val TEST_ACTION = "TEST_ACTION" const val TEST_SCHEME = "TEST_SCHEME" const val TEST_PATH = "TEST_PATH" const val TEST_TYPE = "test/type" } - @Mock - private lateinit var mockContext: Context - @Mock - private lateinit var mockUBRUser0: UserBroadcastDispatcher - @Mock - private lateinit var mockUBRUser1: UserBroadcastDispatcher - @Mock - private lateinit var broadcastReceiver: BroadcastReceiver - @Mock - private lateinit var broadcastReceiverOther: BroadcastReceiver - @Mock - private lateinit var intentFilter: IntentFilter - @Mock - private lateinit var intentFilterOther: IntentFilter - @Mock - private lateinit var mockHandler: Handler - @Mock - private lateinit var logger: BroadcastDispatcherLogger - @Mock - private lateinit var userTracker: UserTracker - @Mock - private lateinit var removalPendingStore: PendingRemovalStore + @Mock private lateinit var mockContext: Context + @Mock private lateinit var mockUBRUser0: UserBroadcastDispatcher + @Mock private lateinit var mockUBRUser1: UserBroadcastDispatcher + @Mock private lateinit var broadcastReceiver: BroadcastReceiver + @Mock private lateinit var broadcastReceiverOther: BroadcastReceiver + @Mock private lateinit var intentFilter: IntentFilter + @Mock private lateinit var intentFilterOther: IntentFilter + @Mock private lateinit var mockHandler: Handler + @Mock private lateinit var logger: BroadcastDispatcherLogger + @Mock private lateinit var userTracker: UserTracker + @Mock private lateinit var removalPendingStore: PendingRemovalStore private lateinit var mainExecutor: Executor - @Captor - private lateinit var argumentCaptor: ArgumentCaptor<ReceiverData> + @Captor private lateinit var argumentCaptor: ArgumentCaptor<ReceiverData> private lateinit var testableLooper: TestableLooper private lateinit var broadcastDispatcher: BroadcastDispatcher @@ -112,7 +102,8 @@ class BroadcastDispatcherTest : SysuiTestCase() { mainExecutor = FakeExecutor(FakeSystemClock()) `when`(mockContext.mainExecutor).thenReturn(mainExecutor) - broadcastDispatcher = TestBroadcastDispatcher( + broadcastDispatcher = + TestBroadcastDispatcher( mockContext, mainExecutor, testableLooper.looper, @@ -121,7 +112,8 @@ class BroadcastDispatcherTest : SysuiTestCase() { logger, userTracker, removalPendingStore, - mapOf(0 to mockUBRUser0, 1 to mockUBRUser1)) + mapOf(0 to mockUBRUser0, 1 to mockUBRUser1), + ) // These should be valid filters `when`(intentFilter.countActions()).thenReturn(1) @@ -131,10 +123,18 @@ class BroadcastDispatcherTest : SysuiTestCase() { @Test fun testAddingReceiverToCorrectUBR() { - broadcastDispatcher.registerReceiverWithHandler(broadcastReceiver, intentFilter, - mockHandler, user0) broadcastDispatcher.registerReceiverWithHandler( - broadcastReceiverOther, intentFilterOther, mockHandler, user1) + broadcastReceiver, + intentFilter, + mockHandler, + user0, + ) + broadcastDispatcher.registerReceiverWithHandler( + broadcastReceiverOther, + intentFilterOther, + mockHandler, + user1, + ) testableLooper.processAllMessages() @@ -152,7 +152,11 @@ class BroadcastDispatcherTest : SysuiTestCase() { fun testAddingReceiverToCorrectUBR_executor() { broadcastDispatcher.registerReceiver(broadcastReceiver, intentFilter, mainExecutor, user0) broadcastDispatcher.registerReceiver( - broadcastReceiverOther, intentFilterOther, mainExecutor, user1) + broadcastReceiverOther, + intentFilterOther, + mainExecutor, + user1, + ) testableLooper.processAllMessages() @@ -169,7 +173,10 @@ class BroadcastDispatcherTest : SysuiTestCase() { @Test fun testAddReceiverDefaultFlag_handler() { broadcastDispatcher.registerReceiverWithHandler( - broadcastReceiver, intentFilter, mockHandler) + broadcastReceiver, + intentFilter, + mockHandler, + ) testableLooper.processAllMessages() verify(mockUBRUser0).registerReceiver(capture(argumentCaptor), eq(DEFAULT_FLAG)) @@ -183,7 +190,11 @@ class BroadcastDispatcherTest : SysuiTestCase() { val flag = 3 broadcastDispatcher.registerReceiverWithHandler( - broadcastReceiver, intentFilter, mockHandler, flags = flag) + broadcastReceiver, + intentFilter, + mockHandler, + flags = flag, + ) testableLooper.processAllMessages() verify(mockUBRUser0).registerReceiver(capture(argumentCaptor), eq(flag)) @@ -212,7 +223,7 @@ class BroadcastDispatcherTest : SysuiTestCase() { broadcastReceiver, intentFilter, flags = flag, - permission = permission + permission = permission, ) testableLooper.processAllMessages() @@ -250,10 +261,18 @@ class BroadcastDispatcherTest : SysuiTestCase() { @Test fun testRemovingReceiversRemovesFromAllUBR() { - broadcastDispatcher.registerReceiverWithHandler(broadcastReceiver, intentFilter, - mockHandler, user0) - broadcastDispatcher.registerReceiverWithHandler(broadcastReceiver, intentFilter, - mockHandler, user1) + broadcastDispatcher.registerReceiverWithHandler( + broadcastReceiver, + intentFilter, + mockHandler, + user0, + ) + broadcastDispatcher.registerReceiverWithHandler( + broadcastReceiver, + intentFilter, + mockHandler, + user1, + ) broadcastDispatcher.unregisterReceiver(broadcastReceiver) @@ -265,10 +284,18 @@ class BroadcastDispatcherTest : SysuiTestCase() { @Test fun testRemoveReceiverFromUser() { - broadcastDispatcher.registerReceiverWithHandler(broadcastReceiver, intentFilter, - mockHandler, user0) - broadcastDispatcher.registerReceiverWithHandler(broadcastReceiver, intentFilter, - mockHandler, user1) + broadcastDispatcher.registerReceiverWithHandler( + broadcastReceiver, + intentFilter, + mockHandler, + user0, + ) + broadcastDispatcher.registerReceiverWithHandler( + broadcastReceiver, + intentFilter, + mockHandler, + user1, + ) broadcastDispatcher.unregisterReceiverForUser(broadcastReceiver, user0) @@ -282,13 +309,17 @@ class BroadcastDispatcherTest : SysuiTestCase() { fun testRegisterCurrentAsActualUser() { `when`(userTracker.userId).thenReturn(user1.identifier) - broadcastDispatcher.registerReceiverWithHandler(broadcastReceiver, intentFilter, - mockHandler, UserHandle.CURRENT) + broadcastDispatcher.registerReceiverWithHandler( + broadcastReceiver, + intentFilter, + mockHandler, + UserHandle.CURRENT, + ) testableLooper.processAllMessages() - verify(mockUBRUser1).registerReceiver( - capture(argumentCaptor), eq(Context.RECEIVER_EXPORTED)) + verify(mockUBRUser1) + .registerReceiver(capture(argumentCaptor), eq(Context.RECEIVER_EXPORTED)) assertSame(broadcastReceiver, argumentCaptor.value.receiver) } @@ -300,41 +331,38 @@ class BroadcastDispatcherTest : SysuiTestCase() { @Test(expected = IllegalArgumentException::class) fun testFilterMustNotContainDataScheme() { - val testFilter = IntentFilter(TEST_ACTION).apply { - addDataScheme(TEST_SCHEME) - } + val testFilter = IntentFilter(TEST_ACTION).apply { addDataScheme(TEST_SCHEME) } broadcastDispatcher.registerReceiver(broadcastReceiver, testFilter) } @Test(expected = IllegalArgumentException::class) fun testFilterMustNotContainDataAuthority() { - val testFilter = IntentFilter(TEST_ACTION).apply { - addDataAuthority(mock(IntentFilter.AuthorityEntry::class.java)) - } + val testFilter = + IntentFilter(TEST_ACTION).apply { + addDataAuthority(mock(IntentFilter.AuthorityEntry::class.java)) + } broadcastDispatcher.registerReceiver(broadcastReceiver, testFilter) } @Test(expected = IllegalArgumentException::class) fun testFilterMustNotContainDataPath() { - val testFilter = IntentFilter(TEST_ACTION).apply { - addDataPath(TEST_PATH, PatternMatcher.PATTERN_LITERAL) - } + val testFilter = + IntentFilter(TEST_ACTION).apply { + addDataPath(TEST_PATH, PatternMatcher.PATTERN_LITERAL) + } broadcastDispatcher.registerReceiver(broadcastReceiver, testFilter) } @Test(expected = IllegalArgumentException::class) fun testFilterMustNotContainDataType() { - val testFilter = IntentFilter(TEST_ACTION).apply { - addDataType(TEST_TYPE) - } + val testFilter = IntentFilter(TEST_ACTION).apply { addDataType(TEST_TYPE) } broadcastDispatcher.registerReceiver(broadcastReceiver, testFilter) } @Test(expected = IllegalArgumentException::class) fun testFilterMustNotSetPriority() { - val testFilter = IntentFilter(TEST_ACTION).apply { - priority = IntentFilter.SYSTEM_HIGH_PRIORITY - } + val testFilter = + IntentFilter(TEST_ACTION).apply { priority = IntentFilter.SYSTEM_HIGH_PRIORITY } broadcastDispatcher.registerReceiver(broadcastReceiver, testFilter) } @@ -366,12 +394,14 @@ class BroadcastDispatcherTest : SysuiTestCase() { val inOrderUser0 = inOrder(mockUBRUser0, removalPendingStore) inOrderUser0.verify(mockUBRUser0).unregisterReceiver(broadcastReceiver) - inOrderUser0.verify(removalPendingStore) + inOrderUser0 + .verify(removalPendingStore) .clearPendingRemoval(broadcastReceiver, UserHandle.USER_ALL) val inOrderUser1 = inOrder(mockUBRUser1, removalPendingStore) inOrderUser1.verify(mockUBRUser1).unregisterReceiver(broadcastReceiver) - inOrderUser1.verify(removalPendingStore) + inOrderUser1 + .verify(removalPendingStore) .clearPendingRemoval(broadcastReceiver, UserHandle.USER_ALL) } @@ -385,21 +415,21 @@ class BroadcastDispatcherTest : SysuiTestCase() { val inOrderUser1 = inOrder(mockUBRUser1, removalPendingStore) inOrderUser1.verify(mockUBRUser1).unregisterReceiver(broadcastReceiver) - inOrderUser1.verify(removalPendingStore) + inOrderUser1 + .verify(removalPendingStore) .clearPendingRemoval(broadcastReceiver, user1.identifier) } @Test - fun testBroadcastFlow() = runBlockingTest { - val flow = broadcastDispatcher.broadcastFlow(intentFilter, user1) { intent, receiver -> - intent to receiver - } + fun testBroadcastFlow() = runTest(UnconfinedTestDispatcher()) { + val flow = + broadcastDispatcher.broadcastFlow(intentFilter, user1) { intent, receiver -> + intent to receiver + } // Collect the values into collectedValues. val collectedValues = mutableListOf<Pair<Intent, BroadcastReceiver>>() - val job = launch { - flow.collect { collectedValues.add(it) } - } + val job = launch { flow.collect { collectedValues.add(it) } } testableLooper.processAllMessages() verify(mockUBRUser1).registerReceiver(capture(argumentCaptor), eq(DEFAULT_FLAG)) @@ -436,17 +466,18 @@ class BroadcastDispatcherTest : SysuiTestCase() { logger: BroadcastDispatcherLogger, userTracker: UserTracker, removalPendingStore: PendingRemovalStore, - var mockUBRMap: Map<Int, UserBroadcastDispatcher> - ) : BroadcastDispatcher( - context, - mainExecutor, - backgroundRunningLooper, - backgroundRunningExecutor, - dumpManager, - logger, - userTracker, - removalPendingStore - ) { + var mockUBRMap: Map<Int, UserBroadcastDispatcher>, + ) : + BroadcastDispatcher( + context, + mainExecutor, + backgroundRunningLooper, + backgroundRunningExecutor, + dumpManager, + logger, + userTracker, + removalPendingStore, + ) { override fun createUBRForUser(userId: Int): UserBroadcastDispatcher { return mockUBRMap.getOrDefault(userId, mock(UserBroadcastDispatcher::class.java)) } |