17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/*
27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert *******************************************************************************
37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Copyright (C) 2005-2011, 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.util.Date;
107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Locale;
117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.impl.LocaleUtility;
137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.DateFormat;
147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.SimpleDateFormat;
157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.Calendar;
167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.GregorianCalendar;
177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.IndianCalendar;
187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.TimeZone;
197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.ULocale;
207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/**
227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Tests for the <code>IndianCalendar</code> class.
237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */
247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class IndianTest extends CalendarTest
257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert{
267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static void main(String args[]) throws Exception {
277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        new IndianTest().run(args);
287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    // Months in indian calendar are 0-based. Here taking 1-based names:
307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final int CHAITRA = IndianCalendar.CHAITRA + 1;
317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final int VAISAKHA = IndianCalendar.VAISAKHA + 1;
327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final int JYAISTHA = IndianCalendar.JYAISTHA + 1;
337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final int ASADHA = IndianCalendar.ASADHA + 1;
347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final int SRAVANA = IndianCalendar.SRAVANA + 1 ;
357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final int BHADRA = IndianCalendar.BHADRA + 1 ;
367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final int  ASVINA = IndianCalendar.ASVINA  + 1 ;
377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final int KARTIKA = IndianCalendar.KARTIKA + 1 ;
387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final int AGRAHAYANA = IndianCalendar.AGRAHAYANA + 1 ;
397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final int PAUSA = IndianCalendar.PAUSA + 1 ;
407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final int MAGHA = IndianCalendar.MAGHA + 1 ;
417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final int PHALGUNA = IndianCalendar.PHALGUNA + 1 ;
427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /** Constants to save typing. */
447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /* Test dates generated from:
457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * http://www.fourmilab.ch/documents/calendar/
467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /** A huge list of test cases to make sure that computeTime and computeFields
487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * work properly for a wide range of data in the Indian civil calendar.
497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestCases()
517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    {
527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        final TestCase[] tests = {
537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            //
547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // The months in this table are 1-based rather than 0-based,
557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // because it's easier to edit that way.
567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            //                      Indian
577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            //          Julian Day  Era  Year   Month Day    WkDay Hour Min Sec
587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(1770641.5,  0,    57,    ASVINA,       10,  SUN,   0,  0,  0),
597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(1892731.5,  0,   391,    PAUSA,        18,  WED,   0,  0,  0),
607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(1931579.5,  0,   498,    VAISAKHA,     30,  MON,   0,  0,  0),
617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(1974851.5,  0,   616,    KARTIKA,      19,  SAT,   0,  0,  0),
627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2091164.5,  0,   935,    VAISAKHA,      5,  SUN,   0,  0,  0),
637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2121509.5,  0,  1018,    JYAISTHA,      3,  SUN,   0,  0,  0),
647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2155779.5,  0,  1112,    CHAITRA,       2,  FRI,   0,  0,  0),
657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2174029.5,  0,  1161,    PHALGUNA,     20,  SAT,   0,  0,  0),
667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2191584.5,  0,  1210,    CHAITRA,      13,  FRI,   0,  0,  0),
677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2195261.5,  0,  1220,    VAISAKHA,      7,  SUN,   0,  0,  0),
687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2229274.5,  0,  1313,    JYAISTHA,     22,  SUN,   0,  0,  0),
697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2245580.5,  0,  1357,    MAGHA,        14,  WED,   0,  0,  0),
707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2266100.5,  0,  1414,    CHAITRA,      20,  SAT,   0,  0,  0),
717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2288542.5,  0,  1475,    BHADRA,       28,  SAT,   0,  0,  0),
727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2290901.5,  0,  1481,    PHALGUNA,     15,  SAT,   0,  0,  0),
737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2323140.5,  0,  1570,    JYAISTHA,     20,  WED,   0,  0,  0),
747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2334551.5,  0,  1601,    BHADRA,       16,  THU,   0,  0,  0),
757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2334581.5,  0,  1601,    ASVINA,       15,  SAT,   0,  0,  0),
767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2334610.5,  0,  1601,    KARTIKA,      14,  SUN,   0,  0,  0),
777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2334639.5,  0,  1601,    AGRAHAYANA,   13,  MON,   0,  0,  0),
787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2334668.5,  0,  1601,    PAUSA,        12,  TUE,   0,  0,  0),
797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2334698.5,  0,  1601,    MAGHA,        12,  THU,   0,  0,  0),
807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2334728.5,  0,  1601,    PHALGUNA,     12,  SAT,   0,  0,  0),
817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2334757.5,  0,  1602,    CHAITRA,      11,  SUN,   0,  0,  0),
827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2334787.5,  0,  1602,    VAISAKHA,     10,  TUE,   0,  0,  0),
837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2334816.5,  0,  1602,    JYAISTHA,      8,  WED,   0,  0,  0),
847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2334846.5,  0,  1602,    ASADHA,        7,  FRI,   0,  0,  0),
857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2334848.5,  0,  1602,    ASADHA,        9,  SUN,   0,  0,  0),
867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2348020.5,  0,  1638,    SRAVANA,       2,  FRI,   0,  0,  0),
877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2334934.5,  0,  1602,    ASVINA,        2,  TUE,   0,  0,  0),
887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2366978.5,  0,  1690,    JYAISTHA,     29,  SUN,   0,  0,  0),
897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2385648.5,  0,  1741,    SRAVANA,      11,  MON,   0,  0,  0),
907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2392825.5,  0,  1761,    CHAITRA,       6,  WED,   0,  0,  0),
917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2416223.5,  0,  1825,    CHAITRA,      29,  SUN,   0,  0,  0),
927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2425848.5,  0,  1851,    BHADRA,        3,  SUN,   0,  0,  0),
937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2430266.5,  0,  1863,    ASVINA,        7,  MON,   0,  0,  0),
947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2430833.5,  0,  1865,    CHAITRA,      29,  MON,   0,  0,  0),
957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2431004.5,  0,  1865,    ASVINA,       15,  THU,   0,  0,  0),
967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2448698.5,  0,  1913,    PHALGUNA,     27,  TUE,   0,  0,  0),
977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2450138.5,  0,  1917,    PHALGUNA,      6,  SUN,   0,  0,  0),
987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2465737.5,  0,  1960,    KARTIKA,      19,  WED,   0,  0,  0),
997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           new TestCase(2486076.5,  0,  2016,    ASADHA,       27,  SUN,   0,  0,  0),
1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        };
1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        IndianCalendar testCalendar = new IndianCalendar();
1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        testCalendar.setLenient(true);
1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        doTestCases(tests, testCalendar);
1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestBasic() {
1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        IndianCalendar cal = new IndianCalendar();
1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        cal.clear();
1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        cal.set(1000, 0, 30);
1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln("1000/0/30-> " +
1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert              cal.get(YEAR) + "/" +
1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert              cal.get(MONTH) + "/" +
1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert              cal.get(DATE));
1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        cal.clear();
1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        cal.set(1, 0, 30);
1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln("1/0/30 -> " +
1187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert              cal.get(YEAR) + "/" +
1197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert              cal.get(MONTH) + "/" +
1207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert              cal.get(DATE));
1217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestCoverage() {
1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // new IndianCalendar(TimeZone)
1277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            IndianCalendar cal = new IndianCalendar(TimeZone.getDefault());
1287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if(cal == null){
1297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("could not create IndianCalendar with TimeZone");
1307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
1347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // new IndianCalendar(ULocale)
1357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            IndianCalendar cal = new IndianCalendar(ULocale.getDefault());
1367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if(cal == null){
1377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("could not create IndianCalendar with ULocale");
1387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
1427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // new IndianCalendar(Locale)
1437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            IndianCalendar cal = new IndianCalendar(Locale.getDefault());
1447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if(cal == null){
1457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("could not create IndianCalendar with Locale");
1467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
1507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // new IndianCalendar(TimeZone, Locale)
1517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            IndianCalendar cal = new IndianCalendar(TimeZone.getDefault(),Locale.getDefault());
1527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if(cal == null){
1537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("could not create IndianCalendar with TimeZone, Locale");
1547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
1587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // new IndianCalendar(TimeZone, ULocale)
1597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            IndianCalendar cal = new IndianCalendar(TimeZone.getDefault(),ULocale.getDefault());
1607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if(cal == null){
1617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("could not create IndianCalendar with TimeZone, ULocale");
1627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
1667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // new IndianCalendar(Date)
1677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            IndianCalendar cal = new IndianCalendar(new Date());
1687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if(cal == null){
1697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("could not create IndianCalendar with Date");
1707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
1737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // new IndianCalendar(int year, int month, int date)
1747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            IndianCalendar cal = new IndianCalendar(1917, IndianCalendar.CHAITRA, 1);
1757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if(cal == null){
1767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("could not create IndianCalendar with year,month,date");
1777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
1807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // new IndianCalendar(int year, int month, int date, int hour, int minute, int second)
1817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            IndianCalendar cal = new IndianCalendar(1917, IndianCalendar.CHAITRA, 1, 1, 1, 1);
1827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if(cal == null){
1837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("could not create IndianCalendar with year,month,date,hour,minute,second");
1847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
1887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // data
1897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            String[] calendarLocales = {
1907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                "bn_IN", "gu_IN", "hi_IN", "kn_IN", "ml_IN", "or_IN", "pa_IN", "ta_IN", "te_IN"
1917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            };
1927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            String[] formatLocales = {
1947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                "en", "fr", "bn", "gu", "hi", "kn", "ml", "or", "pa", "ta", "te"
1957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            };
1967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            for (int i = 0; i < calendarLocales.length; ++i) {
1987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                String calLocName = calendarLocales[i];
1997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                Locale calLocale = LocaleUtility.getLocaleFromName(calLocName);
2007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                IndianCalendar cal = new IndianCalendar(calLocale);
2017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                cal.set(-1039, 9, 21);
2027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                for (int j = 0; j < formatLocales.length; j++  ) {
2047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    String locName = formatLocales[j];
2057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    Locale formatLocale = LocaleUtility.getLocaleFromName(locName);
2067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    DateFormat format = DateFormat.getDateTimeInstance(cal, DateFormat.FULL, DateFormat.FULL, formatLocale);
2077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    logln(calLocName + "/" + locName + " --> " + format.format(cal));
2087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                }
2097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
2107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestYear() {
2147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // Gregorian Calendar
2157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        Calendar gCal= new GregorianCalendar();
2167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        Date gToday=gCal.getTime();
2177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        gCal.add(GregorianCalendar.MONTH,2);
2187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        Date gFuture=gCal.getTime();
2197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        DateFormat gDF = DateFormat.getDateInstance(gCal,DateFormat.FULL);
2207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln("gregorian calendar: " + gDF.format(gToday) +
2217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert              " + 2 months = " + gDF.format(gFuture));
2227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // Indian Calendar
2247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        IndianCalendar iCal= new IndianCalendar();
2257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        Date iToday=iCal.getTime();
2267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        iCal.add(IndianCalendar.MONTH,2);
2277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        Date iFuture=iCal.getTime();
2287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        DateFormat iDF = DateFormat.getDateInstance(iCal,DateFormat.FULL);
2297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln("Indian calendar: " + iDF.format(iToday) +
2307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert              " + 2 months = " + iDF.format(iFuture));
2317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
2357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Test limits of the Indian calendar
2367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
2377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestLimits() {
2387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        Calendar cal = Calendar.getInstance();
2397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        cal.set(2007, Calendar.JANUARY, 1);
2407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        IndianCalendar indian = new IndianCalendar();
2417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        doLimitsTest(indian, null, cal.getTime());
2427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        doTheoreticalLimitsTest(indian, true);
2437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
2467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Problem reported by Bruno Haible <bruno.haible@de.ibm.com>
2477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     *  -- see ticket 8419 -- http://bugs.icu-project.org/trac/ticket/8419
2487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Problem with months out of range 0-11
2497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
2507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestYearEdge() {
2517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // Display dates in ISO 8601 format.
2527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        DateFormat fmt = new SimpleDateFormat("YYYY-MM-dd", ULocale.US);
2537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // Instantiate an Indian calendar.
2557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        ULocale locale = ULocale.US.setKeywordValue("calendar", "indian");
2567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        Calendar cal = Calendar.getInstance(locale);
2577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // Try add() repeatedly.
2597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        cal.setTimeInMillis(1295568000000L);
2607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (!fmt.format(cal.getTime()).equals("2011-01-20")){
2617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("Incorrect calendar value for year edge test");
2627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        cal.add(Calendar.MONTH, 1);
2647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (!fmt.format(cal.getTime()).equals("2011-02-19")){
2657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("Incorrect calendar value for year edge test");
2667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        cal.add(Calendar.MONTH, 1);
2687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (!fmt.format(cal.getTime()).equals("2011-03-21")){
2697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("Incorrect calendar value for year edge test");
2707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        cal.add(Calendar.MONTH, 1);
2727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (!fmt.format(cal.getTime()).equals("2011-04-20")){
2737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("Incorrect calendar value for year edge test");
2747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert}
277