< prev index next >

test/java/text/Format/DateFormat/NonGregorianFormatTest.java

Print this page




  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 
  24 /*
  25  * @test
  26  * @bug 4833268 6253991 8008577
  27  * @summary Test formatting and parsing with non-Gregorian calendars
  28  * @run main/othervm -Djava.locale.providers=COMPAT,SPI NonGregorianFormatTest
  29  */
  30 
  31 import java.util.*;
  32 import java.text.*;
  33 import static java.util.Calendar.*;
  34 
  35 public class NonGregorianFormatTest {
  36     static int errors;
  37 

  38     static final Object[][] JAPANESE_EN = {
  39         { "GGGG yyyy MMMM d", "Showa 1 December 31", new Date(1926-1900, DECEMBER, 31) },
  40         { "GGGG yyyy MMMM d", "Showa 64 January 6", new Date(1989-1900, JANUARY, 6) },
  41         { "GGGG yyyy MMMM d", "Heisei 1 August 9", new Date(1989-1900, AUGUST, 9) },
  42         { "GGGG yyyy MMMM d", "Heisei 17 June 10", new Date(2005-1900, JUNE, 10) },
  43         { "Gy.MM.dd", "S1.12.31", new Date(1926-1900, DECEMBER, 31) },
  44         { "Gy.MM.dd", "S64.01.06", new Date(1989-1900, JANUARY, 6) },
  45         { "Gyy.MM.dd", "H01.08.09", new Date(1989-1900, AUGUST, 9) },
  46         { "Gy.M.d", "H1.8.9", new Date(1989-1900, AUGUST, 9) },
  47         { "Gy.MM.dd", "H17.06.10", new Date(2005-1900, JUNE, 10) },
  48     };
  49 
  50     // Invalid dates for parse exception tests
  51     static final Object[][] EXCEPTION_JAPANESE_EN = {
  52         { "GGGG yyyy MMMM d", "Showa 1 December 10" },
  53         { "GGGG yyyy MMMM d", "Showa 64 January 16" },
  54         { "GGGG yyyy MMMM d", "Heisei 1 January 1" },
  55         { "Gy.MM.dd", "S1.12.10" },
  56         { "Gy.MM.dd", "S64.01.16" },
  57         { "Gyy.MM.dd", "H01.01.01" },
  58     };
  59 

  60     static final Object[][] BUDDHIST_EN = {
  61         { "GGGG yyyy MMMM d", "B.E. 2469 December 31", new Date(1926-1900, DECEMBER, 31) },
  62         { "GGGG yyyy MMMM d", "B.E. 2532 January 6", new Date(1989-1900, JANUARY, 6) },
  63         { "GGGG yyyy MMMM d", "B.E. 2532 August 8", new Date(1989-1900, AUGUST, 8) },
  64         { "GGGG yyyy MMMM d", "B.E. 2548 June 10", new Date(2005-1900, JUNE, 10) },
  65         { "Gyyyy/MM/dd", "B.E.2469/12/31", new Date(1926-1900, DECEMBER, 31) },
  66         { "Gyyyy/MM/dd", "B.E.2532/01/06", new Date(1989-1900, JANUARY, 6) },
  67         { "Gyyyy/MM/dd", "B.E.2532/08/09", new Date(1989-1900, AUGUST, 9) },
  68         { "Gyyyy/MM/dd", "B.E.2548/06/10", new Date(2005-1900, JUNE, 10) },
  69     };
  70 
  71     static final String FULL_DATE_FORMAT_JA = "GGGGyyyy'\u5e74'M'\u6708'd'\u65e5'";
  72 

  73     static final Object[][] JAPANESE_JA = {
  74         { FULL_DATE_FORMAT_JA, "\u662d\u548c\u5143\u5e7412\u670831\u65e5", new Date(1926-1900, DECEMBER, 31) },
  75         { FULL_DATE_FORMAT_JA, "\u662d\u548c64\u5e741\u67086\u65e5", new Date(1989-1900, JANUARY, 6) },
  76         { FULL_DATE_FORMAT_JA, "\u5e73\u6210\u5143\u5e748\u67089\u65e5", new Date(1989-1900, AUGUST, 9) },
  77         { FULL_DATE_FORMAT_JA, "\u5e73\u621017\u5e746\u670810\u65e5", new Date(2005-1900, JUNE, 10) },
  78         { "Gyy.MM.dd", "S01.12.31", new Date(1926-1900, DECEMBER, 31) },
  79         { "Gyy.MM.dd", "S64.01.06", new Date(1989-1900, JANUARY, 6) },
  80         { "Gyy.MM.dd", "H01.08.09", new Date(1989-1900, AUGUST, 9) },
  81         { "Gy.M.d", "H1.8.9", new Date(1989-1900, AUGUST, 9) },
  82         { "Gyy.MM.dd", "H17.06.10", new Date(2005-1900, JUNE, 10) },
  83     };
  84 
  85     // Invalid dates for parse exception tests
  86     static final Object[][] EXCEPTION_JAPANESE_JA = {
  87         { FULL_DATE_FORMAT_JA, "\u662d\u548c\u5143\u5e7412\u670810\u65e5" },
  88         { FULL_DATE_FORMAT_JA, "\u662d\u548c64\u5e741\u670816\u65e5" },
  89         { FULL_DATE_FORMAT_JA, "\u5e73\u6210\u5143\u5e741\u67081\u65e5" },
  90         { "Gyy.MM.dd", "S01.12.10" },
  91         { "Gyy.MM.dd", "S64.01.16" },
  92         { "Gyy.MM.dd", "H01.01.01" },
  93     };
  94 

  95     static final Object[][] BUDDHIST_JA = {
  96         { FULL_DATE_FORMAT_JA, "\u4ecf\u66a62469\u5e7412\u670831\u65e5", new Date(1926-1900, DECEMBER, 31) },
  97         { FULL_DATE_FORMAT_JA, "\u4ecf\u66a62532\u5e741\u67086\u65e5", new Date(1989-1900, JANUARY, 6) },
  98         { FULL_DATE_FORMAT_JA, "\u4ecf\u66a62532\u5e748\u67089\u65e5", new Date(1989-1900, AUGUST, 9) },
  99         { FULL_DATE_FORMAT_JA, "\u4ecf\u66a62548\u5e746\u670810\u65e5", new Date(2005-1900, JUNE, 10) },
 100         { "Gyyyy/MM/dd", "B.E.2469/12/31", new Date(1926-1900, DECEMBER, 31) },
 101         { "Gyyyy/MM/dd", "B.E.2532/01/06", new Date(1989-1900, JANUARY, 6) },
 102         { "Gyyyy/MM/dd", "B.E.2532/08/09", new Date(1989-1900, AUGUST, 9) },
 103         { "Gyyyy/MM/dd", "B.E.2548/06/10", new Date(2005-1900, JUNE, 10) },
 104     };
 105 
 106     public static void main(String[] args) throws ParseException {
 107         Locale defaultLocale = Locale.getDefault();
 108         Locale[] locales = { Locale.ENGLISH, Locale.JAPAN };
 109         try {
 110             for (Locale locale : locales) {
 111                 test(locale);
 112             }
 113         } finally {
 114             Locale.setDefault(defaultLocale);


 119     }
 120 
 121     private static void test(Locale locale) {
 122         Locale.setDefault(locale);
 123 
 124         // Tests with the Japanese imperial calendar
 125         Locale calendarLocale = new Locale("ja", "JP", "JP");
 126         testRoundTrip(calendarLocale);
 127         testRoundTripSimple(calendarLocale,
 128                             locale == Locale.ENGLISH ? JAPANESE_EN : JAPANESE_JA);
 129         testParseExceptions(calendarLocale,
 130                             locale == Locale.ENGLISH ? EXCEPTION_JAPANESE_EN : EXCEPTION_JAPANESE_JA);
 131 
 132         // Tests with the Thai Buddhist calendar
 133         calendarLocale = new Locale("th", "TH");
 134         testRoundTrip(calendarLocale);
 135         testRoundTripSimple(calendarLocale,
 136                             locale == Locale.ENGLISH ? BUDDHIST_EN : BUDDHIST_JA);
 137     }
 138 

 139     private static void testRoundTrip(Locale calendarLocale) {
 140         DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL,
 141                                                        DateFormat.FULL,
 142                                                        calendarLocale);
 143 
 144         long t = System.currentTimeMillis();
 145         t = (t / 1000) * 1000; // discard milliseconds
 146         testRoundTrip(df, new Date(t));
 147 
 148         // H1.8.9
 149         testRoundTrip(df, new Date(1989-1900, AUGUST, 9));
 150 
 151         // H17.6.13
 152         testRoundTrip(df, new Date(2005-1900, JUNE, 13));
 153     }
 154 
 155     private static void testRoundTrip(DateFormat df, Date orig) {
 156         try {
 157             String s = df.format(orig);
 158             Date parsed = df.parse(s);




  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 
  24 /*
  25  * @test
  26  * @bug 4833268 6253991 8008577
  27  * @summary Test formatting and parsing with non-Gregorian calendars
  28  * @run main/othervm -Djava.locale.providers=COMPAT,SPI NonGregorianFormatTest
  29  */
  30 
  31 import java.util.*;
  32 import java.text.*;
  33 import static java.util.Calendar.*;
  34 
  35 public class NonGregorianFormatTest {
  36     static int errors;
  37 
  38     @SuppressWarnings("deprecation")
  39     static final Object[][] JAPANESE_EN = {
  40         { "GGGG yyyy MMMM d", "Showa 1 December 31", new Date(1926-1900, DECEMBER, 31) },
  41         { "GGGG yyyy MMMM d", "Showa 64 January 6", new Date(1989-1900, JANUARY, 6) },
  42         { "GGGG yyyy MMMM d", "Heisei 1 August 9", new Date(1989-1900, AUGUST, 9) },
  43         { "GGGG yyyy MMMM d", "Heisei 17 June 10", new Date(2005-1900, JUNE, 10) },
  44         { "Gy.MM.dd", "S1.12.31", new Date(1926-1900, DECEMBER, 31) },
  45         { "Gy.MM.dd", "S64.01.06", new Date(1989-1900, JANUARY, 6) },
  46         { "Gyy.MM.dd", "H01.08.09", new Date(1989-1900, AUGUST, 9) },
  47         { "Gy.M.d", "H1.8.9", new Date(1989-1900, AUGUST, 9) },
  48         { "Gy.MM.dd", "H17.06.10", new Date(2005-1900, JUNE, 10) },
  49     };
  50 
  51     // Invalid dates for parse exception tests
  52     static final Object[][] EXCEPTION_JAPANESE_EN = {
  53         { "GGGG yyyy MMMM d", "Showa 1 December 10" },
  54         { "GGGG yyyy MMMM d", "Showa 64 January 16" },
  55         { "GGGG yyyy MMMM d", "Heisei 1 January 1" },
  56         { "Gy.MM.dd", "S1.12.10" },
  57         { "Gy.MM.dd", "S64.01.16" },
  58         { "Gyy.MM.dd", "H01.01.01" },
  59     };
  60 
  61     @SuppressWarnings("deprecation")
  62     static final Object[][] BUDDHIST_EN = {
  63         { "GGGG yyyy MMMM d", "B.E. 2469 December 31", new Date(1926-1900, DECEMBER, 31) },
  64         { "GGGG yyyy MMMM d", "B.E. 2532 January 6", new Date(1989-1900, JANUARY, 6) },
  65         { "GGGG yyyy MMMM d", "B.E. 2532 August 8", new Date(1989-1900, AUGUST, 8) },
  66         { "GGGG yyyy MMMM d", "B.E. 2548 June 10", new Date(2005-1900, JUNE, 10) },
  67         { "Gyyyy/MM/dd", "B.E.2469/12/31", new Date(1926-1900, DECEMBER, 31) },
  68         { "Gyyyy/MM/dd", "B.E.2532/01/06", new Date(1989-1900, JANUARY, 6) },
  69         { "Gyyyy/MM/dd", "B.E.2532/08/09", new Date(1989-1900, AUGUST, 9) },
  70         { "Gyyyy/MM/dd", "B.E.2548/06/10", new Date(2005-1900, JUNE, 10) },
  71     };
  72 
  73     static final String FULL_DATE_FORMAT_JA = "GGGGyyyy'\u5e74'M'\u6708'd'\u65e5'";
  74 
  75     @SuppressWarnings("deprecation")
  76     static final Object[][] JAPANESE_JA = {
  77         { FULL_DATE_FORMAT_JA, "\u662d\u548c\u5143\u5e7412\u670831\u65e5", new Date(1926-1900, DECEMBER, 31) },
  78         { FULL_DATE_FORMAT_JA, "\u662d\u548c64\u5e741\u67086\u65e5", new Date(1989-1900, JANUARY, 6) },
  79         { FULL_DATE_FORMAT_JA, "\u5e73\u6210\u5143\u5e748\u67089\u65e5", new Date(1989-1900, AUGUST, 9) },
  80         { FULL_DATE_FORMAT_JA, "\u5e73\u621017\u5e746\u670810\u65e5", new Date(2005-1900, JUNE, 10) },
  81         { "Gyy.MM.dd", "S01.12.31", new Date(1926-1900, DECEMBER, 31) },
  82         { "Gyy.MM.dd", "S64.01.06", new Date(1989-1900, JANUARY, 6) },
  83         { "Gyy.MM.dd", "H01.08.09", new Date(1989-1900, AUGUST, 9) },
  84         { "Gy.M.d", "H1.8.9", new Date(1989-1900, AUGUST, 9) },
  85         { "Gyy.MM.dd", "H17.06.10", new Date(2005-1900, JUNE, 10) },
  86     };
  87 
  88     // Invalid dates for parse exception tests
  89     static final Object[][] EXCEPTION_JAPANESE_JA = {
  90         { FULL_DATE_FORMAT_JA, "\u662d\u548c\u5143\u5e7412\u670810\u65e5" },
  91         { FULL_DATE_FORMAT_JA, "\u662d\u548c64\u5e741\u670816\u65e5" },
  92         { FULL_DATE_FORMAT_JA, "\u5e73\u6210\u5143\u5e741\u67081\u65e5" },
  93         { "Gyy.MM.dd", "S01.12.10" },
  94         { "Gyy.MM.dd", "S64.01.16" },
  95         { "Gyy.MM.dd", "H01.01.01" },
  96     };
  97 
  98     @SuppressWarnings("deprecation")
  99     static final Object[][] BUDDHIST_JA = {
 100         { FULL_DATE_FORMAT_JA, "\u4ecf\u66a62469\u5e7412\u670831\u65e5", new Date(1926-1900, DECEMBER, 31) },
 101         { FULL_DATE_FORMAT_JA, "\u4ecf\u66a62532\u5e741\u67086\u65e5", new Date(1989-1900, JANUARY, 6) },
 102         { FULL_DATE_FORMAT_JA, "\u4ecf\u66a62532\u5e748\u67089\u65e5", new Date(1989-1900, AUGUST, 9) },
 103         { FULL_DATE_FORMAT_JA, "\u4ecf\u66a62548\u5e746\u670810\u65e5", new Date(2005-1900, JUNE, 10) },
 104         { "Gyyyy/MM/dd", "B.E.2469/12/31", new Date(1926-1900, DECEMBER, 31) },
 105         { "Gyyyy/MM/dd", "B.E.2532/01/06", new Date(1989-1900, JANUARY, 6) },
 106         { "Gyyyy/MM/dd", "B.E.2532/08/09", new Date(1989-1900, AUGUST, 9) },
 107         { "Gyyyy/MM/dd", "B.E.2548/06/10", new Date(2005-1900, JUNE, 10) },
 108     };
 109 
 110     public static void main(String[] args) throws ParseException {
 111         Locale defaultLocale = Locale.getDefault();
 112         Locale[] locales = { Locale.ENGLISH, Locale.JAPAN };
 113         try {
 114             for (Locale locale : locales) {
 115                 test(locale);
 116             }
 117         } finally {
 118             Locale.setDefault(defaultLocale);


 123     }
 124 
 125     private static void test(Locale locale) {
 126         Locale.setDefault(locale);
 127 
 128         // Tests with the Japanese imperial calendar
 129         Locale calendarLocale = new Locale("ja", "JP", "JP");
 130         testRoundTrip(calendarLocale);
 131         testRoundTripSimple(calendarLocale,
 132                             locale == Locale.ENGLISH ? JAPANESE_EN : JAPANESE_JA);
 133         testParseExceptions(calendarLocale,
 134                             locale == Locale.ENGLISH ? EXCEPTION_JAPANESE_EN : EXCEPTION_JAPANESE_JA);
 135 
 136         // Tests with the Thai Buddhist calendar
 137         calendarLocale = new Locale("th", "TH");
 138         testRoundTrip(calendarLocale);
 139         testRoundTripSimple(calendarLocale,
 140                             locale == Locale.ENGLISH ? BUDDHIST_EN : BUDDHIST_JA);
 141     }
 142 
 143     @SuppressWarnings("deprecation")
 144     private static void testRoundTrip(Locale calendarLocale) {
 145         DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL,
 146                                                        DateFormat.FULL,
 147                                                        calendarLocale);
 148 
 149         long t = System.currentTimeMillis();
 150         t = (t / 1000) * 1000; // discard milliseconds
 151         testRoundTrip(df, new Date(t));
 152 
 153         // H1.8.9
 154         testRoundTrip(df, new Date(1989-1900, AUGUST, 9));
 155 
 156         // H17.6.13
 157         testRoundTrip(df, new Date(2005-1900, JUNE, 13));
 158     }
 159 
 160     private static void testRoundTrip(DateFormat df, Date orig) {
 161         try {
 162             String s = df.format(orig);
 163             Date parsed = df.parse(s);


< prev index next >