Skip to content

Commit

Permalink
ICU's MessageFormat is better than getQuantityString().
Browse files Browse the repository at this point in the history
Part of #1584
  • Loading branch information
dennisguse committed Jun 14, 2023
1 parent 11db0d1 commit 84918d4
Showing 1 changed file with 51 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import static org.junit.Assert.assertEquals;

import android.content.Context;
import android.icu.text.MessageFormat;
import android.icu.text.PluralRules;
import android.util.Pair;

import androidx.test.core.app.ApplicationProvider;
Expand All @@ -15,8 +17,10 @@

import java.time.Duration;
import java.util.Locale;
import java.util.Map;

import de.dennisguse.opentracks.LocaleRule;
import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.content.data.TestDataUtil;
import de.dennisguse.opentracks.data.ContentProviderUtils;
import de.dennisguse.opentracks.data.TrackPointIterator;
Expand Down Expand Up @@ -191,6 +195,34 @@ public void getAnnouncement_imperial_speed() {
assertEquals("Total distance 12.4 miles. 1 hour 5 minutes 10 seconds. Average moving speed 11.4 miles per hour.", announcement);
}

@Test
public void getAnnouncement_imperial_speed_1() {
TrackStatistics stats = new TrackStatistics();
stats.setTotalDistance(Distance.ofMile(1.1));
stats.setTotalTime(Duration.ofHours(2).plusMinutes(5).plusSeconds(10));
stats.setMovingTime(Duration.ofHours(1));

// when
String announcement = VoiceAnnouncementUtils.getAnnouncement(context, stats, UnitSystem.IMPERIAL, true, null, null).toString();

// then
assertEquals("Total distance 1.1 miles. 1 hour 5 minutes 10 seconds. Average moving speed 1.1 miles per hour.", announcement);
}

@Test
public void getAnnouncement_metric_speed_1() {
TrackStatistics stats = new TrackStatistics();
stats.setTotalDistance(Distance.ofKilometer(1.1));
stats.setTotalTime(Duration.ofHours(2).plusMinutes(5).plusSeconds(10));
stats.setMovingTime(Duration.ofHours(1));

// when
String announcement = VoiceAnnouncementUtils.getAnnouncement(context, stats, UnitSystem.METRIC, true, null, null).toString();

// then
assertEquals("Total distance 1.1 kilometer. 1 hour 5 minutes 10 seconds. Average moving speed 1.1 kilometer per hour.", announcement);
}

@Test
public void getAnnouncement_withInterval_imperial_speed() {
// given
Expand Down Expand Up @@ -306,4 +338,23 @@ public void getAnnouncement_only_lap_heart_rate() {
// then
assertEquals(" Current heart rate 133 bpm.", announcement);
}

@Test
//TODO REMOVE
public void testProofOfConcept() {
// Android 7's ICU MessageFormat; working
String template = """
{distance, plural,
=1 {1 mile}
other {{distance} miles}
}""";

double distanceInMiles = 1.1;

assertEquals("other", PluralRules.forLocale(Locale.US).select(distanceInMiles));
assertEquals("1.1 miles", MessageFormat.format(template, Map.of("distance", 1.1)));

// Android getQuantityString(); failing
assertEquals("1.1 miles", ApplicationProvider.getApplicationContext().getResources().getQuantityString(R.plurals.voiceDistanceMiles, 1, 1.1));
}
}

0 comments on commit 84918d4

Please sign in to comment.