Test that icu4c only uses the Gregorian calendar when formatting date ranges for us.

(cherry picked from commit 6adedf966a3c9f5ae0118053c90bf67d870aa221)

Bug: 12004664
Change-Id: I89998748bf5724d5e13d6b31b9bbd55b1875fa28
diff --git a/luni/src/test/java/libcore/icu/DateIntervalFormatTest.java b/luni/src/test/java/libcore/icu/DateIntervalFormatTest.java
index 93be0ce..c8cf572 100644
--- a/luni/src/test/java/libcore/icu/DateIntervalFormatTest.java
+++ b/luni/src/test/java/libcore/icu/DateIntervalFormatTest.java
@@ -36,7 +36,7 @@
   public void test_formatDateInterval() throws Exception {
     TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles");
 
-    Calendar c = Calendar.getInstance(tz);
+    Calendar c = Calendar.getInstance(tz, Locale.US);
     c.set(Calendar.MONTH, Calendar.JANUARY);
     c.set(Calendar.DAY_OF_MONTH, 19);
     c.set(Calendar.HOUR_OF_DAY, 3);
@@ -172,7 +172,7 @@
   public void test8862241() throws Exception {
     Locale l = Locale.US;
     TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles");
-    Calendar c = Calendar.getInstance(tz);
+    Calendar c = Calendar.getInstance(tz, l);
     c.set(2042, Calendar.JANUARY, 19, 3, 30);
     long jan_19_2042 = c.getTimeInMillis();
     c.set(2046, Calendar.OCTOBER, 4, 3, 30);
@@ -293,7 +293,7 @@
     // Construct a date in the current year (whenever the test happens to be run).
     Locale l = Locale.US;
     TimeZone utc = TimeZone.getTimeZone("UTC");
-    Calendar c = Calendar.getInstance(utc);
+    Calendar c = Calendar.getInstance(utc, l);
     c.set(Calendar.MONTH, Calendar.FEBRUARY);
     c.set(Calendar.DAY_OF_MONTH, 10);
     c.set(Calendar.HOUR_OF_DAY, 0);
@@ -323,4 +323,51 @@
     assertEquals(String.format("February 10, 1980 – February 10, %d", c.get(Calendar.YEAR)),
                  formatDateRange(l, utc, oldYear, thisYear, FORMAT_SHOW_DATE | FORMAT_NO_YEAR));
   }
+
+  // http://b/8467515 - yet another y2k38 bug report.
+  public void test8467515() throws Exception {
+    Locale l = Locale.US;
+    TimeZone utc = TimeZone.getTimeZone("UTC");
+    int flags = FORMAT_SHOW_DATE | FORMAT_SHOW_WEEKDAY | FORMAT_SHOW_YEAR | FORMAT_ABBREV_MONTH | FORMAT_ABBREV_WEEKDAY;
+    long t;
+
+    Calendar calendar = Calendar.getInstance(utc, l);
+    calendar.clear();
+
+    calendar.set(2038, Calendar.JANUARY, 19, 12, 0, 0);
+    t = calendar.getTimeInMillis();
+    assertEquals("Tue, Jan 19, 2038", formatDateRange(l, utc, t, t, flags));
+
+    calendar.set(1900, Calendar.JANUARY, 1, 0, 0, 0);
+    t = calendar.getTimeInMillis();
+    assertEquals("Mon, Jan 1, 1900", formatDateRange(l, utc, t, t, flags));
+  }
+
+  // http://b/12004664
+  public void test12004664() throws Exception {
+    TimeZone utc = TimeZone.getTimeZone("UTC");
+    Calendar c = Calendar.getInstance(utc, Locale.US);
+    c.set(Calendar.YEAR, 1980);
+    c.set(Calendar.MONTH, Calendar.FEBRUARY);
+    c.set(Calendar.DAY_OF_MONTH, 10);
+    c.set(Calendar.HOUR_OF_DAY, 0);
+    long thisYear = c.getTimeInMillis();
+
+    int flags = FORMAT_SHOW_DATE | FORMAT_SHOW_WEEKDAY | FORMAT_SHOW_YEAR;
+    assertEquals("Sunday, February 10, 1980", formatDateRange(new Locale("en", "US"), utc, thisYear, thisYear, flags));
+
+    // If we supported non-Gregorian calendars, this is what that we'd expect for these locales.
+    // This is really the correct behavior, but since java.util.Calendar currently only supports
+    // the Gregorian calendar, we want to deliberately force icu4c to agree, otherwise we'd have
+    // a mix of calendars throughout an app's UI depending on whether Java or native code formatted
+    // the date.
+    //assertEquals("یکشنبه ۲۱ بهمن ۱۳۵۸ ه‍.ش.", formatDateRange(new Locale("fa"), utc, thisYear, thisYear, flags));
+    //assertEquals("AP ۱۳۵۸ سلواغه ۲۱, یکشنبه", formatDateRange(new Locale("ps"), utc, thisYear, thisYear, flags));
+    //assertEquals("วันอาทิตย์ 10 กุมภาพันธ์ 2523", formatDateRange(new Locale("th"), utc, thisYear, thisYear, flags));
+
+    // For now, here are the localized Gregorian strings instead...
+    assertEquals("یکشنبه ۱۰ فوریهٔ ۱۹۸۰", formatDateRange(new Locale("fa"), utc, thisYear, thisYear, flags));
+    assertEquals("یکشنبه د ۱۹۸۰ د فبروري ۱۰", formatDateRange(new Locale("ps"), utc, thisYear, thisYear, flags));
+    assertEquals("วันอาทิตย์ 10 กุมภาพันธ์ 1980", formatDateRange(new Locale("th"), utc, thisYear, thisYear, flags));
+  }
 }