blob: cc0f91a8bb79eb02ee0d2ec46bb9cb829190432c [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 tests.api.java.util;
import dalvik.annotation.TestLevel;
import dalvik.annotation.TestTargetClass;
import dalvik.annotation.TestTargetNew;
import dalvik.annotation.TestTargets;
import tests.support.Support_Locale;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
@TestTargetClass(Calendar.class)
public class CalendarTest extends junit.framework.TestCase {
Locale defaultLocale;
/**
* @tests java.util.Calendar#set(int, int)
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "set",
args = {int.class, int.class}
)
public void test_setII() {
// Test for correct result defined by the last set field
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("EST"));
cal.clear();
cal.set(Calendar.YEAR, 2002);
assertTrue("Incorrect result 0: " + cal.getTime().getTime(), cal
.getTime().getTime() == 1009861200000L);
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.MONTH, Calendar.MARCH);
assertTrue("Incorrect result 0a: " + cal.getTime(), cal.getTime()
.getTime() == 1014958800000L);
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.DATE, 24);
assertTrue("Incorrect result 0b: " + cal.getTime(), cal.getTime()
.getTime() == 1011848400000L);
cal.set(Calendar.MONTH, Calendar.OCTOBER);
cal.set(Calendar.DATE, 31);
cal.set(Calendar.MONTH, Calendar.NOVEMBER);
cal.set(Calendar.DATE, 26);
assertTrue("Incorrect month: " + cal.get(Calendar.MONTH), cal
.get(Calendar.MONTH) == Calendar.NOVEMBER);
int dow = cal.get(Calendar.DAY_OF_WEEK);
cal.set(Calendar.DATE, 27);
assertTrue("Incorrect DAY_OF_WEEK: " + cal.get(Calendar.DAY_OF_WEEK)
+ " expected: " + dow, cal.get(Calendar.DAY_OF_WEEK) != dow);
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
assertTrue("Incorrect result 0c1: " + cal.getTime().getTime(), cal
.getTime().getTime() == 1010379600000L);
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
assertTrue("Incorrect result 0c2: " + cal.getTime().getTime(), cal
.getTime().getTime() == 1009861200000L);
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
assertTrue("Incorrect result 0c3: " + cal.getTime(), cal.getTime()
.getTime() == 1010034000000L);
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.WEEK_OF_MONTH, 2);
assertTrue("Incorrect result 0d: " + cal.getTime(), cal.getTime()
.getTime() == 1010293200000L);
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.DAY_OF_WEEK_IN_MONTH, 2);
assertTrue("Incorrect result 0e: " + cal.getTime(), cal.getTime()
.getTime() == 1010898000000L);
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.WEEK_OF_YEAR, 11);
assertTrue("Incorrect result 0f: " + cal.getTime(), cal.getTime()
.getTime() == 1015736400000L);
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.DATE, 24);
cal.set(Calendar.WEEK_OF_YEAR, 11);
assertTrue("Incorrect result 0g: " + cal.getTime(), cal.getTime()
.getTime() == 1011848400000L);
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.get(Calendar.WEEK_OF_YEAR); // Force fields to compute
cal.set(Calendar.WEEK_OF_YEAR, 11);
assertTrue("Incorrect result 0h: " + cal.getTime(), cal.getTime()
.getTime() == 1015909200000L);
// WEEK_OF_YEAR has priority over MONTH/DATE
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.DAY_OF_YEAR, 170);
cal.set(Calendar.WEEK_OF_YEAR, 11);
cal.set(Calendar.MONTH, Calendar.JANUARY);
cal.set(Calendar.DATE, 5);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
assertTrue("Incorrect result 1: " + cal.getTime(), cal.getTime()
.getTime() == 1015822800000L);
// WEEK_OF_YEAR has priority over MONTH/DATE
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.WEEK_OF_YEAR, 11);
cal.set(Calendar.MONTH, Calendar.JANUARY);
cal.set(Calendar.DATE, 5);
cal.set(Calendar.DAY_OF_YEAR, 170);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
assertTrue("Incorrect result 1a: " + cal.getTime(), cal.getTime()
.getTime() == 1015822800000L);
// DAY_OF_WEEK has no effect when other fields not set
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.MONTH, Calendar.MARCH);
cal.set(Calendar.DATE, 11);
cal.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
assertTrue("Incorrect result 1b: " + cal.getTime(), cal.getTime()
.getTime() == 1015822800000L);
// WEEK_OF_MONTH has priority
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.WEEK_OF_YEAR, 12);
cal.set(Calendar.DAY_OF_WEEK_IN_MONTH, 1);
cal.set(Calendar.WEEK_OF_MONTH, 3);
cal.set(Calendar.MONTH, Calendar.MARCH);
cal.set(Calendar.DATE, 5);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
assertTrue("Incorrect result 2: " + cal.getTime(), cal.getTime()
.getTime() == 1015822800000L);
// DAY_OF_WEEK_IN_MONTH has priority over WEEK_OF_YEAR
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.WEEK_OF_YEAR, 12);
cal.set(Calendar.DAY_OF_WEEK_IN_MONTH, 2);
cal.set(Calendar.MONTH, Calendar.MARCH);
cal.set(Calendar.DATE, 5);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
assertTrue("Incorrect result 3: " + cal.getTime(), cal.getTime()
.getTime() == 1015822800000L);
// WEEK_OF_MONTH has priority, MONTH not set
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.WEEK_OF_YEAR, 12);
cal.set(Calendar.DAY_OF_WEEK_IN_MONTH, 1);
cal.set(Calendar.WEEK_OF_MONTH, 3);
cal.set(Calendar.DATE, 25);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
assertTrue("Incorrect result 4: " + cal.getTime(), cal.getTime()
.getTime() == 1010984400000L);
// WEEK_OF_YEAR has priority when MONTH set last and DAY_OF_WEEK set
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.WEEK_OF_YEAR, 11);
cal.set(Calendar.DATE, 25);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
cal.set(Calendar.MONTH, Calendar.JANUARY);
assertTrue("Incorrect result 5: " + cal.getTime(), cal.getTime()
.getTime() == 1015822800000L);
// Use MONTH/DATE when WEEK_OF_YEAR set but not DAY_OF_WEEK
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.WEEK_OF_YEAR, 12);
cal.set(Calendar.DATE, 11);
cal.set(Calendar.MONTH, Calendar.MARCH);
assertTrue("Incorrect result 5a: " + cal.getTime(), cal.getTime()
.getTime() == 1015822800000L);
// Use MONTH/DATE when DAY_OF_WEEK is not set
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.WEEK_OF_YEAR, 12);
cal.set(Calendar.DATE, 11);
cal.set(Calendar.WEEK_OF_MONTH, 1);
cal.set(Calendar.MONTH, Calendar.MARCH);
assertTrue("Incorrect result 5b: " + cal.getTime(), cal.getTime()
.getTime() == 1015822800000L);
// WEEK_OF_MONTH has priority
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.WEEK_OF_YEAR, 12);
cal.set(Calendar.DATE, 5);
cal.set(Calendar.WEEK_OF_MONTH, 3);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
cal.set(Calendar.MONTH, Calendar.MARCH);
assertTrue("Incorrect result 5c: " + cal.getTime(), cal.getTime()
.getTime() == 1015822800000L);
// DATE has priority when set last
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.WEEK_OF_YEAR, 12);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
cal.set(Calendar.MONTH, Calendar.MARCH);
cal.set(Calendar.DATE, 11);
assertTrue("Incorrect result 6: " + cal.getTime(), cal.getTime()
.getTime() == 1015822800000L);
// DATE has priority when set last, MONTH not set
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.WEEK_OF_YEAR, 12);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
cal.set(Calendar.DATE, 14);
assertTrue("Incorrect result 7: " + cal.getTime(), cal.getTime()
.getTime() == 1010984400000L);
// DAY_OF_YEAR has priority when MONTH set last and DATE not set
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.DAY_OF_YEAR, 70);
cal.set(Calendar.MONTH, Calendar.JANUARY);
assertTrue("Incorrect result 8: " + cal.getTime(), cal.getTime()
.getTime() == 1015822800000L);
// DAY/MONTH has priority when DATE set after DAY_OF_YEAR
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.DAY_OF_YEAR, 170);
cal.set(Calendar.DATE, 11);
cal.set(Calendar.MONTH, Calendar.MARCH);
assertTrue("Incorrect result 8a: " + cal.getTime(), cal.getTime()
.getTime() == 1015822800000L);
// DAY_OF_YEAR has priority when set after DATE
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.DATE, 15);
cal.set(Calendar.DAY_OF_YEAR, 70);
cal.set(Calendar.MONTH, Calendar.JANUARY);
assertTrue("Incorrect result 8b: " + cal.getTime(), cal.getTime()
.getTime() == 1015822800000L);
// DATE has priority when set last
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.DAY_OF_YEAR, 70);
cal.set(Calendar.DATE, 14);
assertTrue("Incorrect result 9: " + cal.getTime(), cal.getTime()
.getTime() == 1010984400000L);
// DATE has priority when set last
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.WEEK_OF_YEAR, 15);
cal.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
cal.set(Calendar.DATE, 14);
assertTrue("Incorrect result 9a: " + cal.getTime(), cal.getTime()
.getTime() == 1010984400000L);
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
cal.set(Calendar.DATE, 14);
cal.set(Calendar.WEEK_OF_YEAR, 11);
assertTrue("Incorrect result 9b: " + cal.getTime(), cal.getTime()
.getTime() == 1015822800000L);
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.DATE, 14);
cal.set(Calendar.WEEK_OF_YEAR, 11);
assertTrue("Incorrect result 9c: " + cal.getTime(), cal.getTime()
.getTime() == 1010984400000L);
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.WEEK_OF_MONTH, 1);
cal.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
cal.set(Calendar.MONTH, Calendar.MARCH);
cal.set(Calendar.DATE, 11);
assertTrue("Incorrect result 9d: " + cal.getTime(), cal.getTime()
.getTime() == 1015822800000L);
// DAY_OF_YEAR has priority when DAY_OF_MONTH set last and other fields
// not set
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.DAY_OF_YEAR, 70);
cal.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
assertTrue("Incorrect result 10: " + cal.getTime(), cal.getTime()
.getTime() == 1015822800000L);
// MONTH/DATE has priority when DAY_OF_WEEK_IN_MONTH set last but
// DAY_OF_WEEK not set
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.DATE, 11);
cal.set(Calendar.MONTH, Calendar.MARCH);
cal.set(Calendar.DAY_OF_WEEK_IN_MONTH, 1);
assertTrue("Incorrect result 11: " + cal.getTime(), cal.getTime()
.getTime() == 1015822800000L);
// MONTH/DATE has priority when WEEK_OF_YEAR set last but DAY_OF_WEEK
// not set
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.DATE, 11);
cal.set(Calendar.MONTH, Calendar.MARCH);
cal.set(Calendar.WEEK_OF_YEAR, 15);
assertTrue("Incorrect result 12: " + cal.getTime(), cal.getTime()
.getTime() == 1015822800000L);
// MONTH/DATE has priority when WEEK_OF_MONTH set last but DAY_OF_WEEK
// not set
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.DATE, 11);
cal.set(Calendar.MONTH, Calendar.MARCH);
cal.set(Calendar.WEEK_OF_MONTH, 1);
assertTrue("Incorrect result 13: " + cal.getTime(), cal.getTime()
.getTime() == 1015822800000L);
// Ensure last date field set is reset after computing
cal.clear();
cal.set(Calendar.YEAR, 2002);
cal.set(Calendar.DAY_OF_YEAR, 111);
cal.get(Calendar.YEAR);
cal.set(Calendar.MONTH, Calendar.MARCH);
cal.set(Calendar.AM_PM, Calendar.AM);
assertTrue("Incorrect result 14: " + cal.getTime(), cal.getTime()
.getTime() == 1016686800000L);
int hour = cal.get(Calendar.HOUR);
cal.set(Calendar.HOUR, hour);
cal.set(Calendar.AM_PM, Calendar.PM);
assertEquals("AM_PM not changed", Calendar.PM, cal.get(Calendar.AM_PM));
// setting AM_PM without HOUR should not have any affect
cal.set(Calendar.AM_PM, Calendar.AM);
assertEquals("AM_PM was changed 1",
Calendar.AM, cal.get(Calendar.AM_PM));
int hourOfDay = cal.get(Calendar.HOUR_OF_DAY);
hour = cal.get(Calendar.HOUR);
cal.set(Calendar.AM_PM, Calendar.PM);
assertEquals("AM_PM was changed 2",
Calendar.PM, cal.get(Calendar.AM_PM));
assertEquals(hour, cal.get(Calendar.HOUR));
assertEquals(hourOfDay + 12, cal.get(Calendar.HOUR_OF_DAY));
// regression test for Harmony-2122
cal = Calendar.getInstance();
int oldValue = cal.get(Calendar.AM_PM);
int newValue = (oldValue == Calendar.AM) ? Calendar.PM : Calendar.AM;
cal.set(Calendar.AM_PM, newValue);
newValue = cal.get(Calendar.AM_PM);
assertTrue(newValue != oldValue);
cal.setLenient(false);
try {
cal.set(-1, 3);
fail("ArrayIndexOutOfBoundsException expected");
} catch (ArrayIndexOutOfBoundsException e) {
//expected
}
try {
cal.set(Calendar.FIELD_COUNT + 1, 3);
fail("ArrayIndexOutOfBoundsException expected");
} catch (ArrayIndexOutOfBoundsException e) {
//expected
}
}
/**
* @tests java.util.Calendar#setTime(java.util.Date)
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "setTime",
args = {java.util.Date.class}
)
public void test_setTimeLjava_util_Date() {
Calendar cal = Calendar.getInstance();
// Use millisecond time for testing in Core
cal.setTime(new Date(884581200000L)); // (98, Calendar.JANUARY, 12)
assertEquals("incorrect millis", 884581200000L, cal.getTime().getTime());
cal.setTimeZone(TimeZone.getTimeZone("EST"));
cal.setTime(new Date(943506000000L)); // (99, Calendar.NOVEMBER, 25)
assertTrue("incorrect fields", cal.get(Calendar.YEAR) == 1999
&& cal.get(Calendar.MONTH) == Calendar.NOVEMBER
&& cal.get(Calendar.DATE) == 25);
}
/**
* @tests java.util.Calendar#compareTo(Calendar)
*/
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Verifies NullPointerException.",
method = "compareTo",
args = {java.util.Calendar.class}
)
public void test_compareToLjava_util_Calendar_null() {
Calendar cal = Calendar.getInstance();
try {
cal.compareTo(null);
fail("should throw NullPointerException");
} catch (NullPointerException e) {
// expected
}
}
/**
* @tests java.util.Calendar#compareTo(Calendar)
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "compareTo",
args = {java.util.Calendar.class}
)
public void test_compareToLjava_util_Calendar() {
Calendar cal = Calendar.getInstance();
cal.clear();
cal.set(1997, 12, 13, 23, 57);
Calendar anotherCal = Calendar.getInstance();
anotherCal.clear();
anotherCal.set(1997, 12, 13, 23, 57);
assertEquals(0, cal.compareTo(anotherCal));
anotherCal = Calendar.getInstance();
anotherCal.clear();
anotherCal.set(1997, 11, 13, 24, 57);
assertEquals(1, cal.compareTo(anotherCal));
anotherCal = Calendar.getInstance();
anotherCal.clear();
anotherCal.set(1997, 12, 13, 23, 58);
assertEquals(-1, cal.compareTo(anotherCal));
try {
cal.compareTo(null);
fail("NullPointerException expected");
} catch (NullPointerException e) {
//expected
}
MockCalendar mc = new MockCalendar();
try {
cal.compareTo(mc);
fail("IllegalArgumentException expected");
} catch (IllegalArgumentException e) {
//expected
}
}
/**
* @tests java.util.Calendar#clone()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "clone",
args = {}
)
public void test_clone() {
// Regression for HARMONY-475
Calendar cal = Calendar.getInstance();
cal.set(2006, 5, 6, 11, 35);
Calendar anotherCal = (Calendar) cal.clone();
// should be deep clone
assertNotSame("getTimeZone", cal.getTimeZone(), anotherCal
.getTimeZone());
}
/**
* @tests java.util.Calendar#getTimeInMillis()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getTimeInMillis",
args = {}
)
public void test_getTimeInMillis() {
Calendar cal = Calendar.getInstance();
int year = Integer.MIN_VALUE + 71;
cal.setTimeZone(TimeZone.getTimeZone("GMT"));;
cal.set(Calendar.YEAR, year + 1900);
cal.set(Calendar.MONTH, Calendar.JANUARY);
cal.set(Calendar.DATE, 1);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
assertEquals(6017546357372606464L, cal.getTimeInMillis());
}
/**
* @tests {@link java.util.Calendar#getActualMaximum(int)}
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getActualMaximum",
args = {int.class}
)
public void test_getActualMaximum_I() {
Calendar c = new MockCalendar();
assertEquals("should be equal to 0", 0, c.getActualMaximum(0));
}
/**
* @tests {@link java.util.Calendar#getActualMinimum(int)}
*/
@TestTargets({
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getActualMinimum",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "Calendar",
args = {}
)
})
public void test_getActualMinimum_I() {
Calendar c = new MockCalendar();
assertEquals("should be equal to 0", 0, c.getActualMinimum(0));
}
private class MockCalendar extends Calendar {
public MockCalendar() {
super();
}
public MockCalendar(TimeZone default1, Locale germany) {
super(default1, germany);
}
@Override
public void add(int field, int value) {
}
@Override
protected void computeFields() {
}
@Override
protected void computeTime() {
throw new IllegalArgumentException();
}
@Override
public int getGreatestMinimum(int field) {
return 0;
}
@Override
public int getLeastMaximum(int field) {
return 0;
}
@Override
public int getMaximum(int field) {
return 0;
}
@Override
public int getMinimum(int field) {
return 0;
}
@Override
public void roll(int field, boolean increment) {
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "Calendar",
args = {java.util.TimeZone.class, java.util.Locale.class}
)
public void test_ConstructorLjava_utilTimeZoneLjava_util_Locale() {
assertNotNull(new MockCalendar(TimeZone.getDefault(), Locale.GERMANY));
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Test calls dummy implementation of abstract method.",
method = "add",
args = {int.class, int.class}
)
public void test_addII() {
MockCalendar mc = new MockCalendar();
mc.add(Calendar.DAY_OF_YEAR, 7);
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "after",
args = {java.lang.Object.class}
)
public void test_afterLjava_lang_Object() {
MockCalendar mcBefore = new MockCalendar();
MockCalendar mc = new MockCalendar();
MockCalendar mcAfter = new MockCalendar();
MockCalendar mcSame = new MockCalendar();
mcBefore.setTimeInMillis(1000);
mc.setTimeInMillis(10000);
mcAfter.setTimeInMillis(100000);
mcSame.setTimeInMillis(10000);
assertTrue(mc.after(mcBefore));
assertFalse(mc.after(mcAfter));
assertFalse(mc.after(mcSame));
assertFalse(mc.after(mc));
assertFalse(mc.after(new String()));
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "before",
args = {java.lang.Object.class}
)
public void test_beforeLjava_lang_Object() {
MockCalendar mcBefore = new MockCalendar();
MockCalendar mc = new MockCalendar();
MockCalendar mcAfter = new MockCalendar();
MockCalendar mcSame = new MockCalendar();
mcBefore.setTimeInMillis(1000);
mc.setTimeInMillis(10000);
mcAfter.setTimeInMillis(100000);
mcSame.setTimeInMillis(10000);
assertFalse(mc.before(mcBefore));
assertTrue(mc.before(mcAfter));
assertFalse(mc.before(mcSame));
assertFalse(mc.before(mc));
assertFalse(mc.before(new String()));
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "clear",
args = {}
)
public void test_clear() {
MockCalendar mc1 = new MockCalendar();
MockCalendar mc2 = new MockCalendar();
assertTrue(mc1.toString().equals(mc2.toString()));
mc1.set(2008, Calendar.SEPTEMBER, 23, 18, 0, 0);
assertFalse(mc1.toString().equals(mc2.toString()));
mc1.clear();
assertTrue(mc1.toString().equals(mc2.toString()));
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "clear",
args = {int.class}
)
public void test_clearI() {
MockCalendar mc1 = new MockCalendar();
MockCalendar mc2 = new MockCalendar();
assertTrue(mc1.toString().equals(mc2.toString()));
mc1.set(2008, Calendar.SEPTEMBER, 23, 18, 0, 0);
assertFalse(mc1.toString().equals(mc2.toString()));
mc1.clear(Calendar.YEAR);
mc1.clear(Calendar.MONTH);
mc1.clear(Calendar.DAY_OF_MONTH);
mc1.clear(Calendar.HOUR_OF_DAY);
mc1.clear(Calendar.MINUTE);
mc1.clear(Calendar.SECOND);
mc1.clear(Calendar.MILLISECOND);
assertTrue(mc1.toString().equals(mc2.toString()));
}
class Mock_Calendar extends Calendar {
boolean flagComplete = false;
@Override
public void add(int field, int amount) {
}
@Override
protected void computeFields() {
this.set(MONTH, this.internalGet(MONTH)%12);
}
@Override
protected void computeTime() {
}
@Override
public int getGreatestMinimum(int field) {
return 0;
}
@Override
public int getLeastMaximum(int field) {
return 0;
}
@Override
public int getMaximum(int field) {
return 0;
}
@Override
public int getMinimum(int field) {
return 0;
}
@Override
public void roll(int field, boolean up) {
}
@Override
public void complete() {
computeTime();
computeFields();
flagComplete = true;
}
public boolean isCompleted () {
return flagComplete;
}
public int internalGetField(int field) {
return super.internalGet(field);
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "complete",
args = {}
)
public void test_complete() {
Mock_Calendar cal = new Mock_Calendar();
assertFalse(cal.isCompleted());
cal.setTimeInMillis(1000);
cal.get(Calendar.MONTH);
assertTrue(cal.isCompleted());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "computeFields",
args = {}
)
public void test_computeFields() {
Calendar cal1 = Calendar.getInstance(TimeZone.getTimeZone("GMT+2"), defaultLocale);
Calendar cal2 = Calendar.getInstance(TimeZone.getTimeZone("GMT+2"), defaultLocale);
cal1.setTimeInMillis(1222185600225L);
cal2.set(2008, Calendar.SEPTEMBER, 23, 18, 0, 0);
assertFalse(cal1.toString().equals(cal2.toString()));
cal1.get(Calendar.YEAR);
cal2.getTimeInMillis();
cal1.set(Calendar.MILLISECOND, 0);
cal2.set(Calendar.MILLISECOND, 0);
// tests fails in this line.
assertTrue(cal1.toString().equals(cal2.toString()));
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "equals",
args = {java.lang.Object.class}
)
public void test_equals() {
Calendar cal1 = Calendar.getInstance(TimeZone.getTimeZone("GMT+2"), defaultLocale);
Calendar cal2 = Calendar.getInstance(TimeZone.getTimeZone("GMT+2"), defaultLocale);
cal1.setTimeInMillis(1222185600225L);
cal2.set(2008, Calendar.SEPTEMBER, 23, 18, 0, 0);
assertFalse(cal1.equals(cal2));
cal1.get(Calendar.YEAR);
cal2.getTimeInMillis();
cal1.set(Calendar.MILLISECOND, 0);
cal2.set(Calendar.MILLISECOND, 0);
// tests fails on following line.
assertTrue(cal1.equals(cal2));
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "get",
args = {int.class}
)
public void test_getI() {
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+2"), defaultLocale);
cal.setTimeInMillis(1222185600225L);
assertEquals(cal.get(Calendar.ERA), 1);
assertEquals(cal.get(Calendar.YEAR), 2008);
assertEquals(cal.get(Calendar.MONTH), Calendar.SEPTEMBER);
assertEquals(cal.get(Calendar.DAY_OF_MONTH), 23);
// Following line returns wrong value. Behavior uncompatible with RI.
assertEquals(cal.get(Calendar.HOUR_OF_DAY), 18);
assertEquals(cal.get(Calendar.MINUTE), 0);
try {
cal.get(-1);
fail("ArrayIndexOutOfBoundsException expected");
} catch (ArrayIndexOutOfBoundsException e) {
//expected
}
try {
cal.get(Calendar.FIELD_COUNT + 1);
fail("ArrayIndexOutOfBoundsException expected");
} catch (ArrayIndexOutOfBoundsException e) {
//expected
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getAvailableLocales",
args = {}
)
public void test_getAvailableLocales() {
assertNotNull(Calendar.getAvailableLocales());
}
@TestTargets({
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getFirstDayOfWeek",
args = {}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getInstance",
args = {}
)
})
public void test_getFirstDayOfWeek() {
Locale[] requiredLocales = {Locale.US, Locale.FRANCE};
if (!Support_Locale.areLocalesAvailable(requiredLocales)) {
// locale dependent test, bug 1943269
return;
}
Calendar cal = Calendar.getInstance();
assertEquals(Calendar.SUNDAY, cal.getFirstDayOfWeek());
Locale.setDefault(Locale.FRANCE);
cal = Calendar.getInstance();
assertEquals(Calendar.MONDAY, cal.getFirstDayOfWeek());
Locale.setDefault(Locale.US);
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getInstance",
args = {java.util.Locale.class}
)
public void test_getInstanceLjava_util_Locale() {
Locale[] requiredLocales = {Locale.US, Locale.FRANCE};
if (!Support_Locale.areLocalesAvailable(requiredLocales)) {
// locale dependent test, bug 1943269
return;
}
Calendar cal1 = Calendar.getInstance(Locale.FRANCE);
Locale.setDefault(Locale.FRANCE);
Calendar cal2 = Calendar.getInstance();
assertSame(cal1.getFirstDayOfWeek(), cal2.getFirstDayOfWeek());
Locale.setDefault(Locale.US);
cal2 = Calendar.getInstance();
assertNotSame(cal1.getFirstDayOfWeek(), cal2.getFirstDayOfWeek());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getInstance",
args = {java.util.TimeZone.class}
)
public void test_get_InstanceLjava_util_TimeZone() {
Calendar cal1 = Calendar.getInstance(TimeZone.getTimeZone("GMT-6"));
Calendar cal2 = Calendar.getInstance(TimeZone.getTimeZone("GMT+1"));
assertNotSame(cal1.getTimeZone().getRawOffset(), cal2.getTimeZone().getRawOffset());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getInstance",
args = {java.util.TimeZone.class, java.util.Locale.class}
)
public void test_getInstanceLjava_util_TimeZoneLjava_util_Locale() {
Locale[] requiredLocales = {Locale.US, Locale.FRANCE};
if (!Support_Locale.areLocalesAvailable(requiredLocales)) {
// locale dependent test, bug 1943269
return;
}
Calendar cal1 = Calendar.getInstance(TimeZone.getTimeZone("GMT-6"), Locale.FRANCE);
Locale.setDefault(Locale.FRANCE);
Calendar cal2 = Calendar.getInstance(TimeZone.getTimeZone("GMT+1"));
assertSame(cal1.getFirstDayOfWeek(), cal2.getFirstDayOfWeek());
assertNotSame(cal1.getTimeZone().getRawOffset(), cal2.getTimeZone().getRawOffset());
Locale.setDefault(Locale.US);
cal2 = Calendar.getInstance(TimeZone.getTimeZone("GMT+1"));
assertNotSame(cal1.getFirstDayOfWeek(), cal2.getFirstDayOfWeek());
assertNotSame(cal1.getTimeZone().getRawOffset(), cal2.getTimeZone().getRawOffset());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getMinimalDaysInFirstWeek",
args = {}
)
public void test_getMinimalDaysInFirstWeek() {
Locale[] requiredLocales = {Locale.US, Locale.FRANCE};
if (!Support_Locale.areLocalesAvailable(requiredLocales)) {
// locale dependent test, bug 1943269
return;
}
Calendar cal = Calendar.getInstance();
assertTrue(cal.getMinimalDaysInFirstWeek()==1);
Locale.setDefault(Locale.FRANCE);
cal = Calendar.getInstance();
assertTrue(cal.getMinimalDaysInFirstWeek()==4);
Locale.setDefault(Locale.US);
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getTime",
args = {}
)
public void test_getTime() {
Calendar cal = Calendar.getInstance();
Date d = new Date(1222185600225L);
cal.setTimeInMillis(1222185600225L);
assertEquals(d.getTime(), cal.getTimeInMillis());
assertEquals(d, cal.getTime());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getTimeZone",
args = {}
)
public void test_getTimeZone() {
Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("GMT-6"));
assertEquals(TimeZone.getTimeZone("GMT-6"), cal.getTimeZone());
cal = Calendar.getInstance(TimeZone.getTimeZone("GMT-8"));
assertEquals(TimeZone.getTimeZone("GMT-8"), cal.getTimeZone());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "hashCode",
args = {}
)
public void test_hashCode() {
Locale[] requiredLocales = {Locale.US, Locale.FRANCE};
if (!Support_Locale.areLocalesAvailable(requiredLocales)) {
// locale dependent test, bug 1943269
return;
}
Calendar cal1 = Calendar.getInstance();
Locale.setDefault(Locale.FRANCE);
Calendar cal2 = Calendar.getInstance();
Locale.setDefault(Locale.US);
assertTrue(cal1.hashCode() != cal2.hashCode());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "internalGet",
args = {int.class}
)
public void test_internalGet() {
Mock_Calendar mc = new Mock_Calendar();
assertEquals(0, mc.internalGetField(Calendar.MONTH));
mc.set(Calendar.MONTH, 35);
assertEquals(35, mc.internalGetField(Calendar.MONTH));
assertEquals(11, mc.get(Calendar.MONTH));
}
@TestTargets({
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "isLenient",
args = {}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "setLenient",
args = {boolean.class}
)
})
public void test_isLenient() {
Calendar cal = Calendar.getInstance();
assertTrue(cal.isLenient());
cal.set(Calendar.MONTH, 35);
cal.get(Calendar.MONTH);
cal.setLenient(false);
cal.set(Calendar.MONTH, 35);
try {
cal.get(Calendar.MONTH);
fail("IllegalArgumentException expected");
} catch (IllegalArgumentException e) {
//expected
}
assertFalse(cal.isLenient());
cal.setLenient(true);
cal.set(Calendar.MONTH, 35);
cal.get(Calendar.MONTH);
assertTrue(cal.isLenient());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "isSet",
args = {int.class}
)
public void test_isSet() {
Calendar cal = Calendar.getInstance();
cal.clear();
assertFalse(cal.isSet(Calendar.MONTH));
cal.set(Calendar.MONTH, 35);
assertTrue(cal.isSet(Calendar.MONTH));
assertFalse(cal.isSet(Calendar.YEAR));
cal.get(Calendar.MONTH);
assertTrue(cal.isSet(Calendar.YEAR));
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "roll",
args = {int.class, int.class}
)
public void test_rollII() {
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+2"), defaultLocale);
cal.setTimeInMillis(1222185600225L);
cal.roll(Calendar.DAY_OF_MONTH, 200);
assertEquals(cal.get(Calendar.ERA), 1);
assertEquals(cal.get(Calendar.YEAR), 2008);
assertEquals(cal.get(Calendar.MONTH), Calendar.SEPTEMBER);
assertEquals(cal.get(Calendar.DAY_OF_MONTH), 13);
// Following line returns wrong value. Behavior uncompatible with RI.
assertEquals(cal.get(Calendar.HOUR_OF_DAY), 18);
assertEquals(cal.get(Calendar.MINUTE), 0);
cal.roll(Calendar.DAY_OF_MONTH, -200);
assertEquals(cal.get(Calendar.ERA), 1);
assertEquals(cal.get(Calendar.YEAR), 2008);
assertEquals(cal.get(Calendar.MONTH), Calendar.SEPTEMBER);
assertEquals(cal.get(Calendar.DAY_OF_MONTH), 23);
assertEquals(cal.get(Calendar.HOUR_OF_DAY), 18);
assertEquals(cal.get(Calendar.MINUTE), 0);
}
@TestTargets({
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "set",
args = {int.class, int.class, int.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "setTimeInMillis",
args = {long.class}
)
})
public void test_setIII() {
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+2"), defaultLocale);
cal.setTimeInMillis(1222185600225L);
assertEquals(1222185600225L, cal.getTimeInMillis());
assertEquals(cal.get(Calendar.YEAR), 2008);
assertEquals(cal.get(Calendar.MONTH), Calendar.SEPTEMBER);
assertEquals(cal.get(Calendar.DAY_OF_MONTH), 23);
assertEquals(cal.get(Calendar.SECOND), 0);
cal.set(1970, Calendar.JANUARY, 1);
assertEquals(cal.get(Calendar.ERA), 1);
// Following line returns wrong value. Behavior uncompatible with RI.
assertEquals(cal.get(Calendar.HOUR_OF_DAY), 18);
assertEquals(cal.get(Calendar.MINUTE), 0);
assertEquals(cal.get(Calendar.SECOND), 0);
assertEquals(cal.get(Calendar.YEAR), 1970);
assertEquals(cal.get(Calendar.MONTH), 0);
assertEquals(cal.get(Calendar.DAY_OF_MONTH), 1);
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "set",
args = {int.class, int.class, int.class, int.class, int.class}
)
public void test_setIIIII() {
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+2"), defaultLocale);
cal.setTimeInMillis(1222185600225L);
assertEquals(cal.get(Calendar.YEAR), 2008);
assertEquals(cal.get(Calendar.MONTH), Calendar.SEPTEMBER);
assertEquals(cal.get(Calendar.DAY_OF_MONTH), 23);
// Following line returns wrong value. Behavior uncompatible with RI.
assertEquals(cal.get(Calendar.HOUR_OF_DAY), 18);
assertEquals(cal.get(Calendar.MINUTE), 0);
assertEquals(cal.get(Calendar.SECOND), 0);
cal.set(1970, Calendar.JANUARY, 1, 0, 10);
assertEquals(cal.get(Calendar.ERA), 1);
assertEquals(cal.get(Calendar.SECOND), 0);
assertEquals(cal.get(Calendar.YEAR), 1970);
assertEquals(cal.get(Calendar.MONTH), 0);
assertEquals(cal.get(Calendar.DAY_OF_MONTH), 1);
assertEquals(cal.get(Calendar.HOUR_OF_DAY), 0);
assertEquals(cal.get(Calendar.MINUTE), 10);
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "set",
args = {int.class, int.class, int.class, int.class, int.class, int.class}
)
public void test_setIIIIII() {
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+2"), defaultLocale);
cal.setTimeInMillis(1222185600225L);
assertEquals(cal.get(Calendar.YEAR), 2008);
assertEquals(cal.get(Calendar.MONTH), Calendar.SEPTEMBER);
assertEquals(cal.get(Calendar.DAY_OF_MONTH), 23);
// Following line returns wrong value. Behavior uncompatible with RI.
assertEquals(cal.get(Calendar.HOUR_OF_DAY), 18);
assertEquals(cal.get(Calendar.MINUTE), 0);
assertEquals(cal.get(Calendar.SECOND), 0);
cal.set(1970, Calendar.JANUARY, 1, 0, 10, 33);
assertEquals(cal.get(Calendar.ERA), 1);
assertEquals(cal.get(Calendar.YEAR), 1970);
assertEquals(cal.get(Calendar.MONTH), 0);
assertEquals(cal.get(Calendar.DAY_OF_MONTH), 1);
assertEquals(cal.get(Calendar.HOUR_OF_DAY), 0);
assertEquals(cal.get(Calendar.MINUTE), 10);
assertEquals(cal.get(Calendar.SECOND), 33);
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "setFirstDayOfWeek",
args = {int.class}
)
public void test_setFirstDayOfWeekI() {
Calendar cal = Calendar.getInstance();
for (int i = 0; i < 10; i++) {
cal.setFirstDayOfWeek(i);
assertEquals(i, cal.getFirstDayOfWeek());
}
cal.setLenient(false);
cal.setFirstDayOfWeek(10);
cal.setFirstDayOfWeek(-10);
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "setMinimalDaysInFirstWeek",
args = {int.class}
)
public void test_setMinimalDaysInFirstWeekI() {
Calendar cal = Calendar.getInstance();
for (int i = 0; i < 10; i++) {
cal.setMinimalDaysInFirstWeek(i);
assertEquals(i, cal.getMinimalDaysInFirstWeek());
}
cal.setLenient(false);
cal.setMinimalDaysInFirstWeek(10);
cal.setMinimalDaysInFirstWeek(-10);
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "setTimeZone",
args = {java.util.TimeZone.class}
)
public void test_setTimeZoneLjava_util_TimeZone() {
Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("GMT-6"));
assertEquals(TimeZone.getTimeZone("GMT-6"), cal.getTimeZone());
cal = Calendar.getInstance(TimeZone.getTimeZone("GMT-8"));
cal.setTimeZone(TimeZone.getTimeZone("GMT-6"));
assertEquals(TimeZone.getTimeZone("GMT-6"), cal.getTimeZone());
cal.setTimeZone(null);
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "toString",
args = {}
)
public void test_toString() {
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.setTimeZone(TimeZone.getTimeZone("GMT-6"));
cal2.setTimeZone(TimeZone.getTimeZone("GMT-8"));
cal1.set(Calendar.MILLISECOND, 0);
cal2.set(Calendar.MILLISECOND, 0);
assertFalse(cal1.toString().equals(cal2.toString()));
cal1.setTimeZone(TimeZone.getTimeZone("GMT-8"));
assertTrue(cal1.toString().equals(cal2.toString()));
}
@TestTargetNew(
level = TestLevel.ADDITIONAL,
method = "get",
args = {int.class}
)
public void test_EdgeCases() {
Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
c.setTimeInMillis(Long.MAX_VALUE);
assertEquals(292278994, c.get(Calendar.YEAR));
assertEquals(Calendar.AUGUST, c.get(Calendar.MONTH));
assertEquals(17, c.get(Calendar.DAY_OF_MONTH));
assertEquals(Calendar.SUNDAY, c.get(Calendar.DAY_OF_WEEK));
assertEquals(7, c.get(Calendar.HOUR_OF_DAY));
assertEquals(12, c.get(Calendar.MINUTE));
assertEquals(55, c.get(Calendar.SECOND));
}
protected void setUp() {
defaultLocale = Locale.getDefault();
Locale.setDefault(Locale.US);
}
protected void tearDown() {
Locale.setDefault(defaultLocale);
}
}