1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-06-27 15:30:14 +02:00
Gadgetbridge/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/util/language/LanguageUtilsTest.java
2022-06-15 18:40:28 +02:00

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);
}
}