package org.wikipedia.test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.wikipedia.WikipediaApp;
import org.wikipedia.dataclient.WikiSite;
import org.wikipedia.language.AppLanguageLookUpTable;
import java.util.Locale;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
@RunWith(TestRunner.class) public class LanguageVariantTest {
private Locale defaultLocale;
private String appLanguage;
/** Ensure that the more specific dialect is first in the list. */
@Test public void testDefaultLocaleAndAcceptLanguageAgree() {
preserveAppState();
testDefaultLocaleAndAcceptLanguageAgree("zh,zh-hant;q=0.8", "zh",
Locale.TRADITIONAL_CHINESE);
testDefaultLocaleAndAcceptLanguageAgree("zh,zh-hans;q=0.8", "zh",
Locale.SIMPLIFIED_CHINESE);
testDefaultLocaleAndAcceptLanguageAgree("zh,en;q=0.8", "zh", Locale.US);
testDefaultLocaleAndAcceptLanguageAgree("zh,en;q=0.8", "zh", Locale.ENGLISH);
testDefaultLocaleAndAcceptLanguageAgree("en,zh-hans;q=0.8", "en",
Locale.SIMPLIFIED_CHINESE);
testDefaultLocaleAndAcceptLanguageAgree("test,zh-hans;q=0.8", "test",
Locale.SIMPLIFIED_CHINESE);
testDefaultLocaleAndAcceptLanguageAgree("es,zh-hans;q=0.9,zh-hant;q=0.8",
AppLanguageLookUpTable.SIMPLIFIED_CHINESE_LANGUAGE_CODE,
Locale.TRADITIONAL_CHINESE, WikiSite.forLanguageCode("es"));
testDefaultLocaleAndAcceptLanguageAgree("zh-hant",
AppLanguageLookUpTable.TRADITIONAL_CHINESE_LANGUAGE_CODE,
Locale.TRADITIONAL_CHINESE);
restoreAppState();
}
private void testDefaultLocaleAndAcceptLanguageAgree(String expected, String appLanguage,
Locale systemLocale) {
testDefaultLocaleAndAcceptLanguageAgree(expected, appLanguage, systemLocale, null);
}
private void testDefaultLocaleAndAcceptLanguageAgree(String expected,
String appLanguage, Locale systemLocale, WikiSite wiki) {
WikipediaApp.getInstance().setAppLanguageCode(appLanguage);
Locale.setDefault(systemLocale);
assertThat(expected, is(WikipediaApp.getInstance().getAcceptLanguage(wiki)));
}
private void preserveAppState() {
preserveDefaultLocale();
preserveAppLanguage();
}
private void restoreAppState() {
restoreAppLanguage();
restoreDefaultLocale();
}
private void preserveAppLanguage() {
appLanguage = WikipediaApp.getInstance().getAppLanguageCode();
}
private void restoreAppLanguage() {
WikipediaApp.getInstance().setAppLanguageCode(appLanguage);
}
private void preserveDefaultLocale() {
defaultLocale = Locale.getDefault();
}
private void restoreDefaultLocale() {
Locale.setDefault(defaultLocale);
}
}