1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 package org.apache.harmony.tests.java.util; 19 20 import tests.support.Support_TimeZone; 21 import java.util.Arrays; 22 import java.util.Calendar; 23 import java.util.Date; 24 import java.util.GregorianCalendar; 25 import java.util.List; 26 import java.util.Locale; 27 import java.util.SimpleTimeZone; 28 import java.util.TimeZone; 29 30 public class TimeZoneTest extends junit.framework.TestCase { 31 32 private static final int ONE_HOUR = 3600000; 33 34 private TimeZone processDefault; 35 36 /** 37 * java.util.TimeZone#getDefault() 38 */ test_getDefault()39 public void test_getDefault() { 40 assertNotSame("returns identical", 41 TimeZone.getDefault(), TimeZone.getDefault()); 42 } 43 44 /** 45 * java.util.TimeZone#getDSTSavings() 46 */ test_getDSTSavings()47 public void test_getDSTSavings() { 48 // Test for method int java.util.TimeZone.getDSTSavings() 49 50 // test on subclass SimpleTimeZone 51 TimeZone st1 = TimeZone.getTimeZone("America/New_York"); 52 assertEquals("T1A. Incorrect daylight savings returned", 53 ONE_HOUR, st1.getDSTSavings()); 54 55 // a SimpleTimeZone with daylight savings different then 1 hour 56 st1 = TimeZone.getTimeZone("Australia/Lord_Howe"); 57 assertEquals("T1B. Incorrect daylight savings returned", 58 1800000, st1.getDSTSavings()); 59 60 // test on subclass Support_TimeZone, an instance with daylight savings 61 TimeZone tz1 = new Support_TimeZone(-5 * ONE_HOUR, true); 62 assertEquals("T2. Incorrect daylight savings returned", 63 ONE_HOUR, tz1.getDSTSavings()); 64 65 // an instance without daylight savings 66 tz1 = new Support_TimeZone(3 * ONE_HOUR, false); 67 assertEquals("T3. Incorrect daylight savings returned, ", 68 0, tz1.getDSTSavings()); 69 } 70 71 /** 72 * java.util.TimeZone#getOffset(long) 73 */ test_getOffset_long()74 public void test_getOffset_long() { 75 // Test for method int java.util.TimeZone.getOffset(long time) 76 77 // test on subclass SimpleTimeZone 78 TimeZone st1 = TimeZone.getTimeZone("EST"); 79 long time1 = new GregorianCalendar(1998, Calendar.NOVEMBER, 11) 80 .getTimeInMillis(); 81 assertEquals("T1. Incorrect offset returned", 82 -(5 * ONE_HOUR), st1.getOffset(time1)); 83 84 long time2 = new GregorianCalendar(1998, Calendar.JUNE, 11) 85 .getTimeInMillis(); 86 st1 = TimeZone.getTimeZone("EST"); 87 assertEquals("T2. Incorrect offset returned", 88 -(5 * ONE_HOUR), st1.getOffset(time2)); 89 90 // test on subclass Support_TimeZone, an instance with daylight savings 91 TimeZone tz1 = new Support_TimeZone(-5 * ONE_HOUR, true); 92 assertEquals("T3. Incorrect offset returned, ", 93 -(5 * ONE_HOUR), tz1.getOffset(time1)); 94 assertEquals("T4. Incorrect offset returned, ", 95 -(4 * ONE_HOUR), tz1.getOffset(time2)); 96 97 // an instance without daylight savings 98 tz1 = new Support_TimeZone(3 * ONE_HOUR, false); 99 assertEquals("T5. Incorrect offset returned, ", 100 (3 * ONE_HOUR), tz1.getOffset(time1)); 101 assertEquals("T6. Incorrect offset returned, ", 102 (3 * ONE_HOUR), tz1.getOffset(time2)); 103 } 104 105 /** 106 * java.util.TimeZone#getTimeZone(java.lang.String) 107 */ test_getTimeZoneLjava_lang_String()108 public void test_getTimeZoneLjava_lang_String() { 109 assertEquals("Must return GMT when given an invalid TimeZone id SMT-8.", 110 "GMT", TimeZone.getTimeZone("SMT-8").getID()); 111 assertEquals("Must return GMT when given an invalid TimeZone time GMT+28:70.", 112 "GMT", TimeZone.getTimeZone("GMT+28:70").getID()); 113 assertEquals("Must return GMT when given an invalid TimeZone time GMT+28:30.", 114 "GMT", TimeZone.getTimeZone("GMT+28:30").getID()); 115 assertEquals("Must return GMT when given an invalid TimeZone time GMT+8:70.", 116 "GMT", TimeZone.getTimeZone("GMT+8:70").getID()); 117 assertEquals("Must return GMT when given an invalid TimeZone time GMT+3:.", 118 "GMT", TimeZone.getTimeZone("GMT+3:").getID()); 119 assertEquals("Must return GMT when given an invalid TimeZone time GMT+3:0.", 120 "GMT", TimeZone.getTimeZone("GMT+3:0").getID()); 121 assertEquals("Must return GMT when given an invalid TimeZone time GMT+2360.", 122 "GMT", TimeZone.getTimeZone("GMT+2360").getID()); 123 assertEquals("Must return GMT when given an invalid TimeZone time GMT+892.", 124 "GMT", TimeZone.getTimeZone("GMT+892").getID()); 125 assertEquals("Must return GMT when given an invalid TimeZone time GMT+082.", 126 "GMT", TimeZone.getTimeZone("GMT+082").getID()); 127 assertEquals("Must return GMT when given an invalid TimeZone time GMT+28.", 128 "GMT", TimeZone.getTimeZone("GMT+28").getID()); 129 assertEquals("Must return GMT when given an invalid TimeZone time GMT+30.", 130 "GMT", TimeZone.getTimeZone("GMT+30").getID()); 131 assertEquals("Must return GMT when given TimeZone GMT.", 132 "GMT", TimeZone.getTimeZone("GMT").getID()); 133 assertEquals("Must return GMT when given TimeZone GMT+.", 134 "GMT", TimeZone.getTimeZone("GMT+").getID()); 135 assertEquals("Must return GMT when given TimeZone GMT-.", 136 "GMT", TimeZone.getTimeZone("GMT-").getID()); 137 assertEquals("Must return GMT when given an invalid TimeZone time GMT-8.45.", 138 "GMT", TimeZone.getTimeZone("GMT-8.45").getID()); 139 assertEquals("Must return GMT when given an invalid TimeZone time GMT-123:23.", 140 "GMT", TimeZone.getTimeZone("GMT-123:23").getID()); 141 assertEquals("Must return proper GMT formatted string for GMT+8:30 (eg. GMT+08:20).", 142 "GMT+08:30", TimeZone.getTimeZone("GMT+8:30").getID()); 143 assertEquals("Must return proper GMT formatted string for GMT+3 (eg. GMT+08:20).", 144 "GMT+03:00", TimeZone.getTimeZone("GMT+3").getID()); 145 assertEquals("Must return proper GMT formatted string for GMT+3:02 (eg. GMT+08:20).", 146 "GMT+03:02", TimeZone.getTimeZone("GMT+3:02").getID()); 147 assertEquals("Must return proper GMT formatted string for GMT+2359 (eg. GMT+08:20).", 148 "GMT+23:59", TimeZone.getTimeZone("GMT+2359").getID()); 149 assertEquals("Must return proper GMT formatted string for GMT+520 (eg. GMT+08:20).", 150 "GMT+05:20", TimeZone.getTimeZone("GMT+520").getID()); 151 assertEquals("Must return proper GMT formatted string for GMT+052 (eg. GMT+08:20).", 152 "GMT+00:52", TimeZone.getTimeZone("GMT+052").getID()); 153 // GMT-0 is an available ID in ICU, so replace it with GMT-00 154 assertEquals("Must return proper GMT formatted string for GMT-00 (eg. GMT+08:20).", 155 "GMT-00:00", TimeZone.getTimeZone("GMT-00").getID()); 156 } 157 158 /** 159 * java.util.TimeZone#setDefault(java.util.TimeZone) 160 */ test_setDefaultLjava_util_TimeZone()161 public void test_setDefaultLjava_util_TimeZone() { 162 // NOTE: Required to get tests passing under vogar. Vogar sets 163 // a hardcoded timezone before running every test, so we have to 164 // set it back to the "real" default before we run the test. 165 TimeZone.setDefault(null); 166 167 TimeZone oldDefault = TimeZone.getDefault(); 168 TimeZone zone = new SimpleTimeZone(45, "TEST"); 169 TimeZone.setDefault(zone); 170 assertEquals("timezone not set", zone, TimeZone.getDefault()); 171 TimeZone.setDefault(null); 172 assertEquals("default not restored", 173 oldDefault, TimeZone.getDefault()); 174 } 175 176 /** 177 * java.util.TimeZone#getDisplayName(java.util.Locale) 178 */ test_getDisplayNameLjava_util_Locale()179 public void test_getDisplayNameLjava_util_Locale() { 180 TimeZone timezone = TimeZone.getTimeZone("Asia/Shanghai"); 181 assertEquals("\u4e2d\u56fd\u6807\u51c6\u65f6\u95f4", timezone 182 .getDisplayName(Locale.CHINA)); 183 } 184 185 /** 186 * java.util.TimeZone#getDisplayName(boolean, int, java.util.Locale) 187 */ test_getDisplayNameZILjava_util_Locale()188 public void test_getDisplayNameZILjava_util_Locale() { 189 TimeZone timezone = TimeZone.getTimeZone("Asia/Shanghai"); 190 /* Time zone data was changed in ICU49.2. Many common short names were removed. */ 191 assertEquals("中国标准时间", 192 timezone.getDisplayName(false, TimeZone.LONG, Locale.CHINA)); 193 assertEquals("GMT+08:00", 194 timezone.getDisplayName(false, TimeZone.SHORT, Locale.CHINA)); 195 try { 196 timezone.getDisplayName(false, 100, Locale.CHINA); 197 fail("should throw IllegalArgumentException"); 198 } catch (IllegalArgumentException e) { 199 // expected 200 } 201 } 202 203 /* 204 * Regression for HARMONY-5860 205 */ test_GetTimezoneOffset()206 public void test_GetTimezoneOffset() { 207 // America/Toronto is lazy initialized 208 TimeZone.setDefault(TimeZone.getTimeZone("America/Toronto")); 209 Date date = new Date(07, 2, 24); 210 assertEquals(300, date.getTimezoneOffset()); 211 date = new Date(99, 8, 1); 212 assertEquals(240, date.getTimezoneOffset()); 213 } 214 setUp()215 protected void setUp() { 216 processDefault = TimeZone.getDefault(); 217 } 218 tearDown()219 protected void tearDown() { 220 TimeZone.setDefault(processDefault); 221 } 222 test_getAvailableIDs_I_16947622()223 public void test_getAvailableIDs_I_16947622() { 224 TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles"); 225 int rawOffset = tz.getRawOffset(); 226 assertEquals(-8 * 60 * 60 * 1000, rawOffset); 227 List<String> ids = Arrays.asList(TimeZone.getAvailableIDs(rawOffset)); 228 229 // Obviously, for all time zones, the time zone whose raw offset we started with 230 // should be one of the available ids for that offset. 231 assertTrue(ids.toString(), ids.contains("America/Los_Angeles")); 232 233 // Any one of these might legitimately change its raw offset, though that's 234 // fairly unlikely, and the chances of more than one changing are very slim. 235 assertTrue(ids.toString(), ids.contains("America/Tijuana")); 236 assertTrue(ids.toString(), ids.contains("America/Ensenada")); // Alias for America/Tijuana 237 assertTrue(ids.toString(), ids.contains("America/Vancouver")); 238 assertTrue(ids.toString(), ids.contains("Canada/Pacific")); // Alias for America/Vancouver 239 assertTrue(ids.toString(), ids.contains("Pacific/Pitcairn")); 240 } 241 test_getAvailableIDs_I()242 public void test_getAvailableIDs_I() { 243 TimeZone tz = TimeZone.getTimeZone("Asia/Shanghai"); 244 int rawoffset = tz.getRawOffset(); 245 String[] ids = TimeZone.getAvailableIDs(rawoffset); 246 List<String> idList = Arrays.asList(ids); 247 assertTrue(idList.toString(), idList.contains("Asia/Hong_Kong")); 248 } 249 250 /** 251 * @add test {@link java.util.TimeZone#getDisplayName()} 252 */ test_getDisplayName()253 public void test_getDisplayName() { 254 TimeZone defaultZone = TimeZone.getDefault(); 255 Locale defaulLocal = Locale.getDefault(); 256 String defaultName = defaultZone.getDisplayName(); 257 String expectedName = defaultZone.getDisplayName(defaulLocal); 258 assertEquals( 259 "getDispalyName() did not return the default Locale suitable name", 260 expectedName, defaultName); 261 } 262 263 /** 264 * @add test {@link java.util.TimeZone#getDisplayName(boolean, int)} 265 */ test_getDisplayName_ZI()266 public void test_getDisplayName_ZI() { 267 TimeZone defaultZone = TimeZone.getDefault(); 268 Locale defaultLocale = Locale.getDefault(); 269 String actualName = defaultZone.getDisplayName(false, TimeZone.LONG); 270 String expectedName = defaultZone.getDisplayName(false, TimeZone.LONG, 271 defaultLocale); 272 assertEquals( 273 "getDisplayName(daylight,style) did not return the default locale suitable name", 274 expectedName, actualName); 275 } 276 277 /** 278 * @add test {@link java.util.TimeZone#hasSameRules(TimeZone)} 279 */ test_hasSameRules_Ljava_util_TimeZone()280 public void test_hasSameRules_Ljava_util_TimeZone() { 281 TimeZone tz = TimeZone.getTimeZone("Asia/Shanghai"); 282 int offset = tz.getRawOffset(); 283 284 String[] ids = TimeZone.getAvailableIDs(offset); 285 int i = 0; 286 if (ids.length != 0) { 287 while (true) { 288 if (!(ids[i].equalsIgnoreCase(tz.getID()))) { 289 TimeZone sameZone = TimeZone.getTimeZone(ids[i]); 290 assertTrue(tz.hasSameRules(sameZone)); 291 break; 292 } else { 293 i++; 294 } 295 } 296 } 297 assertFalse("should return false when parameter is null", tz 298 .hasSameRules(null)); 299 } 300 } 301