diff options
| author | Aleksandr Granin <aleksandr@mullvad.net> | 2021-03-31 18:08:14 +0200 |
|---|---|---|
| committer | Aleksandr Granin <aleksandr@mullvad.net> | 2021-04-01 13:30:37 +0200 |
| commit | 818a60da2ae1df45dc7d522bc244aeb9700e346e (patch) | |
| tree | 594f02a6eeb741a267ace7eb0970eabb92d467f9 /android | |
| parent | 3308421996fd57cc4e8670f7d28bb3bc0e4af205 (diff) | |
| download | mullvadvpn-818a60da2ae1df45dc7d522bc244aeb9700e346e.tar.xz mullvadvpn-818a60da2ae1df45dc7d522bc244aeb9700e346e.zip | |
Remove Deferred from ApplicationsProvider
Diffstat (limited to 'android')
4 files changed, 30 insertions, 38 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/ApplicationsProvider.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/ApplicationsProvider.kt index 182d6608fd..a097ffd231 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/ApplicationsProvider.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/ApplicationsProvider.kt @@ -3,8 +3,6 @@ package net.mullvad.mullvadvpn.applist import android.Manifest import android.content.pm.ApplicationInfo import android.content.pm.PackageManager -import kotlinx.coroutines.CompletableDeferred -import kotlinx.coroutines.Deferred class ApplicationsProvider( private val packageManager: PackageManager, @@ -16,15 +14,15 @@ class ApplicationsProvider( !isSelfApplication(appInfo.packageName) } - fun getAppsList(): Deferred<List<AppData>> = CompletableDeferred( - packageManager.getInstalledApplications(PackageManager.GET_META_DATA) + fun getAppsList(): List<AppData> { + return packageManager.getInstalledApplications(PackageManager.GET_META_DATA) .asSequence() .filter(applicationFilterPredicate) .map { info -> AppData(info.packageName, info.icon, info.loadLabel(packageManager).toString()) } .toList() - ) + } private fun hasInternetPermission(packageName: String): Boolean { return PackageManager.PERMISSION_GRANTED == diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/SplitTunnelingViewModel.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/SplitTunnelingViewModel.kt index 9ce3254f63..98730de960 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/SplitTunnelingViewModel.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/SplitTunnelingViewModel.kt @@ -91,7 +91,7 @@ class SplitTunnelingViewModel( } private suspend fun fetchData() { - appsProvider.getAppsList().await() + appsProvider.getAppsList() .partition { app -> splitTunneling.excludedAppList.contains(app.packageName) } .let { (excludedAppsList, notExcludedAppsList) -> // TODO: remove potential package names from splitTunneling list diff --git a/android/src/test/kotlin/net/mullvad/mullvadvpn/applist/ApplicationsProviderTest.kt b/android/src/test/kotlin/net/mullvad/mullvadvpn/applist/ApplicationsProviderTest.kt index 93aee6d897..689047e565 100644 --- a/android/src/test/kotlin/net/mullvad/mullvadvpn/applist/ApplicationsProviderTest.kt +++ b/android/src/test/kotlin/net/mullvad/mullvadvpn/applist/ApplicationsProviderTest.kt @@ -7,7 +7,6 @@ import io.mockk.every import io.mockk.mockk import io.mockk.unmockkAll import io.mockk.verifyAll -import kotlinx.coroutines.test.runBlockingTest import net.mullvad.mullvadvpn.assertLists import org.junit.After import org.junit.Test @@ -24,7 +23,7 @@ class ApplicationsProviderTest { } @Test - fun test_get_apps() = runBlockingTest { + fun test_get_apps() { val launchWithInternetPackageName = "launch_with_internet_package_name" val launchWithoutInternetPackageName = "launch_without_internet_package_name" val nonLaunchWithInternetPackageName = "non_launch_with_internet_package_name" @@ -40,7 +39,7 @@ class ApplicationsProviderTest { createApplicationInfo(selfPackageName, internet = true, launch = true) ) - val result = testSubject.getAppsList().await() + val result = testSubject.getAppsList() val expected = listOf( AppData(launchWithInternetPackageName, 0, launchWithInternetPackageName) ) diff --git a/android/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/SplitTunnelingViewModelTest.kt b/android/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/SplitTunnelingViewModelTest.kt index 903ae9f874..4bfd98f9da 100644 --- a/android/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/SplitTunnelingViewModelTest.kt +++ b/android/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/SplitTunnelingViewModelTest.kt @@ -3,7 +3,6 @@ package net.mullvad.mullvadvpn.viewmodel import androidx.annotation.StringRes import androidx.lifecycle.viewModelScope import io.mockk.Runs -import io.mockk.coEvery import io.mockk.every import io.mockk.just import io.mockk.mockk @@ -11,10 +10,8 @@ import io.mockk.unmockkAll import io.mockk.verify import io.mockk.verifyAll import java.util.concurrent.TimeUnit -import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.cancel import kotlinx.coroutines.flow.first -import kotlinx.coroutines.runBlocking import kotlinx.coroutines.test.runBlockingTest import net.mullvad.mullvadvpn.R import net.mullvad.mullvadvpn.TestCoroutineRule @@ -39,18 +36,11 @@ class SplitTunnelingViewModelTest { val timeout = Timeout(3000L, TimeUnit.MILLISECONDS) private val mockedApplicationsProvider = mockk<ApplicationsProvider>() private val mockedSplitTunneling = mockk<SplitTunneling>() - private val appsProviderDeferred = CompletableDeferred<List<AppData>>() private lateinit var testSubject: SplitTunnelingViewModel @Before fun setup() { every { mockedSplitTunneling.enabled } returns true - coEvery { mockedApplicationsProvider.getAppsList() } returns appsProviderDeferred - testSubject = SplitTunnelingViewModel( - mockedApplicationsProvider, - mockedSplitTunneling, - testCoroutineRule.testDispatcher - ) } @After @@ -60,27 +50,26 @@ class SplitTunnelingViewModelTest { } @Test - fun test_has_progress_on_start() { - runBlocking(testCoroutineRule.testDispatcher) { - val actualList: List<ListItemData> = testSubject.listItems.first() + fun test_has_progress_on_start() = runBlockingTest(testCoroutineRule.testDispatcher) { + initTestSubject(emptyList()) + val actualList: List<ListItemData> = testSubject.listItems.first() - val initialExpectedList = listOf( - createTextItem(R.string.split_tunneling_description), - createDivider(0), createProgressItem() - ) + val initialExpectedList = listOf( + createTextItem(R.string.split_tunneling_description), + createDivider(0), + createProgressItem() + ) - assertLists(initialExpectedList, actualList) + assertLists(initialExpectedList, actualList) - verify(exactly = 1) { - mockedApplicationsProvider.getAppsList() - } + verify(exactly = 1) { + mockedApplicationsProvider.getAppsList() } } @Test fun test_empty_app_list() = runBlockingTest(testCoroutineRule.testDispatcher) { - testCoroutineRule.testDispatcher.advanceUntilIdle() - appsProviderDeferred.complete(emptyList()) + initTestSubject(emptyList()) testSubject.processIntent(ViewIntent.ViewIsReady) val actualList = testSubject.listItems.first() val expectedList = listOf(createTextItem(R.string.split_tunneling_description)) @@ -93,7 +82,7 @@ class SplitTunnelingViewModelTest { val appNotExcluded = AppData("test.not.excluded", 0, "testName2") every { mockedSplitTunneling.excludedAppList } returns listOf(appExcluded.packageName) - appsProviderDeferred.complete(listOf(appExcluded, appNotExcluded)) + initTestSubject(listOf(appExcluded, appNotExcluded)) testSubject.processIntent(ViewIntent.ViewIsReady) val actualList = testSubject.listItems.first() @@ -111,10 +100,7 @@ class SplitTunnelingViewModelTest { verifyAll { mockedSplitTunneling.enabled mockedSplitTunneling.excludedAppList - mockedSplitTunneling.excludedAppList } - - testSubject.viewModelScope.coroutineContext.cancel() } @Test @@ -123,7 +109,7 @@ class SplitTunnelingViewModelTest { every { mockedSplitTunneling.excludedAppList } returns listOf(app.packageName) every { mockedSplitTunneling.includeApp(app.packageName) } just Runs - appsProviderDeferred.complete(listOf(app)) + initTestSubject(listOf(app)) testSubject.processIntent(ViewIntent.ViewIsReady) val listBeforeAction = testSubject.listItems.first() @@ -161,8 +147,8 @@ class SplitTunnelingViewModelTest { val app = AppData("test", 0, "testName") every { mockedSplitTunneling.excludedAppList } returns emptyList() every { mockedSplitTunneling.excludeApp(app.packageName) } just Runs + initTestSubject(listOf(app)) testSubject.processIntent(ViewIntent.ViewIsReady) - appsProviderDeferred.complete(listOf(app)) val listBeforeAction = testSubject.listItems.first() val expectedListBeforeAction = listOf( @@ -194,6 +180,15 @@ class SplitTunnelingViewModelTest { } } + private fun initTestSubject(appList: List<AppData>) { + every { mockedApplicationsProvider.getAppsList() } returns appList + testSubject = SplitTunnelingViewModel( + mockedApplicationsProvider, + mockedSplitTunneling, + testCoroutineRule.testDispatcher + ) + } + private fun createApplicationItem( appData: AppData, checked: Boolean |
