/*
* 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 org.apache.harmony.tests.java.util;
import tests.support.Support_TimeZone;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Locale;
import java.util.SimpleTimeZone;
import java.util.TimeZone;
public class TimeZoneTest extends junit.framework.TestCase {
private static final int ONE_HOUR = 3600000;
private TimeZone processDefault;
/**
* java.util.TimeZone#getDefault()
*/
public void test_getDefault() {
assertNotSame("returns identical",
TimeZone.getDefault(), TimeZone.getDefault());
}
/**
* java.util.TimeZone#getDSTSavings()
*/
public void test_getDSTSavings() {
// Test for method int java.util.TimeZone.getDSTSavings()
// test on subclass SimpleTimeZone
TimeZone st1 = TimeZone.getTimeZone("America/New_York");
assertEquals("T1A. Incorrect daylight savings returned",
ONE_HOUR, st1.getDSTSavings());
// a SimpleTimeZone with daylight savings different then 1 hour
st1 = TimeZone.getTimeZone("Australia/Lord_Howe");
assertEquals("T1B. Incorrect daylight savings returned",
1800000, st1.getDSTSavings());
// test on subclass Support_TimeZone, an instance with daylight savings
TimeZone tz1 = new Support_TimeZone(-5 * ONE_HOUR, true);
assertEquals("T2. Incorrect daylight savings returned",
ONE_HOUR, tz1.getDSTSavings());
// an instance without daylight savings
tz1 = new Support_TimeZone(3 * ONE_HOUR, false);
assertEquals("T3. Incorrect daylight savings returned, ",
0, tz1.getDSTSavings());
}
/**
* java.util.TimeZone#getOffset(long)
*/
public void test_getOffset_long() {
// Test for method int java.util.TimeZone.getOffset(long time)
// test on subclass SimpleTimeZone
TimeZone st1 = TimeZone.getTimeZone("EST");
long time1 = new GregorianCalendar(1998, Calendar.NOVEMBER, 11)
.getTimeInMillis();
assertEquals("T1. Incorrect offset returned",
-(5 * ONE_HOUR), st1.getOffset(time1));
long time2 = new GregorianCalendar(1998, Calendar.JUNE, 11)
.getTimeInMillis();
st1 = TimeZone.getTimeZone("EST");
assertEquals("T2. Incorrect offset returned",
-(5 * ONE_HOUR), st1.getOffset(time2));
// test on subclass Support_TimeZone, an instance with daylight savings
TimeZone tz1 = new Support_TimeZone(-5 * ONE_HOUR, true);
assertEquals("T3. Incorrect offset returned, ",
-(5 * ONE_HOUR), tz1.getOffset(time1));
assertEquals("T4. Incorrect offset returned, ",
-(4 * ONE_HOUR), tz1.getOffset(time2));
// an instance without daylight savings
tz1 = new Support_TimeZone(3 * ONE_HOUR, false);
assertEquals("T5. Incorrect offset returned, ",
(3 * ONE_HOUR), tz1.getOffset(time1));
assertEquals("T6. Incorrect offset returned, ",
(3 * ONE_HOUR), tz1.getOffset(time2));
}
/**
* java.util.TimeZone#getTimeZone(java.lang.String)
*/
public void test_getTimeZoneLjava_lang_String() {
assertEquals("Must return GMT when given an invalid TimeZone id SMT-8.",
"GMT", TimeZone.getTimeZone("SMT-8").getID());
assertEquals("Must return GMT when given an invalid TimeZone time GMT+28:70.",
"GMT", TimeZone.getTimeZone("GMT+28:70").getID());
assertEquals("Must return GMT when given an invalid TimeZone time GMT+28:30.",
"GMT", TimeZone.getTimeZone("GMT+28:30").getID());
assertEquals("Must return GMT when given an invalid TimeZone time GMT+8:70.",
"GMT", TimeZone.getTimeZone("GMT+8:70").getID());
assertEquals("Must return GMT when given an invalid TimeZone time GMT+3:.",
"GMT", TimeZone.getTimeZone("GMT+3:").getID());
assertEquals("Must return GMT when given an invalid TimeZone time GMT+3:0.",
"GMT", TimeZone.getTimeZone("GMT+3:0").getID());
assertEquals("Must return GMT when given an invalid TimeZone time GMT+2360.",
"GMT", TimeZone.getTimeZone("GMT+2360").getID());
assertEquals("Must return GMT when given an invalid TimeZone time GMT+892.",
"GMT", TimeZone.getTimeZone("GMT+892").getID());
assertEquals("Must return GMT when given an invalid TimeZone time GMT+082.",
"GMT", TimeZone.getTimeZone("GMT+082").getID());
assertEquals("Must return GMT when given an invalid TimeZone time GMT+28.",
"GMT", TimeZone.getTimeZone("GMT+28").getID());
assertEquals("Must return GMT when given an invalid TimeZone time GMT+30.",
"GMT", TimeZone.getTimeZone("GMT+30").getID());
assertEquals("Must return GMT when given TimeZone GMT.",
"GMT", TimeZone.getTimeZone("GMT").getID());
assertEquals("Must return GMT when given TimeZone GMT+.",
"GMT", TimeZone.getTimeZone("GMT+").getID());
assertEquals("Must return GMT when given TimeZone GMT-.",
"GMT", TimeZone.getTimeZone("GMT-").getID());
assertEquals("Must return GMT when given an invalid TimeZone time GMT-8.45.",
"GMT", TimeZone.getTimeZone("GMT-8.45").getID());
assertEquals("Must return GMT when given an invalid TimeZone time GMT-123:23.",
"GMT", TimeZone.getTimeZone("GMT-123:23").getID());
assertEquals("Must return proper GMT formatted string for GMT+8:30 (eg. GMT+08:20).",
"GMT+08:30", TimeZone.getTimeZone("GMT+8:30").getID());
assertEquals("Must return proper GMT formatted string for GMT+3 (eg. GMT+08:20).",
"GMT+03:00", TimeZone.getTimeZone("GMT+3").getID());
assertEquals("Must return proper GMT formatted string for GMT+3:02 (eg. GMT+08:20).",
"GMT+03:02", TimeZone.getTimeZone("GMT+3:02").getID());
assertEquals("Must return proper GMT formatted string for GMT+2359 (eg. GMT+08:20).",
"GMT+23:59", TimeZone.getTimeZone("GMT+2359").getID());
assertEquals("Must return proper GMT formatted string for GMT+520 (eg. GMT+08:20).",
"GMT+05:20", TimeZone.getTimeZone("GMT+520").getID());
assertEquals("Must return proper GMT formatted string for GMT+052 (eg. GMT+08:20).",
"GMT+00:52", TimeZone.getTimeZone("GMT+052").getID());
// GMT-0 is an available ID in ICU, so replace it with GMT-00
assertEquals("Must return proper GMT formatted string for GMT-00 (eg. GMT+08:20).",
"GMT-00:00", TimeZone.getTimeZone("GMT-00").getID());
}
/**
* java.util.TimeZone#setDefault(java.util.TimeZone)
*/
public void test_setDefaultLjava_util_TimeZone() {
// NOTE: Required to get tests passing under vogar. Vogar sets
// a hardcoded timezone before running every test, so we have to
// set it back to the "real" default before we run the test.
TimeZone.setDefault(null);
TimeZone oldDefault = TimeZone.getDefault();
TimeZone zone = new SimpleTimeZone(45, "TEST");
TimeZone.setDefault(zone);
assertEquals("timezone not set", zone, TimeZone.getDefault());
TimeZone.setDefault(null);
assertEquals("default not restored",
oldDefault, TimeZone.getDefault());
}
/**
* java.util.TimeZone#getDisplayName(java.util.Locale)
*/
public void test_getDisplayNameLjava_util_Locale() {
TimeZone timezone = TimeZone.getTimeZone("Asia/Shanghai");
assertEquals("\u4e2d\u56fd\u6807\u51c6\u65f6\u95f4", timezone
.getDisplayName(Locale.CHINA));
}
/**
* java.util.TimeZone#getDisplayName(boolean, int, java.util.Locale)
*/
public void test_getDisplayNameZILjava_util_Locale() {
TimeZone timezone = TimeZone.getTimeZone("Asia/Shanghai");
/* Time zone data was changed in ICU49.2. Many common short names were removed. */
assertEquals("中国标准时间",
timezone.getDisplayName(false, TimeZone.LONG, Locale.CHINA));
assertEquals("GMT+08:00",
timezone.getDisplayName(false, TimeZone.SHORT, Locale.CHINA));
try {
timezone.getDisplayName(false, 100, Locale.CHINA);
fail("should throw IllegalArgumentException");
} catch (IllegalArgumentException e) {
// expected
}
}
/*
* Regression for HARMONY-5860
*/
public void test_GetTimezoneOffset() {
// America/Toronto is lazy initialized
TimeZone.setDefault(TimeZone.getTimeZone("America/Toronto"));
Date date = new Date(07, 2, 24);
assertEquals(300, date.getTimezoneOffset());
date = new Date(99, 8, 1);
assertEquals(240, date.getTimezoneOffset());
}
protected void setUp() {
processDefault = TimeZone.getDefault();
}
protected void tearDown() {
TimeZone.setDefault(processDefault);
}
public void test_getAvailableIDs_I_16947622() {
TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles");
int rawOffset = tz.getRawOffset();
assertEquals(-8 * 60 * 60 * 1000, rawOffset);
List<String> ids = Arrays.asList(TimeZone.getAvailableIDs(rawOffset));
// Obviously, for all time zones, the time zone whose raw offset we started with
// should be one of the available ids for that offset.
assertTrue(ids.toString(), ids.contains("America/Los_Angeles"));
// Any one of these might legitimately change its raw offset, though that's
// fairly unlikely, and the chances of more than one changing are very slim.
assertTrue(ids.toString(), ids.contains("America/Dawson"));
assertTrue(ids.toString(), ids.contains("America/Tijuana"));
assertTrue(ids.toString(), ids.contains("America/Vancouver"));
assertTrue(ids.toString(), ids.contains("Canada/Pacific"));
assertTrue(ids.toString(), ids.contains("Canada/Yukon"));
assertTrue(ids.toString(), ids.contains("Pacific/Pitcairn"));
}
public void test_getAvailableIDs_I() {
TimeZone tz = TimeZone.getTimeZone("Asia/Shanghai");
int rawoffset = tz.getRawOffset();
String[] ids = TimeZone.getAvailableIDs(rawoffset);
List<String> idList = Arrays.asList(ids);
assertTrue(idList.toString(), idList.contains("Asia/Hong_Kong"));
}
/**
* @add test {@link java.util.TimeZone#getDisplayName()}
*/
public void test_getDisplayName() {
TimeZone defaultZone = TimeZone.getDefault();
Locale defaulLocal = Locale.getDefault();
String defaultName = defaultZone.getDisplayName();
String expectedName = defaultZone.getDisplayName(defaulLocal);
assertEquals(
"getDispalyName() did not return the default Locale suitable name",
expectedName, defaultName);
}
/**
* @add test {@link java.util.TimeZone#getDisplayName(boolean, int)}
*/
public void test_getDisplayName_ZI() {
TimeZone defaultZone = TimeZone.getDefault();
Locale defaultLocale = Locale.getDefault();
String actualName = defaultZone.getDisplayName(false, TimeZone.LONG);
String expectedName = defaultZone.getDisplayName(false, TimeZone.LONG,
defaultLocale);
assertEquals(
"getDisplayName(daylight,style) did not return the default locale suitable name",
expectedName, actualName);
}
/**
* @add test {@link java.util.TimeZone#hasSameRules(TimeZone)}
*/
public void test_hasSameRules_Ljava_util_TimeZone() {
TimeZone tz = TimeZone.getTimeZone("Asia/Shanghai");
int offset = tz.getRawOffset();
String[] ids = TimeZone.getAvailableIDs(offset);
int i = 0;
if (ids.length != 0) {
while (true) {
if (!(ids[i].equalsIgnoreCase(tz.getID()))) {
TimeZone sameZone = TimeZone.getTimeZone(ids[i]);
assertTrue(tz.hasSameRules(sameZone));
break;
} else {
i++;
}
}
}
assertFalse("should return false when parameter is null", tz
.hasSameRules(null));
}
}