diff options
-rw-r--r-- | robolectric/src/test/java/org/robolectric/shadows/ShadowLocaleDataTest.java | 66 | ||||
-rw-r--r-- | shadows/framework/src/main/java/org/robolectric/shadows/ShadowLocaleData.java | 93 |
2 files changed, 72 insertions, 87 deletions
diff --git a/robolectric/src/test/java/org/robolectric/shadows/ShadowLocaleDataTest.java b/robolectric/src/test/java/org/robolectric/shadows/ShadowLocaleDataTest.java index 0ae09f90e..c1986b2db 100644 --- a/robolectric/src/test/java/org/robolectric/shadows/ShadowLocaleDataTest.java +++ b/robolectric/src/test/java/org/robolectric/shadows/ShadowLocaleDataTest.java @@ -4,6 +4,7 @@ import static android.os.Build.VERSION_CODES.JELLY_BEAN_MR1; import static android.os.Build.VERSION_CODES.LOLLIPOP; import static android.os.Build.VERSION_CODES.LOLLIPOP_MR1; import static android.os.Build.VERSION_CODES.M; +import static android.os.Build.VERSION_CODES.S; import static com.google.common.truth.Truth.assertThat; import android.os.Build; @@ -19,6 +20,7 @@ import org.robolectric.util.ReflectionHelpers; public class ShadowLocaleDataTest { @Test + @Config(maxSdk = Build.VERSION_CODES.S) public void shouldSupportLocaleEn_US() throws Exception { LocaleData localeData = LocaleData.get(Locale.US); @@ -40,31 +42,32 @@ public class ShadowLocaleDataTest { assertThat(localeData.longStandAloneWeekdayNames).isEqualTo(localeData.longWeekdayNames); assertThat(localeData.shortStandAloneWeekdayNames).isEqualTo(localeData.shortWeekdayNames); - assertThat(localeData.fullTimeFormat).isEqualTo("h:mm:ss a zzzz"); - assertThat(localeData.longTimeFormat).isEqualTo("h:mm:ss a z"); - assertThat(localeData.mediumTimeFormat).isEqualTo("h:mm:ss a"); - assertThat(localeData.shortTimeFormat).isEqualTo("h:mm a"); + assertThat((String) ReflectionHelpers.getField(localeData, "fullTimeFormat")).isEqualTo("h:mm:ss a zzzz"); + assertThat((String) ReflectionHelpers.getField(localeData, "longTimeFormat")).isEqualTo("h:mm:ss a z"); + assertThat((String) ReflectionHelpers.getField(localeData, "mediumTimeFormat")).isEqualTo("h:mm:ss a"); + assertThat((String) ReflectionHelpers.getField(localeData, "shortTimeFormat")).isEqualTo("h:mm a"); - assertThat(localeData.fullDateFormat).isEqualTo("EEEE, MMMM d, y"); - assertThat(localeData.longDateFormat).isEqualTo("MMMM d, y"); - assertThat(localeData.mediumDateFormat).isEqualTo("MMM d, y"); - assertThat(localeData.shortDateFormat).isEqualTo("M/d/yy"); + assertThat((String) ReflectionHelpers.getField(localeData, "fullDateFormat")).isEqualTo("EEEE, MMMM d, y"); + assertThat((String) ReflectionHelpers.getField(localeData, "longDateFormat")).isEqualTo("MMMM d, y"); + assertThat((String) ReflectionHelpers.getField(localeData, "mediumDateFormat")).isEqualTo("MMM d, y"); + assertThat((String) ReflectionHelpers.getField(localeData, "shortDateFormat")).isEqualTo("M/d/yy"); - assertThat(localeData.zeroDigit).isEqualTo('0'); - assertThat(localeData.decimalSeparator).isEqualTo('.'); - assertThat(localeData.groupingSeparator).isEqualTo(','); - assertThat(localeData.patternSeparator).isEqualTo(';'); + assertThat((char) ReflectionHelpers.getField(localeData, "zeroDigit")).isEqualTo('0'); + assertThat((char) ReflectionHelpers.getField(localeData, "decimalSeparator")).isEqualTo('.'); + assertThat((char) ReflectionHelpers.getField(localeData, "groupingSeparator")).isEqualTo(','); + assertThat((char) ReflectionHelpers.getField(localeData, "patternSeparator")).isEqualTo(';'); - assertThat(localeData.monetarySeparator).isEqualTo('.'); + assertThat((char) ReflectionHelpers.getField(localeData, "monetarySeparator")).isEqualTo('.'); + assertThat((char) ReflectionHelpers.getField(localeData, "perMill")).isEqualTo('‰'); - assertThat(localeData.exponentSeparator).isEqualTo("E"); - assertThat(localeData.infinity).isEqualTo("∞"); - assertThat(localeData.NaN).isEqualTo("NaN"); + assertThat((String) ReflectionHelpers.getField(localeData, "exponentSeparator")).isEqualTo("E"); + assertThat((String) ReflectionHelpers.getField(localeData, "infinity")).isEqualTo("∞"); + assertThat((String) ReflectionHelpers.getField(localeData, "NaN")).isEqualTo("NaN"); - assertThat(localeData.numberPattern).isEqualTo("#,##0.###"); - assertThat(localeData.integerPattern).isEqualTo("#,##0"); - assertThat(localeData.currencyPattern).isEqualTo("¤#,##0.00;(¤#,##0.00)"); - assertThat(localeData.percentPattern).isEqualTo("#,##0%"); + assertThat((String) ReflectionHelpers.getField(localeData, "numberPattern")).isEqualTo("#,##0.###"); + assertThat((String) ReflectionHelpers.getField(localeData, "integerPattern")).isEqualTo("#,##0"); + assertThat((String) ReflectionHelpers.getField(localeData, "currencyPattern")).isEqualTo("¤#,##0.00;(¤#,##0.00)"); + assertThat((String) ReflectionHelpers.getField(localeData, "percentPattern")).isEqualTo("#,##0%"); } @Test @@ -92,25 +95,10 @@ public class ShadowLocaleDataTest { } @Test - @Config(maxSdk = Build.VERSION_CODES.O) - public void shouldSupportLocaleEn_US_perMill() throws Exception { - LocaleData localeData = LocaleData.get(Locale.US); - char perMillValue = ReflectionHelpers.getField(localeData, "perMill"); - assertThat(perMillValue).isEqualTo('‰'); - } - - @Test - @Config(minSdk = Build.VERSION_CODES.P) - public void shouldSupportLocaleEn_US_perMillPostP() throws Exception { - LocaleData localeData = LocaleData.get(Locale.US); - assertThat(localeData.perMill).isEqualTo("‰"); - } - - @Test - @Config(minSdk = LOLLIPOP_MR1) + @Config(minSdk = LOLLIPOP_MR1, maxSdk = S) public void shouldSupportLocaleEn_US_percentPost22() throws Exception { LocaleData localeData = LocaleData.get(Locale.US); - assertThat(localeData.percent).isEqualTo("%"); + assertThat((String) ReflectionHelpers.getField(localeData, "percent")).isEqualTo("%"); } @Test @@ -137,11 +125,11 @@ public class ShadowLocaleDataTest { } @Test - @Config(minSdk = LOLLIPOP) + @Config(minSdk = LOLLIPOP, maxSdk = S) public void shouldSupportLocaleEn_US_since_lollipop() throws Exception { LocaleData localeData = LocaleData.get(Locale.US); - assertThat(localeData.minusSign).isEqualTo("-"); + assertThat((String) ReflectionHelpers.getField(localeData, "minusSign")).isEqualTo("-"); } @Test diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowLocaleData.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowLocaleData.java index 50f58f1aa..5ce12951b 100644 --- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowLocaleData.java +++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowLocaleData.java @@ -6,6 +6,7 @@ import static android.os.Build.VERSION_CODES.LOLLIPOP; import static android.os.Build.VERSION_CODES.LOLLIPOP_MR1; import static android.os.Build.VERSION_CODES.M; import static android.os.Build.VERSION_CODES.Q; +import static android.os.Build.VERSION_CODES.S; import static org.robolectric.RuntimeEnvironment.getApiLevel; import java.util.Locale; @@ -61,11 +62,6 @@ public class ShadowLocaleData { localeData.longStandAloneWeekdayNames = localeData.longWeekdayNames; localeData.shortStandAloneWeekdayNames = localeData.shortWeekdayNames; - localeData.fullTimeFormat = "h:mm:ss a zzzz"; - localeData.longTimeFormat = "h:mm:ss a z"; - localeData.mediumTimeFormat = "h:mm:ss a"; - localeData.shortTimeFormat = "h:mm a"; - if (getApiLevel() >= M) { localeData.timeFormat_hm = "h:mm a"; localeData.timeFormat_Hm = "HH:mm"; @@ -74,45 +70,6 @@ public class ShadowLocaleData { ReflectionHelpers.setField(localeData, "timeFormat24", "HH:mm"); } - localeData.fullDateFormat = "EEEE, MMMM d, y"; - localeData.longDateFormat = "MMMM d, y"; - localeData.mediumDateFormat = "MMM d, y"; - localeData.shortDateFormat = "M/d/yy"; - - localeData.zeroDigit = '0'; - localeData.decimalSeparator = '.'; - localeData.groupingSeparator = ','; - localeData.patternSeparator = ';'; - - if (getApiLevel() >= LOLLIPOP_MR1) { - // Lollipop MR1 uses a String - localeData.percent = "%"; - } else { - // Upto Lollipop was a char - ReflectionHelpers.setField(localeData, "percent", '%'); - } - - if (getApiLevel() >= android.os.Build.VERSION_CODES.P) { - // P uses a String - localeData.perMill = "‰"; - } else { - // Up to P was a char - ReflectionHelpers.setField(localeData, "perMill", '‰'); - } - - localeData.monetarySeparator = '.'; - - if (getApiLevel() >= LOLLIPOP) { - // Lollipop uses a String - localeData.minusSign = "-"; - } else { - // Upto KitKat was a char - ReflectionHelpers.setField(localeData, "minusSign", '-'); - } - - localeData.exponentSeparator = "E"; - localeData.infinity = "\u221E"; - localeData.NaN = "NaN"; // These fields are removed in Android R or later if (getApiLevel() <= Q) { @@ -121,9 +78,49 @@ public class ShadowLocaleData { ReflectionHelpers.setField(localeData, "yesterday", "Yesterday"); } - localeData.numberPattern = "\u0023,\u0023\u00230.\u0023\u0023\u0023"; - localeData.integerPattern = "\u0023,\u0023\u00230"; - localeData.currencyPattern = "\u00A4\u0023,\u0023\u00230.00;(\u00A4\u0023,\u0023\u00230.00)"; - localeData.percentPattern = "\u0023,\u0023\u00230%"; + + // These fields are removed in Android T or later + if (getApiLevel() <= S) { + ReflectionHelpers.setField(localeData, "fullDateFormat", "EEEE, MMMM d, y"); + ReflectionHelpers.setField(localeData, "longDateFormat", "MMMM d, y"); + ReflectionHelpers.setField(localeData, "mediumDateFormat", "MMM d, y"); + ReflectionHelpers.setField(localeData, "shortDateFormat", "M/d/yy"); + ReflectionHelpers.setField(localeData, "zeroDigit", '0'); + ReflectionHelpers.setField(localeData, "decimalSeparator", '.'); + ReflectionHelpers.setField(localeData, "groupingSeparator", ','); + ReflectionHelpers.setField(localeData, "patternSeparator", ';'); + ReflectionHelpers.setField(localeData, "monetarySeparator", '.'); + ReflectionHelpers.setField(localeData, "exponentSeparator", "E"); + ReflectionHelpers.setField(localeData, "infinity", "\u221E"); + ReflectionHelpers.setField(localeData, "NaN", "NaN"); + ReflectionHelpers.setField(localeData, "numberPattern", "\u0023,\u0023\u00230.\u0023\u0023\u0023"); + ReflectionHelpers.setField(localeData, "integerPattern", "\u0023,\u0023\u00230"); + ReflectionHelpers.setField(localeData, "currencyPattern", "\u00A4\u0023,\u0023\u00230.00;(\u00A4\u0023,\u0023\u00230.00)"); + ReflectionHelpers.setField(localeData, "percentPattern", "\u0023,\u0023\u00230%"); + + if (getApiLevel() >= LOLLIPOP_MR1) { + // Lollipop MR1 uses a String + ReflectionHelpers.setField(localeData, "percent", "%"); + } else { + // Upto Lollipop was a char + ReflectionHelpers.setField(localeData, "percent", '%'); + } + + if (getApiLevel() >= android.os.Build.VERSION_CODES.P) { + // P uses a String + ReflectionHelpers.setField(localeData, "perMill", "‰"); + } else { + // Up to P was a char + ReflectionHelpers.setField(localeData, "perMill", '‰'); + } + + if (getApiLevel() >= LOLLIPOP) { + // Lollipop uses a String + ReflectionHelpers.setField(localeData, "minusSign", "-"); + } else { + // Upto KitKat was a char + ReflectionHelpers.setField(localeData, "minusSign", '-'); + } + } } } |