Merge changes I497486d0,I0d5d100a into udc-qpr-dev

* changes:
  [Status Bar] Update WifiViewModelTest to TestScope; add to robolectric.
  [Status Bar] Update WifiInteractorTest to TestScope; add to robolectric
This commit is contained in:
Caitlin Shkuratov
2023-07-27 13:59:39 +00:00
committed by Android (Google) Code Review
3 changed files with 92 additions and 200 deletions

View File

@@ -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/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/DisabledWifiRepositoryTest.kt",
"tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepositoryImplTest.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", path: "tests/src",
} }

View File

@@ -17,7 +17,9 @@
package com.android.systemui.statusbar.pipeline.wifi.domain.interactor package com.android.systemui.statusbar.pipeline.wifi.domain.interactor
import android.net.wifi.WifiManager import android.net.wifi.WifiManager
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest import androidx.test.filters.SmallTest
import com.android.systemui.RoboPilotTest
import com.android.systemui.SysuiTestCase import com.android.systemui.SysuiTestCase
import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlot import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlot
import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel 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.data.repository.FakeWifiRepository
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach 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 kotlinx.coroutines.yield
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith
@OptIn(ExperimentalCoroutinesApi::class) @OptIn(ExperimentalCoroutinesApi::class)
@Suppress("EXPERIMENTAL_IS_NOT_ENABLED") @Suppress("EXPERIMENTAL_IS_NOT_ENABLED")
@SmallTest @SmallTest
@RoboPilotTest
@RunWith(AndroidJUnit4::class)
class WifiInteractorImplTest : SysuiTestCase() { class WifiInteractorImplTest : SysuiTestCase() {
private lateinit var underTest: WifiInteractor private lateinit var underTest: WifiInteractor
@@ -44,6 +50,8 @@ class WifiInteractorImplTest : SysuiTestCase() {
private lateinit var connectivityRepository: FakeConnectivityRepository private lateinit var connectivityRepository: FakeConnectivityRepository
private lateinit var wifiRepository: FakeWifiRepository private lateinit var wifiRepository: FakeWifiRepository
private val testScope = TestScope()
@Before @Before
fun setUp() { fun setUp() {
connectivityRepository = FakeConnectivityRepository() connectivityRepository = FakeConnectivityRepository()
@@ -53,11 +61,12 @@ class WifiInteractorImplTest : SysuiTestCase() {
@Test @Test
fun ssid_unavailableNetwork_outputsNull() = fun ssid_unavailableNetwork_outputsNull() =
runBlocking(IMMEDIATE) { testScope.runTest {
wifiRepository.setWifiNetwork(WifiNetworkModel.Unavailable) wifiRepository.setWifiNetwork(WifiNetworkModel.Unavailable)
var latest: String? = "default" var latest: String? = "default"
val job = underTest.ssid.onEach { latest = it }.launchIn(this) val job = underTest.ssid.onEach { latest = it }.launchIn(this)
runCurrent()
assertThat(latest).isNull() assertThat(latest).isNull()
@@ -66,11 +75,12 @@ class WifiInteractorImplTest : SysuiTestCase() {
@Test @Test
fun ssid_inactiveNetwork_outputsNull() = fun ssid_inactiveNetwork_outputsNull() =
runBlocking(IMMEDIATE) { testScope.runTest {
wifiRepository.setWifiNetwork(WifiNetworkModel.Inactive) wifiRepository.setWifiNetwork(WifiNetworkModel.Inactive)
var latest: String? = "default" var latest: String? = "default"
val job = underTest.ssid.onEach { latest = it }.launchIn(this) val job = underTest.ssid.onEach { latest = it }.launchIn(this)
runCurrent()
assertThat(latest).isNull() assertThat(latest).isNull()
@@ -79,13 +89,14 @@ class WifiInteractorImplTest : SysuiTestCase() {
@Test @Test
fun ssid_carrierMergedNetwork_outputsNull() = fun ssid_carrierMergedNetwork_outputsNull() =
runBlocking(IMMEDIATE) { testScope.runTest {
wifiRepository.setWifiNetwork( wifiRepository.setWifiNetwork(
WifiNetworkModel.CarrierMerged(networkId = 1, subscriptionId = 2, level = 1) WifiNetworkModel.CarrierMerged(networkId = 1, subscriptionId = 2, level = 1)
) )
var latest: String? = "default" var latest: String? = "default"
val job = underTest.ssid.onEach { latest = it }.launchIn(this) val job = underTest.ssid.onEach { latest = it }.launchIn(this)
runCurrent()
assertThat(latest).isNull() assertThat(latest).isNull()
@@ -94,7 +105,7 @@ class WifiInteractorImplTest : SysuiTestCase() {
@Test @Test
fun ssid_isPasspointAccessPoint_outputsPasspointName() = fun ssid_isPasspointAccessPoint_outputsPasspointName() =
runBlocking(IMMEDIATE) { testScope.runTest {
wifiRepository.setWifiNetwork( wifiRepository.setWifiNetwork(
WifiNetworkModel.Active( WifiNetworkModel.Active(
networkId = 1, networkId = 1,
@@ -106,6 +117,7 @@ class WifiInteractorImplTest : SysuiTestCase() {
var latest: String? = null var latest: String? = null
val job = underTest.ssid.onEach { latest = it }.launchIn(this) val job = underTest.ssid.onEach { latest = it }.launchIn(this)
runCurrent()
assertThat(latest).isEqualTo("friendly") assertThat(latest).isEqualTo("friendly")
@@ -114,7 +126,7 @@ class WifiInteractorImplTest : SysuiTestCase() {
@Test @Test
fun ssid_isOnlineSignUpForPasspoint_outputsPasspointName() = fun ssid_isOnlineSignUpForPasspoint_outputsPasspointName() =
runBlocking(IMMEDIATE) { testScope.runTest {
wifiRepository.setWifiNetwork( wifiRepository.setWifiNetwork(
WifiNetworkModel.Active( WifiNetworkModel.Active(
networkId = 1, networkId = 1,
@@ -126,6 +138,7 @@ class WifiInteractorImplTest : SysuiTestCase() {
var latest: String? = null var latest: String? = null
val job = underTest.ssid.onEach { latest = it }.launchIn(this) val job = underTest.ssid.onEach { latest = it }.launchIn(this)
runCurrent()
assertThat(latest).isEqualTo("friendly") assertThat(latest).isEqualTo("friendly")
@@ -134,7 +147,7 @@ class WifiInteractorImplTest : SysuiTestCase() {
@Test @Test
fun ssid_unknownSsid_outputsNull() = fun ssid_unknownSsid_outputsNull() =
runBlocking(IMMEDIATE) { testScope.runTest {
wifiRepository.setWifiNetwork( wifiRepository.setWifiNetwork(
WifiNetworkModel.Active( WifiNetworkModel.Active(
networkId = 1, networkId = 1,
@@ -145,6 +158,7 @@ class WifiInteractorImplTest : SysuiTestCase() {
var latest: String? = "default" var latest: String? = "default"
val job = underTest.ssid.onEach { latest = it }.launchIn(this) val job = underTest.ssid.onEach { latest = it }.launchIn(this)
runCurrent()
assertThat(latest).isNull() assertThat(latest).isNull()
@@ -153,7 +167,7 @@ class WifiInteractorImplTest : SysuiTestCase() {
@Test @Test
fun ssid_validSsid_outputsSsid() = fun ssid_validSsid_outputsSsid() =
runBlocking(IMMEDIATE) { testScope.runTest {
wifiRepository.setWifiNetwork( wifiRepository.setWifiNetwork(
WifiNetworkModel.Active( WifiNetworkModel.Active(
networkId = 1, networkId = 1,
@@ -164,6 +178,7 @@ class WifiInteractorImplTest : SysuiTestCase() {
var latest: String? = null var latest: String? = null
val job = underTest.ssid.onEach { latest = it }.launchIn(this) val job = underTest.ssid.onEach { latest = it }.launchIn(this)
runCurrent()
assertThat(latest).isEqualTo("MyAwesomeWifiNetwork") assertThat(latest).isEqualTo("MyAwesomeWifiNetwork")
@@ -172,7 +187,7 @@ class WifiInteractorImplTest : SysuiTestCase() {
@Test @Test
fun isEnabled_matchesRepoIsEnabled() = fun isEnabled_matchesRepoIsEnabled() =
runBlocking(IMMEDIATE) { testScope.runTest {
var latest: Boolean? = null var latest: Boolean? = null
val job = underTest.isEnabled.onEach { latest = it }.launchIn(this) val job = underTest.isEnabled.onEach { latest = it }.launchIn(this)
@@ -193,7 +208,7 @@ class WifiInteractorImplTest : SysuiTestCase() {
@Test @Test
fun isDefault_matchesRepoIsDefault() = fun isDefault_matchesRepoIsDefault() =
runBlocking(IMMEDIATE) { testScope.runTest {
var latest: Boolean? = null var latest: Boolean? = null
val job = underTest.isDefault.onEach { latest = it }.launchIn(this) val job = underTest.isDefault.onEach { latest = it }.launchIn(this)
@@ -214,7 +229,7 @@ class WifiInteractorImplTest : SysuiTestCase() {
@Test @Test
fun wifiNetwork_matchesRepoWifiNetwork() = fun wifiNetwork_matchesRepoWifiNetwork() =
runBlocking(IMMEDIATE) { testScope.runTest {
val wifiNetwork = val wifiNetwork =
WifiNetworkModel.Active( WifiNetworkModel.Active(
networkId = 45, networkId = 45,
@@ -227,6 +242,7 @@ class WifiInteractorImplTest : SysuiTestCase() {
var latest: WifiNetworkModel? = null var latest: WifiNetworkModel? = null
val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this) val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
runCurrent()
assertThat(latest).isEqualTo(wifiNetwork) assertThat(latest).isEqualTo(wifiNetwork)
@@ -235,7 +251,7 @@ class WifiInteractorImplTest : SysuiTestCase() {
@Test @Test
fun activity_matchesRepoWifiActivity() = fun activity_matchesRepoWifiActivity() =
runBlocking(IMMEDIATE) { testScope.runTest {
var latest: DataActivityModel? = null var latest: DataActivityModel? = null
val job = underTest.activity.onEach { latest = it }.launchIn(this) val job = underTest.activity.onEach { latest = it }.launchIn(this)
@@ -259,11 +275,12 @@ class WifiInteractorImplTest : SysuiTestCase() {
@Test @Test
fun isForceHidden_repoHasWifiHidden_outputsTrue() = fun isForceHidden_repoHasWifiHidden_outputsTrue() =
runBlocking(IMMEDIATE) { testScope.runTest {
connectivityRepository.setForceHiddenIcons(setOf(ConnectivitySlot.WIFI)) connectivityRepository.setForceHiddenIcons(setOf(ConnectivitySlot.WIFI))
var latest: Boolean? = null var latest: Boolean? = null
val job = underTest.isForceHidden.onEach { latest = it }.launchIn(this) val job = underTest.isForceHidden.onEach { latest = it }.launchIn(this)
runCurrent()
assertThat(latest).isTrue() assertThat(latest).isTrue()
@@ -272,16 +289,15 @@ class WifiInteractorImplTest : SysuiTestCase() {
@Test @Test
fun isForceHidden_repoDoesNotHaveWifiHidden_outputsFalse() = fun isForceHidden_repoDoesNotHaveWifiHidden_outputsFalse() =
runBlocking(IMMEDIATE) { testScope.runTest {
connectivityRepository.setForceHiddenIcons(setOf()) connectivityRepository.setForceHiddenIcons(setOf())
var latest: Boolean? = null var latest: Boolean? = null
val job = underTest.isForceHidden.onEach { latest = it }.launchIn(this) val job = underTest.isForceHidden.onEach { latest = it }.launchIn(this)
runCurrent()
assertThat(latest).isFalse() assertThat(latest).isFalse()
job.cancel() job.cancel()
} }
} }
private val IMMEDIATE = Dispatchers.Main.immediate

View File

@@ -16,8 +16,11 @@
package com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel package com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest import androidx.test.filters.SmallTest
import com.android.systemui.RoboPilotTest
import com.android.systemui.SysuiTestCase import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.log.table.TableLogBuffer import com.android.systemui.log.table.TableLogBuffer
import com.android.systemui.statusbar.phone.StatusBarLocation import com.android.systemui.statusbar.phone.StatusBarLocation
import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirplaneModeRepository 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.model.WifiIcon
import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel.Companion.viewModelForLocation import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel.Companion.viewModelForLocation
import com.google.common.truth.Truth.assertThat 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.MutableStateFlow
import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.test.runTest
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.yield
import org.junit.After
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock import org.mockito.Mock
import org.mockito.Mockito.`when` as whenever import org.mockito.Mockito.`when` as whenever
import org.mockito.MockitoAnnotations import org.mockito.MockitoAnnotations
@Suppress("EXPERIMENTAL_IS_NOT_ENABLED")
@SmallTest @SmallTest
@RoboPilotTest
@RunWith(AndroidJUnit4::class)
class WifiViewModelTest : SysuiTestCase() { class WifiViewModelTest : SysuiTestCase() {
private lateinit var underTest: WifiViewModel private lateinit var underTest: WifiViewModel
@@ -66,7 +65,7 @@ class WifiViewModelTest : SysuiTestCase() {
private lateinit var interactor: WifiInteractor private lateinit var interactor: WifiInteractor
private lateinit var airplaneModeViewModel: AirplaneModeViewModel private lateinit var airplaneModeViewModel: AirplaneModeViewModel
private val shouldShowSignalSpacerProviderFlow = MutableStateFlow(false) private val shouldShowSignalSpacerProviderFlow = MutableStateFlow(false)
private lateinit var scope: CoroutineScope private val testScope = TestScope()
@Before @Before
fun setUp() { fun setUp() {
@@ -76,7 +75,6 @@ class WifiViewModelTest : SysuiTestCase() {
wifiRepository = FakeWifiRepository() wifiRepository = FakeWifiRepository()
wifiRepository.setIsWifiEnabled(true) wifiRepository.setIsWifiEnabled(true)
interactor = WifiInteractorImpl(connectivityRepository, wifiRepository) interactor = WifiInteractorImpl(connectivityRepository, wifiRepository)
scope = CoroutineScope(IMMEDIATE)
airplaneModeViewModel = airplaneModeViewModel =
AirplaneModeViewModelImpl( AirplaneModeViewModelImpl(
AirplaneModeInteractor( AirplaneModeInteractor(
@@ -84,17 +82,12 @@ class WifiViewModelTest : SysuiTestCase() {
connectivityRepository, connectivityRepository,
), ),
tableLogBuffer, tableLogBuffer,
scope, testScope.backgroundScope,
) )
createAndSetViewModel() createAndSetViewModel()
} }
@After
fun tearDown() {
scope.cancel()
}
// See [WifiViewModelIconParameterizedTest] for additional view model tests. // See [WifiViewModelIconParameterizedTest] for additional view model tests.
// Note on testing: [WifiViewModel] exposes 3 different instances of // Note on testing: [WifiViewModel] exposes 3 different instances of
@@ -104,104 +97,65 @@ class WifiViewModelTest : SysuiTestCase() {
@Test @Test
fun wifiIcon_allLocationViewModelsReceiveSameData() = fun wifiIcon_allLocationViewModelsReceiveSameData() =
runBlocking(IMMEDIATE) { testScope.runTest {
val home = viewModelForLocation(underTest, StatusBarLocation.HOME) val home = viewModelForLocation(underTest, StatusBarLocation.HOME)
val keyguard = viewModelForLocation(underTest, StatusBarLocation.KEYGUARD) val keyguard = viewModelForLocation(underTest, StatusBarLocation.KEYGUARD)
val qs = viewModelForLocation(underTest, StatusBarLocation.QS) val qs = viewModelForLocation(underTest, StatusBarLocation.QS)
var latestHome: WifiIcon? = null val latestHome by collectLastValue(home.wifiIcon)
val jobHome = home.wifiIcon.onEach { latestHome = it }.launchIn(this) val latestKeyguard by collectLastValue(keyguard.wifiIcon)
val latestQs by collectLastValue(qs.wifiIcon)
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)
wifiRepository.setWifiNetwork( wifiRepository.setWifiNetwork(
WifiNetworkModel.Active(NETWORK_ID, isValidated = true, level = 1) WifiNetworkModel.Active(NETWORK_ID, isValidated = true, level = 1)
) )
yield()
assertThat(latestHome).isInstanceOf(WifiIcon.Visible::class.java) assertThat(latestHome).isInstanceOf(WifiIcon.Visible::class.java)
assertThat(latestHome).isEqualTo(latestKeyguard) assertThat(latestHome).isEqualTo(latestKeyguard)
assertThat(latestKeyguard).isEqualTo(latestQs) assertThat(latestKeyguard).isEqualTo(latestQs)
jobHome.cancel()
jobKeyguard.cancel()
jobQs.cancel()
} }
@Test @Test
fun activity_showActivityConfigFalse_outputsFalse() = fun activity_showActivityConfigFalse_outputsFalse() =
runBlocking(IMMEDIATE) { testScope.runTest {
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(false) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(false)
createAndSetViewModel() createAndSetViewModel()
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
var activityIn: Boolean? = null val activityIn by collectLastValue(underTest.isActivityInViewVisible)
val activityInJob = val activityOut by collectLastValue(underTest.isActivityOutViewVisible)
underTest.isActivityInViewVisible.onEach { activityIn = it }.launchIn(this) val activityContainer by collectLastValue(underTest.isActivityContainerVisible)
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)
// Verify that on launch, we receive false. // Verify that on launch, we receive false.
assertThat(activityIn).isFalse() assertThat(activityIn).isFalse()
assertThat(activityOut).isFalse() assertThat(activityOut).isFalse()
assertThat(activityContainer).isFalse() assertThat(activityContainer).isFalse()
activityInJob.cancel()
activityOutJob.cancel()
activityContainerJob.cancel()
} }
@Test @Test
fun activity_showActivityConfigFalse_noUpdatesReceived() = fun activity_showActivityConfigFalse_noUpdatesReceived() =
runBlocking(IMMEDIATE) { testScope.runTest {
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(false) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(false)
createAndSetViewModel() createAndSetViewModel()
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
var activityIn: Boolean? = null val activityIn by collectLastValue(underTest.isActivityInViewVisible)
val activityInJob = val activityOut by collectLastValue(underTest.isActivityOutViewVisible)
underTest.isActivityInViewVisible.onEach { activityIn = it }.launchIn(this) val activityContainer by collectLastValue(underTest.isActivityContainerVisible)
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)
// WHEN we update the repo to have activity // WHEN we update the repo to have activity
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true) val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true)
wifiRepository.setWifiActivity(activity) wifiRepository.setWifiActivity(activity)
yield()
// THEN we didn't update to the new activity (because our config is false) // THEN we didn't update to the new activity (because our config is false)
assertThat(activityIn).isFalse() assertThat(activityIn).isFalse()
assertThat(activityOut).isFalse() assertThat(activityOut).isFalse()
assertThat(activityContainer).isFalse() assertThat(activityContainer).isFalse()
activityInJob.cancel()
activityOutJob.cancel()
activityContainerJob.cancel()
} }
@Test @Test
fun activity_nullSsid_outputsFalse() = fun activity_nullSsid_outputsFalse() =
runBlocking(IMMEDIATE) { testScope.runTest {
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
createAndSetViewModel() createAndSetViewModel()
@@ -209,38 +163,23 @@ class WifiViewModelTest : SysuiTestCase() {
WifiNetworkModel.Active(NETWORK_ID, ssid = null, level = 1) WifiNetworkModel.Active(NETWORK_ID, ssid = null, level = 1)
) )
var activityIn: Boolean? = null val activityIn by collectLastValue(underTest.isActivityInViewVisible)
val activityInJob = val activityOut by collectLastValue(underTest.isActivityOutViewVisible)
underTest.isActivityInViewVisible.onEach { activityIn = it }.launchIn(this) val activityContainer by collectLastValue(underTest.isActivityContainerVisible)
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)
// WHEN we update the repo to have activity // WHEN we update the repo to have activity
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true) val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true)
wifiRepository.setWifiActivity(activity) wifiRepository.setWifiActivity(activity)
yield()
// THEN we still output false because our network's SSID is null // THEN we still output false because our network's SSID is null
assertThat(activityIn).isFalse() assertThat(activityIn).isFalse()
assertThat(activityOut).isFalse() assertThat(activityOut).isFalse()
assertThat(activityContainer).isFalse() assertThat(activityContainer).isFalse()
activityInJob.cancel()
activityOutJob.cancel()
activityContainerJob.cancel()
} }
@Test @Test
fun activity_allLocationViewModelsReceiveSameData() = fun activity_allLocationViewModelsReceiveSameData() =
runBlocking(IMMEDIATE) { testScope.runTest {
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
createAndSetViewModel() createAndSetViewModel()
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
@@ -249,250 +188,187 @@ class WifiViewModelTest : SysuiTestCase() {
val keyguard = viewModelForLocation(underTest, StatusBarLocation.KEYGUARD) val keyguard = viewModelForLocation(underTest, StatusBarLocation.KEYGUARD)
val qs = viewModelForLocation(underTest, StatusBarLocation.QS) val qs = viewModelForLocation(underTest, StatusBarLocation.QS)
var latestHome: Boolean? = null val latestHome by collectLastValue(home.isActivityInViewVisible)
val jobHome = home.isActivityInViewVisible.onEach { latestHome = it }.launchIn(this) val latestKeyguard by collectLastValue(keyguard.isActivityInViewVisible)
val latestQs by collectLastValue(qs.isActivityInViewVisible)
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 activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true) val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true)
wifiRepository.setWifiActivity(activity) wifiRepository.setWifiActivity(activity)
yield()
assertThat(latestHome).isTrue() assertThat(latestHome).isTrue()
assertThat(latestKeyguard).isTrue() assertThat(latestKeyguard).isTrue()
assertThat(latestQs).isTrue() assertThat(latestQs).isTrue()
jobHome.cancel()
jobKeyguard.cancel()
jobQs.cancel()
} }
@Test @Test
fun activityIn_hasActivityInTrue_outputsTrue() = fun activityIn_hasActivityInTrue_outputsTrue() =
runBlocking(IMMEDIATE) { testScope.runTest {
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
createAndSetViewModel() createAndSetViewModel()
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
var latest: Boolean? = null val latest by collectLastValue(underTest.isActivityInViewVisible)
val job = underTest.isActivityInViewVisible.onEach { latest = it }.launchIn(this)
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = false) val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = false)
wifiRepository.setWifiActivity(activity) wifiRepository.setWifiActivity(activity)
yield()
assertThat(latest).isTrue() assertThat(latest).isTrue()
job.cancel()
} }
@Test @Test
fun activityIn_hasActivityInFalse_outputsFalse() = fun activityIn_hasActivityInFalse_outputsFalse() =
runBlocking(IMMEDIATE) { testScope.runTest {
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
createAndSetViewModel() createAndSetViewModel()
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
var latest: Boolean? = null val latest by collectLastValue(underTest.isActivityInViewVisible)
val job = underTest.isActivityInViewVisible.onEach { latest = it }.launchIn(this)
val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = true) val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = true)
wifiRepository.setWifiActivity(activity) wifiRepository.setWifiActivity(activity)
yield()
assertThat(latest).isFalse() assertThat(latest).isFalse()
job.cancel()
} }
@Test @Test
fun activityOut_hasActivityOutTrue_outputsTrue() = fun activityOut_hasActivityOutTrue_outputsTrue() =
runBlocking(IMMEDIATE) { testScope.runTest {
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
createAndSetViewModel() createAndSetViewModel()
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
var latest: Boolean? = null val latest by collectLastValue(underTest.isActivityOutViewVisible)
val job = underTest.isActivityOutViewVisible.onEach { latest = it }.launchIn(this)
val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = true) val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = true)
wifiRepository.setWifiActivity(activity) wifiRepository.setWifiActivity(activity)
yield()
assertThat(latest).isTrue() assertThat(latest).isTrue()
job.cancel()
} }
@Test @Test
fun activityOut_hasActivityOutFalse_outputsFalse() = fun activityOut_hasActivityOutFalse_outputsFalse() =
runBlocking(IMMEDIATE) { testScope.runTest {
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
createAndSetViewModel() createAndSetViewModel()
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
var latest: Boolean? = null val latest by collectLastValue(underTest.isActivityOutViewVisible)
val job = underTest.isActivityOutViewVisible.onEach { latest = it }.launchIn(this)
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = false) val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = false)
wifiRepository.setWifiActivity(activity) wifiRepository.setWifiActivity(activity)
yield()
assertThat(latest).isFalse() assertThat(latest).isFalse()
job.cancel()
} }
@Test @Test
fun activityContainer_hasActivityInTrue_outputsTrue() = fun activityContainer_hasActivityInTrue_outputsTrue() =
runBlocking(IMMEDIATE) { testScope.runTest {
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
createAndSetViewModel() createAndSetViewModel()
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
var latest: Boolean? = null val latest by collectLastValue(underTest.isActivityContainerVisible)
val job = underTest.isActivityContainerVisible.onEach { latest = it }.launchIn(this)
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = false) val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = false)
wifiRepository.setWifiActivity(activity) wifiRepository.setWifiActivity(activity)
yield()
assertThat(latest).isTrue() assertThat(latest).isTrue()
job.cancel()
} }
@Test @Test
fun activityContainer_hasActivityOutTrue_outputsTrue() = fun activityContainer_hasActivityOutTrue_outputsTrue() =
runBlocking(IMMEDIATE) { testScope.runTest {
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
createAndSetViewModel() createAndSetViewModel()
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
var latest: Boolean? = null val latest by collectLastValue(underTest.isActivityContainerVisible)
val job = underTest.isActivityContainerVisible.onEach { latest = it }.launchIn(this)
val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = true) val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = true)
wifiRepository.setWifiActivity(activity) wifiRepository.setWifiActivity(activity)
yield()
assertThat(latest).isTrue() assertThat(latest).isTrue()
job.cancel()
} }
@Test @Test
fun activityContainer_inAndOutTrue_outputsTrue() = fun activityContainer_inAndOutTrue_outputsTrue() =
runBlocking(IMMEDIATE) { testScope.runTest {
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
createAndSetViewModel() createAndSetViewModel()
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
var latest: Boolean? = null val latest by collectLastValue(underTest.isActivityContainerVisible)
val job = underTest.isActivityContainerVisible.onEach { latest = it }.launchIn(this)
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true) val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true)
wifiRepository.setWifiActivity(activity) wifiRepository.setWifiActivity(activity)
yield()
assertThat(latest).isTrue() assertThat(latest).isTrue()
job.cancel()
} }
@Test @Test
fun activityContainer_inAndOutFalse_outputsFalse() = fun activityContainer_inAndOutFalse_outputsFalse() =
runBlocking(IMMEDIATE) { testScope.runTest {
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
createAndSetViewModel() createAndSetViewModel()
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
var latest: Boolean? = null val latest by collectLastValue(underTest.isActivityContainerVisible)
val job = underTest.isActivityContainerVisible.onEach { latest = it }.launchIn(this)
val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = false) val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = false)
wifiRepository.setWifiActivity(activity) wifiRepository.setWifiActivity(activity)
yield()
assertThat(latest).isFalse() assertThat(latest).isFalse()
job.cancel()
} }
@Test @Test
fun airplaneSpacer_notAirplaneMode_outputsFalse() = fun airplaneSpacer_notAirplaneMode_outputsFalse() =
runBlocking(IMMEDIATE) { testScope.runTest {
var latest: Boolean? = null val latest by collectLastValue(underTest.isAirplaneSpacerVisible)
val job = underTest.isAirplaneSpacerVisible.onEach { latest = it }.launchIn(this)
airplaneModeRepository.setIsAirplaneMode(false) airplaneModeRepository.setIsAirplaneMode(false)
yield()
assertThat(latest).isFalse() assertThat(latest).isFalse()
job.cancel()
} }
@Test @Test
fun airplaneSpacer_airplaneForceHidden_outputsFalse() = fun airplaneSpacer_airplaneForceHidden_outputsFalse() =
runBlocking(IMMEDIATE) { testScope.runTest {
var latest: Boolean? = null val latest by collectLastValue(underTest.isAirplaneSpacerVisible)
val job = underTest.isAirplaneSpacerVisible.onEach { latest = it }.launchIn(this)
airplaneModeRepository.setIsAirplaneMode(true) airplaneModeRepository.setIsAirplaneMode(true)
connectivityRepository.setForceHiddenIcons(setOf(ConnectivitySlot.AIRPLANE)) connectivityRepository.setForceHiddenIcons(setOf(ConnectivitySlot.AIRPLANE))
yield()
assertThat(latest).isFalse() assertThat(latest).isFalse()
job.cancel()
} }
@Test @Test
fun airplaneSpacer_airplaneIconVisible_outputsTrue() = fun airplaneSpacer_airplaneIconVisible_outputsTrue() =
runBlocking(IMMEDIATE) { testScope.runTest {
var latest: Boolean? = null val latest by collectLastValue(underTest.isAirplaneSpacerVisible)
val job = underTest.isAirplaneSpacerVisible.onEach { latest = it }.launchIn(this)
airplaneModeRepository.setIsAirplaneMode(true) airplaneModeRepository.setIsAirplaneMode(true)
yield()
assertThat(latest).isTrue() assertThat(latest).isTrue()
job.cancel()
} }
@Test @Test
fun signalSpacer_firstSubNotShowingNetworkTypeIcon_outputsFalse() = fun signalSpacer_firstSubNotShowingNetworkTypeIcon_outputsFalse() =
runBlocking(IMMEDIATE) { testScope.runTest {
var latest: Boolean? = null val latest by collectLastValue(underTest.isSignalSpacerVisible)
val job = underTest.isSignalSpacerVisible.onEach { latest = it }.launchIn(this)
shouldShowSignalSpacerProviderFlow.value = false shouldShowSignalSpacerProviderFlow.value = false
yield()
assertThat(latest).isFalse() assertThat(latest).isFalse()
job.cancel()
} }
@Test @Test
fun signalSpacer_firstSubIsShowingNetworkTypeIcon_outputsTrue() = fun signalSpacer_firstSubIsShowingNetworkTypeIcon_outputsTrue() =
runBlocking(IMMEDIATE) { testScope.runTest {
var latest: Boolean? = null val latest by collectLastValue(underTest.isSignalSpacerVisible)
val job = underTest.isSignalSpacerVisible.onEach { latest = it }.launchIn(this)
shouldShowSignalSpacerProviderFlow.value = true shouldShowSignalSpacerProviderFlow.value = true
yield()
assertThat(latest).isTrue() assertThat(latest).isTrue()
job.cancel()
} }
private fun createAndSetViewModel() { private fun createAndSetViewModel() {
@@ -507,7 +383,7 @@ class WifiViewModelTest : SysuiTestCase() {
context, context,
tableLogBuffer, tableLogBuffer,
interactor, interactor,
scope, testScope.backgroundScope,
wifiConstants, wifiConstants,
) )
} }
@@ -518,5 +394,3 @@ class WifiViewModelTest : SysuiTestCase() {
WifiNetworkModel.Active(NETWORK_ID, ssid = "AB", level = 1) WifiNetworkModel.Active(NETWORK_ID, ssid = "AB", level = 1)
} }
} }
private val IMMEDIATE = Dispatchers.Main.immediate