108 lines
4.9 KiB
Kotlin
108 lines
4.9 KiB
Kotlin
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
package org.mozilla.fenix.settings.search
|
|
|
|
import android.content.SharedPreferences
|
|
import androidx.preference.CheckBoxPreference
|
|
import androidx.preference.SwitchPreference
|
|
import io.mockk.every
|
|
import io.mockk.mockk
|
|
import io.mockk.mockkObject
|
|
import io.mockk.spyk
|
|
import io.mockk.unmockkObject
|
|
import io.mockk.verify
|
|
import mozilla.components.support.test.robolectric.testContext
|
|
import org.junit.Test
|
|
import org.junit.runner.RunWith
|
|
import org.mozilla.fenix.HomeActivity
|
|
import org.mozilla.fenix.R
|
|
import org.mozilla.fenix.ext.components
|
|
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
|
|
import org.mozilla.fenix.utils.Settings
|
|
import org.mozilla.gecko.search.SearchWidgetProvider
|
|
|
|
@RunWith(FenixRobolectricTestRunner::class)
|
|
class SearchEngineFragmentTest {
|
|
@Test
|
|
fun `GIVEN pref_key_show_voice_search setting WHEN it is modified THEN the value is persisted and widgets updated`() {
|
|
try {
|
|
val settings = mockk<Settings>(relaxed = true)
|
|
every { settings.preferences }
|
|
every { testContext.components.settings } returns settings
|
|
val preferences: SharedPreferences = mockk()
|
|
val preferencesEditor: SharedPreferences.Editor = mockk(relaxed = true)
|
|
every { settings.preferences } returns preferences
|
|
every { preferences.edit() } returns preferencesEditor
|
|
|
|
mockkObject(SearchWidgetProvider.Companion)
|
|
|
|
val fragment = spyk(SearchEngineFragment()) {
|
|
every { context } returns testContext
|
|
every { isAdded } returns true
|
|
every { activity } returns mockk<HomeActivity>(relaxed = true)
|
|
}
|
|
val voiceSearchPreferenceKey = testContext.getString(R.string.pref_key_show_voice_search)
|
|
val voiceSearchPreference = spyk(SwitchPreference(testContext)) {
|
|
every { key } returns voiceSearchPreferenceKey
|
|
}
|
|
// The type needed for "fragment.findPreference" / "fragment.requirePreference" is erased at compile time.
|
|
// Hence we need individual mocks, specific for each preference's type.
|
|
every {
|
|
fragment.findPreference<SwitchPreference>(testContext.getString(R.string.pref_key_show_search_suggestions))
|
|
} returns mockk(relaxed = true) {
|
|
every { context } returns testContext
|
|
}
|
|
every {
|
|
fragment.findPreference<SwitchPreference>(testContext.getString(R.string.pref_key_enable_autocomplete_urls))
|
|
} returns mockk(relaxed = true) {
|
|
every { context } returns testContext
|
|
}
|
|
every {
|
|
fragment.findPreference<CheckBoxPreference>(testContext.getString(R.string.pref_key_show_search_suggestions_in_private))
|
|
} returns mockk(relaxed = true) {
|
|
every { context } returns testContext
|
|
}
|
|
every {
|
|
fragment.findPreference<SwitchPreference>(testContext.getString(R.string.pref_key_show_search_engine_shortcuts))
|
|
} returns mockk(relaxed = true) {
|
|
every { context } returns testContext
|
|
}
|
|
every {
|
|
fragment.findPreference<SwitchPreference>(testContext.getString(R.string.pref_key_search_browsing_history))
|
|
} returns mockk(relaxed = true) {
|
|
every { context } returns testContext
|
|
}
|
|
every {
|
|
fragment.findPreference<SwitchPreference>(testContext.getString(R.string.pref_key_search_bookmarks))
|
|
} returns mockk(relaxed = true) {
|
|
every { context } returns testContext
|
|
}
|
|
every {
|
|
fragment.findPreference<SwitchPreference>(testContext.getString(R.string.pref_key_search_synced_tabs))
|
|
} returns mockk(relaxed = true) {
|
|
every { context } returns testContext
|
|
}
|
|
every {
|
|
fragment.findPreference<SwitchPreference>(testContext.getString(R.string.pref_key_show_clipboard_suggestions))
|
|
} returns mockk(relaxed = true) {
|
|
every { context } returns testContext
|
|
}
|
|
// This preference is the sole purpose of this test
|
|
every {
|
|
fragment.findPreference<SwitchPreference>(voiceSearchPreferenceKey)
|
|
} returns voiceSearchPreference
|
|
|
|
// Trigger the preferences setup.
|
|
fragment.onResume()
|
|
voiceSearchPreference.callChangeListener(true)
|
|
|
|
verify { preferencesEditor.putBoolean(voiceSearchPreferenceKey, true) }
|
|
verify { SearchWidgetProvider.updateAllWidgets(testContext) }
|
|
} finally {
|
|
unmockkObject(SearchWidgetProvider.Companion)
|
|
}
|
|
}
|
|
}
|