]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-52_1/main/tests/core/src/com/ibm/icu/dev/test/calendar/IndianTest.java
Clean up imports.
[Dictionary.git] / jars / icu4j-52_1 / main / tests / core / src / com / ibm / icu / dev / test / calendar / IndianTest.java
1 /*
2  *******************************************************************************
3  * Copyright (C) 2005-2011, International Business Machines Corporation and    *
4  * others. All Rights Reserved.                                                *
5  *******************************************************************************
6  */
7 package com.ibm.icu.dev.test.calendar;
8
9 import java.util.Date;
10 import java.util.Locale;
11
12 import com.ibm.icu.impl.LocaleUtility;
13 import com.ibm.icu.text.DateFormat;
14 import com.ibm.icu.text.SimpleDateFormat;
15 import com.ibm.icu.util.Calendar;
16 import com.ibm.icu.util.GregorianCalendar;
17 import com.ibm.icu.util.IndianCalendar;
18 import com.ibm.icu.util.TimeZone;
19 import com.ibm.icu.util.ULocale;
20
21 /**
22  * Tests for the <code>IndianCalendar</code> class.
23  */
24 public class IndianTest extends CalendarTest 
25 {
26     public static void main(String args[]) throws Exception {
27         new IndianTest().run(args);
28     }
29     // Months in indian calendar are 0-based. Here taking 1-based names:
30     public static final int CHAITRA = IndianCalendar.CHAITRA + 1; 
31     public static final int VAISAKHA = IndianCalendar.VAISAKHA + 1;
32     public static final int JYAISTHA = IndianCalendar.JYAISTHA + 1;
33     public static final int ASADHA = IndianCalendar.ASADHA + 1;
34     public static final int SRAVANA = IndianCalendar.SRAVANA + 1 ;
35     public static final int BHADRA = IndianCalendar.BHADRA + 1 ;
36     public static final int  ASVINA = IndianCalendar.ASVINA  + 1 ;
37     public static final int KARTIKA = IndianCalendar.KARTIKA + 1 ;
38     public static final int AGRAHAYANA = IndianCalendar.AGRAHAYANA + 1 ;
39     public static final int PAUSA = IndianCalendar.PAUSA + 1 ;
40     public static final int MAGHA = IndianCalendar.MAGHA + 1 ;
41     public static final int PHALGUNA = IndianCalendar.PHALGUNA + 1 ;
42
43     /** Constants to save typing. */
44     /* Test dates generated from:
45      * http://www.fourmilab.ch/documents/calendar/ 
46     
47     /** A huge list of test cases to make sure that computeTime and computeFields
48      * work properly for a wide range of data in the Indian civil calendar.
49      */
50     public void TestCases()
51     {
52         final TestCase[] tests = {
53             //
54             // The months in this table are 1-based rather than 0-based,
55             // because it's easier to edit that way.
56             //                      Indian
57             //          Julian Day  Era  Year   Month Day    WkDay Hour Min Sec
58            new TestCase(1770641.5,  0,    57,    ASVINA,       10,  SUN,   0,  0,  0),
59            new TestCase(1892731.5,  0,   391,    PAUSA,        18,  WED,   0,  0,  0),
60            new TestCase(1931579.5,  0,   498,    VAISAKHA,     30,  MON,   0,  0,  0),
61            new TestCase(1974851.5,  0,   616,    KARTIKA,      19,  SAT,   0,  0,  0),
62            new TestCase(2091164.5,  0,   935,    VAISAKHA,      5,  SUN,   0,  0,  0),
63            new TestCase(2121509.5,  0,  1018,    JYAISTHA,      3,  SUN,   0,  0,  0),
64            new TestCase(2155779.5,  0,  1112,    CHAITRA,       2,  FRI,   0,  0,  0),
65            new TestCase(2174029.5,  0,  1161,    PHALGUNA,     20,  SAT,   0,  0,  0),
66            new TestCase(2191584.5,  0,  1210,    CHAITRA,      13,  FRI,   0,  0,  0),
67            new TestCase(2195261.5,  0,  1220,    VAISAKHA,      7,  SUN,   0,  0,  0),
68            new TestCase(2229274.5,  0,  1313,    JYAISTHA,     22,  SUN,   0,  0,  0),
69            new TestCase(2245580.5,  0,  1357,    MAGHA,        14,  WED,   0,  0,  0),
70            new TestCase(2266100.5,  0,  1414,    CHAITRA,      20,  SAT,   0,  0,  0),
71            new TestCase(2288542.5,  0,  1475,    BHADRA,       28,  SAT,   0,  0,  0),
72            new TestCase(2290901.5,  0,  1481,    PHALGUNA,     15,  SAT,   0,  0,  0),
73            new TestCase(2323140.5,  0,  1570,    JYAISTHA,     20,  WED,   0,  0,  0),
74            new TestCase(2334551.5,  0,  1601,    BHADRA,       16,  THU,   0,  0,  0),
75            new TestCase(2334581.5,  0,  1601,    ASVINA,       15,  SAT,   0,  0,  0),
76            new TestCase(2334610.5,  0,  1601,    KARTIKA,      14,  SUN,   0,  0,  0),
77            new TestCase(2334639.5,  0,  1601,    AGRAHAYANA,   13,  MON,   0,  0,  0),
78            new TestCase(2334668.5,  0,  1601,    PAUSA,        12,  TUE,   0,  0,  0),
79            new TestCase(2334698.5,  0,  1601,    MAGHA,        12,  THU,   0,  0,  0),
80            new TestCase(2334728.5,  0,  1601,    PHALGUNA,     12,  SAT,   0,  0,  0),
81            new TestCase(2334757.5,  0,  1602,    CHAITRA,      11,  SUN,   0,  0,  0),
82            new TestCase(2334787.5,  0,  1602,    VAISAKHA,     10,  TUE,   0,  0,  0),
83            new TestCase(2334816.5,  0,  1602,    JYAISTHA,      8,  WED,   0,  0,  0),
84            new TestCase(2334846.5,  0,  1602,    ASADHA,        7,  FRI,   0,  0,  0),
85            new TestCase(2334848.5,  0,  1602,    ASADHA,        9,  SUN,   0,  0,  0),
86            new TestCase(2348020.5,  0,  1638,    SRAVANA,       2,  FRI,   0,  0,  0),
87            new TestCase(2334934.5,  0,  1602,    ASVINA,        2,  TUE,   0,  0,  0),
88            new TestCase(2366978.5,  0,  1690,    JYAISTHA,     29,  SUN,   0,  0,  0),
89            new TestCase(2385648.5,  0,  1741,    SRAVANA,      11,  MON,   0,  0,  0),
90            new TestCase(2392825.5,  0,  1761,    CHAITRA,       6,  WED,   0,  0,  0),
91            new TestCase(2416223.5,  0,  1825,    CHAITRA,      29,  SUN,   0,  0,  0),
92            new TestCase(2425848.5,  0,  1851,    BHADRA,        3,  SUN,   0,  0,  0),
93            new TestCase(2430266.5,  0,  1863,    ASVINA,        7,  MON,   0,  0,  0),
94            new TestCase(2430833.5,  0,  1865,    CHAITRA,      29,  MON,   0,  0,  0),
95            new TestCase(2431004.5,  0,  1865,    ASVINA,       15,  THU,   0,  0,  0),
96            new TestCase(2448698.5,  0,  1913,    PHALGUNA,     27,  TUE,   0,  0,  0),
97            new TestCase(2450138.5,  0,  1917,    PHALGUNA,      6,  SUN,   0,  0,  0),
98            new TestCase(2465737.5,  0,  1960,    KARTIKA,      19,  WED,   0,  0,  0),
99            new TestCase(2486076.5,  0,  2016,    ASADHA,       27,  SUN,   0,  0,  0),
100         };
101         
102         IndianCalendar testCalendar = new IndianCalendar();
103         testCalendar.setLenient(true);
104         doTestCases(tests, testCalendar);
105     }
106
107     public void TestBasic() {
108         IndianCalendar cal = new IndianCalendar();
109         cal.clear();
110         cal.set(1000, 0, 30);
111         logln("1000/0/30-> " +
112               cal.get(YEAR) + "/" +
113               cal.get(MONTH) + "/" + 
114               cal.get(DATE));
115         cal.clear();
116         cal.set(1, 0, 30);
117         logln("1/0/30 -> " +
118               cal.get(YEAR) + "/" +
119               cal.get(MONTH) + "/" + 
120               cal.get(DATE));
121     }
122
123     public void TestCoverage() {
124
125         {
126             // new IndianCalendar(TimeZone)
127             IndianCalendar cal = new IndianCalendar(TimeZone.getDefault()); 
128             if(cal == null){
129                 errln("could not create IndianCalendar with TimeZone");
130             }
131         }
132
133         {
134             // new IndianCalendar(ULocale)
135             IndianCalendar cal = new IndianCalendar(ULocale.getDefault());
136             if(cal == null){
137                 errln("could not create IndianCalendar with ULocale");
138             }
139         }
140         
141         {
142             // new IndianCalendar(Locale)
143             IndianCalendar cal = new IndianCalendar(Locale.getDefault());
144             if(cal == null){
145                 errln("could not create IndianCalendar with Locale");
146             }
147         }
148         
149         {                                                                                       
150             // new IndianCalendar(TimeZone, Locale)                                             
151             IndianCalendar cal = new IndianCalendar(TimeZone.getDefault(),Locale.getDefault()); 
152             if(cal == null){                                                                    
153                 errln("could not create IndianCalendar with TimeZone, Locale");                 
154             }                                                                                   
155         }                                                                                       
156                                                                                                 
157         {                                                                                       
158             // new IndianCalendar(TimeZone, ULocale)                                            
159             IndianCalendar cal = new IndianCalendar(TimeZone.getDefault(),ULocale.getDefault());
160             if(cal == null){                                                                    
161                 errln("could not create IndianCalendar with TimeZone, ULocale");                
162             }                                                                                   
163         }                                                                                       
164         
165         {
166             // new IndianCalendar(Date)
167             IndianCalendar cal = new IndianCalendar(new Date());
168             if(cal == null){
169                 errln("could not create IndianCalendar with Date");
170             }
171         }
172         {
173             // new IndianCalendar(int year, int month, int date)
174             IndianCalendar cal = new IndianCalendar(1917, IndianCalendar.CHAITRA, 1);
175             if(cal == null){
176                 errln("could not create IndianCalendar with year,month,date");
177             }
178         }
179         {
180             // new IndianCalendar(int year, int month, int date, int hour, int minute, int second)
181             IndianCalendar cal = new IndianCalendar(1917, IndianCalendar.CHAITRA, 1, 1, 1, 1);
182             if(cal == null){
183                 errln("could not create IndianCalendar with year,month,date,hour,minute,second");
184             }
185         }
186     
187         {
188             // data
189             String[] calendarLocales = {
190                 "bn_IN", "gu_IN", "hi_IN", "kn_IN", "ml_IN", "or_IN", "pa_IN", "ta_IN", "te_IN"
191             };
192
193             String[] formatLocales = {
194                 "en", "fr", "bn", "gu", "hi", "kn", "ml", "or", "pa", "ta", "te"
195             };
196
197             for (int i = 0; i < calendarLocales.length; ++i) {
198                 String calLocName = calendarLocales[i];
199                 Locale calLocale = LocaleUtility.getLocaleFromName(calLocName);
200                 IndianCalendar cal = new IndianCalendar(calLocale);
201                 cal.set(-1039, 9, 21);
202
203                 for (int j = 0; j < formatLocales.length; j++  ) {
204                     String locName = formatLocales[j];
205                     Locale formatLocale = LocaleUtility.getLocaleFromName(locName);
206                     DateFormat format = DateFormat.getDateTimeInstance(cal, DateFormat.FULL, DateFormat.FULL, formatLocale);
207                     logln(calLocName + "/" + locName + " --> " + format.format(cal));
208                 }
209             }
210         }
211     }
212
213     public void TestYear() {
214         // Gregorian Calendar
215         Calendar gCal= new GregorianCalendar();
216         Date gToday=gCal.getTime();
217         gCal.add(GregorianCalendar.MONTH,2);
218         Date gFuture=gCal.getTime();
219         DateFormat gDF = DateFormat.getDateInstance(gCal,DateFormat.FULL);
220         logln("gregorian calendar: " + gDF.format(gToday) +
221               " + 2 months = " + gDF.format(gFuture));
222
223         // Indian Calendar
224         IndianCalendar iCal= new IndianCalendar();
225         Date iToday=iCal.getTime();
226         iCal.add(IndianCalendar.MONTH,2);
227         Date iFuture=iCal.getTime();
228         DateFormat iDF = DateFormat.getDateInstance(iCal,DateFormat.FULL);
229         logln("Indian calendar: " + iDF.format(iToday) +
230               " + 2 months = " + iDF.format(iFuture));
231
232     }
233
234     /**
235      * Test limits of the Indian calendar
236      */
237     public void TestLimits() {
238         Calendar cal = Calendar.getInstance();
239         cal.set(2007, Calendar.JANUARY, 1);
240         IndianCalendar indian = new IndianCalendar();
241         doLimitsTest(indian, null, cal.getTime());
242         doTheoreticalLimitsTest(indian, true);
243     }
244     
245     /**
246      * Problem reported by Bruno Haible <bruno.haible@de.ibm.com>
247      *  -- see ticket 8419 -- http://bugs.icu-project.org/trac/ticket/8419
248      * Problem with months out of range 0-11
249      */
250     public void TestYearEdge() {
251         // Display dates in ISO 8601 format.
252         DateFormat fmt = new SimpleDateFormat("YYYY-MM-dd", ULocale.US);
253
254         // Instantiate an Indian calendar.
255         ULocale locale = ULocale.US.setKeywordValue("calendar", "indian");
256         Calendar cal = Calendar.getInstance(locale);
257
258         // Try add() repeatedly.
259         cal.setTimeInMillis(1295568000000L);
260         if (!fmt.format(cal.getTime()).equals("2011-01-20")){
261             errln("Incorrect calendar value for year edge test");
262         }
263         cal.add(Calendar.MONTH, 1);
264         if (!fmt.format(cal.getTime()).equals("2011-02-19")){
265             errln("Incorrect calendar value for year edge test");
266         }
267         cal.add(Calendar.MONTH, 1);
268         if (!fmt.format(cal.getTime()).equals("2011-03-21")){
269             errln("Incorrect calendar value for year edge test");
270         }
271         cal.add(Calendar.MONTH, 1);
272         if (!fmt.format(cal.getTime()).equals("2011-04-20")){
273             errln("Incorrect calendar value for year edge test");
274         }
275     }
276 }