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