mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-07-06 21:51:34 +02:00
191 lines
8.4 KiB
Java
191 lines
8.4 KiB
Java
package nodomain.freeyourgadget.gadgetbridge.util.language;
|
|
|
|
import android.content.SharedPreferences;
|
|
|
|
import org.junit.Test;
|
|
|
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
|
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
|
import nodomain.freeyourgadget.gadgetbridge.test.TestBase;
|
|
|
|
import static org.junit.Assert.assertEquals;
|
|
import static org.junit.Assert.assertNotNull;
|
|
import static org.junit.Assert.assertNull;
|
|
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_TRANSLITERATION_LANGUAGES;
|
|
|
|
/**
|
|
* Tests LanguageUtils
|
|
*/
|
|
public class LanguageUtilsTest extends TestBase {
|
|
|
|
private GBDevice dummyGBDevice;
|
|
|
|
@Override
|
|
public void setUp() throws Exception {
|
|
super.setUp();
|
|
dummyGBDevice = createDummyGDevice("00:00:00:00:10");
|
|
}
|
|
|
|
|
|
@Test
|
|
public void testStringTransliterateCyrillic() throws Exception {
|
|
final Transliterator transliterator = LanguageUtils.getTransliterator("russian");
|
|
|
|
// input with cyrillic and diacritic letters
|
|
String input = "Прõсто текčт";
|
|
String output = transliterator.transliterate(input);
|
|
String result = "Prosto tekct";
|
|
|
|
assertEquals("Transliteration failed", result, output);
|
|
}
|
|
|
|
@Test
|
|
public void testStringTransliterateHebrew() throws Exception {
|
|
final Transliterator transliterator = LanguageUtils.getTransliterator("hebrew");
|
|
|
|
String input = "בדיקה עברית";
|
|
String output = transliterator.transliterate(input);
|
|
String result = "bdykh 'bryth";
|
|
|
|
assertEquals("Transliteration failed", result, output);
|
|
}
|
|
|
|
@Test
|
|
public void testStringTransliterateArabic() {
|
|
final Transliterator transliterator = LanguageUtils.getTransliterator("arabic");
|
|
|
|
String pangram = "نص حكيم له سر قاطع وذو شأن عظيم مكتوب على ثوب أخضر ومغلف بجلد أزرق";
|
|
String pangramExpected = "n9 7kym lh sr qa63 wthw sh2n 36'ym mktwb 3la thwb 259'r wm3'lf bjld 2zrq";
|
|
String pangramActual = transliterator.transliterate(pangram);
|
|
assertEquals("Arabic pangram transliteration failed", pangramExpected, pangramActual);
|
|
|
|
String taMarbutah = "ﺓ";
|
|
String taMarbutahExpected = "";
|
|
String taMarbutahActual = transliterator.transliterate(taMarbutah);
|
|
assertEquals("ta marbutah transliteration failed", taMarbutahExpected, taMarbutahActual);
|
|
|
|
String hamza = "ءأؤإئآ";
|
|
String hamzaExpected = "222222";
|
|
String hamzaActual = transliterator.transliterate(hamza);
|
|
assertEquals("hamza transliteration failed", hamzaExpected, hamzaActual);
|
|
|
|
String easternArabicNumeralsArabic = "٠١٢٣٤٥٦٧٨٩";
|
|
String easternArabicNumeralsExpected = "0123456789";
|
|
assertEquals("Eastern Arabic numerals (Arabic) failed", easternArabicNumeralsExpected,
|
|
transliterator.transliterate(easternArabicNumeralsArabic));
|
|
}
|
|
|
|
public void testStringTransliteratePersian() {
|
|
final Transliterator transliterator = LanguageUtils.getTransliterator("persian");
|
|
|
|
String farsi = "گچپژ";
|
|
String farsiExpected = "gchpzh";
|
|
String farsiActual = transliterator.transliterate(farsi);
|
|
assertEquals("Farsi transiteration failed", farsiExpected, farsiActual);
|
|
|
|
String easternArabicNumeralsFarsi = "۰۱۲۳۴۵۶۷۸۹";
|
|
String easternArabicNumeralsExpected = "0123456789";
|
|
|
|
assertEquals("Eastern Arabic numerals (Farsi) failed", easternArabicNumeralsExpected,
|
|
transliterator.transliterate(easternArabicNumeralsFarsi));
|
|
}
|
|
|
|
@Test
|
|
public void testStringTransliterateBengali() throws Exception {
|
|
final Transliterator transliterator = LanguageUtils.getTransliterator("bengali");
|
|
|
|
// input with cyrillic and diacritic letters
|
|
String[] inputs = { "অনিরুদ্ধ", "বিজ্ঞানযাত্রা চলছে চলবে।", "আমি সব দেখেশুনে ক্ষেপে গিয়ে করি বাঙলায় চিৎকার!",
|
|
"আমার জাভা কোড is so bad! কী আর বলবো!" };
|
|
String[] outputs = { "oniruddho", "biggaanJaatraa cholchhe cholbe.",
|
|
"aami sob dekheshune kkhepe giye kori baanglaay chitkaar!",
|
|
"aamaar jaabhaa koD is so bad! kii aar bolbo!"};
|
|
|
|
String result;
|
|
|
|
for (int i = 0; i < inputs.length; i++) {
|
|
result = transliterator.transliterate(inputs[i]);
|
|
assertEquals("Transliteration failed", outputs[i], result);
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void testStringTransliterateKorean() {
|
|
final Transliterator transliterator = LanguageUtils.getTransliterator("korean");
|
|
|
|
// A familiar phrase with no special provisions.
|
|
String hello = "안녕하세요";
|
|
String helloExpected = "annyeonghaseyo";
|
|
String helloActual = transliterator.transliterate(hello);
|
|
assertEquals("Korean hello transliteration failed", helloExpected, helloActual);
|
|
|
|
// Korean pangram. Includes some ASCII punctuation which should not be changed by
|
|
// transliteration.
|
|
//
|
|
// Translation: "Chocolate!? What I wanted was some rice puffs and clothes." "Child, why are
|
|
// you complaining again?"
|
|
String pangram = "\"웬 초콜릿? 제가 원했던 건 뻥튀기 쬐끔과 의류예요.\" \"얘야, 왜 또 불평?\"";
|
|
String pangramExpected = "\"wen chokollit? jega wonhaetdeon geon ppeongtwigi jjoekkeumgwa uiryuyeyo.\" \"yaeya, wae tto bulpyeong?\"";
|
|
String pangramActual = transliterator.transliterate(pangram);
|
|
assertEquals("Korean pangram transliteration failed", pangramExpected, pangramActual);
|
|
|
|
// Several words excercising special provisions, from Wikipedia.
|
|
String special = "좋고, 놓다, 잡혀, 낳지";
|
|
String specialExpected = "joko, nota, japhyeo, nachi";
|
|
String specialActual = transliterator.transliterate(special);
|
|
assertEquals("Korean special provisions transliteration failed", specialExpected, specialActual);
|
|
|
|
// Isolated jamo.
|
|
String isolatedJamo = "ㅋㅋㅋ";
|
|
String isolatedJamoExpected = "kkk";
|
|
String isolatedJamoActual = transliterator.transliterate(isolatedJamo);
|
|
assertEquals("Korean isolated jamo transliteration failed", isolatedJamoExpected, isolatedJamoActual);
|
|
|
|
// Korean transliteration shouldn't touch non-Hangul composites.
|
|
String german = "schön";
|
|
String germanExpected = german;
|
|
String germanActual = transliterator.transliterate(german);
|
|
assertEquals("Korean transliteration modified a non-Hangul composite", germanExpected, germanActual);
|
|
}
|
|
|
|
@Test
|
|
public void testStringTransliterateLithuanian() {
|
|
final Transliterator transliterator = LanguageUtils.getTransliterator("lithuanian");
|
|
|
|
String input = "ą č ę ė į š ų ū ž";
|
|
String output = transliterator.transliterate(input);
|
|
String expected = "a c e e i s u u z";
|
|
assertEquals("lithuanian translation failed", expected, output);
|
|
|
|
input = "aąa cčc eęe eėe iįi sšs uųu uūu zžz";
|
|
output = transliterator.transliterate(input);
|
|
expected = "aaa ccc eee eee iii sss uuu uuu zzz";
|
|
assertEquals("lithuanian translation failed", expected, output);
|
|
}
|
|
|
|
@Test
|
|
public void testTransliterateOption() throws Exception {
|
|
enableTransliteration(false);
|
|
assertNull("Transliteration option fail! Expected 'Off' by default, but result is 'On'",
|
|
getTransliteration());
|
|
|
|
enableTransliteration(true);
|
|
assertNotNull("Transliteration option fail! Expected 'On', but result is 'Off'", getTransliteration());
|
|
}
|
|
|
|
private void enableTransliteration(boolean enable) {
|
|
SharedPreferences devicePrefs = GBApplication.getDeviceSpecificSharedPrefs(dummyGBDevice.getAddress());
|
|
SharedPreferences.Editor editor = devicePrefs.edit();
|
|
if (enable) {
|
|
editor.putString(PREF_TRANSLITERATION_LANGUAGES, "extended_ascii,scandinavian,german,russian,hebrew,greek,ukranian,arabic,persian,lithuanian,polish,estonian,icelandic,czech,turkish,bengali,korean");
|
|
} else {
|
|
editor.remove(PREF_TRANSLITERATION_LANGUAGES);
|
|
}
|
|
editor.apply();
|
|
}
|
|
|
|
private Transliterator getTransliteration() {
|
|
return LanguageUtils.getTransliterator(dummyGBDevice);
|
|
}
|
|
}
|