All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.robolectric.shadows.ShadowLocaleData Maven / Gradle / Ivy

The newest version!
package org.robolectric.shadows;

import java.util.Locale;

import libcore.icu.LocaleData;
import org.robolectric.annotation.Implements;
import org.robolectric.annotation.Implementation;
import org.robolectric.shadow.api.Shadow;
import org.robolectric.util.ReflectionHelpers;

import static android.os.Build.VERSION_CODES.JELLY_BEAN_MR1;
import static android.os.Build.VERSION_CODES.JELLY_BEAN_MR2;
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 org.robolectric.RuntimeEnvironment.getApiLevel;

/**
 * Robolectric only supports en_US regardless of the default locale set in the JVM.
 */
@Implements(value = LocaleData.class, isInAndroidSdk = false)
public class ShadowLocaleData {
  public static final String REAL_CLASS_NAME = "libcore.icu.LocaleData";

  @Implementation
  public static LocaleData get(Locale locale) {
    LocaleData localeData = (LocaleData) Shadow.newInstanceOf(REAL_CLASS_NAME);
    if (locale == null) {
      locale = Locale.getDefault();
    }
    setEnUsLocaleData(localeData);
    return localeData;
  }

  private static void setEnUsLocaleData(LocaleData localeData) {
    localeData.amPm = new String[]{"AM", "PM"};
    localeData.eras = new String[]{"BC", "AD"};

    localeData.firstDayOfWeek = 1;
    localeData.minimalDaysInFirstWeek = 1;

    localeData.longMonthNames = new String[]{"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
    localeData.shortMonthNames = new String[]{"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};

    if (getApiLevel() >= JELLY_BEAN_MR1) {
      localeData.tinyMonthNames = new String[]{"J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"};
      localeData.tinyStandAloneMonthNames = localeData.tinyMonthNames;
      localeData.tinyWeekdayNames = new String[]{"", "S", "M", "T", "W", "T", "F", "S"};
      localeData.tinyStandAloneWeekdayNames = localeData.tinyWeekdayNames;

      localeData.yesterday = "Yesterday";
      localeData.today = "Today";
      localeData.tomorrow = "Tomorrow";
    }

    localeData.longStandAloneMonthNames = localeData.longMonthNames;
    localeData.shortStandAloneMonthNames = localeData.shortMonthNames;

    localeData.longWeekdayNames = new String[]{"", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
    localeData.shortWeekdayNames = new String[]{"", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};

    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";
    } else if (getApiLevel() >= JELLY_BEAN_MR2) {
      ReflectionHelpers.setField(localeData, "timeFormat12", "h:mm a");
      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", '%');
    }

    localeData.perMill = 0x2030;
    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";

    localeData.currencySymbol = "$";
    localeData.internationalCurrencySymbol = "USD";

    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%";
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy