mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-08-14 11:22:19 +02:00
221 lines
9.7 KiB
Java
221 lines
9.7 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 nodomain.freeyourgadget.gadgetbridge.util.language.impl.FlattenToAsciiTransliterator;
|
||
|
||
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 testFlattenToAscii() throws Exception {
|
||
final FlattenToAsciiTransliterator transliterator = new FlattenToAsciiTransliterator();
|
||
String input = "ä ș ț ă";
|
||
String output = transliterator.transliterate(input);
|
||
String expected = "a s t a";
|
||
assertEquals("flatten to ascii 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);
|
||
}
|
||
}
|