CalendarTest.java revision ddc0d4c2f8d3fea4ddaf6e611ffd73a1169447e8
1/*
2 *  Licensed to the Apache Software Foundation (ASF) under one or more
3 *  contributor license agreements.  See the NOTICE file distributed with
4 *  this work for additional information regarding copyright ownership.
5 *  The ASF licenses this file to You under the Apache License, Version 2.0
6 *  (the "License"); you may not use this file except in compliance with
7 *  the License.  You may obtain a copy of the License at
8 *
9 *     http://www.apache.org/licenses/LICENSE-2.0
10 *
11 *  Unless required by applicable law or agreed to in writing, software
12 *  distributed under the License is distributed on an "AS IS" BASIS,
13 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 *  See the License for the specific language governing permissions and
15 *  limitations under the License.
16 */
17
18package tests.api.java.util;
19
20import dalvik.annotation.KnownFailure;
21import dalvik.annotation.TestLevel;
22import dalvik.annotation.TestTargetClass;
23import dalvik.annotation.TestTargetNew;
24import dalvik.annotation.TestTargets;
25import tests.support.Support_Locale;
26
27import java.util.Calendar;
28import java.util.Date;
29import java.util.Locale;
30import java.util.TimeZone;
31
32@TestTargetClass(Calendar.class)
33public class CalendarTest extends junit.framework.TestCase {
34
35    Locale defaultLocale;
36
37    /**
38     * @tests java.util.Calendar#set(int, int)
39     */
40    @TestTargetNew(
41        level = TestLevel.COMPLETE,
42        notes = "",
43        method = "set",
44        args = {int.class, int.class}
45    )
46    public void test_setII() {
47        // Test for correct result defined by the last set field
48        Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("EST"));
49
50        cal.clear();
51        cal.set(Calendar.YEAR, 2002);
52        assertTrue("Incorrect result 0: " + cal.getTime().getTime(), cal
53                .getTime().getTime() == 1009861200000L);
54
55        cal.clear();
56        cal.set(Calendar.YEAR, 2002);
57        cal.set(Calendar.MONTH, Calendar.MARCH);
58        assertTrue("Incorrect result 0a: " + cal.getTime(), cal.getTime()
59                .getTime() == 1014958800000L);
60
61        cal.clear();
62        cal.set(Calendar.YEAR, 2002);
63        cal.set(Calendar.DATE, 24);
64        assertTrue("Incorrect result 0b: " + cal.getTime(), cal.getTime()
65                .getTime() == 1011848400000L);
66
67        cal.set(Calendar.MONTH, Calendar.OCTOBER);
68        cal.set(Calendar.DATE, 31);
69        cal.set(Calendar.MONTH, Calendar.NOVEMBER);
70        cal.set(Calendar.DATE, 26);
71        assertTrue("Incorrect month: " + cal.get(Calendar.MONTH), cal
72                .get(Calendar.MONTH) == Calendar.NOVEMBER);
73
74        int dow = cal.get(Calendar.DAY_OF_WEEK);
75        cal.set(Calendar.DATE, 27);
76        assertTrue("Incorrect DAY_OF_WEEK: " + cal.get(Calendar.DAY_OF_WEEK)
77                + " expected: " + dow, cal.get(Calendar.DAY_OF_WEEK) != dow);
78
79        cal.clear();
80        cal.set(Calendar.YEAR, 2002);
81        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
82        assertTrue("Incorrect result 0c1: " + cal.getTime().getTime(), cal
83                .getTime().getTime() == 1010379600000L);
84
85        cal.clear();
86        cal.set(Calendar.YEAR, 2002);
87        cal.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
88        assertTrue("Incorrect result 0c2: " + cal.getTime().getTime(), cal
89                .getTime().getTime() == 1009861200000L);
90
91        cal.clear();
92        cal.set(Calendar.YEAR, 2002);
93        cal.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
94        assertTrue("Incorrect result 0c3: " + cal.getTime(), cal.getTime()
95                .getTime() == 1010034000000L);
96
97        cal.clear();
98        cal.set(Calendar.YEAR, 2002);
99        cal.set(Calendar.WEEK_OF_MONTH, 2);
100        assertTrue("Incorrect result 0d: " + cal.getTime(), cal.getTime()
101                .getTime() == 1010293200000L);
102
103        cal.clear();
104        cal.set(Calendar.YEAR, 2002);
105        cal.set(Calendar.DAY_OF_WEEK_IN_MONTH, 2);
106        assertTrue("Incorrect result 0e: " + cal.getTime(), cal.getTime()
107                .getTime() == 1010898000000L);
108
109        cal.clear();
110        cal.set(Calendar.YEAR, 2002);
111        cal.set(Calendar.WEEK_OF_YEAR, 11);
112        assertTrue("Incorrect result 0f: " + cal.getTime(), cal.getTime()
113                .getTime() == 1015736400000L);
114
115        cal.clear();
116        cal.set(Calendar.YEAR, 2002);
117        cal.set(Calendar.DATE, 24);
118        cal.set(Calendar.WEEK_OF_YEAR, 11);
119        assertTrue("Incorrect result 0g: " + cal.getTime(), cal.getTime()
120                .getTime() == 1011848400000L);
121
122        cal.clear();
123        cal.set(Calendar.YEAR, 2002);
124        cal.get(Calendar.WEEK_OF_YEAR); // Force fields to compute
125        cal.set(Calendar.WEEK_OF_YEAR, 11);
126        assertTrue("Incorrect result 0h: " + cal.getTime(), cal.getTime()
127                .getTime() == 1015909200000L);
128
129        // WEEK_OF_YEAR has priority over MONTH/DATE
130        cal.clear();
131        cal.set(Calendar.YEAR, 2002);
132        cal.set(Calendar.DAY_OF_YEAR, 170);
133        cal.set(Calendar.WEEK_OF_YEAR, 11);
134        cal.set(Calendar.MONTH, Calendar.JANUARY);
135        cal.set(Calendar.DATE, 5);
136        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
137        assertTrue("Incorrect result 1: " + cal.getTime(), cal.getTime()
138                .getTime() == 1015822800000L);
139
140        // WEEK_OF_YEAR has priority over MONTH/DATE
141        cal.clear();
142        cal.set(Calendar.YEAR, 2002);
143        cal.set(Calendar.WEEK_OF_YEAR, 11);
144        cal.set(Calendar.MONTH, Calendar.JANUARY);
145        cal.set(Calendar.DATE, 5);
146        cal.set(Calendar.DAY_OF_YEAR, 170);
147        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
148        assertTrue("Incorrect result 1a: " + cal.getTime(), cal.getTime()
149                .getTime() == 1015822800000L);
150
151        // DAY_OF_WEEK has no effect when other fields not set
152        cal.clear();
153        cal.set(Calendar.YEAR, 2002);
154        cal.set(Calendar.MONTH, Calendar.MARCH);
155        cal.set(Calendar.DATE, 11);
156        cal.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
157        assertTrue("Incorrect result 1b: " + cal.getTime(), cal.getTime()
158                .getTime() == 1015822800000L);
159
160        // WEEK_OF_MONTH has priority
161        cal.clear();
162        cal.set(Calendar.YEAR, 2002);
163        cal.set(Calendar.WEEK_OF_YEAR, 12);
164        cal.set(Calendar.DAY_OF_WEEK_IN_MONTH, 1);
165        cal.set(Calendar.WEEK_OF_MONTH, 3);
166        cal.set(Calendar.MONTH, Calendar.MARCH);
167        cal.set(Calendar.DATE, 5);
168        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
169        assertTrue("Incorrect result 2: " + cal.getTime(), cal.getTime()
170                .getTime() == 1015822800000L);
171
172        // DAY_OF_WEEK_IN_MONTH has priority over WEEK_OF_YEAR
173        cal.clear();
174        cal.set(Calendar.YEAR, 2002);
175        cal.set(Calendar.WEEK_OF_YEAR, 12);
176        cal.set(Calendar.DAY_OF_WEEK_IN_MONTH, 2);
177        cal.set(Calendar.MONTH, Calendar.MARCH);
178        cal.set(Calendar.DATE, 5);
179        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
180        assertTrue("Incorrect result 3: " + cal.getTime(), cal.getTime()
181                .getTime() == 1015822800000L);
182
183        // WEEK_OF_MONTH has priority, MONTH not set
184        cal.clear();
185        cal.set(Calendar.YEAR, 2002);
186        cal.set(Calendar.WEEK_OF_YEAR, 12);
187        cal.set(Calendar.DAY_OF_WEEK_IN_MONTH, 1);
188        cal.set(Calendar.WEEK_OF_MONTH, 3);
189        cal.set(Calendar.DATE, 25);
190        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
191        assertTrue("Incorrect result 4: " + cal.getTime(), cal.getTime()
192                .getTime() == 1010984400000L);
193
194        // WEEK_OF_YEAR has priority when MONTH set last and DAY_OF_WEEK set
195        cal.clear();
196        cal.set(Calendar.YEAR, 2002);
197        cal.set(Calendar.WEEK_OF_YEAR, 11);
198        cal.set(Calendar.DATE, 25);
199        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
200        cal.set(Calendar.MONTH, Calendar.JANUARY);
201        assertTrue("Incorrect result 5: " + cal.getTime(), cal.getTime()
202                .getTime() == 1015822800000L);
203
204        // Use MONTH/DATE when WEEK_OF_YEAR set but not DAY_OF_WEEK
205        cal.clear();
206        cal.set(Calendar.YEAR, 2002);
207        cal.set(Calendar.WEEK_OF_YEAR, 12);
208        cal.set(Calendar.DATE, 11);
209        cal.set(Calendar.MONTH, Calendar.MARCH);
210        assertTrue("Incorrect result 5a: " + cal.getTime(), cal.getTime()
211                .getTime() == 1015822800000L);
212
213        // Use MONTH/DATE when DAY_OF_WEEK is not set
214        cal.clear();
215        cal.set(Calendar.YEAR, 2002);
216        cal.set(Calendar.WEEK_OF_YEAR, 12);
217        cal.set(Calendar.DATE, 11);
218        cal.set(Calendar.WEEK_OF_MONTH, 1);
219        cal.set(Calendar.MONTH, Calendar.MARCH);
220        assertTrue("Incorrect result 5b: " + cal.getTime(), cal.getTime()
221                .getTime() == 1015822800000L);
222
223        // WEEK_OF_MONTH has priority
224        cal.clear();
225        cal.set(Calendar.YEAR, 2002);
226        cal.set(Calendar.WEEK_OF_YEAR, 12);
227        cal.set(Calendar.DATE, 5);
228        cal.set(Calendar.WEEK_OF_MONTH, 3);
229        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
230        cal.set(Calendar.MONTH, Calendar.MARCH);
231        assertTrue("Incorrect result 5c: " + cal.getTime(), cal.getTime()
232                .getTime() == 1015822800000L);
233
234        // DATE has priority when set last
235        cal.clear();
236        cal.set(Calendar.YEAR, 2002);
237        cal.set(Calendar.WEEK_OF_YEAR, 12);
238        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
239        cal.set(Calendar.MONTH, Calendar.MARCH);
240        cal.set(Calendar.DATE, 11);
241        assertTrue("Incorrect result 6: " + cal.getTime(), cal.getTime()
242                .getTime() == 1015822800000L);
243
244        // DATE has priority when set last, MONTH not set
245        cal.clear();
246        cal.set(Calendar.YEAR, 2002);
247        cal.set(Calendar.WEEK_OF_YEAR, 12);
248        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
249        cal.set(Calendar.DATE, 14);
250        assertTrue("Incorrect result 7: " + cal.getTime(), cal.getTime()
251                .getTime() == 1010984400000L);
252
253        // DAY_OF_YEAR has priority when MONTH set last and DATE not set
254        cal.clear();
255        cal.set(Calendar.YEAR, 2002);
256        cal.set(Calendar.DAY_OF_YEAR, 70);
257        cal.set(Calendar.MONTH, Calendar.JANUARY);
258        assertTrue("Incorrect result 8: " + cal.getTime(), cal.getTime()
259                .getTime() == 1015822800000L);
260
261        // DAY/MONTH has priority when DATE set after DAY_OF_YEAR
262        cal.clear();
263        cal.set(Calendar.YEAR, 2002);
264        cal.set(Calendar.DAY_OF_YEAR, 170);
265        cal.set(Calendar.DATE, 11);
266        cal.set(Calendar.MONTH, Calendar.MARCH);
267        assertTrue("Incorrect result 8a: " + cal.getTime(), cal.getTime()
268                .getTime() == 1015822800000L);
269
270        // DAY_OF_YEAR has priority when set after DATE
271        cal.clear();
272        cal.set(Calendar.YEAR, 2002);
273        cal.set(Calendar.DATE, 15);
274        cal.set(Calendar.DAY_OF_YEAR, 70);
275        cal.set(Calendar.MONTH, Calendar.JANUARY);
276        assertTrue("Incorrect result 8b: " + cal.getTime(), cal.getTime()
277                .getTime() == 1015822800000L);
278
279        // DATE has priority when set last
280        cal.clear();
281        cal.set(Calendar.YEAR, 2002);
282        cal.set(Calendar.DAY_OF_YEAR, 70);
283        cal.set(Calendar.DATE, 14);
284        assertTrue("Incorrect result 9: " + cal.getTime(), cal.getTime()
285                .getTime() == 1010984400000L);
286
287        // DATE has priority when set last
288        cal.clear();
289        cal.set(Calendar.YEAR, 2002);
290        cal.set(Calendar.WEEK_OF_YEAR, 15);
291        cal.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
292        cal.set(Calendar.DATE, 14);
293        assertTrue("Incorrect result 9a: " + cal.getTime(), cal.getTime()
294                .getTime() == 1010984400000L);
295
296        cal.clear();
297        cal.set(Calendar.YEAR, 2002);
298        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
299        cal.set(Calendar.DATE, 14);
300        cal.set(Calendar.WEEK_OF_YEAR, 11);
301        assertTrue("Incorrect result 9b: " + cal.getTime(), cal.getTime()
302                .getTime() == 1015822800000L);
303
304        cal.clear();
305        cal.set(Calendar.YEAR, 2002);
306        cal.set(Calendar.DATE, 14);
307        cal.set(Calendar.WEEK_OF_YEAR, 11);
308        assertTrue("Incorrect result 9c: " + cal.getTime(), cal.getTime()
309                .getTime() == 1010984400000L);
310
311        cal.clear();
312        cal.set(Calendar.YEAR, 2002);
313        cal.set(Calendar.WEEK_OF_MONTH, 1);
314        cal.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
315        cal.set(Calendar.MONTH, Calendar.MARCH);
316        cal.set(Calendar.DATE, 11);
317        assertTrue("Incorrect result 9d: " + cal.getTime(), cal.getTime()
318                .getTime() == 1015822800000L);
319
320        // DAY_OF_YEAR has priority when DAY_OF_MONTH set last and other fields
321        // not set
322        cal.clear();
323        cal.set(Calendar.YEAR, 2002);
324        cal.set(Calendar.DAY_OF_YEAR, 70);
325        cal.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
326        assertTrue("Incorrect result 10: " + cal.getTime(), cal.getTime()
327                .getTime() == 1015822800000L);
328
329        // MONTH/DATE has priority when DAY_OF_WEEK_IN_MONTH set last but
330        // DAY_OF_WEEK not set
331        cal.clear();
332        cal.set(Calendar.YEAR, 2002);
333        cal.set(Calendar.DATE, 11);
334        cal.set(Calendar.MONTH, Calendar.MARCH);
335        cal.set(Calendar.DAY_OF_WEEK_IN_MONTH, 1);
336        assertTrue("Incorrect result 11: " + cal.getTime(), cal.getTime()
337                .getTime() == 1015822800000L);
338
339        // MONTH/DATE has priority when WEEK_OF_YEAR set last but DAY_OF_WEEK
340        // not set
341        cal.clear();
342        cal.set(Calendar.YEAR, 2002);
343        cal.set(Calendar.DATE, 11);
344        cal.set(Calendar.MONTH, Calendar.MARCH);
345        cal.set(Calendar.WEEK_OF_YEAR, 15);
346        assertTrue("Incorrect result 12: " + cal.getTime(), cal.getTime()
347                .getTime() == 1015822800000L);
348
349        // MONTH/DATE has priority when WEEK_OF_MONTH set last but DAY_OF_WEEK
350        // not set
351        cal.clear();
352        cal.set(Calendar.YEAR, 2002);
353        cal.set(Calendar.DATE, 11);
354        cal.set(Calendar.MONTH, Calendar.MARCH);
355        cal.set(Calendar.WEEK_OF_MONTH, 1);
356        assertTrue("Incorrect result 13: " + cal.getTime(), cal.getTime()
357                .getTime() == 1015822800000L);
358
359        // Ensure last date field set is reset after computing
360        cal.clear();
361        cal.set(Calendar.YEAR, 2002);
362        cal.set(Calendar.DAY_OF_YEAR, 111);
363        cal.get(Calendar.YEAR);
364        cal.set(Calendar.MONTH, Calendar.MARCH);
365        cal.set(Calendar.AM_PM, Calendar.AM);
366        assertTrue("Incorrect result 14: " + cal.getTime(), cal.getTime()
367                .getTime() == 1016686800000L);
368
369        int hour = cal.get(Calendar.HOUR);
370        cal.set(Calendar.HOUR, hour);
371        cal.set(Calendar.AM_PM, Calendar.PM);
372        assertEquals("AM_PM not changed", Calendar.PM, cal.get(Calendar.AM_PM));
373        // setting AM_PM without HOUR should not have any affect
374        cal.set(Calendar.AM_PM, Calendar.AM);
375        assertEquals("AM_PM was changed 1",
376                Calendar.AM, cal.get(Calendar.AM_PM));
377        int hourOfDay = cal.get(Calendar.HOUR_OF_DAY);
378        hour = cal.get(Calendar.HOUR);
379        cal.set(Calendar.AM_PM, Calendar.PM);
380        assertEquals("AM_PM was changed 2",
381                Calendar.PM, cal.get(Calendar.AM_PM));
382        assertEquals(hour, cal.get(Calendar.HOUR));
383        assertEquals(hourOfDay + 12, cal.get(Calendar.HOUR_OF_DAY));
384
385        // regression test for Harmony-2122
386        cal = Calendar.getInstance();
387        int oldValue = cal.get(Calendar.AM_PM);
388        int newValue = (oldValue == Calendar.AM) ? Calendar.PM : Calendar.AM;
389        cal.set(Calendar.AM_PM, newValue);
390        newValue = cal.get(Calendar.AM_PM);
391        assertTrue(newValue != oldValue);
392
393        cal.setLenient(false);
394
395        try {
396            cal.set(-1, 3);
397            fail("ArrayIndexOutOfBoundsException expected");
398        } catch (ArrayIndexOutOfBoundsException e) {
399            //expected
400        }
401
402        try {
403            cal.set(Calendar.FIELD_COUNT + 1, 3);
404            fail("ArrayIndexOutOfBoundsException expected");
405        } catch (ArrayIndexOutOfBoundsException e) {
406            //expected
407        }
408    }
409
410    /**
411     * @tests java.util.Calendar#setTime(java.util.Date)
412     */
413    @TestTargetNew(
414        level = TestLevel.COMPLETE,
415        notes = "",
416        method = "setTime",
417        args = {java.util.Date.class}
418    )
419    public void test_setTimeLjava_util_Date() {
420        Calendar cal = Calendar.getInstance();
421        // Use millisecond time for testing in Core
422        cal.setTime(new Date(884581200000L)); // (98, Calendar.JANUARY, 12)
423        assertEquals("incorrect millis", 884581200000L, cal.getTime().getTime());
424        cal.setTimeZone(TimeZone.getTimeZone("EST"));
425        cal.setTime(new Date(943506000000L)); // (99, Calendar.NOVEMBER, 25)
426        assertTrue("incorrect fields", cal.get(Calendar.YEAR) == 1999
427                && cal.get(Calendar.MONTH) == Calendar.NOVEMBER
428                && cal.get(Calendar.DATE) == 25);
429    }
430
431    /**
432     * @tests java.util.Calendar#compareTo(Calendar)
433     */
434    @TestTargetNew(
435        level = TestLevel.PARTIAL_COMPLETE,
436        notes = "Verifies NullPointerException.",
437        method = "compareTo",
438        args = {java.util.Calendar.class}
439    )
440    public void test_compareToLjava_util_Calendar_null() {
441        Calendar cal = Calendar.getInstance();
442        try {
443            cal.compareTo(null);
444            fail("should throw NullPointerException");
445        } catch (NullPointerException e) {
446            // expected
447        }
448    }
449
450    /**
451     * @tests java.util.Calendar#compareTo(Calendar)
452     */
453    @TestTargetNew(
454        level = TestLevel.COMPLETE,
455        notes = "",
456        method = "compareTo",
457        args = {java.util.Calendar.class}
458    )
459    public void test_compareToLjava_util_Calendar() {
460        Calendar cal = Calendar.getInstance();
461        cal.clear();
462        cal.set(1997, 12, 13, 23, 57);
463
464        Calendar anotherCal = Calendar.getInstance();
465        anotherCal.clear();
466        anotherCal.set(1997, 12, 13, 23, 57);
467        assertEquals(0, cal.compareTo(anotherCal));
468
469        anotherCal = Calendar.getInstance();
470        anotherCal.clear();
471        anotherCal.set(1997, 11, 13, 24, 57);
472        assertEquals(1, cal.compareTo(anotherCal));
473
474        anotherCal = Calendar.getInstance();
475        anotherCal.clear();
476        anotherCal.set(1997, 12, 13, 23, 58);
477        assertEquals(-1, cal.compareTo(anotherCal));
478
479        try {
480            cal.compareTo(null);
481            fail("NullPointerException expected");
482        } catch (NullPointerException e) {
483            //expected
484        }
485
486        MockCalendar mc = new MockCalendar();
487
488        try {
489            cal.compareTo(mc);
490            fail("IllegalArgumentException expected");
491        } catch (IllegalArgumentException e) {
492            //expected
493        }
494    }
495
496    /**
497     * @tests java.util.Calendar#clone()
498     */
499    @TestTargetNew(
500        level = TestLevel.COMPLETE,
501        notes = "",
502        method = "clone",
503        args = {}
504    )
505    public void test_clone() {
506        // Regression for HARMONY-475
507        Calendar cal = Calendar.getInstance();
508        cal.set(2006, 5, 6, 11, 35);
509        Calendar anotherCal = (Calendar) cal.clone();
510        // should be deep clone
511        assertNotSame("getTimeZone", cal.getTimeZone(), anotherCal
512                .getTimeZone());
513    }
514
515    /**
516     * @tests java.util.Calendar#getTimeInMillis()
517     */
518    @TestTargetNew(
519        level = TestLevel.COMPLETE,
520        notes = "",
521        method = "getTimeInMillis",
522        args = {}
523    )
524    public void test_getTimeInMillis() {
525        Calendar cal = Calendar.getInstance();
526
527        int year = Integer.MIN_VALUE + 71;
528        cal.setTimeZone(TimeZone.getTimeZone("GMT"));;
529        cal.set(Calendar.YEAR, year + 1900);
530        cal.set(Calendar.MONTH, Calendar.JANUARY);
531        cal.set(Calendar.DATE, 1);
532        cal.set(Calendar.HOUR_OF_DAY, 0);
533        cal.set(Calendar.MINUTE, 0);
534        cal.set(Calendar.SECOND, 0);
535        cal.set(Calendar.MILLISECOND, 0);
536
537        assertEquals(6017546357372606464L, cal.getTimeInMillis());
538    }
539
540    /**
541     * @tests {@link java.util.Calendar#getActualMaximum(int)}
542     */
543    @TestTargetNew(
544        level = TestLevel.COMPLETE,
545        notes = "",
546        method = "getActualMaximum",
547        args = {int.class}
548    )
549    public void test_getActualMaximum_I() {
550        Calendar c = new MockCalendar();
551        assertEquals("should be equal to 0", 0, c.getActualMaximum(0));
552    }
553
554    /**
555     * @tests {@link java.util.Calendar#getActualMinimum(int)}
556     */
557    @TestTargets({
558        @TestTargetNew(
559            level = TestLevel.COMPLETE,
560            notes = "",
561            method = "getActualMinimum",
562            args = {int.class}
563        ),
564        @TestTargetNew(
565            level = TestLevel.COMPLETE,
566            notes = "",
567            method = "Calendar",
568            args = {}
569        )
570    })
571    public void test_getActualMinimum_I() {
572        Calendar c = new MockCalendar();
573        assertEquals("should be equal to 0", 0, c.getActualMinimum(0));
574    }
575
576    private class MockCalendar extends Calendar {
577
578        public MockCalendar() {
579            super();
580        }
581
582        public MockCalendar(TimeZone default1, Locale germany) {
583            super(default1, germany);
584        }
585
586        @Override
587        public void add(int field, int value) {
588        }
589
590        @Override
591        protected void computeFields() {
592        }
593
594        @Override
595        protected void computeTime() {
596            throw new IllegalArgumentException();
597        }
598
599        @Override
600        public int getGreatestMinimum(int field) {
601            return 0;
602        }
603
604        @Override
605        public int getLeastMaximum(int field) {
606            return 0;
607        }
608
609        @Override
610        public int getMaximum(int field) {
611            return 0;
612        }
613
614        @Override
615        public int getMinimum(int field) {
616            return 0;
617        }
618
619        @Override
620        public void roll(int field, boolean increment) {
621        }
622    }
623
624    @TestTargetNew(
625        level = TestLevel.COMPLETE,
626        notes = "",
627        method = "Calendar",
628        args = {java.util.TimeZone.class, java.util.Locale.class}
629    )
630    public void test_ConstructorLjava_utilTimeZoneLjava_util_Locale() {
631        assertNotNull(new MockCalendar(TimeZone.getDefault(), Locale.GERMANY));
632    }
633
634    @TestTargetNew(
635        level = TestLevel.COMPLETE,
636        notes = "Test calls dummy implementation of abstract method.",
637        method = "add",
638        args = {int.class, int.class}
639    )
640    public void test_addII() {
641        MockCalendar mc = new MockCalendar();
642
643        mc.add(Calendar.DAY_OF_YEAR, 7);
644    }
645
646    @TestTargetNew(
647        level = TestLevel.COMPLETE,
648        notes = "",
649        method = "after",
650        args = {java.lang.Object.class}
651    )
652    public void test_afterLjava_lang_Object() {
653        MockCalendar mcBefore = new MockCalendar();
654        MockCalendar mc       = new MockCalendar();
655        MockCalendar mcAfter  = new MockCalendar();
656        MockCalendar mcSame   = new MockCalendar();
657
658        mcBefore.setTimeInMillis(1000);
659        mc.setTimeInMillis(10000);
660        mcAfter.setTimeInMillis(100000);
661        mcSame.setTimeInMillis(10000);
662
663        assertTrue(mc.after(mcBefore));
664        assertFalse(mc.after(mcAfter));
665        assertFalse(mc.after(mcSame));
666        assertFalse(mc.after(mc));
667        assertFalse(mc.after(new String()));
668    }
669
670    @TestTargetNew(
671        level = TestLevel.COMPLETE,
672        notes = "",
673        method = "before",
674        args = {java.lang.Object.class}
675    )
676    public void test_beforeLjava_lang_Object() {
677        MockCalendar mcBefore = new MockCalendar();
678        MockCalendar mc       = new MockCalendar();
679        MockCalendar mcAfter  = new MockCalendar();
680        MockCalendar mcSame   = new MockCalendar();
681
682        mcBefore.setTimeInMillis(1000);
683        mc.setTimeInMillis(10000);
684        mcAfter.setTimeInMillis(100000);
685        mcSame.setTimeInMillis(10000);
686
687        assertFalse(mc.before(mcBefore));
688        assertTrue(mc.before(mcAfter));
689        assertFalse(mc.before(mcSame));
690        assertFalse(mc.before(mc));
691        assertFalse(mc.before(new String()));
692    }
693
694    @TestTargetNew(
695        level = TestLevel.COMPLETE,
696        notes = "",
697        method = "clear",
698        args = {}
699    )
700    public void test_clear() {
701        MockCalendar mc1 = new MockCalendar();
702        MockCalendar mc2 = new MockCalendar();
703
704        assertTrue(mc1.toString().equals(mc2.toString()));
705        mc1.set(2008, Calendar.SEPTEMBER, 23, 18, 0, 0);
706        assertFalse(mc1.toString().equals(mc2.toString()));
707        mc1.clear();
708        assertTrue(mc1.toString().equals(mc2.toString()));
709    }
710
711    @TestTargetNew(
712        level = TestLevel.COMPLETE,
713        notes = "",
714        method = "clear",
715        args = {int.class}
716    )
717    public void test_clearI() {
718        MockCalendar mc1 = new MockCalendar();
719        MockCalendar mc2 = new MockCalendar();
720
721        assertTrue(mc1.toString().equals(mc2.toString()));
722        mc1.set(2008, Calendar.SEPTEMBER, 23, 18, 0, 0);
723        assertFalse(mc1.toString().equals(mc2.toString()));
724        mc1.clear(Calendar.YEAR);
725        mc1.clear(Calendar.MONTH);
726        mc1.clear(Calendar.DAY_OF_MONTH);
727        mc1.clear(Calendar.HOUR_OF_DAY);
728        mc1.clear(Calendar.MINUTE);
729        mc1.clear(Calendar.SECOND);
730        mc1.clear(Calendar.MILLISECOND);
731        assertTrue(mc1.toString().equals(mc2.toString()));
732    }
733
734    class Mock_Calendar extends Calendar {
735        boolean flagComplete = false;
736        @Override
737        public void add(int field, int amount) {
738
739        }
740
741        @Override
742        protected void computeFields() {
743            this.set(MONTH, this.internalGet(MONTH)%12);
744        }
745
746        @Override
747        protected void computeTime() {
748        }
749
750        @Override
751        public int getGreatestMinimum(int field) {
752            return 0;
753        }
754
755        @Override
756        public int getLeastMaximum(int field) {
757            return 0;
758        }
759
760        @Override
761        public int getMaximum(int field) {
762            return 0;
763        }
764
765        @Override
766        public int getMinimum(int field) {
767            return 0;
768        }
769
770        @Override
771        public void roll(int field, boolean up) {
772        }
773
774        @Override
775        public void complete() {
776            computeTime();
777            computeFields();
778            flagComplete = true;
779        }
780
781        public boolean isCompleted () {
782            return flagComplete;
783        }
784
785        public int internalGetField(int field) {
786            return super.internalGet(field);
787        }
788    }
789
790    @TestTargetNew(
791        level = TestLevel.COMPLETE,
792        notes = "",
793        method = "complete",
794        args = {}
795    )
796    public void test_complete() {
797        Mock_Calendar cal = new Mock_Calendar();
798
799        assertFalse(cal.isCompleted());
800        cal.setTimeInMillis(1000);
801        cal.get(Calendar.MONTH);
802        assertTrue(cal.isCompleted());
803    }
804
805    @TestTargetNew(
806        level = TestLevel.COMPLETE,
807        notes = "",
808        method = "computeFields",
809        args = {}
810    )
811    public void test_computeFields() {
812        Calendar cal1 = Calendar.getInstance(TimeZone.getTimeZone("GMT+2"), defaultLocale);
813        Calendar cal2 = Calendar.getInstance(TimeZone.getTimeZone("GMT+2"), defaultLocale);
814
815        cal1.setTimeInMillis(1222185600225L);
816        cal2.set(2008, Calendar.SEPTEMBER, 23, 18, 0, 0);
817        assertFalse(cal1.toString().equals(cal2.toString()));
818        cal1.get(Calendar.YEAR);
819        cal2.getTimeInMillis();
820        cal1.set(Calendar.MILLISECOND, 0);
821        cal2.set(Calendar.MILLISECOND, 0);
822        // tests fails in this line.
823        assertTrue(cal1.toString().equals(cal2.toString()));
824    }
825
826    @TestTargetNew(
827        level = TestLevel.COMPLETE,
828        notes = "",
829        method = "equals",
830        args = {java.lang.Object.class}
831    )
832    public void test_equals() {
833        Calendar cal1 = Calendar.getInstance(TimeZone.getTimeZone("GMT+2"), defaultLocale);
834        Calendar cal2 = Calendar.getInstance(TimeZone.getTimeZone("GMT+2"), defaultLocale);
835
836        cal1.setTimeInMillis(1222185600225L);
837        cal2.set(2008, Calendar.SEPTEMBER, 23, 18, 0, 0);
838        assertFalse(cal1.equals(cal2));
839        cal1.get(Calendar.YEAR);
840        cal2.getTimeInMillis();
841        cal1.set(Calendar.MILLISECOND, 0);
842        cal2.set(Calendar.MILLISECOND, 0);
843        // tests fails on following line.
844        assertTrue(cal1.equals(cal2));
845    }
846
847    @TestTargetNew(
848        level = TestLevel.COMPLETE,
849        notes = "",
850        method = "get",
851        args = {int.class}
852    )
853    public void test_getI() {
854        Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+2"), defaultLocale);
855
856        cal.setTimeInMillis(1222185600225L);
857        assertEquals(cal.get(Calendar.ERA), 1);
858        assertEquals(cal.get(Calendar.YEAR), 2008);
859        assertEquals(cal.get(Calendar.MONTH), Calendar.SEPTEMBER);
860        assertEquals(cal.get(Calendar.DAY_OF_MONTH), 23);
861        // Following line returns wrong value. Behavior uncompatible with RI.
862        assertEquals(cal.get(Calendar.HOUR_OF_DAY), 18);
863        assertEquals(cal.get(Calendar.MINUTE), 0);
864
865        try {
866            cal.get(-1);
867            fail("ArrayIndexOutOfBoundsException expected");
868        } catch (ArrayIndexOutOfBoundsException e) {
869            //expected
870        }
871
872        try {
873            cal.get(Calendar.FIELD_COUNT + 1);
874            fail("ArrayIndexOutOfBoundsException expected");
875        } catch (ArrayIndexOutOfBoundsException e) {
876            //expected
877        }
878    }
879
880    @TestTargetNew(
881        level = TestLevel.COMPLETE,
882        notes = "",
883        method = "getAvailableLocales",
884        args = {}
885    )
886    public void test_getAvailableLocales() {
887        assertNotNull(Calendar.getAvailableLocales());
888    }
889
890    @TestTargets({
891        @TestTargetNew(
892            level = TestLevel.COMPLETE,
893            notes = "",
894            method = "getFirstDayOfWeek",
895            args = {}
896        ),
897        @TestTargetNew(
898            level = TestLevel.COMPLETE,
899            notes = "",
900            method = "getInstance",
901            args = {}
902        )
903    })
904    public void test_getFirstDayOfWeek() {
905        Locale[] requiredLocales = {Locale.US, Locale.FRANCE};
906        if (!Support_Locale.areLocalesAvailable(requiredLocales)) {
907            // locale dependent test, bug 1943269
908            return;
909        }
910        Calendar cal = Calendar.getInstance();
911
912        assertEquals(Calendar.SUNDAY, cal.getFirstDayOfWeek());
913        Locale.setDefault(Locale.FRANCE);
914        cal = Calendar.getInstance();
915        assertEquals(Calendar.MONDAY, cal.getFirstDayOfWeek());
916        Locale.setDefault(Locale.US);
917    }
918
919    @TestTargetNew(
920        level = TestLevel.COMPLETE,
921        notes = "",
922        method = "getInstance",
923        args = {java.util.Locale.class}
924    )
925    public void test_getInstanceLjava_util_Locale() {
926        Locale[] requiredLocales = {Locale.US, Locale.FRANCE};
927        if (!Support_Locale.areLocalesAvailable(requiredLocales)) {
928            // locale dependent test, bug 1943269
929            return;
930        }
931        Calendar cal1 = Calendar.getInstance(Locale.FRANCE);
932        Locale.setDefault(Locale.FRANCE);
933        Calendar cal2 = Calendar.getInstance();
934        assertSame(cal1.getFirstDayOfWeek(), cal2.getFirstDayOfWeek());
935        Locale.setDefault(Locale.US);
936        cal2 = Calendar.getInstance();
937        assertNotSame(cal1.getFirstDayOfWeek(), cal2.getFirstDayOfWeek());
938    }
939
940    @TestTargetNew(
941        level = TestLevel.COMPLETE,
942        notes = "",
943        method = "getInstance",
944        args = {java.util.TimeZone.class}
945    )
946    public void test_get_InstanceLjava_util_TimeZone() {
947        Calendar cal1 = Calendar.getInstance(TimeZone.getTimeZone("GMT-6"));
948        Calendar cal2 = Calendar.getInstance(TimeZone.getTimeZone("GMT+1"));
949        assertNotSame(cal1.getTimeZone().getRawOffset(), cal2.getTimeZone().getRawOffset());
950    }
951
952    @TestTargetNew(
953        level = TestLevel.COMPLETE,
954        notes = "",
955        method = "getInstance",
956        args = {java.util.TimeZone.class, java.util.Locale.class}
957    )
958    public void test_getInstanceLjava_util_TimeZoneLjava_util_Locale() {
959        Locale[] requiredLocales = {Locale.US, Locale.FRANCE};
960        if (!Support_Locale.areLocalesAvailable(requiredLocales)) {
961            // locale dependent test, bug 1943269
962            return;
963        }
964        Calendar cal1 = Calendar.getInstance(TimeZone.getTimeZone("GMT-6"), Locale.FRANCE);
965        Locale.setDefault(Locale.FRANCE);
966        Calendar cal2 = Calendar.getInstance(TimeZone.getTimeZone("GMT+1"));
967        assertSame(cal1.getFirstDayOfWeek(), cal2.getFirstDayOfWeek());
968        assertNotSame(cal1.getTimeZone().getRawOffset(), cal2.getTimeZone().getRawOffset());
969        Locale.setDefault(Locale.US);
970        cal2 = Calendar.getInstance(TimeZone.getTimeZone("GMT+1"));
971        assertNotSame(cal1.getFirstDayOfWeek(), cal2.getFirstDayOfWeek());
972        assertNotSame(cal1.getTimeZone().getRawOffset(), cal2.getTimeZone().getRawOffset());
973    }
974
975    @TestTargetNew(
976        level = TestLevel.COMPLETE,
977        notes = "",
978        method = "getMinimalDaysInFirstWeek",
979        args = {}
980    )
981    @KnownFailure("Fails in CTS but passes under run-core-tests")
982    public void test_getMinimalDaysInFirstWeek() {
983        Locale[] requiredLocales = {Locale.US, Locale.FRANCE};
984        if (!Support_Locale.areLocalesAvailable(requiredLocales)) {
985            // locale dependent test, bug 1943269
986            return;
987        }
988        Locale.setDefault(Locale.US);
989        Calendar cal = Calendar.getInstance();
990        assertEquals(1, cal.getMinimalDaysInFirstWeek());
991        Locale.setDefault(Locale.FRANCE);
992        cal = Calendar.getInstance();
993        assertEquals(4, cal.getMinimalDaysInFirstWeek());
994        Locale.setDefault(Locale.US);
995    }
996
997    @TestTargetNew(
998        level = TestLevel.COMPLETE,
999        notes = "",
1000        method = "getTime",
1001        args = {}
1002    )
1003    public void test_getTime() {
1004        Calendar cal = Calendar.getInstance();
1005        Date d = new Date(1222185600225L);
1006
1007        cal.setTimeInMillis(1222185600225L);
1008        assertEquals(d.getTime(), cal.getTimeInMillis());
1009        assertEquals(d, cal.getTime());
1010    }
1011
1012    @TestTargetNew(
1013        level = TestLevel.COMPLETE,
1014        notes = "",
1015        method = "getTimeZone",
1016        args = {}
1017    )
1018    public void test_getTimeZone() {
1019        Calendar cal = Calendar.getInstance();
1020        cal.setTimeZone(TimeZone.getTimeZone("GMT-6"));
1021
1022        assertEquals(TimeZone.getTimeZone("GMT-6"), cal.getTimeZone());
1023        cal = Calendar.getInstance(TimeZone.getTimeZone("GMT-8"));
1024        assertEquals(TimeZone.getTimeZone("GMT-8"), cal.getTimeZone());
1025    }
1026
1027    @TestTargetNew(
1028        level = TestLevel.COMPLETE,
1029        notes = "",
1030        method = "hashCode",
1031        args = {}
1032    )
1033    public void test_hashCode() {
1034        Locale[] requiredLocales = {Locale.US, Locale.FRANCE};
1035        if (!Support_Locale.areLocalesAvailable(requiredLocales)) {
1036            // locale dependent test, bug 1943269
1037            return;
1038        }
1039        Calendar cal1 = Calendar.getInstance();
1040        Locale.setDefault(Locale.FRANCE);
1041        Calendar cal2 = Calendar.getInstance();
1042        Locale.setDefault(Locale.US);
1043        assertTrue(cal1.hashCode() != cal2.hashCode());
1044    }
1045
1046    @TestTargetNew(
1047        level = TestLevel.COMPLETE,
1048        notes = "",
1049        method = "internalGet",
1050        args = {int.class}
1051    )
1052    public void test_internalGet() {
1053        Mock_Calendar mc = new Mock_Calendar();
1054        assertEquals(0, mc.internalGetField(Calendar.MONTH));
1055        mc.set(Calendar.MONTH, 35);
1056        assertEquals(35, mc.internalGetField(Calendar.MONTH));
1057        assertEquals(11, mc.get(Calendar.MONTH));
1058    }
1059
1060    @TestTargets({
1061        @TestTargetNew(
1062            level = TestLevel.COMPLETE,
1063            notes = "",
1064            method = "isLenient",
1065            args = {}
1066        ),
1067        @TestTargetNew(
1068            level = TestLevel.COMPLETE,
1069            notes = "",
1070            method = "setLenient",
1071            args = {boolean.class}
1072        )
1073    })
1074    public void test_isLenient() {
1075        Calendar cal = Calendar.getInstance();
1076        assertTrue(cal.isLenient());
1077        cal.set(Calendar.MONTH, 35);
1078        cal.get(Calendar.MONTH);
1079        cal.setLenient(false);
1080        cal.set(Calendar.MONTH, 35);
1081        try {
1082            cal.get(Calendar.MONTH);
1083            fail("IllegalArgumentException expected");
1084        } catch (IllegalArgumentException e) {
1085            //expected
1086        }
1087        assertFalse(cal.isLenient());
1088        cal.setLenient(true);
1089        cal.set(Calendar.MONTH, 35);
1090        cal.get(Calendar.MONTH);
1091        assertTrue(cal.isLenient());
1092    }
1093
1094    @TestTargetNew(
1095        level = TestLevel.COMPLETE,
1096        notes = "",
1097        method = "isSet",
1098        args = {int.class}
1099    )
1100    public void test_isSet() {
1101        Calendar cal = Calendar.getInstance();
1102        cal.clear();
1103        assertFalse(cal.isSet(Calendar.MONTH));
1104        cal.set(Calendar.MONTH, 35);
1105        assertTrue(cal.isSet(Calendar.MONTH));
1106        assertFalse(cal.isSet(Calendar.YEAR));
1107        cal.get(Calendar.MONTH);
1108        assertTrue(cal.isSet(Calendar.YEAR));
1109    }
1110
1111    @TestTargetNew(
1112        level = TestLevel.COMPLETE,
1113        notes = "",
1114        method = "roll",
1115        args = {int.class, int.class}
1116    )
1117    public void test_rollII() {
1118        Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+2"), defaultLocale);
1119
1120        cal.setTimeInMillis(1222185600225L);
1121        cal.roll(Calendar.DAY_OF_MONTH, 200);
1122        assertEquals(cal.get(Calendar.ERA), 1);
1123        assertEquals(cal.get(Calendar.YEAR), 2008);
1124        assertEquals(cal.get(Calendar.MONTH), Calendar.SEPTEMBER);
1125        assertEquals(cal.get(Calendar.DAY_OF_MONTH), 13);
1126        // Following line returns wrong value. Behavior uncompatible with RI.
1127        assertEquals(cal.get(Calendar.HOUR_OF_DAY), 18);
1128        assertEquals(cal.get(Calendar.MINUTE), 0);
1129        cal.roll(Calendar.DAY_OF_MONTH, -200);
1130        assertEquals(cal.get(Calendar.ERA), 1);
1131        assertEquals(cal.get(Calendar.YEAR), 2008);
1132        assertEquals(cal.get(Calendar.MONTH), Calendar.SEPTEMBER);
1133        assertEquals(cal.get(Calendar.DAY_OF_MONTH), 23);
1134        assertEquals(cal.get(Calendar.HOUR_OF_DAY), 18);
1135        assertEquals(cal.get(Calendar.MINUTE), 0);
1136    }
1137
1138    @TestTargets({
1139        @TestTargetNew(
1140            level = TestLevel.COMPLETE,
1141            notes = "",
1142            method = "set",
1143            args = {int.class, int.class, int.class}
1144        ),
1145        @TestTargetNew(
1146            level = TestLevel.COMPLETE,
1147            notes = "",
1148            method = "setTimeInMillis",
1149            args = {long.class}
1150        )
1151    })
1152    public void test_setIII() {
1153        Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+2"), defaultLocale);
1154
1155        cal.setTimeInMillis(1222185600225L);
1156        assertEquals(1222185600225L, cal.getTimeInMillis());
1157        assertEquals(cal.get(Calendar.YEAR), 2008);
1158        assertEquals(cal.get(Calendar.MONTH), Calendar.SEPTEMBER);
1159        assertEquals(cal.get(Calendar.DAY_OF_MONTH), 23);
1160        assertEquals(cal.get(Calendar.SECOND), 0);
1161
1162        cal.set(1970, Calendar.JANUARY, 1);
1163        assertEquals(cal.get(Calendar.ERA), 1);
1164        // Following line returns wrong value. Behavior uncompatible with RI.
1165        assertEquals(cal.get(Calendar.HOUR_OF_DAY), 18);
1166        assertEquals(cal.get(Calendar.MINUTE), 0);
1167        assertEquals(cal.get(Calendar.SECOND), 0);
1168
1169        assertEquals(cal.get(Calendar.YEAR), 1970);
1170        assertEquals(cal.get(Calendar.MONTH), 0);
1171        assertEquals(cal.get(Calendar.DAY_OF_MONTH), 1);
1172    }
1173
1174    @TestTargetNew(
1175        level = TestLevel.COMPLETE,
1176        notes = "",
1177        method = "set",
1178        args = {int.class, int.class, int.class, int.class, int.class}
1179    )
1180    public void test_setIIIII() {
1181        Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+2"), defaultLocale);
1182
1183        cal.setTimeInMillis(1222185600225L);
1184        assertEquals(cal.get(Calendar.YEAR), 2008);
1185        assertEquals(cal.get(Calendar.MONTH), Calendar.SEPTEMBER);
1186        assertEquals(cal.get(Calendar.DAY_OF_MONTH), 23);
1187        // Following line returns wrong value. Behavior uncompatible with RI.
1188        assertEquals(cal.get(Calendar.HOUR_OF_DAY), 18);
1189        assertEquals(cal.get(Calendar.MINUTE), 0);
1190        assertEquals(cal.get(Calendar.SECOND), 0);
1191
1192        cal.set(1970, Calendar.JANUARY, 1, 0, 10);
1193        assertEquals(cal.get(Calendar.ERA), 1);
1194        assertEquals(cal.get(Calendar.SECOND), 0);
1195
1196        assertEquals(cal.get(Calendar.YEAR), 1970);
1197        assertEquals(cal.get(Calendar.MONTH), 0);
1198        assertEquals(cal.get(Calendar.DAY_OF_MONTH), 1);
1199        assertEquals(cal.get(Calendar.HOUR_OF_DAY), 0);
1200        assertEquals(cal.get(Calendar.MINUTE), 10);
1201    }
1202
1203    @TestTargetNew(
1204        level = TestLevel.COMPLETE,
1205        notes = "",
1206        method = "set",
1207        args = {int.class, int.class, int.class, int.class, int.class, int.class}
1208    )
1209    public void test_setIIIIII() {
1210        Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+2"), defaultLocale);
1211
1212        cal.setTimeInMillis(1222185600225L);
1213        assertEquals(cal.get(Calendar.YEAR), 2008);
1214        assertEquals(cal.get(Calendar.MONTH), Calendar.SEPTEMBER);
1215        assertEquals(cal.get(Calendar.DAY_OF_MONTH), 23);
1216        // Following line returns wrong value. Behavior uncompatible with RI.
1217        assertEquals(cal.get(Calendar.HOUR_OF_DAY), 18);
1218        assertEquals(cal.get(Calendar.MINUTE), 0);
1219        assertEquals(cal.get(Calendar.SECOND), 0);
1220
1221        cal.set(1970, Calendar.JANUARY, 1, 0, 10, 33);
1222        assertEquals(cal.get(Calendar.ERA), 1);
1223
1224        assertEquals(cal.get(Calendar.YEAR), 1970);
1225        assertEquals(cal.get(Calendar.MONTH), 0);
1226        assertEquals(cal.get(Calendar.DAY_OF_MONTH), 1);
1227        assertEquals(cal.get(Calendar.HOUR_OF_DAY), 0);
1228        assertEquals(cal.get(Calendar.MINUTE), 10);
1229        assertEquals(cal.get(Calendar.SECOND), 33);
1230    }
1231
1232    @TestTargetNew(
1233        level = TestLevel.COMPLETE,
1234        notes = "",
1235        method = "setFirstDayOfWeek",
1236        args = {int.class}
1237    )
1238    public void test_setFirstDayOfWeekI() {
1239        Calendar cal = Calendar.getInstance();
1240
1241        for (int i = 0; i < 10; i++) {
1242            cal.setFirstDayOfWeek(i);
1243            assertEquals(i, cal.getFirstDayOfWeek());
1244        }
1245        cal.setLenient(false);
1246        cal.setFirstDayOfWeek(10);
1247        cal.setFirstDayOfWeek(-10);
1248    }
1249
1250    @TestTargetNew(
1251        level = TestLevel.COMPLETE,
1252        notes = "",
1253        method = "setMinimalDaysInFirstWeek",
1254        args = {int.class}
1255    )
1256    public void test_setMinimalDaysInFirstWeekI() {
1257        Calendar cal = Calendar.getInstance();
1258
1259        for (int i = 0; i < 10; i++) {
1260            cal.setMinimalDaysInFirstWeek(i);
1261            assertEquals(i, cal.getMinimalDaysInFirstWeek());
1262        }
1263        cal.setLenient(false);
1264        cal.setMinimalDaysInFirstWeek(10);
1265        cal.setMinimalDaysInFirstWeek(-10);
1266    }
1267
1268    @TestTargetNew(
1269        level = TestLevel.COMPLETE,
1270        notes = "",
1271        method = "setTimeZone",
1272        args = {java.util.TimeZone.class}
1273    )
1274    public void test_setTimeZoneLjava_util_TimeZone() {
1275        Calendar cal = Calendar.getInstance();
1276        cal.setTimeZone(TimeZone.getTimeZone("GMT-6"));
1277        assertEquals(TimeZone.getTimeZone("GMT-6"), cal.getTimeZone());
1278        cal = Calendar.getInstance(TimeZone.getTimeZone("GMT-8"));
1279        cal.setTimeZone(TimeZone.getTimeZone("GMT-6"));
1280        assertEquals(TimeZone.getTimeZone("GMT-6"), cal.getTimeZone());
1281
1282        cal.setTimeZone(null);
1283    }
1284
1285    @TestTargetNew(
1286        level = TestLevel.COMPLETE,
1287        notes = "",
1288        method = "toString",
1289        args = {}
1290    )
1291    public void test_toString() {
1292        Calendar cal1 = Calendar.getInstance();
1293        Calendar cal2 = Calendar.getInstance();
1294        cal1.setTimeZone(TimeZone.getTimeZone("GMT-6"));
1295        cal2.setTimeZone(TimeZone.getTimeZone("GMT-8"));
1296        cal1.set(Calendar.MILLISECOND, 0);
1297        cal2.set(Calendar.MILLISECOND, 0);
1298        assertFalse(cal1.toString().equals(cal2.toString()));
1299        cal1.setTimeZone(TimeZone.getTimeZone("GMT-8"));
1300        assertTrue(cal1.toString().equals(cal2.toString()));
1301    }
1302
1303    @TestTargetNew(
1304        level = TestLevel.ADDITIONAL,
1305        method = "get",
1306        args = {int.class}
1307    )
1308    public void test_EdgeCases() {
1309        Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
1310
1311        c.setTimeInMillis(Long.MAX_VALUE);
1312
1313        assertEquals(292278994, c.get(Calendar.YEAR));
1314        assertEquals(Calendar.AUGUST, c.get(Calendar.MONTH));
1315        assertEquals(17, c.get(Calendar.DAY_OF_MONTH));
1316        assertEquals(Calendar.SUNDAY, c.get(Calendar.DAY_OF_WEEK));
1317        assertEquals(7, c.get(Calendar.HOUR_OF_DAY));
1318        assertEquals(12, c.get(Calendar.MINUTE));
1319        assertEquals(55, c.get(Calendar.SECOND));
1320    }
1321
1322    protected void setUp() {
1323        defaultLocale = Locale.getDefault();
1324        Locale.setDefault(Locale.US);
1325    }
1326
1327    protected void tearDown() {
1328        Locale.setDefault(defaultLocale);
1329    }
1330}
1331