1// © 2016 and later: Unicode, Inc. and others.
2// License & terms of use: http://www.unicode.org/copyright.html#License
3/*
4 *******************************************************************************
5 * Copyright (C) 2006-2012, International Business Machines Corporation and    *
6 * others. All Rights Reserved.                                                *
7 *******************************************************************************
8 */
9
10package com.ibm.icu.tests;
11
12import java.util.Date;
13import java.util.Locale;
14
15import com.ibm.icu.text.DateFormat;
16import com.ibm.icu.util.Calendar;
17import com.ibm.icu.util.TimeZone;
18import com.ibm.icu.util.ULocale;
19
20public class CalendarTest extends ICUTestCase {
21
22    /*
23     * Test method for 'com.ibm.icu.util.Calendar.hashCode()'
24     */
25    public void testHashCode() {
26        Calendar cal1 = Calendar.getInstance();
27        Calendar cal2 = Calendar.getInstance();
28        Calendar cal3 = Calendar.getInstance();
29
30        long t = System.currentTimeMillis();
31        cal1.setTimeInMillis(t);
32        cal2.setTimeInMillis(t);
33        cal3.setTimeInMillis(t);
34
35        cal3.setMinimalDaysInFirstWeek(cal3.getMinimalDaysInFirstWeek()+1);
36        testEHCS(cal1, cal2, cal3);
37    }
38
39    /*
40     * Test method for 'com.ibm.icu.util.Calendar.Calendar(Calendar)'
41     */
42    public void testCalendar() {
43        // tested implicitly everywhere
44    }
45
46    /*
47     * Test method for 'com.ibm.icu.util.Calendar.getInstance()'
48     */
49    public void testGetInstance() {
50        // tested by testEHCS
51    }
52
53    /*
54     * Test method for 'com.ibm.icu.util.Calendar.getInstance(TimeZone)'
55     */
56    public void testGetInstanceTimeZone() {
57        TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles");
58        Calendar cal = Calendar.getInstance(tz);
59        assertNotNull(cal);
60        assertNotNull(cal.getTime());
61        assertEquals(tz, cal.getTimeZone());
62    }
63
64    /*
65     * Test method for 'com.ibm.icu.util.Calendar.getInstance(Locale)'
66     */
67    public void testGetInstanceLocale() {
68        Calendar cal = Calendar.getInstance(Locale.US);
69        assertNotNull(cal);
70        assertNotNull(cal.getTime());
71    }
72
73    /*
74     * Test method for 'com.ibm.icu.util.Calendar.getInstance(ULocale)'
75     */
76    public void testGetInstanceULocale() {
77        Calendar cal = Calendar.getInstance(ULocale.US);
78        assertNotNull(cal);
79        assertNotNull(cal.getTime());
80    }
81
82    /*
83     * Test method for 'com.ibm.icu.util.Calendar.getInstance(TimeZone, Locale)'
84     */
85    public void testGetInstanceTimeZoneLocale() {
86        TimeZone tz = TimeZone.getTimeZone("America/New_York");
87        Calendar cal = Calendar.getInstance(tz, Locale.US);
88        assertNotNull(cal);
89        assertNotNull(cal.getTime());
90    }
91
92    /*
93     * Test method for 'com.ibm.icu.util.Calendar.getInstance(TimeZone, ULocale)'
94     */
95    public void testGetInstanceTimeZoneULocale() {
96        TimeZone tz = TimeZone.getTimeZone("America/New_York");
97        Calendar cal = Calendar.getInstance(tz, ULocale.US);
98        assertNotNull(cal);
99        assertNotNull(cal.getTime());
100    }
101
102    /*
103     * Test method for 'com.ibm.icu.util.Calendar.getAvailableLocales()'
104     */
105    public void testGetAvailableLocales() {
106        assertNotNull(Calendar.getAvailableLocales());
107    }
108
109    /*
110     * Test method for 'com.ibm.icu.util.Calendar.getAvailableULocales()'
111     */
112    public void testGetAvailableULocales() {
113        assertNotNull(Calendar.getAvailableULocales());
114    }
115
116    /*
117     * Test method for 'com.ibm.icu.util.Calendar.getTime()'
118     */
119    public void testGetTime() {
120        Calendar cal = Calendar.getInstance();
121        assertNotNull(cal.getTime());
122    }
123
124    /*
125     * Test method for 'com.ibm.icu.util.Calendar.setTime(Date)'
126     */
127    public void testSetTime() {
128        Calendar cal = Calendar.getInstance();
129        cal.clear();
130        cal.set(2006, 0, 20, 9, 30, 0);
131        Date date = cal.getTime();
132        cal = Calendar.getInstance();
133        cal.setTime(date);
134        assertEquals(date, cal.getTime());
135    }
136
137    /*
138     * Test method for 'com.ibm.icu.util.Calendar.getTimeInMillis()'
139     */
140    public void testGetTimeInMillis() {
141        Calendar cal = Calendar.getInstance();
142        assertTrue(0 != cal.getTimeInMillis());
143    }
144
145    /*
146     * Test method for 'com.ibm.icu.util.Calendar.setTimeInMillis(long)'
147     */
148    public void testSetTimeInMillis() {
149        Calendar cal = Calendar.getInstance();
150        cal.clear();
151        cal.set(2006, 0, 20, 9, 30, 0);
152        long millis = cal.getTimeInMillis();
153        Date date = cal.getTime();
154
155        cal = Calendar.getInstance();
156        cal.setTimeInMillis(millis);
157
158        assertEquals(date, cal.getTime());
159    }
160
161    /*
162     * Test method for 'com.ibm.icu.util.Calendar.get(int)'
163     */
164    public void testGet() {
165        Calendar cal = Calendar.getInstance();
166        cal.clear();
167        cal.set(2006, 0, 20, 9, 30, 0);
168        assertEquals(0, cal.get(Calendar.MONTH));
169        assertEquals(20, cal.get(Calendar.DAY_OF_MONTH));
170        assertEquals(30, cal.get(Calendar.MINUTE));
171    }
172
173    /*
174     * Test method for 'com.ibm.icu.util.Calendar.set(int, int)'
175     */
176    public void testSetIntInt() {
177        Calendar cal = Calendar.getInstance();
178        cal.set(Calendar.YEAR, 1977);
179        assertEquals(1977, cal.get(Calendar.YEAR));
180    }
181
182    /*
183     * Test method for 'com.ibm.icu.util.Calendar.set(int, int, int)'
184     */
185    public void testSetIntIntInt() {
186        Calendar cal = Calendar.getInstance();
187        cal.set(1997, 9, 15);
188        assertEquals(15, cal.get(Calendar.DATE));
189    }
190
191    /*
192     * Test method for 'com.ibm.icu.util.Calendar.set(int, int, int, int, int)'
193     */
194    public void testSetIntIntIntIntInt() {
195        Calendar cal = Calendar.getInstance();
196        cal.set(1997, 9, 15, 14, 25);
197        assertEquals(25, cal.get(Calendar.MINUTE));
198    }
199
200    /*
201     * Test method for 'com.ibm.icu.util.Calendar.set(int, int, int, int, int, int)'
202     */
203    public void testSetIntIntIntIntIntInt() {
204        Calendar cal = Calendar.getInstance();
205        cal.set(1997, 9, 15, 14, 25, 51);
206        assertEquals(51, cal.get(Calendar.SECOND));
207    }
208
209    /*
210     * Test method for 'com.ibm.icu.util.Calendar.clear()'
211     */
212    public void testClear() {
213        Calendar cal = Calendar.getInstance();
214        cal.set(1997, 9, 15, 14, 25, 51);
215        cal.clear();
216        assertEquals(0, cal.get(Calendar.MONTH));
217    }
218
219    /*
220     * Test method for 'com.ibm.icu.util.Calendar.clear(int)'
221     */
222    public void testClearInt() {
223        Calendar cal = Calendar.getInstance();
224        cal.set(1997, 9, 15, 14, 25, 51);
225        assertTrue(cal.isSet(Calendar.DAY_OF_MONTH));
226        cal.clear(Calendar.DAY_OF_MONTH);
227        assertFalse(cal.isSet(Calendar.DAY_OF_MONTH));
228    }
229
230    /*
231     * Test method for 'com.ibm.icu.util.Calendar.isSet(int)'
232     */
233    public void testIsSet() {
234        // see testClearInt
235    }
236
237    /*
238     * Test method for 'com.ibm.icu.util.Calendar.equals(Object)'
239     */
240    public void testEqualsObject() {
241        // tested by testHashCode
242    }
243
244    /*
245     * Test method for 'com.ibm.icu.util.Calendar.isEquivalentTo(Calendar)'
246     */
247    public void testIsEquivalentTo() {
248        Calendar cal = Calendar.getInstance();
249        Calendar cal2 = Calendar.getInstance();
250        cal2.set(1994, 6, 21, 8, 7);
251        assertTrue(cal.isEquivalentTo(cal2));
252        cal.setTimeZone(TimeZone.getTimeZone("CST"));
253        cal2.setTimeZone(TimeZone.getTimeZone("PDT"));
254        assertFalse(cal.isEquivalentTo(cal2));
255    }
256
257    /*
258     * Test method for 'com.ibm.icu.util.Calendar.before(Object)'
259     */
260    public void testBefore() {
261        Calendar cal = Calendar.getInstance();
262        cal.set(Calendar.YEAR, 1990);
263        assertTrue(cal.before(new Date()));
264        assertTrue(cal.before(Calendar.getInstance()));
265    }
266
267    /*
268     * Test method for 'com.ibm.icu.util.Calendar.after(Object)'
269     */
270    public void testAfter() {
271        Calendar cal = Calendar.getInstance();
272        cal.set(Calendar.YEAR, 3058);
273        assertTrue(cal.after(new Date()));
274        assertTrue(cal.after(Calendar.getInstance()));
275    }
276
277    /*
278     * Test method for 'com.ibm.icu.util.Calendar.getActualMaximum(int)'
279     */
280    public void testGetActualMaximum() {
281        Calendar cal = Calendar.getInstance(Locale.US);
282        assertEquals(11, cal.getActualMaximum(Calendar.MONTH));
283    }
284
285    /*
286     * Test method for 'com.ibm.icu.util.Calendar.getActualMinimum(int)'
287     */
288    public void testGetActualMinimum() {
289        Calendar cal = Calendar.getInstance(Locale.US);
290        assertEquals(0, cal.getActualMinimum(Calendar.MONTH));
291    }
292
293    /*
294     * Test method for 'com.ibm.icu.util.Calendar.roll(int, boolean)'
295     */
296    public void testRollIntBoolean() {
297        Calendar cal = Calendar.getInstance(Locale.US);
298        cal.set(1997, 1, 27);
299        cal.roll(Calendar.DATE, true);
300        assertEquals(28, cal.get(Calendar.DATE));
301    }
302
303    /*
304     * Test method for 'com.ibm.icu.util.Calendar.roll(int, int)'
305     */
306    public void testRollIntInt() {
307        Calendar cal = Calendar.getInstance(Locale.US);
308        cal.set(1997, 1, 27);
309        cal.roll(Calendar.DATE, 3);
310        assertEquals(2, cal.get(Calendar.DATE));
311    }
312
313    /*
314     * Test method for 'com.ibm.icu.util.Calendar.add(int, int)'
315     */
316    public void testAdd() {
317        Calendar cal = Calendar.getInstance(Locale.US);
318        cal.set(1997, 1, 27);
319        cal.add(Calendar.DATE, 3);
320        assertEquals(2, cal.get(Calendar.DATE));
321        assertEquals(2, cal.get(Calendar.MONTH));
322    }
323
324    /*
325     * Test method for 'com.ibm.icu.util.Calendar.getDisplayName(Locale)'
326     */
327    public void testGetDisplayNameLocale() {
328        Calendar cal = Calendar.getInstance();
329        assertEquals("Gregorian Calendar", cal.getDisplayName(Locale.US));
330    }
331
332    /*
333     * Test method for 'com.ibm.icu.util.Calendar.getDisplayName(ULocale)'
334     */
335    public void testGetDisplayNameULocale() {
336        Calendar cal = Calendar.getInstance();
337        assertEquals("Gregorian Calendar", cal.getDisplayName(ULocale.US));
338    }
339
340    /*
341     * Test method for 'com.ibm.icu.util.Calendar.compareTo(Calendar)'
342     */
343    public void testCompareToCalendar() {
344        Calendar cal = Calendar.getInstance();
345        cal.set(Calendar.YEAR, 1990);
346        assertTrue(0 > cal.compareTo(Calendar.getInstance()));
347    }
348
349    /*
350     * Test method for 'com.ibm.icu.util.Calendar.compareTo(Object)'
351     */
352    public void testCompareToObject() {
353        Calendar cal = Calendar.getInstance();
354        cal.set(Calendar.YEAR, 1990);
355        assertTrue(0 > cal.compareTo(Calendar.getInstance()));
356    }
357
358    /*
359     * Test method for 'com.ibm.icu.util.Calendar.getDateTimeFormat(int, int, Locale)'
360     */
361    public void testGetDateTimeFormatIntIntLocale() {
362        Calendar cal = Calendar.getInstance();
363        cal.set(1990, 8, 16, 20, 3);
364        DateFormat df = cal.getDateTimeFormat(DateFormat.LONG, DateFormat.SHORT, Locale.US);
365        assertEquals("September 16, 1990 8:03 PM", df.format(cal));
366    }
367
368    /*
369     * Test method for 'com.ibm.icu.util.Calendar.getDateTimeFormat(int, int, ULocale)'
370     */
371    public void testGetDateTimeFormatIntIntULocale() {
372        Calendar cal = Calendar.getInstance();
373        cal.set(1990, 8, 16, 20, 3);
374        DateFormat df = cal.getDateTimeFormat(DateFormat.LONG, DateFormat.SHORT, ULocale.US);
375        assertEquals("September 16, 1990 8:03 PM", df.format(cal));
376    }
377
378    /*
379     * Test method for 'com.ibm.icu.util.Calendar.fieldDifference(Date, int)'
380     */
381    public void testFieldDifference() {
382        Calendar cal = Calendar.getInstance();
383        cal.set(Calendar.DAY_OF_MONTH, 0);
384        Date date = cal.getTime();
385        cal.add(Calendar.DAY_OF_MONTH, 5);
386        assertEquals(-5, cal.fieldDifference(date, Calendar.DAY_OF_MONTH));
387    }
388
389    /*
390     * Test method for 'com.ibm.icu.util.Calendar.getTimeZone()'
391     */
392    public void testGetTimeZone() {
393        Calendar cal = Calendar.getInstance();
394        assertNotNull(cal.getTimeZone());
395    }
396
397    /*
398     * Test method for 'com.ibm.icu.util.Calendar.setTimeZone(TimeZone)'
399     */
400    public void testSetTimeZone() {
401        Calendar cal = Calendar.getInstance();
402        TimeZone value1 = cal.getTimeZone();
403        String tzn = "PDT".equals(value1.getID()) ? "CST" : "PDT";
404        TimeZone value2 = TimeZone.getTimeZone(tzn);
405        cal.setTimeZone(value2);
406        TimeZone result = cal.getTimeZone();
407        assertNotEqual(value1, result);
408        assertEquals(value2, result);
409    }
410
411    /*
412     * Test method for 'com.ibm.icu.util.Calendar.setLenient(boolean)'
413     */
414    public void testSetLenient() {
415        Calendar cal = Calendar.getInstance();
416        boolean lenient = cal.isLenient();
417        cal.setLenient(!lenient);
418        assertFalse(lenient == cal.isLenient());
419
420        // not testing if it has the expected effect
421    }
422
423    /*
424     * Test method for 'com.ibm.icu.util.Calendar.isLenient()'
425     */
426    public void testIsLenient() {
427        // tested by testSetLenient
428    }
429
430    /*
431     * Test method for 'com.ibm.icu.util.Calendar.setFirstDayOfWeek(int)'
432     */
433    public void testSetFirstDayOfWeek() {
434        Calendar cal = Calendar.getInstance();
435        int firstDay = cal.getFirstDayOfWeek();
436        cal.setFirstDayOfWeek(firstDay+1);
437        assertEquals(firstDay+1, cal.getFirstDayOfWeek());
438
439        // don't test functionality
440    }
441
442    /*
443     * Test method for 'com.ibm.icu.util.Calendar.getFirstDayOfWeek()'
444     */
445    public void testGetFirstDayOfWeek() {
446        // tested by testSetFirstDayOfWeek
447    }
448
449    /*
450     * Test method for 'com.ibm.icu.util.Calendar.setMinimalDaysInFirstWeek(int)'
451     */
452    public void testSetMinimalDaysInFirstWeek() {
453        Calendar cal = Calendar.getInstance();
454        int firstDay = cal.getMinimalDaysInFirstWeek();
455        cal.setMinimalDaysInFirstWeek(firstDay+1);
456        assertEquals(firstDay+1, cal.getMinimalDaysInFirstWeek());
457
458        // don't test functionality
459    }
460
461    /*
462     * Test method for 'com.ibm.icu.util.Calendar.getMinimalDaysInFirstWeek()'
463     */
464    public void testGetMinimalDaysInFirstWeek() {
465        // tested by testSetMinimalDaysInFirstWeek
466    }
467
468    /*
469     * Test method for 'com.ibm.icu.util.Calendar.getMinimum(int)'
470     */
471    public void testGetMinimum() {
472        Calendar cal = Calendar.getInstance();
473        assertEquals(1, cal.getMinimum(Calendar.DAY_OF_WEEK));
474    }
475
476    /*
477     * Test method for 'com.ibm.icu.util.Calendar.getMaximum(int)'
478     */
479    public void testGetMaximum() {
480        Calendar cal = Calendar.getInstance();
481        assertEquals(7, cal.getMaximum(Calendar.DAY_OF_WEEK));
482    }
483
484    /*
485     * Test method for 'com.ibm.icu.util.Calendar.getGreatestMinimum(int)'
486     */
487    public void testGetGreatestMinimum() {
488        Calendar cal = Calendar.getInstance();
489        assertEquals(1, cal.getGreatestMinimum(Calendar.DATE));
490    }
491
492    /*
493     * Test method for 'com.ibm.icu.util.Calendar.getLeastMaximum(int)'
494     */
495    public void testGetLeastMaximum() {
496        Calendar cal = Calendar.getInstance();
497        assertEquals(28, cal.getLeastMaximum(Calendar.DATE));
498    }
499
500    /*
501     * Test method for 'com.ibm.icu.util.Calendar.getDayOfWeekType(int)'
502     */
503    public void testGetDayOfWeekType() {
504        Calendar cal = Calendar.getInstance(Locale.US);
505        assertEquals(Calendar.WEEKDAY, cal.getDayOfWeekType(Calendar.FRIDAY));
506        assertEquals(Calendar.WEEKEND, cal.getDayOfWeekType(Calendar.SATURDAY));
507    }
508
509    /*
510     * Test method for 'com.ibm.icu.util.Calendar.isWeekend(Date)'
511     */
512    public void testIsWeekendDate() {
513        Calendar cal = Calendar.getInstance(Locale.US);
514        cal.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
515        assertTrue(cal.isWeekend(cal.getTime()));
516        cal.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
517        assertFalse(cal.isWeekend(cal.getTime()));
518    }
519
520    /*
521     * Test method for 'com.ibm.icu.util.Calendar.isWeekend()'
522     */
523    public void testIsWeekend() {
524        Calendar cal = Calendar.getInstance(Locale.US);
525        cal.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
526        assertTrue(cal.isWeekend());
527        cal.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
528        assertFalse(cal.isWeekend());
529    }
530
531    /*
532     * Test method for 'com.ibm.icu.util.Calendar.clone()'
533     */
534    public void testClone() {
535        // tested by testHashCode
536    }
537
538    /*
539     * Test method for 'com.ibm.icu.util.Calendar.toString()'
540     */
541    public void testToString() {
542        Calendar cal = Calendar.getInstance();
543        assertNotNull(cal.toString());
544    }
545
546    /*
547     * Test method for 'com.ibm.icu.util.Calendar.getType()'
548     */
549    public void testGetType() {
550        Calendar cal = Calendar.getInstance(Locale.US);
551        assertEquals("gregorian", cal.getType());
552    }
553}
554