ICU-4943 Added some constructors in ChineseCalendar to make it consistent with other Calendar implementation class.

X-SVN-Rev: 23219
This commit is contained in:
Yoshito Umaoka 2008-01-14 15:27:46 +00:00
parent fa02813466
commit 70939d3152
2 changed files with 218 additions and 18 deletions

View File

@ -1,5 +1,5 @@
/*********************************************************************
* Copyright (C) 2000-2007, International Business Machines Corporation and
* Copyright (C) 2000-2008, International Business Machines Corporation and
* others. All Rights Reserved.
*********************************************************************
*/
@ -527,6 +527,85 @@ public class ChineseTest extends CalendarTest {
// }
public void TestCoverage() {
// Coverage for constructors
{
// new ChineseCalendar(Date)
ChineseCalendar cal = new ChineseCalendar(new Date());
if(cal == null){
errln("could not create ChineseCalendar with Date");
}
}
{
// new ChineseCalendar(int year, int month, int isLeapMonth, int date)
ChineseCalendar cal = new ChineseCalendar(23, Calendar.JULY, 1, 2);
if(cal == null){
errln("could not create ChineseCalendar with year,month,isLeapMonth,date");
}
// Make sure the given values are properly set
if (cal.get(Calendar.YEAR) != 23 || cal.get(Calendar.MONTH) != Calendar.JULY
|| cal.get(ChineseCalendar.IS_LEAP_MONTH) != 1 || cal.get(Calendar.DATE) != 2
|| cal.get(Calendar.MILLISECONDS_IN_DAY) != 0) {
errln("ChineseCalendar was initialized incorrectly with year,month,isLeapMonth,date");
}
}
{
// new ChineseCalendar(int year, int month, int isLeapMonth, int date, int hour, int minute, int second)
ChineseCalendar cal = new ChineseCalendar(23, Calendar.JULY, 1, 2, 12, 34, 56);
if(cal == null){
errln("could not create ChineseCalendar with year,month,isLeapMonth,date,hour,minute,second");
}
// Make sure the given values are properly set
if (cal.get(Calendar.YEAR) != 23 || cal.get(Calendar.MONTH) != Calendar.JULY
|| cal.get(ChineseCalendar.IS_LEAP_MONTH) != 1 || cal.get(Calendar.DATE) != 2
|| cal.get(Calendar.HOUR_OF_DAY) != 12 || cal.get(Calendar.MINUTE) != 34
|| cal.get(Calendar.SECOND) != 56 || cal.get(Calendar.MILLISECOND) != 0) {
errln("ChineseCalendar was initialized incorrectly with year,month,isLeapMonth,date,hour,minute,second");
}
}
{
// new ChineseCalendar(Locale)
ChineseCalendar cal = new ChineseCalendar(Locale.getDefault());
if(cal == null){
errln("could not create ChineseCalendar with Locale");
}
}
{
// new ChineseCalendar(ULocale)
ChineseCalendar cal = new ChineseCalendar(ULocale.getDefault());
if(cal == null){
errln("could not create ChineseCalendar with ULocale");
}
}
{
// new ChineseCalendar(TimeZone)
ChineseCalendar cal = new ChineseCalendar(TimeZone.getDefault());
if(cal == null){
errln("could not create ChineseCalendar with TimeZone");
}
}
{
// new ChineseCalendar(TimeZone, Locale)
ChineseCalendar cal = new ChineseCalendar(TimeZone.getDefault(), Locale.getDefault());
if(cal == null){
errln("could not create ChineseCalendar with TimeZone,Locale");
}
}
{
// new ChineseCalendar(TimeZone, ULocale)
ChineseCalendar cal = new ChineseCalendar(TimeZone.getDefault(), ULocale.getDefault());
if(cal == null){
errln("could not create ChineseCalendar with TimeZone,ULocale");
}
}
ChineseCalendar cal = new ChineseCalendar();
DateFormat format = DateFormat.getInstance(cal);
if(!(format instanceof ChineseDateFormat)){
@ -553,7 +632,7 @@ public class ChineseTest extends CalendarTest {
time = getDate(2001, Calendar.MAY, 23);
str = fmt.format(time);
logln("Chinese calendar time: " + time + " result: " + str);
}
}
}
public void TestScratch(){
String[] strMonths = {"Januari", "Pebruari", "Maret", "April", "Mei", "Juni",

View File

@ -1,20 +1,21 @@
/*********************************************************************
* Copyright (C) 2000-2007, International Business Machines
* Copyright (C) 2000-2008, International Business Machines
* Corporation and others. All Rights Reserved.
*********************************************************************
*/
package com.ibm.icu.util;
import com.ibm.icu.text.*;
import com.ibm.icu.util.TimeZone;
import com.ibm.icu.impl.CalendarAstronomer;
import com.ibm.icu.impl.CalendarCache;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.Date;
import java.util.Locale;
import com.ibm.icu.impl.CalendarAstronomer;
import com.ibm.icu.impl.CalendarCache;
import com.ibm.icu.text.ChineseDateFormat;
import com.ibm.icu.text.DateFormat;
/**
* <code>ChineseCalendar</code> is a concrete subclass of {@link Calendar}
* that implements a traditional Chinese calendar. The traditional Chinese
@ -135,7 +136,7 @@ public class ChineseCalendar extends Calendar {
//------------------------------------------------------------------
/**
* Construct a Chinese calendar with the default time zone and locale.
* Construct a <code>ChineseCalendar</code> with the default time zone and locale.
* @stable ICU 2.8
*/
public ChineseCalendar() {
@ -144,20 +145,140 @@ public class ChineseCalendar extends Calendar {
}
/**
* Construct a Chinese calendar with the given time zone and locale.
* @param zone time zone for this calendar
* @param locale locale for this calendar
* @stable ICU 2.8
* Construct a <code>ChineseCalendar</code> with the give date set in the default time zone
* with the default locale.
* @param date The date to which the new calendar is set.
* @draft ICU 4.0
* @provisional This API might change or be removed in a future release.
*/
public ChineseCalendar(TimeZone zone, Locale locale) {
super(zone, locale);
public ChineseCalendar(Date date) {
super();
setTime(date);
}
/**
* Constructs a <code>ChineseCalendar</code> with the given date set
* in the default time zone with the default locale.
*
* @param year The value used to set the calendar's {@link #YEAR YEAR} time field.
* @param month The value used to set the calendar's {@link #MONTH MONTH} time field.
* The value is 0-based. e.g., 0 for January.
* @param isLeapMonth The value used to set the Chiense calendar's (@link #IS_LEAP_MONTH)
* time field.
* @param date The value used to set the calendar's {@link #DATE DATE} time field.
* @draft ICU 4.0
* @provisional This API might change or be removed in a future release.
*/
public ChineseCalendar(int year, int month, int isLeapMonth, int date) {
super(TimeZone.getDefault(), ULocale.getDefault());
// We need to set the current time once to initialize the ChineseCalendar's
// ERA field to be the current era.
setTimeInMillis(System.currentTimeMillis());
// Then we need to clean up time fields
this.set(MILLISECONDS_IN_DAY, 0);
// Then set the given field values.
this.set(YEAR, year);
this.set(MONTH, month);
this.set(IS_LEAP_MONTH, isLeapMonth);
this.set(DATE, date);
}
/**
* Constructs a <code>ChineseCalendar</code> with the given date
* and time set for the default time zone with the default locale.
*
* @param year the value used to set the {@link #YEAR YEAR} time field in the calendar.
* @param month the value used to set the {@link #MONTH MONTH} time field in the calendar.
* Note that the month value is 0-based. e.g., 0 for January.
* @param isLeapMonth the value used to set the {@link #IS_LEAP_MONTH} time field
* in the calendar.
* @param date the value used to set the {@link #DATE DATE} time field in the calendar.
* @param hour the value used to set the {@link #HOUR_OF_DAY HOUR_OF_DAY} time field
* in the calendar.
* @param minute the value used to set the {@link #MINUTE MINUTE} time field
* in the calendar.
* @param second the value used to set the {@link #SECOND SECOND} time field
* in the calendar.
* @draft ICU 4.0
* @provisional This API might change or be removed in a future release.
*/
public ChineseCalendar(int year, int month, int isLeapMonth, int date, int hour,
int minute, int second)
{
super(TimeZone.getDefault(), ULocale.getDefault());
// We need to set the current time once to initialize the ChineseCalendar's
// ERA field to be the current era.
setTimeInMillis(System.currentTimeMillis());
// Then set 0 to millisecond field
this.set(MILLISECOND, 0);
// Then, set the given field values.
this.set(YEAR, year);
this.set(MONTH, month);
this.set(IS_LEAP_MONTH, isLeapMonth);
this.set(DATE, date);
this.set(HOUR_OF_DAY, hour);
this.set(MINUTE, minute);
this.set(SECOND, second);
}
/**
* Constructs a <code>ChineseCalendar</code> based on the current time
* in the default time zone with the given locale.
* @param aLocale The given locale
* @draft ICU 4.0
* @provisional This API might change or be removed in a future release.
*/
public ChineseCalendar(Locale aLocale) {
this(TimeZone.getDefault(), aLocale);
setTimeInMillis(System.currentTimeMillis());
}
/**
* Construct a Chinese calendar with the given time zone and locale.
* @param zone time zone for this calendar
* @param locale ulocale for this calendar
* Construct a <code>ChineseCalendar</code> based on the current time
* in the given time zone with the default locale.
* @param zone the given time zone
* @draft ICU 4.0
* @provisional This API might change or be removed in a future release.
*/
public ChineseCalendar(TimeZone zone) {
super(zone, ULocale.getDefault());
setTimeInMillis(System.currentTimeMillis());
}
/**
* Construct a <code>ChineseCalendar</code> based on the current time
* in the given time zone with the given locale.
* @param zone the given time zone
* @param aLocale the given locale
* @stable ICU 2.8
*/
public ChineseCalendar(TimeZone zone, Locale aLocale) {
super(zone, aLocale);
setTimeInMillis(System.currentTimeMillis());
}
/**
* Constructs a <code>ChineseCalendar</code> based on the current time
* in the default time zone with the given locale.
*
* @param locale the given ulocale
* @draft ICU 4.0
* @provisional This API might change or be removed in a future release.
*/
public ChineseCalendar(ULocale locale) {
this(TimeZone.getDefault(), locale);
setTimeInMillis(System.currentTimeMillis());
}
/**
* Construct a <code>ChineseCalendar</code> based on the current time
* with the given time zone with the given locale.
* @param zone the given time zone
* @param locale the given ulocale
* @stable ICU 3.2
*/
public ChineseCalendar(TimeZone zone, ULocale locale) {