17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/*
27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert *******************************************************************************
37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Copyright (C) 2005-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.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.EthiopicCalendar;
177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.GregorianCalendar;
187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.TimeZone;
197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.ULocale;
207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/**
227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Tests for the <code>EthiopicCalendar</code> class.
237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */
247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class EthiopicTest extends CalendarTest
257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert{
267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static void main(String args[]) throws Exception {
277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        new EthiopicTest().run(args);
287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /** Constants to save typing. */
317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final int MESKEREM = EthiopicCalendar.MESKEREM;
327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final int TEKEMT   = EthiopicCalendar.TEKEMT;
337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final int HEDAR    = EthiopicCalendar.HEDAR;
347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final int TAHSAS   = EthiopicCalendar.TAHSAS;
357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final int TER      = EthiopicCalendar.TER;
367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final int YEKATIT  = EthiopicCalendar.YEKATIT;
377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final int MEGABIT  = EthiopicCalendar.MEGABIT;
387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final int MIAZIA   = EthiopicCalendar.MIAZIA;
397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final int GENBOT   = EthiopicCalendar.GENBOT;
407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final int SENE     = EthiopicCalendar.SENE;
417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final int HAMLE    = EthiopicCalendar.HAMLE;
427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final int NEHASSE  = EthiopicCalendar.NEHASSE;
437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final int PAGUMEN  = EthiopicCalendar.PAGUMEN;
447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /* DY[20050507]  I don't know what this is for yet:
467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert       public void TestRoll() {
477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert       int[][] tests = new int[][] {
487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert       //       input                roll by          output
497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert       //  year  month     day     field amount    year  month     day
507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert       {   0001, QIDAH,     2,     MONTH,   1,     0001, HIJJAH,    2 },   // non-leap years
527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert       {   0001, QIDAH,     2,     MONTH,   2,     0001, MUHARRAM,  2 },
537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert       {   0001, QIDAH,     2,     MONTH,  -1,     0001, SHAWWAL,   2 },
547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert       {   0001, MUHARRAM,  2,     MONTH,  12,     0001, MUHARRAM,  2 },
557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert       {   0001, MUHARRAM,  2,     MONTH,  13,     0001, SAFAR,     2 },
567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert       {   0001, HIJJAH,    1,     DATE,   30,     0001, HIJJAH,    2 },   // 29-day month
587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert       {   0002, HIJJAH,    1,     DATE,   31,     0002, HIJJAH,    2 },   // 30-day month
597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert       // Try some rolls that require other fields to be adjusted
617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert       {   0001, MUHARRAM, 30,     MONTH,   1,     0001, SAFAR,    29 },
627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert       {   0002, HIJJAH,   30,     YEAR,   -1,     0001, HIJJAH,   29 },
637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert       };
647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert       EthiopicCalendar cal = newCivil();
667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert       doRollAdd(ROLL, cal, tests);
687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert       }
697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    */
707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /* Test dates from:
727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * "The Amharic Letters of Emperor Theodore of Ethiopia to Queen Victoria and
737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Her Special Envoy", David Appleyard, Girma Selasse Asfaw, Oxford University Press,
747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * June 1 1979, ISBN: 0856726605, Longwood Pr Ltd
757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     *
767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Ethiopic       Gregorian    JD
777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * 20/02/1855     29/10/1862  2401443
787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * 29/10/1857     05/07/1865  2402423
797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * 22/05/1858     29/01/1866  2402631
807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * 10/08/1858     17/04/1866  2402709
817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * 28/04/1859     05/01/1867  2402972
827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * 05/05/1860     13/01/1868  2403345
837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     *
847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * --------------------------------------------------
857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     *
867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * From the Calendrica applet:  http://emr.cs.iit.edu/home/reingold/calendar-book/Calendrica.html
877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     *
887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Ethiopic       Gregorian    JD
897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * 07/05/-8       01/01/0000  1721060
907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * 08/05/-7       01/01/0001  1721426
917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * 06/13/-1       27/08/0007  1723855
927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     *
937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * 01/01/0000     28/08/0007  1723856
947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * 01/01/0001     27/08/0008  1724221
957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * 01/01/0002     27/08/0009  1724586
967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * 01/01/0003     27/08/0010  1724951
977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * 01/01/0004     28/08/0011  1724537
987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * 05/13/0000     26/08/0008  1724220
997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * 05/13/0001     26/08/0009  1724585
1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * 05/13/0002     26/08/0010  1724950
1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * 05/13/0003     26/08/0011  1725315
1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * 06/13/0003     27/08/0011  1725316  first ethiopian leap year
1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * 05/13/0004     26/08/0012  1725561
1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     *
1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * 06/02/1575     13/10/1582  2299159
1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * 07/02/1575     14/10/1582  2299160  Julian 04/10/1582
1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * 08/02/1575     15/10/1582  2299161
1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * 09/02/1575     16/10/1582  2299162
1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     *
1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * 23/04/1892     01/01/1900  2415021
1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * 23/04/1997     01/01/2005  2453372
1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * 05/13/2000     10/09/2008  2454720
1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /** A huge list of test cases to make sure that computeTime and computeFields
1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * work properly for a wide range of data in the civil calendar.
1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
1187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestCases()
1197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    {
1207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        final TestCase[] tests = {
1217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            //
1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // The months in this table are 1-based rather than 0-based,
1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // because it's easier to edit that way.
1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            //                      Ethiopic
1257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            //          Julian Day  Era  Year  Month Day  WkDay Hour Min Sec
1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            //
1277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // Dates from "Emporer Theodore..."
1287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestCase(2401442.5,  1,  1855,    2,  20,  WED,   0,  0,  0), // Gregorian: 29/10/1862
1307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestCase(2402422.5,  1,  1857,   10,  29,  WED,   0,  0,  0), // Gregorian: 05/07/1865
1317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestCase(2402630.5,  1,  1858,    5,  22,  MON,   0,  0,  0), // Gregorian: 29/01/1866
1327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestCase(2402708.5,  1,  1858,    8,  10,  TUE,   0,  0,  0), // Gregorian: 17/04/1866
1337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestCase(2402971.5,  1,  1859,    4,  28,  SAT,   0,  0,  0), // Gregorian: 05/01/1867
1347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestCase(2403344.5,  1,  1860,    5,   5,  MON,   0,  0,  0), // Gregorian: 13/01/1868
1357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // Miscellaneous:
1377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            /* Skip these tests until JD bug fixed in the Gregorian calendar:
1387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert             * http://www.jtcsv.com/cgibin/icu-bugs/incoming?id=4406;page=2;user=guest
1397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert             */
1407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestCase(1721059.5,  0,  5492,    5,   7,  SAT,   0,  0,  0), // Gregorian: 01/01/0000
1417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestCase(1721425.5,  0,  5493,    5,   8,  MON,   0,  0,  0), // Gregorian: 01/01/0001
1427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestCase(1723854.5,  0,  5499,   13,   6,  MON,   0,  0,  0), // Gregorian: 27/08/0007
1437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestCase(1723855.5,  0,  5500,    1,   1,  TUE,   0,  0,  0), // Gregorian: 28/08/0007
1457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestCase(1724220.5,  1,     1,    1,   1,  WED,   0,  0,  0), // Gregorian: 27/08/0008
1467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestCase(1724585.5,  1,     2,    1,   1,  THU,   0,  0,  0), // Gregorian: 27/08/0009
1477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestCase(1724950.5,  1,     3,    1,   1,  FRI,   0,  0,  0), // Gregorian: 27/08/0010
1487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // new TestCase(1724536.5,  1,     4,    1,   1,  SUN,   0,  0,  0), // Gregorian: 28/08/0011
1507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestCase(1725316.5,  1,     4,    1,   1,  SUN,   0,  0,  0), // Gregorian: 28/08/0011 - dlf
1517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestCase(1724219.5,  0,  5500,   13,   5,  TUE,   0,  0,  0), // Gregorian: 26/08/0008
1527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestCase(1724584.5,  1,     1,   13,   5,  WED,   0,  0,  0), // Gregorian: 26/08/0009
1537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestCase(1724949.5,  1,     2,   13,   5,  THU,   0,  0,  0), // Gregorian: 26/08/0010
1547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestCase(1725314.5,  1,     3,   13,   5,  FRI,   0,  0,  0), // Gregorian: 26/08/0011
1557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestCase(1725315.5,  1,     3,   13,   6,  SAT,   0,  0,  0), // Gregorian: 27/08/0011 - first ethiopic leap year
1567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // new TestCase(1725560.5,  1,     4,   13,   5,  SUN,   0,  0,  0), // Gregorian: 26/08/0012 - dlf
1577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestCase(1725680.5,  1,     4,   13,   5,  SUN,   0,  0,  0), // Gregorian: 26/08/0012
1587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestCase(2299158.5,  1,  1575,    2,   6,  WED,   0,  0,  0), // Gregorian: 13/10/1582
1597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestCase(2299159.5,  1,  1575,    2,   7,  THU,   0,  0,  0), // Gregorian: 14/10/1582  Julian 04/10/1582
1607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestCase(2299160.5,  1,  1575,    2,   8,  FRI,   0,  0,  0), // Gregorian: 15/10/1582
1627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestCase(2299161.5,  1,  1575,    2,   9,  SAT,   0,  0,  0), // Gregorian: 16/10/1582
1637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestCase(2415020.5,  1,  1892,    4,  23,  MON,   0,  0,  0), // Gregorian: 01/01/1900
1657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestCase(2453371.5,  1,  1997,    4,  23,  SAT,   0,  0,  0), // Gregorian: 01/01/2005
1667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestCase(2454719.5,  1,  2000,   13,   5,  WED,   0,  0,  0), // Gregorian: 10/09/2008
1677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        };
1687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        final TestCase[] testsAmeteAlem = {
1707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                //
1717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                // The months in this table are 1-based rather than 0-based,
1727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                // because it's easier to edit that way.
1737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                //                      Ethiopic
1747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                //          Julian Day  Era  Year  Month Day  WkDay Hour Min Sec
1757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                //
1767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                // Dates from "Emporer Theodore..."
1777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new TestCase(2401442.5,  0,  7355,    2,  20,  WED,   0,  0,  0), // Gregorian: 29/10/1862
1797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new TestCase(2402422.5,  0,  7357,   10,  29,  WED,   0,  0,  0), // Gregorian: 05/07/1865
1807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new TestCase(2402630.5,  0,  7358,    5,  22,  MON,   0,  0,  0), // Gregorian: 29/01/1866
1817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new TestCase(2402708.5,  0,  7358,    8,  10,  TUE,   0,  0,  0), // Gregorian: 17/04/1866
1827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new TestCase(2402971.5,  0,  7359,    4,  28,  SAT,   0,  0,  0), // Gregorian: 05/01/1867
1837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new TestCase(2403344.5,  0,  7360,    5,   5,  MON,   0,  0,  0), // Gregorian: 13/01/1868
1847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                // Miscellaneous:
1867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                /* Skip these tests until JD bug fixed in the Gregorian calendar:
1877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                 * http://www.jtcsv.com/cgibin/icu-bugs/incoming?id=4406;page=2;user=guest
1887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                 */
1897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new TestCase(1721059.5,  0,  5492,    5,   7,  SAT,   0,  0,  0), // Gregorian: 01/01/0000
1907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new TestCase(1721425.5,  0,  5493,    5,   8,  MON,   0,  0,  0), // Gregorian: 01/01/0001
1917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new TestCase(1723854.5,  0,  5499,   13,   6,  MON,   0,  0,  0), // Gregorian: 27/08/0007
1927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new TestCase(1723855.5,  0,  5500,    1,   1,  TUE,   0,  0,  0), // Gregorian: 28/08/0007
1947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new TestCase(1724220.5,  0,  5501,    1,   1,  WED,   0,  0,  0), // Gregorian: 27/08/0008
1957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new TestCase(1724585.5,  0,  5502,    1,   1,  THU,   0,  0,  0), // Gregorian: 27/08/0009
1967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new TestCase(1724950.5,  0,  5503,    1,   1,  FRI,   0,  0,  0), // Gregorian: 27/08/0010
1977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                // new TestCase(1724536.5,  0,  5504,    1,   1,  SUN,   0,  0,  0), // Gregorian: 28/08/0011
1997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new TestCase(1725316.5,  0,  5504,    1,   1,  SUN,   0,  0,  0), // Gregorian: 28/08/0011 - dlf
2007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new TestCase(1724219.5,  0,  5500,   13,   5,  TUE,   0,  0,  0), // Gregorian: 26/08/0008
2017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new TestCase(1724584.5,  0,  5501,   13,   5,  WED,   0,  0,  0), // Gregorian: 26/08/0009
2027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new TestCase(1724949.5,  0,  5502,   13,   5,  THU,   0,  0,  0), // Gregorian: 26/08/0010
2037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new TestCase(1725314.5,  0,  5503,   13,   5,  FRI,   0,  0,  0), // Gregorian: 26/08/0011
2047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new TestCase(1725315.5,  0,  5503,   13,   6,  SAT,   0,  0,  0), // Gregorian: 27/08/0011 - first ethiopic leap year
2057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                // new TestCase(1725560.5,  0,  5504,   13,   5,  SUN,   0,  0,  0), // Gregorian: 26/08/0012 - dlf
2067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new TestCase(1725680.5,  0,  5504,   13,   5,  SUN,   0,  0,  0), // Gregorian: 26/08/0012
2077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new TestCase(2299158.5,  0,  7075,    2,   6,  WED,   0,  0,  0), // Gregorian: 13/10/1582
2087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new TestCase(2299159.5,  0,  7075,    2,   7,  THU,   0,  0,  0), // Gregorian: 14/10/1582  Julian 04/10/1582
2097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new TestCase(2299160.5,  0,  7075,    2,   8,  FRI,   0,  0,  0), // Gregorian: 15/10/1582
2117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new TestCase(2299161.5,  0,  7075,    2,   9,  SAT,   0,  0,  0), // Gregorian: 16/10/1582
2127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new TestCase(2415020.5,  0,  7392,    4,  23,  MON,   0,  0,  0), // Gregorian: 01/01/1900
2147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new TestCase(2453371.5,  0,  7497,    4,  23,  SAT,   0,  0,  0), // Gregorian: 01/01/2005
2157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new TestCase(2454719.5,  0,  7500,   13,   5,  WED,   0,  0,  0), // Gregorian: 10/09/2008
2167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            };
2177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        EthiopicCalendar testCalendar = new EthiopicCalendar();
2197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        testCalendar.setLenient(true);
2207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        doTestCases(tests, testCalendar);
2217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // Testing Amete Alem mode
2237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        EthiopicCalendar testCalendarAmeteAlem = new EthiopicCalendar();
2257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        testCalendarAmeteAlem.setAmeteAlemEra(true);
2267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        testCalendarAmeteAlem.setLenient(true);
2277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        doTestCases(testsAmeteAlem, testCalendarAmeteAlem);
2287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    // basic check to see that we print out eras ok
2317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    // eventually should modify to use locale strings and formatter appropriate to coptic calendar
2327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestEraStart() {
2337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        SimpleDateFormat fmt = new SimpleDateFormat("EEE MMM dd, yyyy GG");
2347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        fmt.setCalendar(new EthiopicCalendar());
2357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        EthiopicCalendar cal = new EthiopicCalendar(1, 0, 1);
2377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        assertEquals("Ethiopic Date", "Wed Jan 01, 0001 AD", fmt.format(cal));
2387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        cal.set(Calendar.ERA, 0);
2407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        cal.set(Calendar.YEAR, 5500);
2417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        assertEquals("Ethiopic Date", "Tue Jan 01, 5500 BC", fmt.format(cal));
2427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // The gregorian calendar gets off by two days when
2447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // the date gets low, unless the gregorian changeover is set to
2457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // very early.  The funny thing is, it's ok for dates in the year
2467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // 283, but not in the year 7, and it claims to be ok until the year 4.
2477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // should track down when the dates start to differ...
2487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        GregorianCalendar gc = new GregorianCalendar();
2507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        gc.setGregorianChange(new Date(Long.MIN_VALUE)); // act like proleptic Gregorian
2517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        gc.setTime(cal.getTime());
2527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        fmt.setCalendar(new GregorianCalendar());
2537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        assertEquals("Gregorian Date", "Tue Aug 28, 0007 AD", fmt.format(gc));
2547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestBasic() {
2577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        EthiopicCalendar cal = new EthiopicCalendar();
2587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        cal.clear();
2597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        cal.set(1000, 0, 30);
2607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln("1000/0/30-> " +
2617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert              cal.get(YEAR) + "/" +
2627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert              cal.get(MONTH) + "/" +
2637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert              cal.get(DATE));
2647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        cal.clear();
2657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        cal.set(1, 0, 30);
2667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln("1/0/30 -> " +
2677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert              cal.get(YEAR) + "/" +
2687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert              cal.get(MONTH) + "/" +
2697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert              cal.get(DATE));
2707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestJD(){
2737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int jd = EthiopicCalendar.EthiopicToJD(1567,8,9);
2747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        EthiopicCalendar cal = new EthiopicCalendar();
2757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        cal.clear();
2767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        cal.set(Calendar.JULIAN_DAY, jd);
2777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (cal.get(Calendar.EXTENDED_YEAR) == 1567 &&
2787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            cal.get(Calendar.MONTH) == 8 &&
2797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            cal.get(Calendar.DAY_OF_MONTH) == 9){
2807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            logln("EthiopicCalendar.getDateFromJD tested");
2817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else {
2827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("EthiopicCalendar.getDateFromJD failed");
2837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
2877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Test limits of the Coptic calendar
2887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
2897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestLimits() {
2907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        Calendar cal = Calendar.getInstance();
2917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        cal.set(2007, Calendar.JANUARY, 1);
2927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        EthiopicCalendar ethiopic = new EthiopicCalendar();
2937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        doLimitsTest(ethiopic, null, cal.getTime());
2947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        doTheoreticalLimitsTest(ethiopic, true);
2957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestCoverage() {
2997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
3017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // new EthiopicCalendar(TimeZone)
3027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            EthiopicCalendar cal = new EthiopicCalendar(TimeZone.getDefault());
3037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if(cal == null){
3047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("could not create EthiopicCalendar with TimeZone");
3057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
3067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
3077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
3097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // new EthiopicCalendar(ULocale)
3107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            EthiopicCalendar cal = new EthiopicCalendar(ULocale.getDefault());
3117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if(cal == null){
3127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("could not create EthiopicCalendar with ULocale");
3137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
3147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
3157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
3177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // new EthiopicCalendar(Locale)
3187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            EthiopicCalendar cal = new EthiopicCalendar(Locale.getDefault());
3197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if(cal == null){
3207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("could not create EthiopicCalendar with Locale");
3217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
3227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
3237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
3257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // new EthiopicCalendar(TimeZone, Locale)
3267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            EthiopicCalendar cal = new EthiopicCalendar(TimeZone.getDefault(), Locale.getDefault());
3277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if(cal == null){
3287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("could not create EthiopicCalendar with TimeZone,Locale");
3297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
3307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
3317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
3337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // new EthiopicCalendar(TimeZone, ULocale)
3347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            EthiopicCalendar cal = new EthiopicCalendar(TimeZone.getDefault(), ULocale.getDefault());
3357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if(cal == null){
3367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("could not create EthiopicCalendar with TimeZone,ULocale");
3377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
3387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
3397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
3417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // new EthiopicCalendar(Date)
3427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            EthiopicCalendar cal = new EthiopicCalendar(new Date());
3437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if(cal == null){
3447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("could not create EthiopicCalendar with Date");
3457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
3467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
3477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
3497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // new EthiopicCalendar(int year, int month, int date)
3507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            EthiopicCalendar cal = new EthiopicCalendar(1997, EthiopicCalendar.MESKEREM, 1);
3517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if(cal == null){
3527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("could not create EthiopicCalendar with year,month,date");
3537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
3547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
3557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
3577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // new EthiopicCalendar(int year, int month, int date, int hour, int minute, int second)
3587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            EthiopicCalendar cal = new EthiopicCalendar(1997, EthiopicCalendar.MESKEREM, 1, 1, 1, 1);
3597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if(cal == null){
3607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("could not create EthiopicCalendar with year,month,date,hour,minute,second");
3617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
3627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
3637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
3657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // setCivil/isCivil
3667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // operations on non-civil calendar
3677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            EthiopicCalendar cal = newAmeteAlemEraCalendar();
3687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            cal.setAmeteAlemEra(false);
3697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (cal.isAmeteAlemEra()) {
3707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("EthiopicCalendar calendar is old system");
3717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
3727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            Date now = new Date();
3747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            cal.setTime(now);
3757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            Date then = cal.getTime();
3777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (!now.equals(then)) {
3787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("get/set time failed with non-civil EthiopicCalendar calendar");
3797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
3807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            logln(then.toString());
3827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            cal.add(Calendar.MONTH, 1);
3847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            cal.add(Calendar.DAY_OF_MONTH, 1);
3857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            cal.add(Calendar.YEAR, 1);
3867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            logln(cal.getTime().toString());
3887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
3897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
3917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // data
3927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            EthiopicCalendar cal = new EthiopicCalendar(1997, EthiopicCalendar.MESKEREM, 1);
3937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            Date time = cal.getTime();
3947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            String[] calendarLocales = {
3967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                "am_ET", "gez_ET", "ti_ET"
3977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            };
3987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            String[] formatLocales = {
4007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                "en", "am", "gez", "ti"
4017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            };
4027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            for (int i = 0; i < calendarLocales.length; ++i) {
4037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                String calLocName = calendarLocales[i];
4047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                Locale calLocale = LocaleUtility.getLocaleFromName(calLocName);
4057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                cal = new EthiopicCalendar(calLocale);
4067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                for (int j = 0; j < formatLocales.length; ++j) {
4087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    String locName = formatLocales[j];
4097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    Locale formatLocale = LocaleUtility.getLocaleFromName(locName);
4107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    DateFormat format = DateFormat.getDateTimeInstance(cal, DateFormat.FULL, DateFormat.FULL, formatLocale);
4117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    logln(calLocName + "/" + locName + " --> " + format.format(time));
4127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                }
4137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
4147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
4157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
4167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private static EthiopicCalendar newAmeteAlemEraCalendar() {
4187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        EthiopicCalendar alemawiCalendar = new EthiopicCalendar();
4197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        alemawiCalendar.setAmeteAlemEra(true);
4207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return alemawiCalendar;
4217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
4227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestAddSet() {
4247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        class TestAddSetItem {
4257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            private int startYear;
4267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            private int startMonth; // 0-based
4277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            private int startDay; // 1-based
4287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            private int fieldToChange;
4297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            private int fieldDelta;
4307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            private int endYear;
4317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            private int endMonth;
4327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            private int endDay;
4337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            TestAddSetItem(int sYr, int sMo, int sDa, int field, int delta, int eYr, int eMo, int eDa) {
4347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                startYear = sYr;
4357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                startMonth = sMo;
4367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                startDay = sDa;
4377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                fieldToChange = field;
4387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                fieldDelta = delta;
4397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                endYear = eYr;
4407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                endMonth = eMo;
4417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                endDay = eDa;
4427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
4437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            public int getStartYear()  { return startYear; }
4447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            public int getStartMonth() { return startMonth; }
4457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            public int getStartDay()   { return startDay; }
4467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            public int getField()      { return fieldToChange; }
4477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            public int getDelta()      { return fieldDelta; }
4487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            public int getEndYear()    { return endYear; }
4497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            public int getEndMonth()   { return endMonth; }
4507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            public int getEndDay()     { return endDay; }
4517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
4527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        final TestAddSetItem[] tests = {
4537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestAddSetItem( 2000, 12, 1, Calendar.MONTH, +1, 2001,  0, 1 ),
4547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestAddSetItem( 2000, 12, 1, Calendar.MONTH, +9, 2001,  8, 1 ),
4557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestAddSetItem( 1999, 12, 2, Calendar.MONTH, +1, 2000,  0, 2 ), // 1999 is a leap year
4567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestAddSetItem( 1999, 12, 2, Calendar.MONTH, +9, 2000,  8, 2 ),
4577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestAddSetItem( 2001,  0, 1, Calendar.MONTH, -1, 2000, 12, 1 ),
4587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestAddSetItem( 2001,  0, 1, Calendar.MONTH, -6, 2000,  7, 1 ),
4597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestAddSetItem( 2000, 12, 1, Calendar.DATE,  +8, 2001,  0, 4 ),
4607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestAddSetItem( 1999, 12, 1, Calendar.DATE,  +8, 2000,  0, 3 ), // 1999 is a leap year
4617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new TestAddSetItem( 2000,  0, 1, Calendar.DATE,  -1, 1999, 12, 6 ),
4627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        };
4637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        EthiopicCalendar testCalendar = new EthiopicCalendar();
4647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        for ( int i = 0; i < tests.length; i++ ) {
4657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            TestAddSetItem item = tests[i];
4667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            testCalendar.set( item.getStartYear(), item.getStartMonth(), item.getStartDay(), 9, 0 );
4677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            testCalendar.add( item.getField(), item.getDelta() );
4687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            int endYear = testCalendar.get(Calendar.YEAR);
4697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            int endMonth = testCalendar.get(Calendar.MONTH);
4707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            int endDay = testCalendar.get(Calendar.DATE);
4717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if ( endYear != item.getEndYear() || endMonth != item.getEndMonth() || endDay != item.getEndDay() ) {
4727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("EToJD FAILS: field " + item.getField() + " delta " + item.getDelta() +
4737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                            " expected yr " + item.getEndYear() + " mo " + item.getEndMonth() +  " da " + item.getEndDay() +
4747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                            " got yr " + endYear + " mo " + endMonth +  " da " + endDay);
4757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
4767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
4777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
4787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert}
479