17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/*
27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert *******************************************************************************
37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Copyright (C) 2002-2010, International Business Machines Corporation and    *
47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * others. All Rights Reserved.                                                *
57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert *******************************************************************************
67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */
77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.dev.test.calendar;
87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.text.ParseException;
107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.text.ParsePosition;
117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Date;
127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Locale;
137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.impl.LocaleUtility;
157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.DateFormat;
167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.SimpleDateFormat;
177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.Calendar;
187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.JapaneseCalendar;
197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.TimeZone;
207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.ULocale;
217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/**
237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Tests for the <code>JapaneseCalendar</code> class.
247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */
257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class JapaneseTest extends CalendarTest {
267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static void main(String args[]) throws Exception {
277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        new JapaneseTest().run(args);
287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestCoverage() {
317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    {
327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // new JapaneseCalendar(TimeZone)
337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        JapaneseCalendar cal = new JapaneseCalendar(TimeZone.getDefault());
347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if(cal == null){
357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("could not create JapaneseCalendar with TimeZone");
367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    {
407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // new JapaneseCalendar(ULocale)
417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        JapaneseCalendar cal = new JapaneseCalendar(ULocale.getDefault());
427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if(cal == null){
437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("could not create JapaneseCalendar with ULocale");
447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    {
487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // new JapaneseCalendar(TimeZone, ULocale)
497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        JapaneseCalendar cal = new JapaneseCalendar(TimeZone.getDefault(), ULocale.getDefault());
507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if(cal == null){
517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("could not create JapaneseCalendar with TimeZone ULocale");
527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    {
567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // new JapaneseCalendar(Locale)
577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        JapaneseCalendar cal = new JapaneseCalendar(Locale.getDefault());
587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if(cal == null){
597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("could not create JapaneseCalendar with Locale");
607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    {
647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // new JapaneseCalendar(TimeZone, Locale)
657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        JapaneseCalendar cal = new JapaneseCalendar(TimeZone.getDefault(), Locale.getDefault());
667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if(cal == null){
677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("could not create JapaneseCalendar with TimeZone Locale");
687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    {
727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // new JapaneseCalendar(Date)
737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        JapaneseCalendar cal = new JapaneseCalendar(new Date());
747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if(cal == null){
757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("could not create JapaneseCalendar with Date");
767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    {
807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // new JapaneseCalendar(int year, int month, int date)
817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        JapaneseCalendar cal = new JapaneseCalendar(1868, Calendar.JANUARY, 1);
827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if(cal == null){
837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("could not create JapaneseCalendar with year,month,date");
847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    {
887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // new JapaneseCalendar(int era, int year, int month, int date)
897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        JapaneseCalendar cal = new JapaneseCalendar(JapaneseCalendar.MEIJI, 43, Calendar.JANUARY, 1);
907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if(cal == null){
917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("could not create JapaneseCalendar with era,year,month,date");
927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    {
967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // new JapaneseCalendar(int year, int month, int date, int hour, int minute, int second)
977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        JapaneseCalendar cal = new JapaneseCalendar(1868, Calendar.JANUARY, 1, 1, 1, 1);
987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if(cal == null){
997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("could not create JapaneseCalendar with year,month,date,hour,min,second");
1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    {
1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // limits
1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        JapaneseCalendar cal = new JapaneseCalendar();
1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        DateFormat fmt = cal.getDateTimeFormat(DateFormat.FULL, DateFormat.FULL, Locale.ENGLISH);
1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        cal.set(Calendar.ERA, JapaneseCalendar.MEIJI);
1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln("date: " + cal.getTime());
1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln("min era: " + cal.getMinimum(Calendar.ERA));
1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln("min year: " + cal.getMinimum(Calendar.YEAR));
1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        cal.set(Calendar.YEAR, cal.getActualMaximum(Calendar.YEAR));
1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln("date: " + fmt.format(cal.getTime()));
1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        cal.add(Calendar.YEAR, 1);
1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln("date: " + fmt.format(cal.getTime()));
1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    {
1197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // data
1207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        JapaneseCalendar cal = new JapaneseCalendar(1868, Calendar.JANUARY, 1);
1217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        Date time = cal.getTime();
1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String[] calendarLocales = {
1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        "en", "ja_JP"
1257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        };
1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String[] formatLocales = {
1287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        "en", "ja"
1297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        };
1307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        for (int i = 0; i < calendarLocales.length; ++i) {
1317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            String calLocName = calendarLocales[i];
1327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            Locale calLocale = LocaleUtility.getLocaleFromName(calLocName);
1337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            cal = new JapaneseCalendar(calLocale);
1347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            for (int j = 0; j < formatLocales.length; ++j) {
1367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                String locName = formatLocales[j];
1377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                Locale formatLocale = LocaleUtility.getLocaleFromName(locName);
1387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                DateFormat format = DateFormat.getDateTimeInstance(cal, DateFormat.FULL, DateFormat.FULL, formatLocale);
1397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                logln(calLocName + "/" + locName + " --> " + format.format(time));
1407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void Test3860()
1467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    {
1477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        ULocale loc = new ULocale("ja_JP@calendar=japanese");
1487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        Calendar cal = new JapaneseCalendar(loc);
1497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        DateFormat enjformat = cal.getDateTimeFormat(0,0,new ULocale("en_JP@calendar=japanese"));
1507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        DateFormat format = cal.getDateTimeFormat(0,0,loc);
1517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        ((SimpleDateFormat)format).applyPattern("y.M.d");  // Note: just 'y' doesn't work here.
1527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        ParsePosition pos = new ParsePosition(0);
1537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        Date aDate = format.parse("1.1.9", pos); // after the start of heisei accession.  Jan 1, 1H wouldn't work  because it is actually showa 64
1547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String inEn = enjformat.format(aDate);
1557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        cal.clear();
1577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        cal.setTime(aDate);
1587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int gotYear = cal.get(Calendar.YEAR);
1597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int gotEra = cal.get(Calendar.ERA);
1607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int expectYear = 1;
1627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int expectEra = JapaneseCalendar.CURRENT_ERA;
1637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if((gotYear != expectYear) || (gotEra != expectEra)) {
1657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("Expected year " + expectYear + ", era " + expectEra +", but got year " + gotYear + " and era " + gotEra + ", == " + inEn);
1667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else {
1677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            logln("Got year " + gotYear + " and era " + gotEra + ", == " + inEn);
1687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // Test parse with missing era (should default to current era, heisei)
1717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // Test parse with incomplete information
1727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln("Testing parse w/ just year...");
1737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        Calendar cal2 = new JapaneseCalendar(loc);
1747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        SimpleDateFormat fmt = new SimpleDateFormat("y", loc);
1757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        SimpleDateFormat fmt2 = new SimpleDateFormat("HH:mm:ss.S MMMM d, yyyy G", new ULocale("en_US@calendar=gregorian"));
1767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        cal2.clear();
1777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String samplestr = "1";
1787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln("Test Year: " + samplestr);
1797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        try {
1807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            aDate = fmt.parse(samplestr);
1817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } catch (ParseException pe) {
1827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("Error parsing " + samplestr);
1837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        ParsePosition pp = new ParsePosition(0);
1857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        fmt.parse(samplestr, cal2, pp);
1867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln("cal2 after 1 parse:");
1877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String str = fmt2.format(aDate);
1887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln("as Gregorian Calendar: " + str);
1897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        cal2.setTime(aDate);
1917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        gotYear = cal2.get(Calendar.YEAR);
1927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        gotEra = cal2.get(Calendar.ERA);
1937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        expectYear = 1;
1947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        expectEra = JapaneseCalendar.CURRENT_ERA;
1957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if((gotYear != 1) || (gotEra != expectEra)) {
1967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("parse "+ samplestr + " of 'y' as Japanese Calendar, expected year " + expectYear +
1977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                " and era " + expectEra + ", but got year " + gotYear + " and era " + gotEra + " (Gregorian:" + str +")");
1987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else {
1997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            logln(" year: " + gotYear + ", era: " + gotEra);
2007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void Test5345parse() {
2047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // Test parse with incomplete information
2057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        DateFormat fmt2= DateFormat.getDateInstance(); //DateFormat.LONG, Locale.US);
2067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        JapaneseCalendar c = new JapaneseCalendar(TimeZone.getDefault(), new ULocale("en_US"));
2077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        SimpleDateFormat fmt = (SimpleDateFormat)c.getDateTimeFormat(1,1,new ULocale("en_US@calendar=japanese"));
2087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        fmt.applyPattern("G y");
2097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln("fmt's locale = " + fmt.getLocale(ULocale.ACTUAL_LOCALE));
2107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        //SimpleDateFormat fmt = new SimpleDateFormat("G y", new Locale("en_US@calendar=japanese"));
2117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        long aDateLong = -3197117222000L; // 1868-09-08 00:00 Pacific Time (GMT-07:52:58)
2127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (TimeZone.getDefaultTimeZoneType() == TimeZone.TIMEZONE_JDK) {
2137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // Java time zone implementation does not support LMTs
2147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            aDateLong = -3197116800000L; // 1868-09-08 00:00 Pacific Time (GMT-08:00)
2157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        Date aDate = new Date(aDateLong);
2177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln("aDate: " + aDate.toString() +", from " + aDateLong);
2187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String str;
2197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        str = fmt2.format(aDate);
2207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln("Test Date: " + str);
2217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        str = fmt.format(aDate);
2227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln("as Japanese Calendar: " + str);
2237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String expected = "Meiji 1";
2247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if(!str.equals(expected)) {
2257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("FAIL: Expected " + expected + " but got " + str);
2267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        Date otherDate;
2287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        try {
2297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            otherDate = fmt.parse(expected);
2307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if(!otherDate.equals(aDate)) {
2317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                String str3;
2327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    //            ParsePosition pp;
2337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                Date dd = fmt.parse(expected);
2347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                str3 = fmt.format(otherDate);
2357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                long oLong = otherDate.getTime();
2367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                long aLong = otherDate.getTime();
2377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("FAIL: Parse incorrect of " + expected + ":  wanted " + aDate + " ("+aLong+"), but got " +  " " +
2397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    otherDate + " ("+oLong+") = " + str3 + " not " + dd.toString() );
2407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            } else {
2437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                logln("Parsed OK: " + expected);
2447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
2457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } catch(java.text.ParseException pe) {
2467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("FAIL: ParseException: " + pe.toString());
2477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            pe.printStackTrace();
2487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private void checkExpected(Calendar c, int expected[] ) {
2537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        final String[] FIELD_NAME = {
2547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "ERA", "YEAR", "MONTH", "WEEK_OF_YEAR", "WEEK_OF_MONTH",
2557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "DAY_OF_MONTH", "DAY_OF_YEAR", "DAY_OF_WEEK",
2567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "DAY_OF_WEEK_IN_MONTH", "AM_PM", "HOUR", "HOUR_OF_DAY",
2577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "MINUTE", "SECOND", "MILLISECOND", "ZONE_OFFSET",
2587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "DST_OFFSET", "YEAR_WOY", "DOW_LOCAL", "EXTENDED_YEAR",
2597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "JULIAN_DAY", "MILLISECONDS_IN_DAY",
2607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        };
2617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        for(int i= 0;i<expected.length;i += 2) {
2637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            int fieldNum = expected[i+0];
2647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            int expectedVal = expected[i+1];
2657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            int actualVal = c.get(fieldNum);
2667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if(expectedVal == actualVal) {
2687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                logln(FIELD_NAME[fieldNum]+": "+ actualVal);
2697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            } else {
2707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("FAIL: "+FIELD_NAME[fieldNum]+": expected "+ expectedVal + " got " +  actualVal);
2717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
2727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void Test5345calendar() {
2767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln("** testIncompleteCalendar()");
2777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // Test calendar with incomplete information
2787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        JapaneseCalendar c = new JapaneseCalendar(TimeZone.getDefault());
2797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln("test clear");
2807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        c.clear();
2817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // Showa 45 = Gregorian 1970
2837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int expected0[] = {   Calendar.ERA, 234,
2847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                              Calendar.YEAR, 45 };
2857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        checkExpected(c, expected0);
2867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln("test setting era");
2887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        c.clear();
2897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        c.set(Calendar.ERA, JapaneseCalendar.MEIJI);
2907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int expectedA[] = {   Calendar.ERA, JapaneseCalendar.MEIJI };
2937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        checkExpected(c, expectedA);
2947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln("test setting era and year and month and date");
2977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        c.clear();
2987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        c.set(Calendar.ERA, JapaneseCalendar.MEIJI);
2997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        c.set(Calendar.YEAR, 1);
3007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        c.set(Calendar.MONTH, Calendar.JANUARY);
3017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        c.set(Calendar.DATE, 1);
3027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int expectedC[] = {   Calendar.ERA, JapaneseCalendar.MEIJI -1};
3057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        checkExpected(c, expectedC);
3067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln("test setting  year and month and date THEN era");
3097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        c.clear();
3107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        c.set(Calendar.YEAR, 1);
3117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        c.set(Calendar.MONTH, Calendar.JANUARY);
3127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        c.set(Calendar.DATE, 1);
3137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        c.set(Calendar.ERA, JapaneseCalendar.MEIJI);
3147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        checkExpected(c, expectedC);
3177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln("test setting era and year");
3207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        c.clear();
3217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        c.set(Calendar.YEAR, 1);
3227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        c.set(Calendar.ERA, JapaneseCalendar.MEIJI);
3237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int expectedB[] = { Calendar.ERA, JapaneseCalendar.MEIJI,
3267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                            Calendar.YEAR, 1 };
3277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        checkExpected(c, expectedB);
3287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
3307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestJapaneseYear3282() {
3337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        Calendar c = Calendar.getInstance(ULocale.ENGLISH);
3347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        c.set(2003,Calendar.SEPTEMBER,25);
3357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        JapaneseCalendar jcal = new JapaneseCalendar();
3367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        //jcal.setTime(new Date(1187906308151L));  alternate value
3377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        jcal.setTime(c.getTime());
3387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln("Now is: " + jcal.getTime());
3397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        c.setTime(jcal.getTime());
3407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int nowYear = c.get(Calendar.YEAR);
3417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln("Now year: "+nowYear);
3427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        SimpleDateFormat jdf = (SimpleDateFormat) SimpleDateFormat.getDateInstance(jcal,
3437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                SimpleDateFormat.DEFAULT, Locale.getDefault());
3447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        jdf.applyPattern("G yy/MM/dd");
3457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String text = jdf.format(jcal.getTime());
3467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln("Now is: " + text + " (in Japan)");
3477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        try {
3487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            Date date = jdf.parse(text);
3497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            logln("But is this not the date?: " + date);
3507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            c.setTime(date);
3517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            int thenYear = c.get(Calendar.YEAR);
3527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            logln("Then year: "+thenYear);
3537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if(thenYear != nowYear) {
3547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("Nowyear "+nowYear +" is not thenyear "+thenYear);
3557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            } else {
3567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                logln("Nowyear "+nowYear +" == thenyear "+thenYear);
3577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
3587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } catch (java.text.ParseException ex) {
3597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            ex.printStackTrace();
3607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
3617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
3627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
3647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Test limits of the Japanese calendar
3657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
3667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestLimits() {
3677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        Calendar cal = Calendar.getInstance();
3687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        cal.set(1988, Calendar.DECEMBER, 1);
3697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        JapaneseCalendar jcal = new JapaneseCalendar();
3707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        doLimitsTest(jcal, null, cal.getTime());
3717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        doTheoreticalLimitsTest(jcal, true);
3727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
3737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert}
3747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
375