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