Gadgetbridge/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/util/language/LanguageUtilsTest.java

211 lines
9.2 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 testStringTransliterateGeorgian() {
final Transliterator transliterator = LanguageUtils.getTransliterator("georgian");
String input = "ა ბ ტ თ ჟ წ ჭ ჰ";
String output = transliterator.transliterate(input);
String expected = "a b t T J y w W h";
assertEquals("georgian transliteration failed", expected, output);
}
@Test
public void testStringTransliterateCroatian() {
final Transliterator transliterator = LanguageUtils.getTransliterator("croatian");
String input = "č ć đ š ž";
String output = transliterator.transliterate(input);
String expected = "c c d s z";
assertEquals("croatian transliteration 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,georgian,croatian");
} else {
editor.remove(PREF_TRANSLITERATION_LANGUAGES);
}
editor.apply();
}
private Transliterator getTransliteration() {
return LanguageUtils.getTransliterator(dummyGBDevice);
}
}