diff options
3 files changed, 92 insertions, 200 deletions
diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp index e2599a3583c7..17037b0d94a2 100644 --- a/packages/SystemUI/Android.bp +++ b/packages/SystemUI/Android.bp @@ -307,6 +307,8 @@ filegroup { "tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcherTest.kt", "tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/DisabledWifiRepositoryTest.kt", "tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepositoryImplTest.kt", + "tests/src/com/android/systemui/statusbar/pipeline/wifi/domain/interactor/WifiInteractorImplTest.kt", + "tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt", ], path: "tests/src", } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/domain/interactor/WifiInteractorImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/domain/interactor/WifiInteractorImplTest.kt index fc2277b9c803..6fe88c100fdc 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/domain/interactor/WifiInteractorImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/domain/interactor/WifiInteractorImplTest.kt @@ -17,7 +17,9 @@ package com.android.systemui.statusbar.pipeline.wifi.domain.interactor import android.net.wifi.WifiManager +import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest +import com.android.systemui.RoboPilotTest import com.android.systemui.SysuiTestCase import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlot import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel @@ -25,18 +27,22 @@ import com.android.systemui.statusbar.pipeline.shared.data.repository.FakeConnec import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel import com.google.common.truth.Truth.assertThat -import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach -import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.test.TestScope +import kotlinx.coroutines.test.runCurrent +import kotlinx.coroutines.test.runTest import kotlinx.coroutines.yield import org.junit.Before import org.junit.Test +import org.junit.runner.RunWith @OptIn(ExperimentalCoroutinesApi::class) @Suppress("EXPERIMENTAL_IS_NOT_ENABLED") @SmallTest +@RoboPilotTest +@RunWith(AndroidJUnit4::class) class WifiInteractorImplTest : SysuiTestCase() { private lateinit var underTest: WifiInteractor @@ -44,6 +50,8 @@ class WifiInteractorImplTest : SysuiTestCase() { private lateinit var connectivityRepository: FakeConnectivityRepository private lateinit var wifiRepository: FakeWifiRepository + private val testScope = TestScope() + @Before fun setUp() { connectivityRepository = FakeConnectivityRepository() @@ -53,11 +61,12 @@ class WifiInteractorImplTest : SysuiTestCase() { @Test fun ssid_unavailableNetwork_outputsNull() = - runBlocking(IMMEDIATE) { + testScope.runTest { wifiRepository.setWifiNetwork(WifiNetworkModel.Unavailable) var latest: String? = "default" val job = underTest.ssid.onEach { latest = it }.launchIn(this) + runCurrent() assertThat(latest).isNull() @@ -66,11 +75,12 @@ class WifiInteractorImplTest : SysuiTestCase() { @Test fun ssid_inactiveNetwork_outputsNull() = - runBlocking(IMMEDIATE) { + testScope.runTest { wifiRepository.setWifiNetwork(WifiNetworkModel.Inactive) var latest: String? = "default" val job = underTest.ssid.onEach { latest = it }.launchIn(this) + runCurrent() assertThat(latest).isNull() @@ -79,13 +89,14 @@ class WifiInteractorImplTest : SysuiTestCase() { @Test fun ssid_carrierMergedNetwork_outputsNull() = - runBlocking(IMMEDIATE) { + testScope.runTest { wifiRepository.setWifiNetwork( WifiNetworkModel.CarrierMerged(networkId = 1, subscriptionId = 2, level = 1) ) var latest: String? = "default" val job = underTest.ssid.onEach { latest = it }.launchIn(this) + runCurrent() assertThat(latest).isNull() @@ -94,7 +105,7 @@ class WifiInteractorImplTest : SysuiTestCase() { @Test fun ssid_isPasspointAccessPoint_outputsPasspointName() = - runBlocking(IMMEDIATE) { + testScope.runTest { wifiRepository.setWifiNetwork( WifiNetworkModel.Active( networkId = 1, @@ -106,6 +117,7 @@ class WifiInteractorImplTest : SysuiTestCase() { var latest: String? = null val job = underTest.ssid.onEach { latest = it }.launchIn(this) + runCurrent() assertThat(latest).isEqualTo("friendly") @@ -114,7 +126,7 @@ class WifiInteractorImplTest : SysuiTestCase() { @Test fun ssid_isOnlineSignUpForPasspoint_outputsPasspointName() = - runBlocking(IMMEDIATE) { + testScope.runTest { wifiRepository.setWifiNetwork( WifiNetworkModel.Active( networkId = 1, @@ -126,6 +138,7 @@ class WifiInteractorImplTest : SysuiTestCase() { var latest: String? = null val job = underTest.ssid.onEach { latest = it }.launchIn(this) + runCurrent() assertThat(latest).isEqualTo("friendly") @@ -134,7 +147,7 @@ class WifiInteractorImplTest : SysuiTestCase() { @Test fun ssid_unknownSsid_outputsNull() = - runBlocking(IMMEDIATE) { + testScope.runTest { wifiRepository.setWifiNetwork( WifiNetworkModel.Active( networkId = 1, @@ -145,6 +158,7 @@ class WifiInteractorImplTest : SysuiTestCase() { var latest: String? = "default" val job = underTest.ssid.onEach { latest = it }.launchIn(this) + runCurrent() assertThat(latest).isNull() @@ -153,7 +167,7 @@ class WifiInteractorImplTest : SysuiTestCase() { @Test fun ssid_validSsid_outputsSsid() = - runBlocking(IMMEDIATE) { + testScope.runTest { wifiRepository.setWifiNetwork( WifiNetworkModel.Active( networkId = 1, @@ -164,6 +178,7 @@ class WifiInteractorImplTest : SysuiTestCase() { var latest: String? = null val job = underTest.ssid.onEach { latest = it }.launchIn(this) + runCurrent() assertThat(latest).isEqualTo("MyAwesomeWifiNetwork") @@ -172,7 +187,7 @@ class WifiInteractorImplTest : SysuiTestCase() { @Test fun isEnabled_matchesRepoIsEnabled() = - runBlocking(IMMEDIATE) { + testScope.runTest { var latest: Boolean? = null val job = underTest.isEnabled.onEach { latest = it }.launchIn(this) @@ -193,7 +208,7 @@ class WifiInteractorImplTest : SysuiTestCase() { @Test fun isDefault_matchesRepoIsDefault() = - runBlocking(IMMEDIATE) { + testScope.runTest { var latest: Boolean? = null val job = underTest.isDefault.onEach { latest = it }.launchIn(this) @@ -214,7 +229,7 @@ class WifiInteractorImplTest : SysuiTestCase() { @Test fun wifiNetwork_matchesRepoWifiNetwork() = - runBlocking(IMMEDIATE) { + testScope.runTest { val wifiNetwork = WifiNetworkModel.Active( networkId = 45, @@ -227,6 +242,7 @@ class WifiInteractorImplTest : SysuiTestCase() { var latest: WifiNetworkModel? = null val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this) + runCurrent() assertThat(latest).isEqualTo(wifiNetwork) @@ -235,7 +251,7 @@ class WifiInteractorImplTest : SysuiTestCase() { @Test fun activity_matchesRepoWifiActivity() = - runBlocking(IMMEDIATE) { + testScope.runTest { var latest: DataActivityModel? = null val job = underTest.activity.onEach { latest = it }.launchIn(this) @@ -259,11 +275,12 @@ class WifiInteractorImplTest : SysuiTestCase() { @Test fun isForceHidden_repoHasWifiHidden_outputsTrue() = - runBlocking(IMMEDIATE) { + testScope.runTest { connectivityRepository.setForceHiddenIcons(setOf(ConnectivitySlot.WIFI)) var latest: Boolean? = null val job = underTest.isForceHidden.onEach { latest = it }.launchIn(this) + runCurrent() assertThat(latest).isTrue() @@ -272,16 +289,15 @@ class WifiInteractorImplTest : SysuiTestCase() { @Test fun isForceHidden_repoDoesNotHaveWifiHidden_outputsFalse() = - runBlocking(IMMEDIATE) { + testScope.runTest { connectivityRepository.setForceHiddenIcons(setOf()) var latest: Boolean? = null val job = underTest.isForceHidden.onEach { latest = it }.launchIn(this) + runCurrent() assertThat(latest).isFalse() job.cancel() } } - -private val IMMEDIATE = Dispatchers.Main.immediate diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt index cb469ead83cb..bdeba2a2f4c8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt @@ -16,8 +16,11 @@ package com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel +import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest +import com.android.systemui.RoboPilotTest import com.android.systemui.SysuiTestCase +import com.android.systemui.coroutines.collectLastValue import com.android.systemui.log.table.TableLogBuffer import com.android.systemui.statusbar.phone.StatusBarLocation import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirplaneModeRepository @@ -36,23 +39,19 @@ import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkMode import com.android.systemui.statusbar.pipeline.wifi.ui.model.WifiIcon import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel.Companion.viewModelForLocation import com.google.common.truth.Truth.assertThat -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.cancel import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.launchIn -import kotlinx.coroutines.flow.onEach -import kotlinx.coroutines.runBlocking -import kotlinx.coroutines.yield -import org.junit.After +import kotlinx.coroutines.test.TestScope +import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Test +import org.junit.runner.RunWith import org.mockito.Mock import org.mockito.Mockito.`when` as whenever import org.mockito.MockitoAnnotations -@Suppress("EXPERIMENTAL_IS_NOT_ENABLED") @SmallTest +@RoboPilotTest +@RunWith(AndroidJUnit4::class) class WifiViewModelTest : SysuiTestCase() { private lateinit var underTest: WifiViewModel @@ -66,7 +65,7 @@ class WifiViewModelTest : SysuiTestCase() { private lateinit var interactor: WifiInteractor private lateinit var airplaneModeViewModel: AirplaneModeViewModel private val shouldShowSignalSpacerProviderFlow = MutableStateFlow(false) - private lateinit var scope: CoroutineScope + private val testScope = TestScope() @Before fun setUp() { @@ -76,7 +75,6 @@ class WifiViewModelTest : SysuiTestCase() { wifiRepository = FakeWifiRepository() wifiRepository.setIsWifiEnabled(true) interactor = WifiInteractorImpl(connectivityRepository, wifiRepository) - scope = CoroutineScope(IMMEDIATE) airplaneModeViewModel = AirplaneModeViewModelImpl( AirplaneModeInteractor( @@ -84,17 +82,12 @@ class WifiViewModelTest : SysuiTestCase() { connectivityRepository, ), tableLogBuffer, - scope, + testScope.backgroundScope, ) createAndSetViewModel() } - @After - fun tearDown() { - scope.cancel() - } - // See [WifiViewModelIconParameterizedTest] for additional view model tests. // Note on testing: [WifiViewModel] exposes 3 different instances of @@ -104,104 +97,65 @@ class WifiViewModelTest : SysuiTestCase() { @Test fun wifiIcon_allLocationViewModelsReceiveSameData() = - runBlocking(IMMEDIATE) { + testScope.runTest { val home = viewModelForLocation(underTest, StatusBarLocation.HOME) val keyguard = viewModelForLocation(underTest, StatusBarLocation.KEYGUARD) val qs = viewModelForLocation(underTest, StatusBarLocation.QS) - var latestHome: WifiIcon? = null - val jobHome = home.wifiIcon.onEach { latestHome = it }.launchIn(this) - - var latestKeyguard: WifiIcon? = null - val jobKeyguard = keyguard.wifiIcon.onEach { latestKeyguard = it }.launchIn(this) - - var latestQs: WifiIcon? = null - val jobQs = qs.wifiIcon.onEach { latestQs = it }.launchIn(this) + val latestHome by collectLastValue(home.wifiIcon) + val latestKeyguard by collectLastValue(keyguard.wifiIcon) + val latestQs by collectLastValue(qs.wifiIcon) wifiRepository.setWifiNetwork( WifiNetworkModel.Active(NETWORK_ID, isValidated = true, level = 1) ) - yield() assertThat(latestHome).isInstanceOf(WifiIcon.Visible::class.java) assertThat(latestHome).isEqualTo(latestKeyguard) assertThat(latestKeyguard).isEqualTo(latestQs) - - jobHome.cancel() - jobKeyguard.cancel() - jobQs.cancel() } @Test fun activity_showActivityConfigFalse_outputsFalse() = - runBlocking(IMMEDIATE) { + testScope.runTest { whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(false) createAndSetViewModel() wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) - var activityIn: Boolean? = null - val activityInJob = - underTest.isActivityInViewVisible.onEach { activityIn = it }.launchIn(this) - - var activityOut: Boolean? = null - val activityOutJob = - underTest.isActivityOutViewVisible.onEach { activityOut = it }.launchIn(this) - - var activityContainer: Boolean? = null - val activityContainerJob = - underTest.isActivityContainerVisible - .onEach { activityContainer = it } - .launchIn(this) + val activityIn by collectLastValue(underTest.isActivityInViewVisible) + val activityOut by collectLastValue(underTest.isActivityOutViewVisible) + val activityContainer by collectLastValue(underTest.isActivityContainerVisible) // Verify that on launch, we receive false. assertThat(activityIn).isFalse() assertThat(activityOut).isFalse() assertThat(activityContainer).isFalse() - - activityInJob.cancel() - activityOutJob.cancel() - activityContainerJob.cancel() } @Test fun activity_showActivityConfigFalse_noUpdatesReceived() = - runBlocking(IMMEDIATE) { + testScope.runTest { whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(false) createAndSetViewModel() wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) - var activityIn: Boolean? = null - val activityInJob = - underTest.isActivityInViewVisible.onEach { activityIn = it }.launchIn(this) - - var activityOut: Boolean? = null - val activityOutJob = - underTest.isActivityOutViewVisible.onEach { activityOut = it }.launchIn(this) - - var activityContainer: Boolean? = null - val activityContainerJob = - underTest.isActivityContainerVisible - .onEach { activityContainer = it } - .launchIn(this) + val activityIn by collectLastValue(underTest.isActivityInViewVisible) + val activityOut by collectLastValue(underTest.isActivityOutViewVisible) + val activityContainer by collectLastValue(underTest.isActivityContainerVisible) // WHEN we update the repo to have activity val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true) wifiRepository.setWifiActivity(activity) - yield() // THEN we didn't update to the new activity (because our config is false) assertThat(activityIn).isFalse() assertThat(activityOut).isFalse() assertThat(activityContainer).isFalse() - - activityInJob.cancel() - activityOutJob.cancel() - activityContainerJob.cancel() } @Test fun activity_nullSsid_outputsFalse() = - runBlocking(IMMEDIATE) { + testScope.runTest { whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) createAndSetViewModel() @@ -209,38 +163,23 @@ class WifiViewModelTest : SysuiTestCase() { WifiNetworkModel.Active(NETWORK_ID, ssid = null, level = 1) ) - var activityIn: Boolean? = null - val activityInJob = - underTest.isActivityInViewVisible.onEach { activityIn = it }.launchIn(this) - - var activityOut: Boolean? = null - val activityOutJob = - underTest.isActivityOutViewVisible.onEach { activityOut = it }.launchIn(this) - - var activityContainer: Boolean? = null - val activityContainerJob = - underTest.isActivityContainerVisible - .onEach { activityContainer = it } - .launchIn(this) + val activityIn by collectLastValue(underTest.isActivityInViewVisible) + val activityOut by collectLastValue(underTest.isActivityOutViewVisible) + val activityContainer by collectLastValue(underTest.isActivityContainerVisible) // WHEN we update the repo to have activity val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true) wifiRepository.setWifiActivity(activity) - yield() // THEN we still output false because our network's SSID is null assertThat(activityIn).isFalse() assertThat(activityOut).isFalse() assertThat(activityContainer).isFalse() - - activityInJob.cancel() - activityOutJob.cancel() - activityContainerJob.cancel() } @Test fun activity_allLocationViewModelsReceiveSameData() = - runBlocking(IMMEDIATE) { + testScope.runTest { whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) createAndSetViewModel() wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) @@ -249,250 +188,187 @@ class WifiViewModelTest : SysuiTestCase() { val keyguard = viewModelForLocation(underTest, StatusBarLocation.KEYGUARD) val qs = viewModelForLocation(underTest, StatusBarLocation.QS) - var latestHome: Boolean? = null - val jobHome = home.isActivityInViewVisible.onEach { latestHome = it }.launchIn(this) - - var latestKeyguard: Boolean? = null - val jobKeyguard = - keyguard.isActivityInViewVisible.onEach { latestKeyguard = it }.launchIn(this) - - var latestQs: Boolean? = null - val jobQs = qs.isActivityInViewVisible.onEach { latestQs = it }.launchIn(this) + val latestHome by collectLastValue(home.isActivityInViewVisible) + val latestKeyguard by collectLastValue(keyguard.isActivityInViewVisible) + val latestQs by collectLastValue(qs.isActivityInViewVisible) val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true) wifiRepository.setWifiActivity(activity) - yield() assertThat(latestHome).isTrue() assertThat(latestKeyguard).isTrue() assertThat(latestQs).isTrue() - - jobHome.cancel() - jobKeyguard.cancel() - jobQs.cancel() } @Test fun activityIn_hasActivityInTrue_outputsTrue() = - runBlocking(IMMEDIATE) { + testScope.runTest { whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) createAndSetViewModel() wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) - var latest: Boolean? = null - val job = underTest.isActivityInViewVisible.onEach { latest = it }.launchIn(this) + val latest by collectLastValue(underTest.isActivityInViewVisible) val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = false) wifiRepository.setWifiActivity(activity) - yield() assertThat(latest).isTrue() - - job.cancel() } @Test fun activityIn_hasActivityInFalse_outputsFalse() = - runBlocking(IMMEDIATE) { + testScope.runTest { whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) createAndSetViewModel() wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) - var latest: Boolean? = null - val job = underTest.isActivityInViewVisible.onEach { latest = it }.launchIn(this) + val latest by collectLastValue(underTest.isActivityInViewVisible) val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = true) wifiRepository.setWifiActivity(activity) - yield() assertThat(latest).isFalse() - - job.cancel() } @Test fun activityOut_hasActivityOutTrue_outputsTrue() = - runBlocking(IMMEDIATE) { + testScope.runTest { whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) createAndSetViewModel() wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) - var latest: Boolean? = null - val job = underTest.isActivityOutViewVisible.onEach { latest = it }.launchIn(this) + val latest by collectLastValue(underTest.isActivityOutViewVisible) val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = true) wifiRepository.setWifiActivity(activity) - yield() assertThat(latest).isTrue() - - job.cancel() } @Test fun activityOut_hasActivityOutFalse_outputsFalse() = - runBlocking(IMMEDIATE) { + testScope.runTest { whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) createAndSetViewModel() wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) - var latest: Boolean? = null - val job = underTest.isActivityOutViewVisible.onEach { latest = it }.launchIn(this) + val latest by collectLastValue(underTest.isActivityOutViewVisible) val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = false) wifiRepository.setWifiActivity(activity) - yield() assertThat(latest).isFalse() - - job.cancel() } @Test fun activityContainer_hasActivityInTrue_outputsTrue() = - runBlocking(IMMEDIATE) { + testScope.runTest { whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) createAndSetViewModel() wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) - var latest: Boolean? = null - val job = underTest.isActivityContainerVisible.onEach { latest = it }.launchIn(this) + val latest by collectLastValue(underTest.isActivityContainerVisible) val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = false) wifiRepository.setWifiActivity(activity) - yield() assertThat(latest).isTrue() - - job.cancel() } @Test fun activityContainer_hasActivityOutTrue_outputsTrue() = - runBlocking(IMMEDIATE) { + testScope.runTest { whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) createAndSetViewModel() wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) - var latest: Boolean? = null - val job = underTest.isActivityContainerVisible.onEach { latest = it }.launchIn(this) + val latest by collectLastValue(underTest.isActivityContainerVisible) val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = true) wifiRepository.setWifiActivity(activity) - yield() assertThat(latest).isTrue() - - job.cancel() } @Test fun activityContainer_inAndOutTrue_outputsTrue() = - runBlocking(IMMEDIATE) { + testScope.runTest { whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) createAndSetViewModel() wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) - var latest: Boolean? = null - val job = underTest.isActivityContainerVisible.onEach { latest = it }.launchIn(this) + val latest by collectLastValue(underTest.isActivityContainerVisible) val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true) wifiRepository.setWifiActivity(activity) - yield() assertThat(latest).isTrue() - - job.cancel() } @Test fun activityContainer_inAndOutFalse_outputsFalse() = - runBlocking(IMMEDIATE) { + testScope.runTest { whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) createAndSetViewModel() wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) - var latest: Boolean? = null - val job = underTest.isActivityContainerVisible.onEach { latest = it }.launchIn(this) + val latest by collectLastValue(underTest.isActivityContainerVisible) val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = false) wifiRepository.setWifiActivity(activity) - yield() assertThat(latest).isFalse() - - job.cancel() } @Test fun airplaneSpacer_notAirplaneMode_outputsFalse() = - runBlocking(IMMEDIATE) { - var latest: Boolean? = null - val job = underTest.isAirplaneSpacerVisible.onEach { latest = it }.launchIn(this) + testScope.runTest { + val latest by collectLastValue(underTest.isAirplaneSpacerVisible) airplaneModeRepository.setIsAirplaneMode(false) - yield() assertThat(latest).isFalse() - - job.cancel() } @Test fun airplaneSpacer_airplaneForceHidden_outputsFalse() = - runBlocking(IMMEDIATE) { - var latest: Boolean? = null - val job = underTest.isAirplaneSpacerVisible.onEach { latest = it }.launchIn(this) + testScope.runTest { + val latest by collectLastValue(underTest.isAirplaneSpacerVisible) airplaneModeRepository.setIsAirplaneMode(true) connectivityRepository.setForceHiddenIcons(setOf(ConnectivitySlot.AIRPLANE)) - yield() assertThat(latest).isFalse() - - job.cancel() } @Test fun airplaneSpacer_airplaneIconVisible_outputsTrue() = - runBlocking(IMMEDIATE) { - var latest: Boolean? = null - val job = underTest.isAirplaneSpacerVisible.onEach { latest = it }.launchIn(this) + testScope.runTest { + val latest by collectLastValue(underTest.isAirplaneSpacerVisible) airplaneModeRepository.setIsAirplaneMode(true) - yield() assertThat(latest).isTrue() - - job.cancel() } @Test fun signalSpacer_firstSubNotShowingNetworkTypeIcon_outputsFalse() = - runBlocking(IMMEDIATE) { - var latest: Boolean? = null - val job = underTest.isSignalSpacerVisible.onEach { latest = it }.launchIn(this) + testScope.runTest { + val latest by collectLastValue(underTest.isSignalSpacerVisible) shouldShowSignalSpacerProviderFlow.value = false - yield() assertThat(latest).isFalse() - - job.cancel() } @Test fun signalSpacer_firstSubIsShowingNetworkTypeIcon_outputsTrue() = - runBlocking(IMMEDIATE) { - var latest: Boolean? = null - val job = underTest.isSignalSpacerVisible.onEach { latest = it }.launchIn(this) + testScope.runTest { + val latest by collectLastValue(underTest.isSignalSpacerVisible) shouldShowSignalSpacerProviderFlow.value = true - yield() assertThat(latest).isTrue() - - job.cancel() } private fun createAndSetViewModel() { @@ -507,7 +383,7 @@ class WifiViewModelTest : SysuiTestCase() { context, tableLogBuffer, interactor, - scope, + testScope.backgroundScope, wifiConstants, ) } @@ -518,5 +394,3 @@ class WifiViewModelTest : SysuiTestCase() { WifiNetworkModel.Active(NETWORK_ID, ssid = "AB", level = 1) } } - -private val IMMEDIATE = Dispatchers.Main.immediate |