From 928d6581c93181eddcffea9291362eb520ae4f31 Mon Sep 17 00:00:00 2001 From: Grigory Kruglov Date: Mon, 14 Feb 2022 19:09:08 -0800 Subject: [PATCH] Get browser-domains tests to pass --- components/browser/domains/build.gradle | 1 + .../browser/domains/autocomplete/Providers.kt | 16 ++++++---------- .../BaseDomainAutocompleteProviderTest.kt | 19 +++++++++++++------ 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/components/browser/domains/build.gradle b/components/browser/domains/build.gradle index 438782bca9f..65bb01bf105 100644 --- a/components/browser/domains/build.gradle +++ b/components/browser/domains/build.gradle @@ -31,6 +31,7 @@ dependencies { testImplementation Dependencies.androidx_test_junit testImplementation Dependencies.testing_robolectric + testImplementation Dependencies.testing_coroutines } apply from: '../../../publish.gradle' diff --git a/components/browser/domains/src/main/java/mozilla/components/browser/domains/autocomplete/Providers.kt b/components/browser/domains/src/main/java/mozilla/components/browser/domains/autocomplete/Providers.kt index c1106d22152..1250e05e2d8 100644 --- a/components/browser/domains/src/main/java/mozilla/components/browser/domains/autocomplete/Providers.kt +++ b/components/browser/domains/src/main/java/mozilla/components/browser/domains/autocomplete/Providers.kt @@ -5,10 +5,7 @@ package mozilla.components.browser.domains.autocomplete import android.content.Context -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.async -import kotlinx.coroutines.launch +import kotlinx.coroutines.* import mozilla.components.browser.domains.CustomDomains import mozilla.components.browser.domains.Domain import mozilla.components.browser.domains.Domains @@ -47,17 +44,16 @@ private fun CustomDomains.asLoader(): DomainsLoader = { context: Context -> load */ open class BaseDomainAutocompleteProvider( private val list: DomainList, - private val domainsLoader: DomainsLoader -) : DomainAutocompleteProvider, CoroutineScope by CoroutineScope(Dispatchers.IO) { + private val domainsLoader: DomainsLoader, + private val scope: CoroutineScope = CoroutineScope(Dispatchers.IO) +) : DomainAutocompleteProvider { // We compute 'domains' on the worker thread; make sure it's immediately visible on the UI thread. @Volatile var domains: List = emptyList() - fun initialize(context: Context) { - launch { - domains = async { domainsLoader(context) }.await() - } + suspend fun initialize(context: Context) = withContext(scope.coroutineContext) { + domains = domainsLoader(context) } /** diff --git a/components/browser/domains/src/test/java/mozilla/components/browser/domains/BaseDomainAutocompleteProviderTest.kt b/components/browser/domains/src/test/java/mozilla/components/browser/domains/BaseDomainAutocompleteProviderTest.kt index 0e2d6420712..105f6928dea 100644 --- a/components/browser/domains/src/test/java/mozilla/components/browser/domains/BaseDomainAutocompleteProviderTest.kt +++ b/components/browser/domains/src/test/java/mozilla/components/browser/domains/BaseDomainAutocompleteProviderTest.kt @@ -6,7 +6,10 @@ package mozilla.components.browser.domains import android.content.Context import androidx.test.ext.junit.runners.AndroidJUnit4 -import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.test.StandardTestDispatcher +import kotlinx.coroutines.test.TestScope +import kotlinx.coroutines.test.runTest import mozilla.components.browser.domains.autocomplete.BaseDomainAutocompleteProvider import mozilla.components.browser.domains.autocomplete.DomainAutocompleteProvider import mozilla.components.browser.domains.autocomplete.DomainList @@ -18,8 +21,11 @@ import org.junit.Assert.assertTrue import org.junit.Test import org.junit.runner.RunWith +@ExperimentalCoroutinesApi @RunWith(AndroidJUnit4::class) class BaseDomainAutocompleteProviderTest { + private val dispatcher = StandardTestDispatcher() + private val scope = TestScope(dispatcher) @Test fun `empty provider with DEFAULT list returns nothing`() { @@ -98,6 +104,12 @@ class BaseDomainAutocompleteProviderTest { assertNoCompletion(provider, "wwww") assertNoCompletion(provider, "yahoo") } + + private fun createAndInitProvider(context: Context, list: DomainList, loader: DomainsLoader): DomainAutocompleteProvider { + return BaseDomainAutocompleteProvider(list, loader, scope).apply { + runTest(dispatcher) { initialize(context) } + } + } } private fun assertCompletion( @@ -125,8 +137,3 @@ private fun assertNoCompletion(provider: DomainAutocompleteProvider, input: Stri assertNull("Result should be null", result) } - -private fun createAndInitProvider(context: Context, list: DomainList, loader: DomainsLoader): DomainAutocompleteProvider = - object : BaseDomainAutocompleteProvider(list, loader) { - override val coroutineContext = super.coroutineContext + Dispatchers.Main - }.apply { initialize(context) }