1
0
Fork 0

For #12565: Add Locale settings tests & use activity (#12579)

master
Tiger Oakes 2020-07-16 11:43:27 -07:00 committed by GitHub
parent 3373f8b987
commit 2291fb07aa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 320 additions and 233 deletions

View File

@ -16,32 +16,44 @@ interface LocaleSettingsController {
}
class DefaultLocaleSettingsController(
private val context: Context,
private val activity: Activity,
private val localeSettingsStore: LocaleSettingsStore
) : LocaleSettingsController {
override fun handleLocaleSelected(locale: Locale) {
if (localeSettingsStore.state.selectedLocale == locale &&
!LocaleManager.isDefaultLocaleSelected(context)) {
!LocaleManager.isDefaultLocaleSelected(activity)) {
return
}
localeSettingsStore.dispatch(LocaleSettingsAction.Select(locale))
LocaleManager.setNewLocale(context, locale.toLanguageTag())
LocaleManager.updateBaseConfiguration(context, locale)
(context as Activity).recreate()
LocaleManager.setNewLocale(activity, locale.toLanguageTag())
LocaleManager.updateBaseConfiguration(activity, locale)
activity.recreate()
}
override fun handleDefaultLocaleSelected() {
if (LocaleManager.isDefaultLocaleSelected(context)) {
if (LocaleManager.isDefaultLocaleSelected(activity)) {
return
}
localeSettingsStore.dispatch(LocaleSettingsAction.Select(localeSettingsStore.state.localeList[0]))
LocaleManager.resetToSystemDefault(context)
LocaleManager.updateBaseConfiguration(context, localeSettingsStore.state.localeList[0])
(context as Activity).recreate()
LocaleManager.resetToSystemDefault(activity)
LocaleManager.updateBaseConfiguration(activity, localeSettingsStore.state.localeList[0])
activity.recreate()
}
override fun handleSearchQueryTyped(query: String) {
localeSettingsStore.dispatch(LocaleSettingsAction.Search(query))
}
/**
* Update the locale for the configuration of the app context's resources
*/
@Suppress("Deprecation")
fun LocaleManager.updateBaseConfiguration(context: Context, locale: Locale) {
val resources = context.applicationContext.resources
val config = resources.configuration
config.setLocale(locale)
config.setLayoutDirection(locale)
resources.updateConfiguration(config, resources.displayMetrics)
}
}

View File

@ -5,14 +5,9 @@
package org.mozilla.fenix.settings.advanced
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.annotation.VisibleForTesting
import androidx.core.view.isVisible
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.locale_settings_item.view.*
import mozilla.components.support.locale.LocaleManager
import org.mozilla.fenix.R
import java.util.Locale
@ -95,67 +90,3 @@ class LocaleAdapter(private val interactor: LocaleSettingsViewInteractor) :
DEFAULT, LOCALE;
}
}
class LocaleViewHolder(
view: View,
selectedLocale: Locale,
private val interactor: LocaleSettingsViewInteractor
) : BaseLocaleViewHolder(view, selectedLocale) {
private val icon = view.locale_selected_icon
private val title = view.locale_title_text
private val subtitle = view.locale_subtitle_text
override fun bind(locale: Locale) {
// capitalisation is done using the rules of the appropriate locale (endonym and exonym)
title.text = locale.getDisplayName(locale).capitalize(locale)
subtitle.text = locale.displayName.capitalize(Locale.getDefault())
icon.isVisible = isCurrentLocaleSelected(locale, isDefault = false)
itemView.setOnClickListener {
interactor.onLocaleSelected(locale)
}
}
}
class SystemLocaleViewHolder(
view: View,
selectedLocale: Locale,
private val interactor: LocaleSettingsViewInteractor
) : BaseLocaleViewHolder(view, selectedLocale) {
private val icon = view.locale_selected_icon
private val title = view.locale_title_text
private val subtitle = view.locale_subtitle_text
override fun bind(locale: Locale) {
title.text = itemView.context.getString(R.string.default_locale_text)
subtitle.visibility = View.GONE
icon.isVisible = isCurrentLocaleSelected(locale, isDefault = true)
itemView.setOnClickListener {
interactor.onDefaultLocaleSelected()
}
}
}
abstract class BaseLocaleViewHolder(
view: View,
private val selectedLocale: Locale
) : RecyclerView.ViewHolder(view) {
@VisibleForTesting(otherwise = VisibleForTesting.PROTECTED)
internal fun isCurrentLocaleSelected(locale: Locale, isDefault: Boolean): Boolean {
return if (isDefault) {
locale == selectedLocale && LocaleManager.isDefaultLocaleSelected(itemView.context)
} else {
locale == selectedLocale && !LocaleManager.isDefaultLocaleSelected(itemView.context)
}
}
abstract fun bind(locale: Locale)
}
/**
* Similar to Kotlin's capitalize with locale parameter, but that method is currently experimental
*/
private fun String.capitalize(locale: Locale): String {
return substring(0, 1).toUpperCase(locale) + substring(1)
}

