@ -1,36 +1,44 @@
package org.mozilla.fenix.components.searchengine
package org.mozilla.fenix.components.searchengine
import android.content.Context
import android.content.Context
import android.content.SharedPreferences
import android.graphics.Bitmap
import android.graphics.Bitmap
import io.mockk.every
import io.mockk.every
import io.mockk.mockk
import io.mockk.mockk
import io.mockk.mockkStatic
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.Deferred
import kotlinx.coroutines.Deferred
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runBlockingTest
import kotlinx.coroutines.test.runBlockingTest
import mozilla.components.browser.search.SearchEngine
import mozilla.components.browser.search.SearchEngine
import mozilla.components.browser.search.provider.SearchEngineList
import mozilla.components.browser.search.provider.SearchEngineList
import mozilla.components.support.test.robolectric.testContext
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Before
import org.junit.Test
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mockito
import org.mockito.Mockito
import org.mockito.Mockito.`when`
import org.mockito.Mockito.`when`
import org.mockito.Mockito.mock
import org.mockito.Mockito.mock
import org.mozilla.fenix.TestApplication
import org.mozilla.fenix.components.searchengine.FenixSearchEngineProvider.Companion.INSTALLED_ENGINES_KEY
import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config
import java.util.UUID
import java.util.UUID
@ExperimentalCoroutinesApi
@ExperimentalCoroutinesApi
@RunWith ( RobolectricTestRunner :: class )
@Config ( application = TestApplication :: class )
class FenixSearchEngineProviderTest {
class FenixSearchEngineProviderTest {
private val testContext = mockk < Context > ( )
// private val testContext = mockk<Context>()
private lateinit var fenixSearchEngineProvider : FenixSearchEngineProvider
private lateinit var fenixSearchEngineProvider : FenixSearchEngineProvider
@Before
@Before
fun before ( ) {
fun before ( ) {
// mockSharedPreferences(installedEngines = null)
fenixSearchEngineProvider = FakeFenixSearchEngineProvider ( testContext )
fenixSearchEngineProvider = FakeFenixSearchEngineProvider ( testContext )
every {
testContext . getSharedPreferences ( FenixSearchEngineProvider . PREF _FILE , Context . MODE _PRIVATE )
} returns mockk ( relaxed = true )
}
}
/ *
/ *
@ -42,18 +50,36 @@ class FenixSearchEngineProviderTest {
* /
* /
@Test
@Test
fun `temp test class inits` ( ) = runBlockingTest {
fun `GIVEN sharedprefs does not ontain installed engines WHEN installedSearchEngineIdentifiers THEN defaultEngines + customEngines ids are returned` ( ) = runBlockingTest {
val t = fenixSearchEngineProvider . loadSearchEngines ( testContext )
val expectedDefaults = fenixSearchEngineProvider . baseSearchEngines . toIdSet ( )
val expectedCustom = fenixSearchEngineProvider . customSearchEngines . toIdSet ( )
val expected = expectedDefaults + expectedCustom
println ( t )
val actual = fenixSearchEngineProvider . installedSearchEngineIdentifiers ( testContext )
assertEquals ( expected , actual )
}
}
@Test
fun `GIVEN sharedprefs contains installed engines WHEN installedSearchEngineIdentifiers THEN defaultEngines + customEngines ids are returned` ( ) = runBlockingTest {
val sp = testContext . getSharedPreferences ( FenixSearchEngineProvider . PREF _FILE , Context . MODE _PRIVATE )
sp . edit ( ) . putStringSet ( INSTALLED _ENGINES _KEY , STORED _INSTALLED _ENGINES ) . apply ( )
val expectedStored = STORED _INSTALLED _ENGINES
val expectedCustom = fenixSearchEngineProvider . customSearchEngines . toIdSet ( )
val expected = expectedStored + expectedCustom
val actual = fenixSearchEngineProvider . installedSearchEngineIdentifiers ( testContext )
assertEquals ( expected , actual )
}
}
}
private suspend fun Deferred < SearchEngineList > . toIdSet ( ) =
await ( ) . list . map { it . identifier } . toSet ( )
private val STORED _INSTALLED _ENGINES = setOf ( " bing " , " ecosia " )
class FakeFenixSearchEngineProvider ( context : Context ) : FenixSearchEngineProvider ( context ) {
class FakeFenixSearchEngineProvider ( context : Context ) : FenixSearchEngineProvider ( context ) {
override val defaultEngines : Deferred < SearchEngineList >
override val baseSearch Engines: Deferred < SearchEngineList >
get ( ) {
get ( ) {
val google = mockSearchEngine ( id = " google-b-1-m " , n = " Google " )
val google = mockSearchEngine ( id = " google-b-1-m " , n = " Google " )
@ -68,7 +94,7 @@ class FakeFenixSearchEngineProvider(context: Context) : FenixSearchEngineProvide
)
)
}
}
override val bundled Engines = CompletableDeferred (
override val bundled Search Engines = CompletableDeferred (
SearchEngineList (
SearchEngineList (
listOf (
listOf (
mockSearchEngine ( " ecosia " , " Ecosia " ) ,
mockSearchEngine ( " ecosia " , " Ecosia " ) ,
@ -78,7 +104,7 @@ class FakeFenixSearchEngineProvider(context: Context) : FenixSearchEngineProvide
)
)
)
)
override var custom Engines: Deferred < SearchEngineList >
override var custom Search Engines: Deferred < SearchEngineList >
get ( ) {
get ( ) {
return CompletableDeferred (
return CompletableDeferred (
SearchEngineList (
SearchEngineList (