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