View File

@ -51,15 +51,3 @@ fun LocaleManager.getSelectedLocale(
fun LocaleManager.isDefaultLocaleSelected(context: Context): Boolean {
return getCurrentLocale(context) == null
}
/**
* Update the locale for the configuration of the app context's resources
*/
@Suppress("DEPRECATION")
fun LocaleManager.updateBaseConfiguration(context: Context, locale: Locale) {
val resources = context.applicationContext.resources
val config = resources.configuration
config.setLocale(locale)
config.setLayoutDirection(locale)
resources.updateConfiguration(config, resources.displayMetrics)
}

View File

@ -43,7 +43,7 @@ class LocaleSettingsFragment : Fragment() {
store = getStore()
interactor = LocaleSettingsInteractor(
controller = DefaultLocaleSettingsController(
context = requireContext(),
activity = requireActivity(),
localeSettingsStore = store
)
)

View File

@ -0,0 +1,72 @@
/* 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.advanced
import android.view.View
import androidx.annotation.VisibleForTesting
import androidx.core.view.isVisible
import kotlinx.android.synthetic.main.locale_settings_item.*
import mozilla.components.support.locale.LocaleManager
import org.mozilla.fenix.R
import org.mozilla.fenix.utils.view.ViewHolder
import java.util.Locale
class LocaleViewHolder(
view: View,
selectedLocale: Locale,
private val interactor: LocaleSettingsViewInteractor
) : BaseLocaleViewHolder(view, selectedLocale) {
override fun bind(locale: Locale) {
// capitalisation is done using the rules of the appropriate locale (endonym and exonym)
locale_title_text.text = locale.getDisplayName(locale).capitalize(locale)
locale_subtitle_text.text = locale.displayName.capitalize(Locale.getDefault())
locale_selected_icon.isVisible = isCurrentLocaleSelected(locale, isDefault = false)
itemView.setOnClickListener {
interactor.onLocaleSelected(locale)
}
}
}
class SystemLocaleViewHolder(
view: View,
selectedLocale: Locale,
private val interactor: LocaleSettingsViewInteractor
) : BaseLocaleViewHolder(view, selectedLocale) {
override fun bind(locale: Locale) {
locale_title_text.text = itemView.context.getString(R.string.default_locale_text)
locale_subtitle_text.visibility = View.GONE
locale_selected_icon.isVisible = isCurrentLocaleSelected(locale, isDefault = true)
itemView.setOnClickListener {
interactor.onDefaultLocaleSelected()
}
}
}
abstract class BaseLocaleViewHolder(
view: View,
private val selectedLocale: Locale
) : ViewHolder(view) {
@VisibleForTesting(otherwise = VisibleForTesting.PROTECTED)
internal fun isCurrentLocaleSelected(locale: Locale, isDefault: Boolean): Boolean {
return if (isDefault) {
locale == selectedLocale && LocaleManager.isDefaultLocaleSelected(itemView.context)
} else {
locale == selectedLocale && !LocaleManager.isDefaultLocaleSelected(itemView.context)
}
}
abstract fun bind(locale: Locale)
}
/**
* Similar to Kotlin's capitalize with locale parameter, but that method is currently experimental
*/
private fun String.capitalize(locale: Locale): String {
return substring(0, 1).toUpperCase(locale) + substring(1)
}

View File

@ -0,0 +1,59 @@
/* 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.advanced
import android.content.Context
import android.view.View
import io.mockk.every
import io.mockk.mockk
import io.mockk.mockkObject
import mozilla.components.support.locale.LocaleManager
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
import java.util.Locale
class BaseLocaleViewHolderTest {
private val selectedLocale = Locale("en", "UK")
private val view: View = mockk()
private val context: Context = mockk()
private val localeViewHolder = object : BaseLocaleViewHolder(view, selectedLocale) {
override fun bind(locale: Locale) = Unit
}
@Before
fun setup() {
mockkObject(LocaleManager)
every { view.context } returns context
}
@Test
fun `verify other locale checker returns false`() {
every { LocaleManager.getCurrentLocale(context) } returns mockk()
val otherLocale = mockk<Locale>()
assertFalse(localeViewHolder.isCurrentLocaleSelected(otherLocale, isDefault = true))
assertFalse(localeViewHolder.isCurrentLocaleSelected(otherLocale, isDefault = false))
}
@Test
fun `verify selected locale checker returns true`() {
every { LocaleManager.getCurrentLocale(context) } returns mockk()
assertFalse(localeViewHolder.isCurrentLocaleSelected(selectedLocale, isDefault = true))
assertTrue(localeViewHolder.isCurrentLocaleSelected(selectedLocale, isDefault = false))
}
@Test
fun `verify default locale checker returns true`() {
every { LocaleManager.getCurrentLocale(context) } returns null
assertTrue(localeViewHolder.isCurrentLocaleSelected(selectedLocale, isDefault = true))
assertFalse(localeViewHolder.isCurrentLocaleSelected(selectedLocale, isDefault = false))
}
}

View File

@ -1,48 +0,0 @@
package org.mozilla.fenix.settings.advanced
import android.content.Context
import android.view.View
import io.mockk.every
import io.mockk.mockk
import io.mockk.mockkStatic
import mozilla.components.support.locale.LocaleManager
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
import java.util.Locale
class LocaleAdapterTest {
private val selectedLocale = Locale("en", "UK")
private val view: View = mockk(relaxed = true)
private val context: Context = mockk(relaxed = true)
private val localeViewHolder: BaseLocaleViewHolder =
object : BaseLocaleViewHolder(view, selectedLocale) {
override fun bind(locale: Locale) {
// not required
}
}
@Before
fun setup() {
every { view.context } returns context
}
@Test
fun `verify selected locale checker returns true`() {
mockkStatic("org.mozilla.fenix.settings.advanced.LocaleManagerExtensionKt")
every { LocaleManager.isDefaultLocaleSelected(context) } returns false
assertTrue(localeViewHolder.isCurrentLocaleSelected(selectedLocale, isDefault = false))
}
@Test
fun `verify default locale checker returns true`() {
mockkStatic("org.mozilla.fenix.settings.advanced.LocaleManagerExtensionKt")
every { LocaleManager.isDefaultLocaleSelected(context) } returns true
assertTrue(localeViewHolder.isCurrentLocaleSelected(selectedLocale, isDefault = true))
}
}

View File

@ -8,7 +8,6 @@ import android.content.Context
import io.mockk.every
import io.mockk.mockk
import io.mockk.mockkObject
import io.mockk.mockkStatic
import mozilla.components.support.locale.LocaleManager
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
@ -24,9 +23,12 @@ import java.util.Locale
@RunWith(FenixRobolectricTestRunner::class)
class LocaleManagerExtensionTest {
private lateinit var context: Context
@Before
fun setup() {
mockkStatic("org.mozilla.fenix.settings.advanced.LocaleManagerExtensionKt")
context = mockk()
mockkObject(LocaleManager)
}
@Test
@ -44,8 +46,6 @@ class LocaleManagerExtensionTest {
@Test
@Config(qualifiers = "en-rUS")
fun `default locale selected`() {
val context: Context = mockk()
mockkObject(LocaleManager)
every { LocaleManager.getCurrentLocale(context) } returns null
assertTrue(LocaleManager.isDefaultLocaleSelected(context))
@ -54,8 +54,6 @@ class LocaleManagerExtensionTest {
@Test
@Config(qualifiers = "en-rUS")
fun `custom locale selected`() {
val context: Context = mockk()
mockkObject(LocaleManager)
val selectedLocale = Locale("en", "UK")
every { LocaleManager.getCurrentLocale(context) } returns selectedLocale
@ -65,13 +63,9 @@ class LocaleManagerExtensionTest {
@Test
@Config(qualifiers = "en-rUS")
fun `match current stored locale string with a Locale from our list`() {
val context: Context = mockk()
mockkObject(LocaleManager)
val otherLocale = Locale("fr")
val selectedLocale = Locale("en", "UK")
val localeList = ArrayList<Locale>()
localeList.add(otherLocale)
localeList.add(selectedLocale)
val localeList = listOf(otherLocale, selectedLocale)
every { LocaleManager.getCurrentLocale(context) } returns selectedLocale
@ -81,13 +75,9 @@ class LocaleManagerExtensionTest {
@Test
@Config(qualifiers = "en-rUS")
fun `match null stored locale with the default Locale from our list`() {
val context: Context = mockk()
mockkObject(LocaleManager)
val firstLocale = Locale("fr")
val secondLocale = Locale("en", "UK")
val localeList = ArrayList<Locale>()
localeList.add(firstLocale)
localeList.add(secondLocale)
val localeList = listOf(firstLocale, secondLocale)
every { LocaleManager.getCurrentLocale(context) } returns null

View File

@ -5,14 +5,15 @@
package org.mozilla.fenix.settings.advanced
import android.app.Activity
import android.content.Context
import io.mockk.Runs
import io.mockk.every
import io.mockk.just
import io.mockk.mockk
import io.mockk.mockkObject
import io.mockk.mockkStatic
import io.mockk.spyk
import io.mockk.verify
import io.mockk.verifyAll
import mozilla.components.support.locale.LocaleManager
import org.junit.Before
import org.junit.Test
@ -20,118 +21,113 @@ import java.util.Locale
class LocaleSettingsControllerTest {
private val context: Context = mockk<Activity>(relaxed = true)
private val activity = mockk<Activity>(relaxed = true)
private val localeSettingsStore: LocaleSettingsStore = mockk(relaxed = true)
private val mockState = LocaleSettingsState(mockk(), mockk(), mockk())
private lateinit var controller: LocaleSettingsController
private lateinit var controller: DefaultLocaleSettingsController
@Before
fun setup() {
controller = DefaultLocaleSettingsController(context, localeSettingsStore)
controller = spyk(DefaultLocaleSettingsController(activity, localeSettingsStore))
mockkObject(LocaleManager)
mockkStatic("org.mozilla.fenix.settings.advanced.LocaleManagerExtensionKt")
}
@Test
fun `don't set locale if same locale is chosen`() {
val selectedLocale = Locale("en", "UK")
every { localeSettingsStore.state } returns LocaleSettingsState(
mockk(),
mockk(),
selectedLocale
)
mockkObject(LocaleManager)
mockkStatic("org.mozilla.fenix.settings.advanced.LocaleManagerExtensionKt")
every { LocaleManager.getCurrentLocale(context) } returns mockk()
every { LocaleManager.isDefaultLocaleSelected(context) } returns false
every { localeSettingsStore.state } returns mockState.copy(selectedLocale = selectedLocale)
every { LocaleManager.getCurrentLocale(activity) } returns mockk()
controller.handleLocaleSelected(selectedLocale)
verify(
inverse = true,
verifyBlock = { localeSettingsStore.dispatch(LocaleSettingsAction.Select(selectedLocale)) })
verify(
inverse = true,
verifyBlock = { LocaleManager.setNewLocale(context, selectedLocale.toLanguageTag()) })
verify(
inverse = true,
verifyBlock = { LocaleManager.updateBaseConfiguration(context, selectedLocale) })
verify(inverse = true, verifyBlock = { (context as Activity).recreate() })
verifyAll(inverse = true) {
localeSettingsStore.dispatch(LocaleSettingsAction.Select(selectedLocale))
LocaleManager.setNewLocale(activity, selectedLocale.toLanguageTag())
activity.recreate()
}
with(controller) {
verify(inverse = true) { LocaleManager.updateBaseConfiguration(activity, selectedLocale) }
}
}
@Test
fun `set a new locale from the list`() {
fun `set a new locale from the list if other locale is chosen`() {
val selectedLocale = Locale("en", "UK")
val otherLocale: Locale = mockk()
every { localeSettingsStore.state } returns LocaleSettingsState(
mockk(),
mockk(),
otherLocale
)
mockkObject(LocaleManager)
mockkStatic("org.mozilla.fenix.settings.advanced.LocaleManagerExtensionKt")
every { LocaleManager.updateBaseConfiguration(context, selectedLocale) } just Runs
every {
LocaleManager.setNewLocale(
context,
selectedLocale.toLanguageTag()
)
} returns context
every { localeSettingsStore.state } returns mockState.copy(selectedLocale = otherLocale)
every { LocaleManager.setNewLocale(activity, selectedLocale.toLanguageTag()) } returns activity
with(controller) {
every { LocaleManager.updateBaseConfiguration(activity, selectedLocale) } just Runs
}
controller.handleLocaleSelected(selectedLocale)
verify { localeSettingsStore.dispatch(LocaleSettingsAction.Select(selectedLocale)) }
verify { LocaleManager.setNewLocale(context, selectedLocale.toLanguageTag()) }
verify { LocaleManager.updateBaseConfiguration(context, selectedLocale) }
verify { (context as Activity).recreate() }
verify { LocaleManager.setNewLocale(activity, selectedLocale.toLanguageTag()) }
verify { activity.recreate() }
with(controller) {
verify { LocaleManager.updateBaseConfiguration(activity, selectedLocale) }
}
}
@Test
fun `set a new locale from the list if default locale is not selected`() {
val selectedLocale = Locale("en", "UK")
every { localeSettingsStore.state } returns mockState.copy(selectedLocale = selectedLocale)
every { LocaleManager.getCurrentLocale(activity) } returns null
every { LocaleManager.setNewLocale(activity, selectedLocale.toLanguageTag()) } returns activity
with(controller) {
every { LocaleManager.updateBaseConfiguration(activity, selectedLocale) } just Runs
}
controller.handleLocaleSelected(selectedLocale)
verify { localeSettingsStore.dispatch(LocaleSettingsAction.Select(selectedLocale)) }
verify { LocaleManager.setNewLocale(activity, selectedLocale.toLanguageTag()) }
verify { activity.recreate() }
with(controller) {
verify { LocaleManager.updateBaseConfiguration(activity, selectedLocale) }
}
}
@Test
fun `don't set default locale if default locale is already chosen`() {
val selectedLocale = Locale("en", "UK")
val localeList = ArrayList<Locale>()
localeList.add(selectedLocale)
every { localeSettingsStore.state } returns LocaleSettingsState(
localeList,
mockk(),
mockk()
)
mockkStatic("org.mozilla.fenix.settings.advanced.LocaleManagerExtensionKt")
every { LocaleManager.isDefaultLocaleSelected(context) } returns true
every { localeSettingsStore.state } returns mockState.copy(localeList = listOf(selectedLocale))
every { LocaleManager.getCurrentLocale(activity) } returns null
controller.handleDefaultLocaleSelected()
verify(
inverse = true,
verifyBlock = { localeSettingsStore.dispatch(LocaleSettingsAction.Select(selectedLocale)) })
verify(
inverse = true,
verifyBlock = { LocaleManager.resetToSystemDefault(context) })
verify(
inverse = true,
verifyBlock = { LocaleManager.updateBaseConfiguration(context, selectedLocale) })
verify(inverse = true, verifyBlock = { (context as Activity).recreate() })
verifyAll(inverse = true) {
localeSettingsStore.dispatch(LocaleSettingsAction.Select(selectedLocale))
LocaleManager.resetToSystemDefault(activity)
activity.recreate()
with(controller) {
LocaleManager.updateBaseConfiguration(activity, selectedLocale)
}
}
}
@Test
fun `set the default locale as the new locale`() {
val selectedLocale = Locale("en", "UK")
val localeList = ArrayList<Locale>()
localeList.add(selectedLocale)
every { localeSettingsStore.state } returns LocaleSettingsState(
localeList,
mockk(),
mockk()
)
mockkObject(LocaleManager)
mockkStatic("org.mozilla.fenix.settings.advanced.LocaleManagerExtensionKt")
every { LocaleManager.resetToSystemDefault(context) } just Runs
every { LocaleManager.updateBaseConfiguration(context, selectedLocale) } just Runs
every { localeSettingsStore.state } returns mockState.copy(localeList = listOf(selectedLocale))
every { LocaleManager.resetToSystemDefault(activity) } just Runs
with(controller) {
every { LocaleManager.updateBaseConfiguration(activity, selectedLocale) } just Runs
}
controller.handleDefaultLocaleSelected()
verify { localeSettingsStore.dispatch(LocaleSettingsAction.Select(selectedLocale)) }
verify { LocaleManager.resetToSystemDefault(context) }
verify { LocaleManager.updateBaseConfiguration(context, selectedLocale) }
verify { (context as Activity).recreate() }
verify { LocaleManager.resetToSystemDefault(activity) }
verify { activity.recreate() }
with(controller) {
verify { LocaleManager.updateBaseConfiguration(activity, selectedLocale) }
}
}
@Test

View File

@ -18,10 +18,11 @@ class LocaleSettingsStoreTest {
@Before
fun setup() {
val localeList = ArrayList<Locale>()
localeList.add(Locale("fr")) // default
localeList.add(otherLocale)
localeList.add(selectedLocale)
val localeList = listOf(
Locale("fr"), // default
otherLocale,
selectedLocale
)
localeSettingsStore =
LocaleSettingsStore(LocaleSettingsState(localeList, localeList, selectedLocale))

View File

@ -0,0 +1,86 @@
/* 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.advanced
import android.view.LayoutInflater
import android.view.View
import androidx.core.view.isVisible
import io.mockk.Runs
import io.mockk.every
import io.mockk.just
import io.mockk.mockk
import io.mockk.mockkObject
import io.mockk.verify
import kotlinx.android.synthetic.main.locale_settings_item.view.*
import mozilla.components.support.locale.LocaleManager
import mozilla.components.support.test.robolectric.testContext
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mozilla.fenix.R
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
import java.util.Locale
@RunWith(FenixRobolectricTestRunner::class)
class LocaleViewHoldersTest {
private val selectedLocale = Locale("en", "US")
private lateinit var view: View
private lateinit var interactor: LocaleSettingsViewInteractor
private lateinit var localeViewHolder: LocaleViewHolder
private lateinit var systemLocaleViewHolder: SystemLocaleViewHolder
@Before
fun setup() {
mockkObject(LocaleManager)
every { LocaleManager.getCurrentLocale(any()) } returns null
view = LayoutInflater.from(testContext)
.inflate(R.layout.locale_settings_item, null)
interactor = mockk()
localeViewHolder = LocaleViewHolder(view, selectedLocale, interactor)
systemLocaleViewHolder = SystemLocaleViewHolder(view, selectedLocale, interactor)
}
@Test
fun `bind LocaleViewHolder`() {
localeViewHolder.bind(selectedLocale)
assertEquals("English (United States)", view.locale_title_text.text)
assertEquals("English (United States)", view.locale_subtitle_text.text)
assertFalse(view.locale_selected_icon.isVisible)
}
@Test
fun `LocaleViewHolder calls interactor on click`() {
localeViewHolder.bind(selectedLocale)
every { interactor.onLocaleSelected(selectedLocale) } just Runs
view.performClick()
verify { interactor.onLocaleSelected(selectedLocale) }
}
@Test
fun `bind SystemLocaleViewHolder`() {
systemLocaleViewHolder.bind(selectedLocale)
assertEquals("Follow device language", view.locale_title_text.text)
assertFalse(view.locale_subtitle_text.isVisible)
assertTrue(view.locale_selected_icon.isVisible)
}
@Test
fun `SystemLocaleViewHolder calls interactor on click`() {
systemLocaleViewHolder.bind(selectedLocale)
every { interactor.onDefaultLocaleSelected() } just Runs
view.performClick()
verify { interactor.onDefaultLocaleSelected() }
}
}