Path: blob/master/test/jdk/java/util/Calendar/CalendarTestScripts/CalendarAdapter.java
41152 views
/*1* Copyright (c) 2007, 2019, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/222324import java.util.Calendar;25import sun.util.calendar.CalendarUtils;2627public class CalendarAdapter extends Calendar {28public static enum Type {29GREGORIAN, BUDDHIST, JAPANESE;30}3132static final String[] FIELD_NAMES = {33"ERA", "YEAR", "MONTH", "WEEK_OF_YEAR", "WEEK_OF_MONTH", "DAY_OF_MONTH",34"DAY_OF_YEAR", "DAY_OF_WEEK", "DAY_OF_WEEK_IN_MONTH", "AM_PM", "HOUR",35"HOUR_OF_DAY", "MINUTE", "SECOND", "MILLISECOND", "ZONE_OFFSET",36"DST_OFFSET"37};3839Calendar cal;40GregorianAdapter gcal;41private Type type;4243public CalendarAdapter(Calendar cal) {44if (cal == null)45throw new NullPointerException();4647this.cal = cal;48if (cal instanceof sun.util.BuddhistCalendar) {49type = Type.BUDDHIST;50} else if (cal instanceof GregorianAdapter) {51type = Type.GREGORIAN;52gcal = (GregorianAdapter) cal;53} else {54type = Type.JAPANESE;55}56}5758public void setFirstDayOfWeek(int w) {59cal.setFirstDayOfWeek(w);60}6162public int getFirstDayOfWeek() {63return cal.getFirstDayOfWeek();64}6566public void setMinimalDaysInFirstWeek(int value) {67cal.setMinimalDaysInFirstWeek(value);68}6970public int getMinimalDaysInFirstWeek() {71return getMinimalDaysInFirstWeek();72}7374public long getTimeInMillis() {75return cal.getTimeInMillis();76}7778public void setTimeInMillis(long millis) {79cal.setTimeInMillis(millis);80}8182public int get(int field) {83return cal.get(field);84}8586public void set(int field, int value) {87cal.set(field, value);88}8990public void add(int field, int amount) {91cal.add(field, amount);92}9394public void roll(int field, boolean dir) {95cal.roll(field, dir);96}9798public void roll(int field, int amount) {99cal.roll(field, amount);100}101102public void setDate(int year, int month, int date)103{104cal.set(year, month, date);105}106107public void setDate(int era, int year, int month, int date) {108cal.set(ERA, era);109cal.set(year, month, date);110}111112public void setDateTime(int year, int month, int date, int hourOfDay, int minute, int second)113{114cal.set(year, month, date, hourOfDay, minute, second);115}116117public void clearAll() {118cal.clear();119}120121public void clearField(int field)122{123cal.clear(field);124}125126public boolean isSetField(int field)127{128return cal.isSet(field);129}130131public int getMaximum(int field) {132return cal.getMaximum(field);133}134135public int getLeastMaximum(int field) {136return cal.getLeastMaximum(field);137}138139public int getActualMaximum(int field) {140return cal.getActualMaximum(field);141}142143public int getMinimum(int field) {144return cal.getMinimum(field);145}146147public int getGreatestMinimum(int field) {148return cal.getGreatestMinimum(field);149}150151public int getActualMinimum(int field) {152return cal.getActualMinimum(field);153}154155public void setLenient(boolean lenient) {156cal.setLenient(lenient);157}158159public String toString() {160return cal.toString();161}162163protected void computeFields() {164}165166protected void computeTime() {167}168169void setTimeOfDay(int hourOfDay, int minute, int second, int ms) {170cal.set(HOUR_OF_DAY, hourOfDay);171cal.set(MINUTE, minute);172cal.set(SECOND, second);173cal.set(MILLISECOND, ms);174}175176// GregorianAdapter specific methods177178// When gcal is null, the methods throw a NPE.179180int getSetStateFields() {181return gcal.getSetStateFields();182}183184int[] getFields() {185return gcal.getFields();186}187188boolean checkInternalDate(int year, int month, int dayOfMonth) {189return gcal.checkInternalDate(year, month, dayOfMonth);190}191192boolean checkInternalDate(int year, int month, int dayOfMonth, int dayOfWeek) {193return gcal.checkInternalDate(year, month, dayOfMonth, dayOfWeek);194}195196boolean checkInternalField(int field, int expectedValue) {197return checkInternalField(field, expectedValue);198}199200// check methods201202boolean checkAllSet() {203initTest();204for (int i = 0; i < FIELD_COUNT; i++) {205checkFieldState(i, true);206}207return getStatus();208}209210boolean checkMaximum(int field, int expectedValue) {211int val;212if ((val = getMaximum(field)) != expectedValue) {213appendMessage("getMaximum("+FIELD_NAMES[field]+"): got " + val214+ " expected " + expectedValue);215}216return getStatus();217}218219boolean checkActualMaximum(int field, int expectedValue) {220int val;221if ((val = getActualMaximum(field)) != expectedValue) {222appendMessage("getActualMaximum("+FIELD_NAMES[field]+"): got " + val223+ " expected " + expectedValue);224}225return getStatus();226}227228boolean checkLeastMaximum(int field, int expectedValue) {229int val;230if ((val = getLeastMaximum(field)) != expectedValue) {231appendMessage("getLeastMaximum("+FIELD_NAMES[field]+"): got " + val232+ " expected " + expectedValue);233}234return getStatus();235}236237boolean checkMinimum(int field, int expectedValue) {238int val;239if ((val = getMinimum(field)) != expectedValue) {240appendMessage("getMinimum("+FIELD_NAMES[field]+"): got " + val241+ " expected " + expectedValue);242}243return getStatus();244}245246boolean checkActualMinimum(int field, int expectedValue) {247int val;248if ((val = getActualMinimum(field)) != expectedValue) {249appendMessage("getActualMinimum("+FIELD_NAMES[field]+"): got " + val250+ " expected " + expectedValue);251}252return getStatus();253}254255boolean checkGreatestMinimum(int field, int expectedValue) {256int val;257if ((val = getGreatestMinimum(field)) != expectedValue) {258appendMessage("getGreatestMinimum("+FIELD_NAMES[field]+"): got " + val259+ " expected " + expectedValue);260}261return getStatus();262}263264boolean checkDate(int year, int month, int dayOfMonth) {265initTest();266checkField(YEAR, year);267checkField(MONTH, month);268checkField(DAY_OF_MONTH, dayOfMonth);269return getStatus();270}271272boolean checkDate(int era, int year, int month, int dayOfMonth) {273initTest();274checkField(ERA, era);275checkField(YEAR, year);276checkField(MONTH, month);277checkField(DAY_OF_MONTH, dayOfMonth);278return getStatus();279}280281boolean checkDateTime(int year, int month, int dayOfMonth,282int hourOfDay, int minute, int second) {283initTest();284checkField(YEAR, year);285checkField(MONTH, month);286checkField(DAY_OF_MONTH, dayOfMonth);287checkField(HOUR_OF_DAY, hourOfDay);288checkField(MINUTE, minute);289checkField(SECOND, second);290return getStatus();291}292293boolean checkDateTime(int year, int month, int dayOfMonth,294int hourOfDay, int minute, int second, int ms) {295initTest();296checkField(YEAR, year);297checkField(MONTH, month);298checkField(DAY_OF_MONTH, dayOfMonth);299checkField(HOUR_OF_DAY, hourOfDay);300checkField(MINUTE, minute);301checkField(SECOND, second);302checkField(MILLISECOND, ms);303return getStatus();304}305306boolean checkTimeOfDay(int hourOfDay, int minute, int second, int ms) {307initTest();308checkField(HOUR_OF_DAY, hourOfDay);309checkField(MINUTE, minute);310checkField(SECOND, second);311checkField(MILLISECOND, ms);312return getStatus();313}314315boolean checkMillis(long millis) {316initTest();317long t = cal.getTimeInMillis();318if (t != millis) {319appendMessage("wrong millis: got " + t + ", expected " + millis);320return false;321}322return true;323}324325boolean checkFieldState(int field, boolean expectedState) {326if (isSet(field) != expectedState) {327appendMessage(FIELD_NAMES[field] + " state is not " + expectedState + "; ");328return false;329}330return true;331}332333boolean checkField(int field, int expectedValue) {334int val;335if ((val = get(field)) != expectedValue) {336appendMessage("get(" + FIELD_NAMES[field] + "): got " + val +337", expected " + expectedValue + "; ");338return false;339}340return true;341}342343static final String fieldName(int field) {344return FIELD_NAMES[field];345}346347String toDateString() {348StringBuffer sb = new StringBuffer();349String[] eraNames = null;350switch (type) {351case GREGORIAN:352eraNames = new String[] { "BCE", "" };353break;354355case BUDDHIST:356eraNames = new String[] { "Before BE", "BE"};357break;358359case JAPANESE:360eraNames = new String[] {361"BeforeMeiji",362"Meiji",363"Taisho",364"Showa",365"Heisei",366"Reiwa"367};368break;369}370371sb.append(eraNames[cal.get(ERA)]);372if (sb.length() > 0)373sb.append(' ');374CalendarUtils.sprintf0d(sb, cal.get(YEAR), 4).append('-');375CalendarUtils.sprintf0d(sb, cal.get(MONTH)+1, 2).append('-');376CalendarUtils.sprintf0d(sb, cal.get(DAY_OF_MONTH), 2);377return sb.toString();378}379380String toTimeString() {381StringBuffer sb = new StringBuffer();382CalendarUtils.sprintf0d(sb, cal.get(HOUR_OF_DAY), 2).append(':');383CalendarUtils.sprintf0d(sb, cal.get(MINUTE), 2).append(':');384CalendarUtils.sprintf0d(sb, cal.get(SECOND),2 ).append('.');385CalendarUtils.sprintf0d(sb, cal.get(MILLISECOND), 3);386int zoneOffset = cal.get(ZONE_OFFSET) + cal.get(DST_OFFSET);387if (zoneOffset == 0) {388sb.append('Z');389} else {390int offset;391char sign;392if (zoneOffset > 0) {393offset = zoneOffset;394sign = '+';395} else {396offset = -zoneOffset;397sign = '-';398}399offset /= 60000;400sb.append(sign);401CalendarUtils.sprintf0d(sb, offset / 60, 2);402CalendarUtils.sprintf0d(sb, offset % 60, 2);403}404return sb.toString();405}406407String toDateTimeString() {408return toDateString() + "T" + toTimeString();409}410411// Message handling412413StringBuffer msg = new StringBuffer();414415private void initTest() {416msg = new StringBuffer();417}418419String getMessage() {420String s = msg.toString();421msg = new StringBuffer();422return " " + s;423}424425private void setMessage(String msg) {426this.msg = new StringBuffer(msg);427}428429private void appendMessage(String msg) {430this.msg.append(msg);431}432433boolean getStatus() {434return msg.length() == 0;435}436}437438439