blob: 6567011bc0bec57157ad2368869c2da8d0cff645 [file] [log] [blame]
/*
* Copyright 2008 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.emultest.java.util;
import com.google.gwt.junit.client.GWTTestCase;
import com.google.gwt.testing.TestUtils;
import java.util.ArrayList;
import java.util.Date;
/**
* Tests for GWT's emulation of the JRE Date class.
*/
@SuppressWarnings("deprecation")
public class DateTest extends GWTTestCase {
public static final String CURRENT = "CURRENT";
public static final String TO_STRING_PATTERN = "\\w{3} \\w{3} \\d{2} \\d{2}:\\d{2}:\\d{2}( .+)? \\d{4}";
public static final long DAY_MILLISECONDS_SHIFT = 27;
public static final String FUTURE = "FUTURE";
public static final String PAST = "PAST";
public static final long SECOND_MILLISECONDS_SHIFT = 10;
Date theDate = new Date();
/**
* Sets module name so that javascript compiler can operate.
*/
@Override
public String getModuleName() {
return "com.google.gwt.emultest.EmulSuite";
}
/** Testing for public boolean java.util.Date.after(java.util.Date). */
public void testAfter() {
// /////////////////////////////
// Current
// /////////////////////////////
Date accum0 = create();
Date arg10 = create();
boolean a0 = accum0.after(arg10);
assertFalse(a0);
// /////////////////////////////
// Past
// /////////////////////////////
Date accum1 = create(PAST);
Date arg20 = create();
boolean a1 = accum1.after(arg20);
assertFalse(a1);
// /////////////////////////////
// Future
// /////////////////////////////
Date accum2 = create(FUTURE);
Date arg30 = create();
boolean a2 = accum2.after(arg30);
assertTrue(a2);
}
/** Testing for public boolean java.util.Date.before(java.util.Date). */
public void testBefore() {
// /////////////////////////////
// Current
// /////////////////////////////
Date accum0 = create();
Date arg10 = create();
boolean a0 = accum0.before(arg10);
assertFalse(a0);
// /////////////////////////////
// Past
// /////////////////////////////
Date accum1 = create(PAST);
Date arg20 = create();
boolean a1 = accum1.before(arg20);
assertTrue(a1);
// /////////////////////////////
// Future
// /////////////////////////////
Date accum2 = create(FUTURE);
Date arg30 = create();
boolean a2 = accum2.before(arg30);
assertFalse(a2);
}
/**
* Tests that if daylight savings time occurs tomorrow, the current date isn't
* affected.
*/
public void testClockForwardNextDay() {
int[] monthDayHour = new int[3];
if (!findClockForwardTime(2009, monthDayHour)) {
return;
}
int month = monthDayHour[0];
int day = monthDayHour[1] - 1; // Day before.
int hour = monthDayHour[2];
Date d = new Date(2009 - 1900, month, day, hour, 0, 0);
assertEquals(day, d.getDate());
assertEquals(hour, d.getHours());
// Change the minutes, which triggers fixDaylightSavings.
d.setMinutes(10);
assertEquals(day, d.getDate());
assertEquals(hour, d.getHours());
// Change the seconds, which triggers fixDaylightSavings.
d.setSeconds(10);
assertEquals(day, d.getDate());
assertEquals(hour, d.getHours());
// Change the minutes by more than an hour.
d.setMinutes(80);
assertEquals(day, d.getDate());
assertEquals(hour + 1, d.getHours());
}
/** Testing for public java.lang.Object java.util.Date.clone(). */
public void testClone() {
// /////////////////////////////
// Current
// /////////////////////////////
Date accum0 = create();
Object a0 = accum0.clone();
assertFalse(a0 == accum0);
assertEquals(a0, accum0);
// /////////////////////////////
// Past
// /////////////////////////////
Date accum1 = create(PAST);
Object a1 = accum1.clone();
assertFalse(a1 == accum1);
assertEquals(a1, accum1);
// /////////////////////////////
// Future
// /////////////////////////////
Date accum2 = create(FUTURE);
Object a2 = accum2.clone();
assertFalse(a2 == accum2);
assertEquals(a2, accum2);
}
/** Testing for public int java.util.Date.compareTo(java.util.Date). */
public void testCompareTo() {
// /////////////////////////////
// Current
// /////////////////////////////
Date accum0 = create();
Date arg10 = create();
int a0 = accum0.compareTo(arg10);
assertEquals(0, a0);
// /////////////////////////////
// Past
// /////////////////////////////
Date accum1 = create();
Date arg20 = create(PAST);
int a1 = accum1.compareTo(arg20);
assertEquals(1, a1);
// /////////////////////////////
// Future
// /////////////////////////////
Date accum2 = create();
Date arg30 = create(FUTURE);
int a2 = accum2.compareTo(arg30);
assertEquals(-1, a2);
}
/** Testing for public int java.util.Date.getDate(). */
public void testGetDate() {
// /////////////////////////////
// Past
// /////////////////////////////
Date accum1 = create(PAST);
int a1 = accum1.getDate();
int expectedValue = 5;
if (needsToChangeDate(accum1, 0)) {
expectedValue--;
}
assertEquals(expectedValue, a1);
// /////////////////////////////
// Future
// /////////////////////////////
Date accum2 = create(FUTURE);
int a2 = accum2.getDate();
expectedValue = 30;
if (needsToChangeDate(accum2, 3 * 60 + 4)) {
expectedValue--;
}
assertEquals(expectedValue, a2);
}
private boolean needsToChangeDate(Date d, int minuteOffset) {
int timezoneOffset = d.getTimezoneOffset();
return timezoneOffset > minuteOffset;
}
/** Testing for public int java.util.Date.getDay(). */
public void testGetDay() {
// /////////////////////////////
// Current
// /////////////////////////////
Date accum0 = create();
int a0 = accum0.getDay();
// /////////////////////////////
// Past
// /////////////////////////////
Date accum1 = create(PAST);
int a1 = accum1.getDay();
// /////////////////////////////
// Future
// /////////////////////////////
Date accum2 = create(FUTURE);
int a2 = accum2.getDay();
}
/** Testing for public int java.util.Date.getHours(). */
public void testGetHours() {
// Cannot be done because each time zone will give a different
// answer
}
/** Testing for public int java.util.Date.getMinutes(). */
public void testGetMinutes() {
// /////////////////////////////
// Past
// /////////////////////////////
Date accum1 = create(PAST);
int a1 = accum1.getMinutes();
assertEquals(0, a1);
// /////////////////////////////
// Future
// /////////////////////////////
Date accum2 = create(FUTURE);
int a2 = accum2.getMinutes();
assertEquals(4, a2);
}
/** Testing for public int java.util.Date.getMonth(). */
public void testGetMonth() {
// /////////////////////////////
// Past
// /////////////////////////////
Date accum1 = create(PAST);
int a1 = accum1.getMonth();
assertEquals(0, a1);
// /////////////////////////////
// Future
// /////////////////////////////
Date accum2 = create(FUTURE);
int a2 = accum2.getMonth();
assertEquals(11, a2);
}
/** Testing for public int java.util.Date.getSeconds(). */
public void testGetSeconds() {
// /////////////////////////////
// Past
// /////////////////////////////
Date accum1 = create(PAST);
int a1 = accum1.getSeconds();
assertEquals(0, a1);
// /////////////////////////////
// Future
// /////////////////////////////
Date accum2 = create(FUTURE);
int a2 = accum2.getSeconds();
assertEquals(5, a2);
}
/** Testing for public long java.util.Date.getTime(). */
public void testGetTime() {
// /////////////////////////////
// Past
// /////////////////////////////
Date accum1 = create(PAST);
long a1 = accum1.getTime();
assertEquals(-2524176000000L, a1);
// /////////////////////////////
// Future
// /////////////////////////////
Date accum2 = create(FUTURE);
long a2 = accum2.getTime();
assertEquals(1924830245000L, a2);
}
/** Testing for public int java.util.Date.getTimezoneOffset(). */
public void testGetTimezoneOffset() {
// /////////////////////////////
// Current
// /////////////////////////////
Date accum0 = create();
int a0 = accum0.getTimezoneOffset();
// /////////////////////////////
// Past
// /////////////////////////////
Date accum1 = create(PAST);
int a1 = accum1.getTimezoneOffset();
// /////////////////////////////
// Future
// /////////////////////////////
Date accum2 = create(FUTURE);
int a2 = accum2.getTimezoneOffset();
}
/** Testing for public int java.util.Date.getYear(). */
public void testGetYear() {
// /////////////////////////////
// Past
// /////////////////////////////
Date accum1 = create(PAST);
int a1 = accum1.getYear();
assertEquals(-10, a1);
// /////////////////////////////
// Future
// /////////////////////////////
Date accum2 = create(FUTURE);
int a2 = accum2.getYear();
assertEquals(130, a2);
}
/**
* Testing to that if we set the day number to 31 for a month that only has 30
* days in it, that the date rolls over to the first day of the next month in
* sequence.
*/
public void testInvalidDateForMonth() {
int monthNum = 3; // April
int numDaysInOldMonth = 30;
int newDayNum = 31;
Date dateWithThirtyDays = new Date(2006, monthNum, 30);
dateWithThirtyDays.setDate(newDayNum);
assertEquals(dateWithThirtyDays.getMonth(), monthNum + 1);
assertEquals(dateWithThirtyDays.getDate(), newDayNum - numDaysInOldMonth);
}
/** Testing for public static long java.util.Date.parse(java.lang.String). */
public void testParse() {
try {
Date.parse(null);
fail("Should have thrown exception");
} catch (IllegalArgumentException e) {
// Expected
}
try {
Date.parse("");
} catch (IllegalArgumentException e) {
// Expected
}
// /////////////////////////////
// Current
// /////////////////////////////
Date accum0 = create();
String arg10 = createString(CURRENT);
long a0 = Date.parse(arg10);
assertEquals(roundToDay(accum0.getTime()), roundToDay(a0));
// /////////////////////////////
// Past
// /////////////////////////////
Date accum1 = create(PAST);
String arg20 = createString(PAST);
long a1 = Date.parse(arg20);
assertEquals(-2524521600000L, a1);
// /////////////////////////////
// Future
// /////////////////////////////
Date accum2 = create(FUTURE);
String arg30 = createString(FUTURE);
long a2 = Date.parse(arg30);
assertEquals(1924830245000L, a2);
}
/** Testing for public void java.util.Date.setDate(int). */
public void testSetDate() {
// We only go through dates from 0-28 here. There are some months that do
// not
// have 29, 30, or 31 days - so our assertion would be wrong in the cases
// where
// the current month did not have 29,30,or 31 days
for (int i = 1; i < 29; i++) {
Date accum0 = create();
accum0.setDate(i);
assertEquals(accum0.getDate(), i);
}
}
/** Testing for public void java.util.Date.setHours(int). */
public void testSetHours() {
for (int i = 0; i < 24; i++) {
Date accum0 = create();
if (isDst(accum0)) {
// This test fails on the day of DST, so skip it.
return;
}
accum0.setHours(i);
assertEquals(accum0.getHours(), i);
}
}
/**
* We want to test to see that if we are currently in a month with 31 days and
* we set the month to one which has less than 31 days, that the month
* returned by the date class will be one higher than the month that we
* originally set (according to the spec of java.util.date).
*/
public void testSetInvalidMonthForDate() {
int dayNum = 31;
int newMonthNum = 1;
int numDaysInNewMonth = 28;
Date dateWithThirtyOneDays = new Date(2006, 12, dayNum);
dateWithThirtyOneDays.setMonth(newMonthNum);
assertEquals(dateWithThirtyOneDays.getMonth(), newMonthNum + 1);
assertEquals(dateWithThirtyOneDays.getDate(), dayNum - numDaysInNewMonth);
}
/**
* We want to test to see that if the date is Feb 29th (in a leap year) and we
* set the year to a non-leap year, that the month and day will roll over to
* March 1st.
*/
public void testSetInvalidYearForDate() {
int dayNum = 29;
int monthNum = 1; // February
int newYearNum = 2005;
int numDaysInFebInNewYear = 28;
Date leapYearDate = new Date(2004, monthNum, dayNum);
leapYearDate.setYear(newYearNum);
assertEquals(leapYearDate.getYear(), newYearNum);
assertEquals(leapYearDate.getMonth(), monthNum + 1);
assertEquals(leapYearDate.getDate(), dayNum - numDaysInFebInNewYear);
}
/** Testing for public void java.util.Date.setMinutes(int). */
public void testSetMinutes() {
for (int i = 0; i < 24; i++) {
Date accum0 = create();
accum0.setMinutes(i);
assertEquals(accum0.getMinutes(), i);
}
}
/** Testing for public void java.util.Date.setMonth(int). */
public void testSetMonth() {
for (int i = 0; i < 12; i++) {
// We want to use a fixed date here. If we use the current date, the
// assertion may fail
// when the date is the 29th, 30th, or 31st, and we set the month to one
// which does
// not have 29, 30, or 31 days in it, respectively.
Date accum0 = new Date(2006, 12, 1);
accum0.setMonth(i);
assertEquals(accum0.getMonth(), i);
}
}
/** Testing for public void java.util.Date.setSeconds(int). */
public void testSetSeconds() {
for (int i = 0; i < 24; i++) {
Date accum0 = create();
accum0.setSeconds(i);
assertEquals(accum0.getSeconds(), i);
}
}
/** Testing for public void java.util.Date.setTime(long). */
public void testSetTime() {
long[] values = new long[] {-100000000000L, -100L, 0, 100L, 1000000000L};
for (int i = 0; i < values.length; i++) {
Date accum0 = create();
accum0.setTime(values[i]);
assertEquals(accum0.getTime(), values[i]);
}
}
/**
* We want to test to see that if the date is Feb 29th (in a leap year) and we
* set the year to another leap year, that the month and day will be retained.
*/
public void testSetValidLeapYearForDate() {
int dayNum = 29;
int monthNum = 1; // February
int yearNum = 2004;
int newYearNum = yearNum + 4;
Date leapYearDate = new Date(yearNum, monthNum, dayNum);
leapYearDate.setYear(newYearNum);
assertEquals(leapYearDate.getYear(), newYearNum);
assertEquals(leapYearDate.getMonth(), monthNum);
assertEquals(leapYearDate.getDate(), dayNum);
}
/** Testing for public void java.util.Date.setYear(int). */
public void testSetYear() {
for (int i = 1880; i < 2030; i++) {
// We want to use a fixed date here. If we use the current date, the
// assertion may fail
// when the date is February 29th, and we set the year to a non-leap year
Date accum0 = new Date(2006, 12, 01);
accum0.setYear(i);
assertEquals(accum0.getYear(), i);
}
}
/** Testing for public java.lang.String java.util.Date.toGMTString(). */
public void testToGMTString() {
// We can't rely on the JRE's toString, as it is an implementation detail.
if (!TestUtils.isJvm()) {
// /////////////////////////////
// Past
// /////////////////////////////
Date accum1 = create(PAST);
String a1 = accum1.toGMTString();
assertEquals("5 Jan 1890 00:00:00 GMT", a1);
// /////////////////////////////
// Future
// /////////////////////////////
Date accum2 = create(FUTURE);
String a2 = accum2.toGMTString();
assertEquals("30 Dec 2030 03:04:05 GMT", a2);
}
}
/** Testing for public java.lang.String java.util.Date.toLocaleString(). */
public void testToLocaleString() {
// We can't rely on the JRE's toString, as it is an implementation detail.
if (!TestUtils.isJvm()) {
// /////////////////////////////
// Past
// /////////////////////////////
Date accum1 = create(PAST);
String a1 = accum1.toLocaleString();
assertTrue(a1.indexOf("1890") != -1);
// /////////////////////////////
// Future
// /////////////////////////////
Date accum2 = create(FUTURE);
String a2 = accum2.toLocaleString();
assertTrue(a2.indexOf("2030") != -1);
}
}
/** Date docs specify an exact format for toString(). */
public void testToString() {
// We can't rely on the JRE's toString, as it is an implementation detail.
if (!TestUtils.isJvm()) {
// /////////////////////////////
// Past
// /////////////////////////////
Date d = create(PAST);
String s = d.toString();
assertTrue("Bad format " + s, s.matches(TO_STRING_PATTERN));
assertEquals("Parsing returned unequal dates from " + s, d, new Date(
Date.parse(s)));
// /////////////////////////////
// Future
// /////////////////////////////
d = create(FUTURE);
s = d.toString();
assertTrue("Bad format " + s, s.matches(TO_STRING_PATTERN));
assertEquals("Parsing returned unequal dates from " + s, d, new Date(
Date.parse(s)));
}
}
/** Testing for public static long java.util.Date.UTC(int,int,int,int,int,int). */
public void testUTC() {
// /////////////////////////////
// Current
// /////////////////////////////
Date accum0 = create();
int arg10 = 0;
int arg11 = 0;
int arg12 = 0;
int arg13 = 0;
int arg14 = 0;
int arg15 = 0;
long a0 = accum0.UTC(arg10, arg11, arg12, arg13, arg14, arg15);
// /////////////////////////////
// Past
// /////////////////////////////
Date accum1 = create(PAST);
int arg20 = 0;
int arg21 = 0;
int arg22 = 0;
int arg23 = 0;
int arg24 = 0;
int arg25 = 0;
long a1 = accum1.UTC(arg20, arg21, arg22, arg23, arg24, arg25);
// /////////////////////////////
// Future
// /////////////////////////////
Date accum2 = create(FUTURE);
int arg30 = 0;
int arg31 = 0;
int arg32 = 0;
int arg33 = 0;
int arg34 = 0;
int arg35 = 0;
long a2 = accum2.UTC(arg30, arg31, arg32, arg33, arg34, arg35);
}
// Month and date of days with time shifts
private ArrayList<Integer> timeShiftMonth = new ArrayList<Integer>();
private ArrayList<Integer> timeShiftDate = new ArrayList<Integer>();
private boolean containsTimeShift(Date start, int days) {
long startTime = start.getTime();
Date end = new Date();
end.setTime(startTime);
end.setDate(start.getDate() + days);
long endTime = end.getTime();
return (endTime - startTime) != ((long) days * 24 * 60 * 60 * 1000);
}
private void findTimeShift(Date start, int days) {
assertTrue(days != 0);
// Found a shift day
if (days == 1) {
timeShiftMonth.add(start.getMonth());
timeShiftDate.add(start.getDate());
return;
}
// Recurse over the first half of the period
if (containsTimeShift(start, days / 2)) {
findTimeShift(start, days / 2);
}
// Recurse over the second half of the period
Date mid = new Date();
mid.setTime(start.getTime());
mid.setDate(start.getDate() + days / 2);
if (containsTimeShift(mid, days - days / 2)) {
findTimeShift(mid, days - days / 2);
}
}
private void findTimeShifts(int year) {
timeShiftMonth.clear();
timeShiftDate.clear();
Date start = new Date(year - 1900, 0, 1, 12, 0, 0);
Date end = new Date(year + 1 - 1900, 0, 1, 12, 0, 0);
int days = (int) ((end.getTime() - start.getTime()) /
(24 * 60 * 60 * 1000));
findTimeShift(start, days);
}
private boolean findClockBackwardTime(int year, int[] monthDayHour) {
findTimeShifts(year);
int numShifts = timeShiftMonth.size();
for (int i = 0; i < numShifts; i++) {
int month = timeShiftMonth.get(i);
int day = timeShiftDate.get(i);
long start = new Date(year - 1900, month, day, 0, 30, 0).getTime();
long end = new Date(year - 1900, month, day + 1, 23, 30, 0).getTime();
int lastHour = -1;
for (long time = start; time < end; time += 60 * 60 * 1000) {
Date d = new Date();
d.setTime(time);
int hour = d.getHours();
if (hour == lastHour) {
monthDayHour[0] = d.getMonth();
monthDayHour[1] = d.getDate();
monthDayHour[2] = d.getHours();
return true;
}
lastHour = hour;
}
}
return false;
}
private boolean findClockForwardTime(int year, int[] monthDayHour) {
findTimeShifts(year);
int numShifts = timeShiftMonth.size();
for (int i = 0; i < numShifts; i++) {
int month = timeShiftMonth.get(i);
int startDay = timeShiftDate.get(i);
for (int day = startDay; day <= startDay + 1; day++) {
for (int hour = 0; hour < 24; hour++) {
Date d = new Date(year - 1900, month, day, hour, 0, 0);
int h = d.getHours();
if ((h % 24) == ((hour + 1) % 24)) {
monthDayHour[0] = month;
monthDayHour[1] = day;
monthDayHour[2] = hour;
return true;
}
}
}
}
return false;
}
/**
* Check if daylight saving time occurs on the date.
*
* @param date the date to check
* @return true if DST occurs on the date, false if not
*/
private boolean isDst(Date date) {
int[] monthDayHour = new int[3];
if (!findClockForwardTime(date.getYear() + 1900, monthDayHour)) {
return false;
}
return monthDayHour[0] == date.getMonth()
&& monthDayHour[1] == date.getDate();
}
public void testClockBackwardTime() {
int[] monthDayHour = new int[3];
if (!findClockBackwardTime(2009, monthDayHour)) {
return;
}
Date d;
int month = monthDayHour[0];
int day = monthDayHour[1];
int hour = monthDayHour[2];
// Check that this is the later of the two times having the
// same hour:minute:second
d = new Date(2009 - 1900, month, day, hour, 30, 0);
assertEquals(hour, d.getHours());
d.setTime(d.getTime() - 60 * 60 * 1000);
assertEquals(hour, d.getHours());
}
public void testClockForwardTime() {
int[] monthDayHour = new int[3];
if (!findClockForwardTime(2009, monthDayHour)) {
return;
}
Date d;
int month = monthDayHour[0];
int day = monthDayHour[1];
int hour = monthDayHour[2];
d = new Date(2009 - 1900, month, day, hour, 0, 0);
assertEquals(normalizeHour(hour + 1), d.getHours());
// Test year change -- assume the previous year changes on a different day
d = new Date(2008 - 1900, month, day, hour, 0, 0);
assertEquals(hour, d.getHours());
d.setYear(2009 - 1900);
assertEquals(normalizeHour(hour + 1), d.getHours());
// Test month change
d = new Date(2009 - 1900, month + 1, day, hour, 0, 0);
assertEquals(hour, d.getHours());
d.setMonth(month);
assertEquals(normalizeHour(hour + 1), d.getHours());
// Test day change
d = new Date(2009 - 1900, month, day + 1, hour, 0, 0);
assertEquals(hour, d.getHours());
d.setDate(day);
assertEquals(normalizeHour(hour + 1), d.getHours());
// Test hour setting
d = new Date(2009 - 1900, month, day, hour + 2, 0, 0);
assertEquals(normalizeHour(hour + 2), d.getHours());
d.setHours(hour);
assertEquals(normalizeHour(hour + 1), d.getHours());
// Test changing hour by minutes = +- 60
d = new Date(2009 - 1900, month, day, hour + 2, 0, 0);
assertEquals(normalizeHour(hour + 2), d.getHours());
d.setMinutes(-60);
assertEquals(normalizeHour(hour + 1), d.getHours());
d = new Date(2009 - 1900, month, day, hour - 1, 0, 0);
assertEquals(normalizeHour(hour - 1), d.getHours());
d.setMinutes(60);
assertEquals(normalizeHour(hour + 1), d.getHours());
// Test changing hour by minutes = +- 120
d = new Date(2009 - 1900, month, day, hour + 2, 0, 0);
assertEquals(normalizeHour(hour + 2), d.getHours());
d.setMinutes(-120);
assertEquals(normalizeHour(hour + 1), d.getHours());
d = new Date(2009 - 1900, month, day, hour - 2, 0, 0);
assertEquals(normalizeHour(hour - 2), d.getHours());
d.setMinutes(120);
assertEquals(normalizeHour(hour + 1), d.getHours());
// Test changing hour by seconds = +- 3600
d = new Date(2009 - 1900, month, day, hour + 2, 0, 0);
assertEquals(normalizeHour(hour + 2), d.getHours());
d.setSeconds(-3600);
assertEquals(normalizeHour(hour + 1), d.getHours());
d = new Date(2009 - 1900, month, day, hour - 1, 0, 0);
assertEquals(normalizeHour(hour - 1), d.getHours());
d.setSeconds(3600);
assertEquals(normalizeHour(hour + 1), d.getHours());
// Test changing hour by seconds = +- 7200
d = new Date(2009 - 1900, month, day, hour + 2, 0, 0);
assertEquals(normalizeHour(hour + 2), d.getHours());
d.setSeconds(-7200);
assertEquals(normalizeHour(hour + 1), d.getHours());
d = new Date(2009 - 1900, month, day, hour - 2, 0, 0);
assertEquals(normalizeHour(hour - 2), d.getHours());
d.setSeconds(7200);
assertEquals(normalizeHour(hour + 1), d.getHours());
d = new Date(2009 - 1900, month, day, hour + 2, 0, 0);
d.setHours(hour);
d.setMinutes(30);
assertEquals(normalizeHour(hour + 1), d.getHours());
assertEquals(30, d.getMinutes());
d = new Date(2009 - 1900, month, day, hour + 2, 0, 0);
d.setMinutes(30);
d.setHours(hour);
assertEquals(normalizeHour(hour + 1), d.getHours());
assertEquals(30, d.getMinutes());
}
int normalizeHour(int i) {
return (i + 24) % 24;
}
Date create() {
return (Date) theDate.clone();
}
Date create(String s) {
if (s.equals(FUTURE)) {
return new Date("12/30/2030 3:4:5 GMT");
} else if (s.equals(PAST)) {
return new Date("1/5/1890 GMT");
} else {
return (Date) theDate.clone();
}
}
private String createString(String s) {
if (s.equals(FUTURE)) {
return "12/30/2030 3:4:5 GMT";
} else if (s.equals(PAST)) {
return "1/1/1890 GMT";
} else {
return theDate.toLocaleString();
}
}
private long roundToDay(long accum0) {
return accum0 >> DAY_MILLISECONDS_SHIFT << DAY_MILLISECONDS_SHIFT;
}
}