Files
DiPlay/common/src/test/java/com/shilapi/xcertplay/AppLocaleTest.kt
T

63 lines
2.8 KiB
Kotlin

package com.shilapi.xcertplay
import android.app.LocaleManager
import android.content.Context
import android.os.LocaleList
import android.view.View
import org.junit.Assert.*
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
import org.robolectric.RuntimeEnvironment
import org.robolectric.annotation.Config
import java.util.Locale
@RunWith(RobolectricTestRunner::class)
@Config(sdk = [33], manifest = Config.NONE)
class AppLocaleTest {
private val context get() = RuntimeEnvironment.getApplication()
private val manager get() = context.getSystemService(LocaleManager::class.java)
@Test fun pickerAndSystemSettingsShareTheSamePreference() {
AppLocale.save(context, AppLocale.ARABIC)
assertEquals("ar", manager.applicationLocales.toLanguageTags())
manager.applicationLocales = LocaleList.forLanguageTags("es")
assertEquals(AppLocale.SPANISH, AppLocale.preference(context))
assertSame(context, AppLocale.wrap(context))
AppLocale.save(context, AppLocale.SYSTEM)
assertTrue(manager.applicationLocales.isEmpty)
assertEquals(AppLocale.SYSTEM, AppLocale.preference(context))
}
@Test fun oldPreferenceMigratesOnceAndCannotOverrideLaterSystemChanges() {
context.getSharedPreferences("diplay", Context.MODE_PRIVATE).edit()
.putString("app_language", "ar").commit()
AppLocale.wrap(context)
assertEquals("ar", manager.applicationLocales.toLanguageTags())
manager.applicationLocales = LocaleList.getEmptyLocaleList()
AppLocale.wrap(context)
assertEquals(AppLocale.SYSTEM, AppLocale.preference(context))
}
@Test fun existingSystemChoiceWinsOverLegacyPreference() {
context.getSharedPreferences("diplay", Context.MODE_PRIVATE).edit()
.putString("app_language", "ar").commit()
manager.applicationLocales = LocaleList.forLanguageTags("zh-CN")
AppLocale.wrap(context)
assertEquals(AppLocale.SIMPLIFIED_CHINESE, AppLocale.preference(context))
assertEquals("zh-CN", manager.applicationLocales.toLanguageTags())
}
@Test @Config(sdk = [28, 32])
fun olderAndroidWrapsArabicAndReturnsToSystemWithoutChangingGlobalResources() {
val original = context.resources.configuration.locales.toLanguageTags()
AppLocale.save(context, AppLocale.ARABIC)
val wrapped = AppLocale.wrap(context)
assertEquals(Locale("ar"), wrapped.resources.configuration.locales[0])
assertEquals(View.LAYOUT_DIRECTION_RTL, wrapped.resources.configuration.layoutDirection)
assertEquals(original, context.resources.configuration.locales.toLanguageTags())
AppLocale.save(context, AppLocale.SYSTEM)
assertSame(context, AppLocale.wrap(context))
}
}