@@ -104,6 +104,62 @@ class LocaleUtilsTest {
104104 assertThat(findByLanguageTag(" zh_XX" )).isEqualTo(CHINESE )
105105 }
106106
107+ @Test
108+ fun findSupportedLocaleTest () {
109+ val defaultLocale = Locale .getDefault()
110+
111+ // Empty language
112+ assertThat(findSupportedLocale(Locale .forLanguageTag(" " ))).isEqualTo(defaultLocale)
113+
114+ // Chinese logic
115+ assertThat(findSupportedLocale(Locale .forLanguageTag(" zh" ))).isEqualTo(CHINESE )
116+ assertThat(findSupportedLocale(Locale .forLanguageTag(" zh-CN" ))).isEqualTo(CHINESE_SIMPLIFIED )
117+ assertThat(findSupportedLocale(Locale .forLanguageTag(" zh-SG" ))).isEqualTo(CHINESE_SIMPLIFIED )
118+ assertThat(findSupportedLocale(Locale .forLanguageTag(" zh-TW" ))).isEqualTo(CHINESE_TRADITIONAL )
119+ assertThat(findSupportedLocale(Locale .forLanguageTag(" zh-HK" ))).isEqualTo(CHINESE_TRADITIONAL )
120+ assertThat(findSupportedLocale(Locale .forLanguageTag(" zh-MO" ))).isEqualTo(CHINESE_TRADITIONAL )
121+ assertThat(findSupportedLocale(Locale .forLanguageTag(" zh-XX" ))).isEqualTo(CHINESE )
122+
123+ // Exact match
124+ assertThat(findSupportedLocale(JAPANESE )).isEqualTo(JAPANESE )
125+ assertThat(findSupportedLocale(PORTUGUESE_BRAZIL )).isEqualTo(PORTUGUESE_BRAZIL )
126+ assertThat(findSupportedLocale(PORTUGUESE_PORTUGAL )).isEqualTo(PORTUGUESE_PORTUGAL )
127+
128+ // Language + Script match
129+ assertThat(findSupportedLocale(Locale .forLanguageTag(" zh-Hans-US" ))).isEqualTo(CHINESE_SIMPLIFIED )
130+ assertThat(findSupportedLocale(Locale .forLanguageTag(" zh-Hant-US" ))).isEqualTo(CHINESE_TRADITIONAL )
131+
132+ // Language + Country match (fails script match but matches country)
133+ assertThat(findSupportedLocale(Locale .forLanguageTag(" pt-Latn-BR" ))).isEqualTo(PORTUGUESE_BRAZIL )
134+ assertThat(findSupportedLocale(Locale .forLanguageTag(" pt-Latn-PT" ))).isEqualTo(PORTUGUESE_PORTUGAL )
135+
136+ // Language only match
137+ assertThat(findSupportedLocale(Locale .forLanguageTag(" en-US" ))).isEqualTo(ENGLISH )
138+ assertThat(findSupportedLocale(Locale .forLanguageTag(" en-GB" ))).isEqualTo(ENGLISH )
139+ assertThat(findSupportedLocale(Locale .forLanguageTag(" fr-CA" ))).isEqualTo(FRENCH )
140+ // pt-Latn-AO (Angola) matches PORTUGUESE_BRAZIL because it is the first 'pt' in the list
141+ assertThat(findSupportedLocale(Locale .forLanguageTag(" pt-Latn-AO" ))).isEqualTo(PORTUGUESE_BRAZIL )
142+
143+ // No match fallback to default
144+ assertThat(findSupportedLocale(Locale .forLanguageTag(" xx" ))).isEqualTo(defaultLocale)
145+ }
146+
147+ @Test
148+ fun supportedLanguageTagsTest () {
149+ val actual = supportedLanguageTags()
150+ assertThat(actual).contains(" " )
151+ assertThat(actual).contains(" en" )
152+ assertThat(actual).contains(" zh-Hans" )
153+ assertThat(actual).contains(" zh-Hant" )
154+ assertThat(actual).hasSize(baseSupportedLocales.size + 1 )
155+ }
156+
157+ @Test
158+ fun toSupportedLocaleTagTest () {
159+ assertThat(Locale .forLanguageTag(" en-US" ).toSupportedLocaleTag()).isEqualTo(" en" )
160+ assertThat(Locale .forLanguageTag(" zh-CN" ).toSupportedLocaleTag()).isEqualTo(" zh-Hans" )
161+ }
162+
107163 @Test
108164 fun allSupportedLanguages () {
109165 // setup
0 commit comments