package cgeo.geocaching.speech;
import static org.assertj.core.api.Java6Assertions.assertThat;
import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.location.Geopoint;
import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.settings.TestSettings;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.test.AndroidTestCase;
import java.util.Locale;
public class TextFactoryTest extends AndroidTestCase {
private static final Geopoint MY_POSITION = new Geopoint(15, -86);
private static final Geopoint NORTH_6100M = new Geopoint(15.054859, -86);
private static final Geopoint WEST_1MILE = new Geopoint(15, -86.014984);
private static final Geopoint SOUTH_1020M = new Geopoint(14.990827, -86);
private static final Geopoint EAST_123M = new Geopoint(15, -85.998855);
private static final Geopoint WEST_34M = new Geopoint(15, -86.000317);
private static final Geopoint EAST_1M = new Geopoint(15, -85.999990);
private static final Geopoint EAST_1FT = new Geopoint(15, -85.999996);
private Locale defaultLocale1;
private Locale defaultLocale2;
private boolean defaultMetric;
@Override
protected void setUp() throws Exception {
super.setUp();
final Resources resources = CgeoApplication.getInstance().getResources();
final Configuration config = resources.getConfiguration();
defaultLocale1 = config.locale;
defaultLocale2 = Locale.getDefault();
defaultMetric = !Settings.useImperialUnits();
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
setLocale(defaultLocale1, defaultLocale2, defaultMetric);
}
public static void testGetTextEn() {
setLocale(Locale.UK, true);
assertThat(TextFactory.getText(MY_POSITION, NORTH_6100M, 330)).isEqualTo("one o'clock. 6 kilometers");
assertThat(TextFactory.getText(MY_POSITION, WEST_1MILE, 0)).isEqualTo("9 o'clock. 1.6 kilometers");
assertThat(TextFactory.getText(MY_POSITION, SOUTH_1020M, 0)).isEqualTo("6 o'clock. one kilometer");
assertThat(TextFactory.getText(MY_POSITION, EAST_123M, 0)).isEqualTo("3 o'clock. 120 meters");
assertThat(TextFactory.getText(MY_POSITION, WEST_34M, 290)).isEqualTo("11 o'clock. 34 meters");
assertThat(TextFactory.getText(MY_POSITION, EAST_1M, 180)).isEqualTo("9 o'clock. one meter");
assertThat(TextFactory.getText(MY_POSITION, MY_POSITION, 0)).isEqualTo("12 o'clock. 0 meters");
setLocale(Locale.UK, false);
assertThat(TextFactory.getText(MY_POSITION, NORTH_6100M, 330)).isEqualTo("one o'clock. 4 miles");
assertThat(TextFactory.getText(MY_POSITION, WEST_1MILE, 0)).isEqualTo("9 o'clock. one mile");
assertThat(TextFactory.getText(MY_POSITION, SOUTH_1020M, 0)).isEqualTo("6 o'clock. 0.6 miles");
assertThat(TextFactory.getText(MY_POSITION, EAST_123M, 0)).isEqualTo("3 o'clock. 400 feet");
assertThat(TextFactory.getText(MY_POSITION, WEST_34M, 290)).isEqualTo("11 o'clock. 111 feet");
assertThat(TextFactory.getText(MY_POSITION, EAST_1FT, 180)).isEqualTo("9 o'clock. one foot");
assertThat(TextFactory.getText(MY_POSITION, MY_POSITION, 0)).isEqualTo("12 o'clock. 0 feet");
}
public static void testGetTextDe() {
setLocale(Locale.GERMANY, true);
assertThat(TextFactory.getText(MY_POSITION, NORTH_6100M, 330)).isEqualTo("ein Uhr. 6 Kilometer");
assertThat(TextFactory.getText(MY_POSITION, WEST_1MILE, 0)).isEqualTo("9 Uhr. 1,6 Kilometer");
assertThat(TextFactory.getText(MY_POSITION, SOUTH_1020M, 0)).isEqualTo("6 Uhr. ein Kilometer");
assertThat(TextFactory.getText(MY_POSITION, EAST_123M, 0)).isEqualTo("3 Uhr. 120 Meter");
assertThat(TextFactory.getText(MY_POSITION, WEST_34M, 290)).isEqualTo("11 Uhr. 34 Meter");
assertThat(TextFactory.getText(MY_POSITION, EAST_1M, 180)).isEqualTo("9 Uhr. ein Meter");
assertThat(TextFactory.getText(MY_POSITION, MY_POSITION, 0)).isEqualTo("12 Uhr. 0 Meter");
setLocale(Locale.GERMANY, false);
assertThat(TextFactory.getText(MY_POSITION, NORTH_6100M, 330)).isEqualTo("ein Uhr. 4 Meilen");
assertThat(TextFactory.getText(MY_POSITION, WEST_1MILE, 0)).isEqualTo("9 Uhr. eine Meile");
assertThat(TextFactory.getText(MY_POSITION, SOUTH_1020M, 0)).isEqualTo("6 Uhr. 0,6 Meilen");
assertThat(TextFactory.getText(MY_POSITION, EAST_123M, 0)).isEqualTo("3 Uhr. 400 Fuß");
assertThat(TextFactory.getText(MY_POSITION, WEST_34M, 290)).isEqualTo("11 Uhr. 111 Fuß");
assertThat(TextFactory.getText(MY_POSITION, EAST_1FT, 180)).isEqualTo("9 Uhr. ein Fuß");
assertThat(TextFactory.getText(MY_POSITION, MY_POSITION, 0)).isEqualTo("12 Uhr. 0 Fuß");
}
public static void testGetTextFr() {
setLocale(Locale.FRANCE, true);
assertThat(TextFactory.getText(MY_POSITION, NORTH_6100M, 330)).isEqualTo("une heure. 6 kilomètres");
assertThat(TextFactory.getText(MY_POSITION, WEST_1MILE, 0)).isEqualTo("9 heures. 1,6 kilomètres");
assertThat(TextFactory.getText(MY_POSITION, SOUTH_1020M, 0)).isEqualTo("6 heures. un kilomètre");
assertThat(TextFactory.getText(MY_POSITION, EAST_123M, 0)).isEqualTo("3 heures. 120 mètres");
assertThat(TextFactory.getText(MY_POSITION, WEST_34M, 290)).isEqualTo("11 heures. 34 mètres");
assertThat(TextFactory.getText(MY_POSITION, EAST_1M, 180)).isEqualTo("9 heures. un mètre");
assertThat(TextFactory.getText(MY_POSITION, MY_POSITION, 0)).isEqualTo("12 heures. 0 mètre");
setLocale(Locale.FRANCE, false);
assertThat(TextFactory.getText(MY_POSITION, NORTH_6100M, 330)).isEqualTo("une heure. 4 milles");
assertThat(TextFactory.getText(MY_POSITION, WEST_1MILE, 0)).isEqualTo("9 heures. un mille");
assertThat(TextFactory.getText(MY_POSITION, SOUTH_1020M, 0)).isEqualTo("6 heures. 0,6 milles");
assertThat(TextFactory.getText(MY_POSITION, EAST_123M, 0)).isEqualTo("3 heures. 400 pieds");
assertThat(TextFactory.getText(MY_POSITION, WEST_34M, 290)).isEqualTo("11 heures. 111 pieds");
assertThat(TextFactory.getText(MY_POSITION, EAST_1FT, 180)).isEqualTo("9 heures. un pied");
assertThat(TextFactory.getText(MY_POSITION, MY_POSITION, 0)).isEqualTo("12 heures. 0 pied");
}
public static void testGetTextIt() {
setLocale(Locale.ITALY, true);
assertThat(TextFactory.getText(MY_POSITION, NORTH_6100M, 330)).isEqualTo("a ore una. 6 chilometri");
assertThat(TextFactory.getText(MY_POSITION, WEST_1MILE, 0)).isEqualTo("a ore 9. 1,6 chilometri");
assertThat(TextFactory.getText(MY_POSITION, SOUTH_1020M, 0)).isEqualTo("a ore 6. un chilometro");
assertThat(TextFactory.getText(MY_POSITION, EAST_123M, 0)).isEqualTo("a ore 3. 120 metri");
assertThat(TextFactory.getText(MY_POSITION, WEST_34M, 290)).isEqualTo("a ore 11. 34 metri");
assertThat(TextFactory.getText(MY_POSITION, EAST_1M, 180)).isEqualTo("a ore 9. un metro");
assertThat(TextFactory.getText(MY_POSITION, MY_POSITION, 0)).isEqualTo("a ore 12. 0 metri");
setLocale(Locale.ITALY, false);
assertThat(TextFactory.getText(MY_POSITION, NORTH_6100M, 330)).isEqualTo("a ore una. 4 miglia");
assertThat(TextFactory.getText(MY_POSITION, WEST_1MILE, 0)).isEqualTo("a ore 9. un miglio");
assertThat(TextFactory.getText(MY_POSITION, SOUTH_1020M, 0)).isEqualTo("a ore 6. 0,6 miglia");
assertThat(TextFactory.getText(MY_POSITION, EAST_123M, 0)).isEqualTo("a ore 3. 400 piedi");
assertThat(TextFactory.getText(MY_POSITION, WEST_34M, 290)).isEqualTo("a ore 11. 111 piedi");
assertThat(TextFactory.getText(MY_POSITION, EAST_1FT, 180)).isEqualTo("a ore 9. un piede");
assertThat(TextFactory.getText(MY_POSITION, MY_POSITION, 0)).isEqualTo("a ore 12. 0 piedi");
}
public static void testGetTextSv() {
setLocale(new Locale("sv", "SE"), true);
assertThat(TextFactory.getText(MY_POSITION, NORTH_6100M, 330)).isEqualTo("Klockan ett. 6 kilometer");
assertThat(TextFactory.getText(MY_POSITION, WEST_1MILE, 0)).isEqualTo("Klockan 9. 1,6 kilometer");
assertThat(TextFactory.getText(MY_POSITION, SOUTH_1020M, 0)).isEqualTo("Klockan 6. en kilometer");
assertThat(TextFactory.getText(MY_POSITION, EAST_123M, 0)).isEqualTo("Klockan 3. 120 meter");
assertThat(TextFactory.getText(MY_POSITION, WEST_34M, 290)).isEqualTo("Klockan 11. 34 meter");
assertThat(TextFactory.getText(MY_POSITION, EAST_1M, 180)).isEqualTo("Klockan 9. en meter");
assertThat(TextFactory.getText(MY_POSITION, MY_POSITION, 0)).isEqualTo("Klockan 12. 0 meter");
setLocale(new Locale("sv", "SE"), false);
assertThat(TextFactory.getText(MY_POSITION, NORTH_6100M, 330)).isEqualTo("Klockan ett. 4 engelsk mil");
assertThat(TextFactory.getText(MY_POSITION, WEST_1MILE, 0)).isEqualTo("Klockan 9. en engelsk mil");
assertThat(TextFactory.getText(MY_POSITION, SOUTH_1020M, 0)).isEqualTo("Klockan 6. 0,6 engelsk mil");
assertThat(TextFactory.getText(MY_POSITION, EAST_123M, 0)).isEqualTo("Klockan 3. 400 fot");
assertThat(TextFactory.getText(MY_POSITION, WEST_34M, 290)).isEqualTo("Klockan 11. 111 fot");
assertThat(TextFactory.getText(MY_POSITION, EAST_1FT, 180)).isEqualTo("Klockan 9. en fot");
assertThat(TextFactory.getText(MY_POSITION, MY_POSITION, 0)).isEqualTo("Klockan 12. 0 fot");
}
private static void setLocale(final Locale locale, final boolean metric) {
setLocale(locale, locale, metric);
}
private static void setLocale(final Locale locale1, final Locale locale2, final boolean metric) {
final Configuration config = new Configuration();
config.locale = locale1;
final Resources resources = CgeoApplication.getInstance().getResources();
resources.updateConfiguration(config, resources.getDisplayMetrics());
Locale.setDefault(locale2);
TestSettings.setUseImperialUnits(!metric);
}
}