add some tests for subtype enablement

This commit is contained in:
Helium314 2025-03-08 09:23:41 +01:00
parent a4d96a12a9
commit e1f02dab31

View file

@ -0,0 +1,75 @@
package helium314.keyboard
import helium314.keyboard.keyboard.KeyboardId
import helium314.keyboard.keyboard.KeyboardLayoutSet
import helium314.keyboard.keyboard.internal.KeyboardParams
import helium314.keyboard.keyboard.internal.keyboard_parser.POPUP_KEYS_NORMAL
import helium314.keyboard.keyboard.internal.keyboard_parser.addLocaleKeyTextsToParams
import helium314.keyboard.latin.LatinIME
import helium314.keyboard.latin.common.LocaleUtils.constructLocale
import helium314.keyboard.latin.settings.Settings
import helium314.keyboard.latin.settings.SettingsSubtype.Companion.toSettingsSubtype
import helium314.keyboard.latin.utils.LayoutType
import helium314.keyboard.latin.utils.POPUP_KEYS_LAYOUT
import helium314.keyboard.latin.utils.SubtypeSettings
import helium314.keyboard.latin.utils.SubtypeUtilsAdditional
import helium314.keyboard.latin.utils.prefs
import org.junit.runner.RunWith
import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config
import org.robolectric.shadows.ShadowLog
import kotlin.test.BeforeTest
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertTrue
@RunWith(RobolectricTestRunner::class)
@Config(shadows = [
ShadowInputMethodManager2::class
])
class SubtypeTest {
private lateinit var latinIME: LatinIME
private lateinit var params: KeyboardParams
@BeforeTest fun setUp() {
latinIME = Robolectric.setupService(LatinIME::class.java)
ShadowLog.setupLogging()
ShadowLog.stream = System.out
params = KeyboardParams()
params.mId = KeyboardLayoutSet.getFakeKeyboardId(KeyboardId.ELEMENT_ALPHABET)
params.mPopupKeyTypes.add(POPUP_KEYS_LAYOUT)
addLocaleKeyTextsToParams(latinIME, params, POPUP_KEYS_NORMAL)
}
@Test fun emptyAdditionalSubtypesResultsInEmptyList() {
// avoid issues where empty string results in additional subtype for undefined locale
val prefs = latinIME.prefs()
prefs.edit().putString(Settings.PREF_ADDITIONAL_SUBTYPES, "").apply()
assertTrue(SubtypeSettings.getAdditionalSubtypes().isEmpty())
val from = SubtypeSettings.getResourceSubtypesForLocale("es".constructLocale()).first()
// no change, and "changed" subtype actually is resource subtype -> still expect empty list
SubtypeUtilsAdditional.changeAdditionalSubtype(from.toSettingsSubtype(), from.toSettingsSubtype(), latinIME)
assertEquals(emptyList(), SubtypeSettings.getAdditionalSubtypes().map { it.toSettingsSubtype() })
}
@Test fun subtypeStaysEnabledOnEdits() {
val prefs = latinIME.prefs()
prefs.edit().putString(Settings.PREF_ADDITIONAL_SUBTYPES, "").apply() // clear it for convenience
// edit enabled resource subtype
val from = SubtypeSettings.getResourceSubtypesForLocale("es".constructLocale()).first()
SubtypeSettings.addEnabledSubtype(prefs, from)
val to = from.toSettingsSubtype().withLayout(LayoutType.SYMBOLS, "symbols_arabic")
SubtypeUtilsAdditional.changeAdditionalSubtype(from.toSettingsSubtype(), to, latinIME)
assertEquals(to, SubtypeSettings.getEnabledSubtypes(false).single().toSettingsSubtype())
// change the new subtype to effectively be the same as original resource subtype
val toNew = to.withoutLayout(LayoutType.SYMBOLS)
assertEquals(from.toSettingsSubtype(), toNew)
SubtypeUtilsAdditional.changeAdditionalSubtype(to, toNew, latinIME)
assertEquals(emptyList(), SubtypeSettings.getAdditionalSubtypes().map { it.toSettingsSubtype() })
assertEquals(from.toSettingsSubtype(), SubtypeSettings.getEnabledSubtypes(false).single().toSettingsSubtype())
}
}