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 java.util.Calendar;
21import java.util.Date;
22import java.util.GregorianCalendar;
23import java.util.Locale;
24import java.util.TimeZone;
25
26public class DateTest extends junit.framework.TestCase {
27
28    /**
29     * java.util.Date#Date()
30     */
31    public void test_Constructor() {
32        // Test for method java.util.Date()
33        GregorianCalendar gc = new GregorianCalendar(1998, Calendar.OCTOBER,
34                13, 19, 9);
35        long oldTime = gc.getTime().getTime();
36        long now = new Date().getTime();
37        assertTrue("Created incorrect date: " + oldTime + " now: " + now,
38                oldTime < now);
39    }
40
41    /**
42     * java.util.Date#Date(int, int, int)
43     */
44    public void test_ConstructorIII() {
45        // Test for method java.util.Date(int, int, int)
46        Date d1 = new Date(70, 0, 1); // the epoch + local time
47
48        // the epoch + local time
49        Date d2 = new Date(0 + d1.getTimezoneOffset() * 60 * 1000);
50
51        assertTrue("Created incorrect date", d1.equals(d2));
52
53        Date date = new Date(99, 5, 22);
54        Calendar cal = new GregorianCalendar(1999, Calendar.JUNE, 22);
55        assertTrue("Wrong time zone", date.equals(cal.getTime()));
56    }
57
58    /**
59     * java.util.Date#Date(int, int, int, int, int)
60     */
61    public void test_ConstructorIIIII() {
62        // Test for method java.util.Date(int, int, int, int, int)
63
64        // the epoch + local time + (1 hour and 1 minute)
65        Date d1 = new Date(70, 0, 1, 1, 1);
66
67        // the epoch + local time + (1 hour and 1 minute)
68        Date d2 = new Date(0 + d1.getTimezoneOffset() * 60 * 1000 + 60 * 60
69                * 1000 + 60 * 1000);
70
71        assertTrue("Created incorrect date", d1.equals(d2));
72    }
73
74    /**
75     * java.util.Date#Date(int, int, int, int, int, int)
76     */
77    public void test_ConstructorIIIIII() {
78        // Test for method java.util.Date(int, int, int, int, int, int)
79
80        // the epoch + local time + (1 hour and 1 minute + 1 second)
81        Date d1 = new Date(70, 0, 1, 1, 1, 1);
82
83        // the epoch + local time + (1 hour and 1 minute + 1 second)
84        Date d2 = new Date(0 + d1.getTimezoneOffset() * 60 * 1000 + 60 * 60
85                * 1000 + 60 * 1000 + 1000);
86
87        assertTrue("Created incorrect date", d1.equals(d2));
88    }
89
90    /**
91     * java.util.Date#Date(long)
92     */
93    public void test_ConstructorJ() {
94        // Test for method java.util.Date(long)
95        assertTrue("Used to test", true);
96    }
97
98    /**
99     * java.util.Date#Date(java.lang.String)
100     */
101    public void test_ConstructorLjava_lang_String() {
102        // Test for method java.util.Date(java.lang.String)
103        Date d1 = new Date("January 1, 1970, 00:00:00 GMT"); // the epoch
104        Date d2 = new Date(0); // the epoch
105        assertTrue("Created incorrect date", d1.equals(d2));
106
107        try {
108            // Regression for HARMONY-238
109            new Date(null);
110            fail("Constructor Date((String)null) should "
111                + "throw IllegalArgumentException");
112        } catch (IllegalArgumentException e) {
113            // expected
114        }
115    }
116
117    /**
118     * java.util.Date#after(java.util.Date)
119     */
120    public void test_afterLjava_util_Date() {
121        // Test for method boolean java.util.Date.after(java.util.Date)
122        Date d1 = new Date(0);
123        Date d2 = new Date(1900000);
124        assertTrue("Older was returned as newer", d2.after(d1));
125        assertTrue("Newer was returned as older", !d1.after(d2));
126
127        try {
128            d1.after(null);
129            fail("NullPointerException expected");
130        } catch (NullPointerException e) {
131            //expected
132        }
133    }
134
135    /**
136     * java.util.Date#before(java.util.Date)
137     */
138    public void test_beforeLjava_util_Date() {
139        // Test for method boolean java.util.Date.before(java.util.Date)
140        Date d1 = new Date(0);
141        Date d2 = new Date(1900000);
142        assertTrue("Older was returned as newer", !d2.before(d1));
143        assertTrue("Newer was returned as older", d1.before(d2));
144
145        try {
146            d1.before(null);
147            fail("NullPointerException expected");
148        } catch (NullPointerException e) {
149            //expected
150        }
151    }
152
153    /**
154     * java.util.Date#clone()
155     */
156    public void test_clone() {
157        // Test for method java.lang.Object java.util.Date.clone()
158        Date d1 = new Date(100000);
159        Date d2 = (Date) d1.clone();
160        assertTrue(
161                "Cloning date results in same reference--new date is equivalent",
162                d1 != d2);
163        assertTrue("Cloning date results unequal date", d1.equals(d2));
164    }
165
166    /**
167     * java.util.Date#compareTo(java.util.Date)
168     */
169    public void test_compareToLjava_util_Date() {
170        // Test for method int java.util.Date.compareTo(java.util.Date)
171        final int someNumber = 10000;
172        Date d1 = new Date(someNumber);
173        Date d2 = new Date(someNumber);
174        Date d3 = new Date(someNumber + 1);
175        Date d4 = new Date(someNumber - 1);
176        assertEquals("Comparing a date to itself did not answer zero", 0, d1
177                .compareTo(d1));
178        assertEquals("Comparing equal dates did not answer zero", 0, d1
179                .compareTo(d2));
180        assertEquals("date1.compareTo(date2), where date1 > date2, did not result in 1",
181                1, d1.compareTo(d4));
182        assertEquals("date1.compareTo(date2), where date1 < date2, did not result in -1",
183                -1, d1.compareTo(d3));
184
185        try {
186            d1.compareTo(null);
187            fail("NullPointerException expected");
188        } catch (NullPointerException e) {
189            //expected
190        }
191    }
192
193    /**
194     * java.util.Date#equals(java.lang.Object)
195     */
196    public void test_equalsLjava_lang_Object() {
197        // Test for method boolean java.util.Date.equals(java.lang.Object)
198        Date d1 = new Date(0);
199        Date d2 = new Date(1900000);
200        Date d3 = new Date(1900000);
201        assertTrue("Equality test failed", d2.equals(d3));
202        assertTrue("Equality test failed", !d1.equals(d2));
203    }
204
205    /**
206     * java.util.Date#getDate()
207     */
208    public void test_getDate() {
209        // Test for method int java.util.Date.getDate()
210        Date d = new GregorianCalendar(1998, Calendar.OCTOBER, 13, 19, 9)
211                .getTime();
212        assertEquals("Returned incorrect date", 13, d.getDate());
213    }
214
215    /**
216     * java.util.Date#getDay()
217     */
218    public void test_getDay() {
219        // Test for method int java.util.Date.getDay()
220        Date d = new GregorianCalendar(1998, Calendar.OCTOBER, 13, 19, 9)
221                .getTime();
222        assertEquals("Returned incorrect day", 2, d.getDay());
223    }
224
225    /**
226     * java.util.Date#getHours()
227     */
228    public void test_getHours() {
229        // Test for method int java.util.Date.getHours()
230        Date d = new GregorianCalendar(1998, Calendar.OCTOBER, 13, 19, 9)
231                .getTime();
232        assertEquals("Returned incorrect hours", 19, d.getHours());
233    }
234
235    /**
236     * java.util.Date#getMinutes()
237     */
238    public void test_getMinutes() {
239        // Test for method int java.util.Date.getMinutes()
240        Date d = new GregorianCalendar(1998, Calendar.OCTOBER, 13, 19, 9)
241                .getTime();
242        assertEquals("Returned incorrect minutes", 9, d.getMinutes());
243    }
244
245    /**
246     * java.util.Date#getMonth()
247     */
248    public void test_getMonth() {
249        // Test for method int java.util.Date.getMonth()
250        Date d = new GregorianCalendar(1998, Calendar.OCTOBER, 13, 19, 9)
251                .getTime();
252        assertEquals("Returned incorrect month", 9, d.getMonth());
253    }
254
255    /**
256     * java.util.Date#getSeconds()
257     */
258    public void test_getSeconds() {
259        // Test for method int java.util.Date.getSeconds()
260        Date d = new GregorianCalendar(1998, Calendar.OCTOBER, 13, 19, 9)
261                .getTime();
262        assertEquals("Returned incorrect seconds", 0, d.getSeconds());
263    }
264
265    /**
266     * java.util.Date#getTime()
267     */
268    public void test_getTime() {
269        // Test for method long java.util.Date.getTime()
270        Date d1 = new Date(0);
271        Date d2 = new Date(1900000);
272        assertEquals("Returned incorrect time", 1900000, d2.getTime());
273        assertEquals("Returned incorrect time", 0, d1.getTime());
274    }
275
276    /**
277     * java.util.Date#getTimezoneOffset()
278     */
279    public void test_getTimezoneOffset() {
280        // Test for method int java.util.Date.getTimezoneOffset()
281        assertTrue("Used to test", true);
282        int offset = new Date(96, 1, 14).getTimezoneOffset();
283        assertTrue(offset > -720 && offset < 720);
284    }
285
286    /**
287     * java.util.Date#getYear()
288     */
289    public void test_getYear() {
290        // Test for method int java.util.Date.getYear()
291        Date d = new GregorianCalendar(1998, Calendar.OCTOBER, 13, 19, 9)
292                .getTime();
293        assertEquals("Returned incorrect year", 98, d.getYear());
294    }
295
296    /**
297     * java.util.Date#hashCode()
298     */
299    public void test_hashCode() {
300        // Test for method int java.util.Date.hashCode()
301        Date d1 = new Date(0);
302        Date d2 = new Date(1900000);
303        assertEquals("Returned incorrect hash", 1900000, d2.hashCode());
304        assertEquals("Returned incorrect hash", 0, d1.hashCode());
305    }
306
307    /**
308     * java.util.Date#parse(java.lang.String)
309     */
310    public void test_parseLjava_lang_String() {
311        // Test for method long java.util.Date.parse(java.lang.String)
312        Date d = new Date(Date.parse("13 October 1998"));
313        GregorianCalendar cal = new GregorianCalendar();
314        cal.setTime(d);
315        assertEquals("Parsed incorrect month", 9, cal.get(Calendar.MONTH));
316        assertEquals("Parsed incorrect year", 1998, cal.get(Calendar.YEAR));
317        assertEquals("Parsed incorrect date", 13, cal.get(Calendar.DATE));
318
319        d = new Date(Date.parse("Jan-12 1999"));
320        assertTrue("Wrong parsed date 1", d.equals(new GregorianCalendar(1999,
321                0, 12).getTime()));
322        d = new Date(Date.parse("Jan12-1999"));
323        assertTrue("Wrong parsed date 2", d.equals(new GregorianCalendar(1999,
324                0, 12).getTime()));
325        d = new Date(Date.parse("Jan12 69-1"));
326        cal.setTimeZone(TimeZone.getTimeZone("GMT"));
327        cal.clear();
328        cal.set(1969, Calendar.JANUARY, 12, 1, 0);
329        assertTrue("Wrong parsed date 3", d.equals(cal.getTime()));
330        d = new Date(Date.parse("6:45:13 3/2/1200 MST"));
331        cal.setTimeZone(TimeZone.getTimeZone("MST"));
332        cal.clear();
333        cal.set(1200, 2, 2, 6, 45, 13);
334        assertTrue("Wrong parsed date 4", d.equals(cal.getTime()));
335        d = new Date(Date.parse("Mon, 22 Nov 1999 12:52:06 GMT"));
336        cal.setTimeZone(TimeZone.getTimeZone("GMT"));
337        cal.clear();
338        cal.set(1999, Calendar.NOVEMBER, 22, 12, 52, 06);
339        assertTrue("Wrong parsed date 5", d.equals(cal.getTime()));
340
341        try {
342            // Regression for HARMONY-259
343            Date.parse(null);
344            fail("Date.parse(null) should throw IllegalArgumentException");
345        } catch (IllegalArgumentException e) {
346            // expected
347        }
348    }
349
350    /**
351     * java.util.Date#setDate(int)
352     */
353    public void test_setDateI() {
354        // Test for method void java.util.Date.setDate(int)
355        Date d = new GregorianCalendar(1998, Calendar.OCTOBER, 13, 19, 9)
356                .getTime();
357        d.setDate(23);
358        assertEquals("Set incorrect date", 23, d.getDate());
359    }
360
361    /**
362     * java.util.Date#setHours(int)
363     */
364    public void test_setHoursI() {
365        // Test for method void java.util.Date.setHours(int)
366        Date d = new GregorianCalendar(1998, Calendar.OCTOBER, 13, 19, 9)
367                .getTime();
368        d.setHours(23);
369        assertEquals("Set incorrect hours", 23, d.getHours());
370    }
371
372    /**
373     * java.util.Date#setMinutes(int)
374     */
375    public void test_setMinutesI() {
376        // Test for method void java.util.Date.setMinutes(int)
377        Date d = new GregorianCalendar(1998, Calendar.OCTOBER, 13, 19, 9)
378                .getTime();
379        d.setMinutes(45);
380        assertEquals("Set incorrect mins", 45, d.getMinutes());
381    }
382
383    /**
384     * java.util.Date#setMonth(int)
385     */
386    public void test_setMonthI() {
387        // Test for method void java.util.Date.setMonth(int)
388        Date d = new GregorianCalendar(1998, Calendar.OCTOBER, 13, 19, 9)
389                .getTime();
390        d.setMonth(0);
391        assertEquals("Set incorrect month", 0, d.getMonth());
392    }
393
394    /**
395     * java.util.Date#setSeconds(int)
396     */
397    public void test_setSecondsI() {
398        // Test for method void java.util.Date.setSeconds(int)
399        Date d = new GregorianCalendar(1998, Calendar.OCTOBER, 13, 19, 9)
400                .getTime();
401        d.setSeconds(13);
402        assertEquals("Set incorrect seconds", 13, d.getSeconds());
403    }
404
405    /**
406     * java.util.Date#setTime(long)
407     */
408    public void test_setTimeJ() {
409        // Test for method void java.util.Date.setTime(long)
410        Date d1 = new Date(0);
411        Date d2 = new Date(1900000);
412        d1.setTime(900);
413        d2.setTime(890000);
414        assertEquals("Returned incorrect time", 890000, d2.getTime());
415        assertEquals("Returned incorrect time", 900, d1.getTime());
416    }
417
418    /**
419     * java.util.Date#setYear(int)
420     */
421    public void test_setYearI() {
422        // Test for method void java.util.Date.setYear(int)
423        Date d = new GregorianCalendar(1998, Calendar.OCTOBER, 13, 19, 9)
424                .getTime();
425        d.setYear(8);
426        assertEquals("Set incorrect year", 8, d.getYear());
427    }
428
429    /**
430     * java.util.Date#toGMTString()
431     */
432    public void test_toGMTString() {
433        // Test for method java.lang.String java.util.Date.toGMTString()
434        assertEquals("Did not convert epoch to GMT string correctly", "1 Jan 1970 00:00:00 GMT", new Date(0)
435                .toGMTString());
436        assertEquals("Did not convert epoch + 1yr to GMT string correctly",
437                "1 Jan 1971 00:00:00 GMT", new Date((long) 365 * 24 * 60 * 60 * 1000).toGMTString()
438                        );
439    }
440
441    /**
442     * java.util.Date#toString()
443     */
444    public void test_toString() {
445        // Test for method java.lang.String java.util.Date.toString()
446        Calendar cal = Calendar.getInstance();
447        cal.set(Calendar.DATE, 1);
448        cal.set(Calendar.MONTH, Calendar.JANUARY);
449        cal.set(Calendar.YEAR, 1970);
450        cal.set(Calendar.HOUR_OF_DAY, 0);
451        cal.set(Calendar.MINUTE, 0);
452        cal.set(Calendar.SECOND, 0);
453        Date d = cal.getTime();
454        String result = d.toString();
455        assertTrue("Incorrect result: " + d, result
456                .startsWith("Thu Jan 01 00:00:00")
457                && result.endsWith("1970"));
458
459        TimeZone tz = TimeZone.getDefault();
460        TimeZone.setDefault(TimeZone.getTimeZone("GMT-5"));
461        try {
462            Date d1 = new Date(0);
463            assertTrue("Returned incorrect string: " + d1, d1.toString()
464                    .equals("Wed Dec 31 19:00:00 GMT-05:00 1969"));
465        } finally {
466            TimeZone.setDefault(tz);
467        }
468    }
469
470    /**
471     * java.util.Date#UTC(int, int, int, int, int, int)
472     */
473    public void test_UTCIIIIII() {
474        // Test for method long java.util.Date.UTC(int, int, int, int, int, int)
475        assertTrue("Returned incorrect UTC value for epoch", Date.UTC(70, 0, 1,
476                0, 0, 0) == (long) 0);
477        assertTrue("Returned incorrect UTC value for epoch +1yr", Date.UTC(71,
478                0, 1, 0, 0, 0) == (long) 365 * 24 * 60 * 60 * 1000);
479    }
480    /**
481     * java.util.Date#toLocaleString() Test for method java.lang.String
482     *        java.util.Date.toGMTString()
483     */
484    public void test_toLocaleString() {
485        Locale loc = Locale.getDefault();
486        Locale.setDefault(Locale.US);
487    TimeZone tz = TimeZone.getDefault();
488    TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
489    try {
490            assertEquals("Did not convert epoch to GMT string correctly", "Jan 1, 1970 12:00:00 AM",
491                new Date(0).toLocaleString());
492            assertEquals("Did not convert epoch + 1yr to GMT string correctly",
493                "Jan 1, 1971 12:00:00 AM", new Date((long)365 * 24 * 60 * 60 * 1000)
494                        .toLocaleString());
495    } finally {
496            Locale.setDefault(loc);
497        TimeZone.setDefault(tz);
498    }
499    }
500
501    /**
502     * Sets up the fixture, for example, open a network connection. This method
503     * is called before a test is executed.
504     */
505    protected void setUp() {
506    }
507
508    /**
509     * Tears down the fixture, for example, close a network connection. This
510     * method is called after a test is executed.
511     */
512    protected void tearDown() {
513    }
514}
515