TimeZoneTest.java revision 4ec8405ab284c5f076589684d533f67815b3b9aa
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 18package tests.api.java.util; 19 20import dalvik.annotation.BrokenTest; 21import dalvik.annotation.TestTargetNew; 22import dalvik.annotation.TestTargets; 23import dalvik.annotation.TestLevel; 24import dalvik.annotation.TestTargetClass; 25import dalvik.annotation.KnownFailure; 26import dalvik.annotation.AndroidOnly; 27 28import java.util.Calendar; 29import java.util.Date; 30import java.util.GregorianCalendar; 31import java.util.Locale; 32import java.util.SimpleTimeZone; 33import java.util.TimeZone; 34 35import tests.support.Support_Locale; 36import tests.support.Support_TimeZone; 37 38@TestTargetClass(TimeZone.class) 39public class TimeZoneTest extends junit.framework.TestCase { 40 41 private static final int ONE_HOUR = 3600000; 42 43 /** 44 * @tests java.util.TimeZone#getDefault() 45 */ 46 @TestTargetNew( 47 level = TestLevel.COMPLETE, 48 notes = "", 49 method = "getDefault", 50 args = {} 51 ) 52 public void test_getDefault() { 53 assertNotSame("returns identical", 54 TimeZone.getDefault(), TimeZone.getDefault()); 55 } 56 57 /** 58 * @tests java.util.TimeZone#getDSTSavings() 59 */ 60 @TestTargetNew( 61 level = TestLevel.COMPLETE, 62 notes = "", 63 method = "getDSTSavings", 64 args = {} 65 ) 66 @KnownFailure("Might be a difference in data.") 67 public void test_getDSTSavings() { 68 // Test for method int java.util.TimeZone.getDSTSavings() 69 70 // test on subclass SimpleTimeZone 71 TimeZone st1 = TimeZone.getTimeZone("America/New_York"); 72 assertEquals("T1A. Incorrect daylight savings returned", 73 ONE_HOUR, st1.getDSTSavings()); 74 75 // a SimpleTimeZone with daylight savings different then 1 hour 76 st1 = TimeZone.getTimeZone("Australia/Lord_Howe"); 77 assertEquals("T1B. Incorrect daylight savings returned", 78 1800000, st1.getDSTSavings()); 79 80 // test on subclass Support_TimeZone, an instance with daylight savings 81 TimeZone tz1 = new Support_TimeZone(-5 * ONE_HOUR, true); 82 assertEquals("T2. Incorrect daylight savings returned", 83 ONE_HOUR, tz1.getDSTSavings()); 84 85 // an instance without daylight savings 86 tz1 = new Support_TimeZone(3 * ONE_HOUR, false); 87 assertEquals("T3. Incorrect daylight savings returned, ", 88 0, tz1.getDSTSavings()); 89 } 90 91 /** 92 * @tests java.util.TimeZone#getOffset(long) 93 */ 94 @TestTargetNew( 95 level = TestLevel.COMPLETE, 96 notes = "", 97 method = "getOffset", 98 args = {long.class} 99 ) 100 public void test_getOffset_long() { 101 // Test for method int java.util.TimeZone.getOffset(long time) 102 103 // test on subclass SimpleTimeZone 104 TimeZone st1 = TimeZone.getTimeZone("EST"); 105 long time1 = new GregorianCalendar(1998, Calendar.NOVEMBER, 11) 106 .getTimeInMillis(); 107 assertEquals("T1. Incorrect offset returned", 108 -(5 * ONE_HOUR), st1.getOffset(time1)); 109 110 long time2 = new GregorianCalendar(1998, Calendar.JUNE, 11) 111 .getTimeInMillis(); 112// Not working as expected on RI. 113// st1 = TimeZone.getTimeZone("EST"); 114// assertEquals("T2. Incorrect offset returned", 115// -(4 * ONE_HOUR), st1.getOffset(time2)); 116 117 // test on subclass Support_TimeZone, an instance with daylight savings 118 TimeZone tz1 = new Support_TimeZone(-5 * ONE_HOUR, true); 119 assertEquals("T3. Incorrect offset returned, ", 120 -(5 * ONE_HOUR), tz1.getOffset(time1)); 121 assertEquals("T4. Incorrect offset returned, ", 122 -(4 * ONE_HOUR), tz1.getOffset(time2)); 123 124 // an instance without daylight savings 125 tz1 = new Support_TimeZone(3 * ONE_HOUR, false); 126 assertEquals("T5. Incorrect offset returned, ", 127 (3 * ONE_HOUR), tz1.getOffset(time1)); 128 assertEquals("T6. Incorrect offset returned, ", 129 (3 * ONE_HOUR), tz1.getOffset(time2)); 130 } 131 132 /** 133 * @tests java.util.TimeZone#getTimeZone(java.lang.String) 134 */ 135 @TestTargetNew( 136 level = TestLevel.COMPLETE, 137 notes = "", 138 method = "getTimeZone", 139 args = {java.lang.String.class} 140 ) 141 @KnownFailure("Android fails the last test.") 142 public void test_getTimeZoneLjava_lang_String() { 143 assertEquals("Must return GMT when given an invalid TimeZone id SMT-8.", 144 "GMT", TimeZone.getTimeZone("SMT-8").getID()); 145 assertEquals("Must return GMT when given an invalid TimeZone time GMT+28:70.", 146 "GMT", TimeZone.getTimeZone("GMT+28:70").getID()); 147 assertEquals("Must return GMT when given an invalid TimeZone time GMT+28:30.", 148 "GMT", TimeZone.getTimeZone("GMT+28:30").getID()); 149 assertEquals("Must return GMT when given an invalid TimeZone time GMT+8:70.", 150 "GMT", TimeZone.getTimeZone("GMT+8:70").getID()); 151 assertEquals("Must return GMT when given an invalid TimeZone time GMT+3:.", 152 "GMT", TimeZone.getTimeZone("GMT+3:").getID()); 153 assertEquals("Must return GMT when given an invalid TimeZone time GMT+3:0.", 154 "GMT", TimeZone.getTimeZone("GMT+3:0").getID()); 155 assertEquals("Must return GMT when given an invalid TimeZone time GMT+2360.", 156 "GMT", TimeZone.getTimeZone("GMT+2360").getID()); 157 assertEquals("Must return GMT when given an invalid TimeZone time GMT+892.", 158 "GMT", TimeZone.getTimeZone("GMT+892").getID()); 159 assertEquals("Must return GMT when given an invalid TimeZone time GMT+082.", 160 "GMT", TimeZone.getTimeZone("GMT+082").getID()); 161 assertEquals("Must return GMT when given an invalid TimeZone time GMT+28.", 162 "GMT", TimeZone.getTimeZone("GMT+28").getID()); 163 assertEquals("Must return GMT when given an invalid TimeZone time GMT+30.", 164 "GMT", TimeZone.getTimeZone("GMT+30").getID()); 165 assertEquals("Must return GMT when given TimeZone GMT.", 166 "GMT", TimeZone.getTimeZone("GMT").getID()); 167 assertEquals("Must return GMT when given TimeZone GMT+.", 168 "GMT", TimeZone.getTimeZone("GMT+").getID()); 169 assertEquals("Must return GMT when given TimeZone GMT-.", 170 "GMT", TimeZone.getTimeZone("GMT-").getID()); 171 assertEquals("Must return GMT when given an invalid TimeZone time GMT-8.45.", 172 "GMT", TimeZone.getTimeZone("GMT-8.45").getID()); 173 assertEquals("Must return GMT when given an invalid TimeZone time GMT-123:23.", 174 "GMT", TimeZone.getTimeZone("GMT-123:23").getID()); 175 assertEquals("Must return proper GMT formatted string for GMT+8:30 (eg. GMT+08:20).", 176 "GMT+08:30", TimeZone.getTimeZone("GMT+8:30").getID()); 177 assertEquals("Must return proper GMT formatted string for GMT+3 (eg. GMT+08:20).", 178 "GMT+03:00", TimeZone.getTimeZone("GMT+3").getID()); 179 assertEquals("Must return proper GMT formatted string for GMT+3:02 (eg. GMT+08:20).", 180 "GMT+03:02", TimeZone.getTimeZone("GMT+3:02").getID()); 181 assertEquals("Must return proper GMT formatted string for GMT+2359 (eg. GMT+08:20).", 182 "GMT+23:59", TimeZone.getTimeZone("GMT+2359").getID()); 183 assertEquals("Must return proper GMT formatted string for GMT+520 (eg. GMT+08:20).", 184 "GMT+05:20", TimeZone.getTimeZone("GMT+520").getID()); 185 assertEquals("Must return proper GMT formatted string for GMT+052 (eg. GMT+08:20).", 186 "GMT+00:52", TimeZone.getTimeZone("GMT+052").getID()); 187 assertEquals("Must return proper GMT formatted string for GMT-0 (eg. GMT+08:20).", 188 "GMT-00:00", TimeZone.getTimeZone("GMT-0").getID()); 189 } 190 191 /** 192 * @tests java.util.TimeZone#setDefault(java.util.TimeZone) 193 */ 194 @TestTargetNew( 195 level = TestLevel.COMPLETE, 196 notes = "", 197 method = "setDefault", 198 args = {java.util.TimeZone.class} 199 ) 200 @BrokenTest("Runner sets timezone before test, hence old value != default") 201 public void test_setDefaultLjava_util_TimeZone() { 202 TimeZone oldDefault = TimeZone.getDefault(); 203 TimeZone zone = new SimpleTimeZone(45, "TEST"); 204 TimeZone.setDefault(zone); 205 assertEquals("timezone not set", zone, TimeZone.getDefault()); 206 TimeZone.setDefault(null); 207 assertEquals("default not restored", 208 oldDefault, TimeZone.getDefault()); 209 } 210 211 class Mock_TimeZone extends TimeZone { 212 @Override 213 public int getOffset(int era, int year, int month, int day, int dayOfWeek, int milliseconds) { 214 return 0; 215 } 216 217 @Override 218 public int getRawOffset() { 219 return 0; 220 } 221 222 @Override 223 public boolean inDaylightTime(Date date) { 224 return false; 225 } 226 227 @Override 228 public void setRawOffset(int offsetMillis) { 229 230 } 231 232 @Override 233 public boolean useDaylightTime() { 234 return false; 235 } 236 } 237 238 @TestTargetNew( 239 level = TestLevel.COMPLETE, 240 notes = "", 241 method = "TimeZone", 242 args = {} 243 ) 244 public void test_constructor() { 245 assertNotNull(new Mock_TimeZone()); 246 } 247 248 @TestTargetNew( 249 level = TestLevel.COMPLETE, 250 notes = "", 251 method = "clone", 252 args = {} 253 ) 254 public void test_clone() { 255 TimeZone tz1 = TimeZone.getDefault(); 256 TimeZone tz2 = (TimeZone)tz1.clone(); 257 258 assertTrue(tz1.equals(tz2)); 259 } 260 261 @TestTargetNew( 262 level = TestLevel.COMPLETE, 263 notes = "", 264 method = "getAvailableIDs", 265 args = {} 266 ) 267 public void test_getAvailableIDs() { 268 String[] str = TimeZone.getAvailableIDs(); 269 assertNotNull(str); 270 assertTrue(str.length != 0); 271 for(int i = 0; i < str.length; i++) { 272 assertNotNull(TimeZone.getTimeZone(str[i])); 273 } 274 } 275 276 @TestTargetNew( 277 level = TestLevel.COMPLETE, 278 notes = "", 279 method = "getAvailableIDs", 280 args = {int.class} 281 ) 282 public void test_getAvailableIDsI() { 283 String[] str = TimeZone.getAvailableIDs(0); 284 assertNotNull(str); 285 assertTrue(str.length != 0); 286 for(int i = 0; i < str.length; i++) { 287 assertNotNull(TimeZone.getTimeZone(str[i])); 288 } 289 } 290 291 @TestTargetNew( 292 level = TestLevel.COMPLETE, 293 notes = "", 294 method = "getDisplayName", 295 args = {} 296 ) 297 public void test_getDisplayName() { 298 TimeZone tz = TimeZone.getTimeZone("GMT-6"); 299 assertEquals("GMT-06:00", tz.getDisplayName()); 300 tz = TimeZone.getTimeZone("America/Los_Angeles"); 301 assertEquals("Pacific Standard Time", tz.getDisplayName()); 302 } 303 304 @TestTargetNew( 305 level = TestLevel.COMPLETE, 306 notes = "", 307 method = "getDisplayName", 308 args = {java.util.Locale.class} 309 ) 310 public void test_getDisplayNameLjava_util_Locale() { 311 Locale[] requiredLocales = {Locale.US, Locale.FRANCE}; 312 if (!Support_Locale.areLocalesAvailable(requiredLocales)) { 313 // locale dependent test, bug 1943269 314 return; 315 } 316 TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles"); 317 assertEquals("Pacific Standard Time", tz.getDisplayName(new Locale("US"))); 318 // BEGIN android-note: RI has "Heure", CLDR/ICU has "heure". 319 assertEquals("heure normale du Pacifique", tz.getDisplayName(Locale.FRANCE)); 320 } 321 322 @TestTargetNew( 323 level = TestLevel.COMPLETE, 324 notes = "", 325 method = "getDisplayName", 326 args = {boolean.class, int.class} 327 ) 328 public void test_getDisplayNameZI() { 329 TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles"); 330 assertEquals("PST", tz.getDisplayName(false, 0)); 331 assertEquals("Pacific Daylight Time", tz.getDisplayName(true, 1)); 332 assertEquals("Pacific Standard Time", tz.getDisplayName(false, 1)); 333 } 334 335 @TestTargetNew( 336 level = TestLevel.COMPLETE, 337 notes = "", 338 method = "getDisplayName", 339 args = {boolean.class, int.class, java.util.Locale.class} 340 ) 341 @AndroidOnly("fail on RI. See comment below") 342 public void test_getDisplayNameZILjava_util_Locale() { 343 Locale[] requiredLocales = {Locale.US, Locale.UK, Locale.FRANCE}; 344 if (!Support_Locale.areLocalesAvailable(requiredLocales)) { 345 // locale dependent test, bug 1943269 346 return; 347 } 348 TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles"); 349 assertEquals("PST", tz.getDisplayName(false, 0, Locale.US)); 350 assertEquals("Pacific Daylight Time", tz.getDisplayName(true, 1, Locale.US)); 351 assertEquals("Pacific Standard Time", tz.getDisplayName(false, 1, Locale.UK)); 352 //RI fails on following line. RI always returns short time zone name as "PST" 353 assertEquals("UTC-08:00", tz.getDisplayName(false, 0, Locale.FRANCE)); 354 // BEGIN android-note: RI has "Heure", CLDR/ICU has "heure". 355 assertEquals("heure avanc\u00e9e du Pacifique", tz.getDisplayName(true, 1, Locale.FRANCE)); 356 assertEquals("heure normale du Pacifique", tz.getDisplayName(false, 1, Locale.FRANCE)); 357 } 358 359 @TestTargetNew( 360 level = TestLevel.COMPLETE, 361 notes = "", 362 method = "getID", 363 args = {} 364 ) 365 public void test_getID() { 366 TimeZone tz = TimeZone.getTimeZone("GMT-6"); 367 assertEquals("GMT-06:00", tz.getID()); 368 tz = TimeZone.getTimeZone("America/Denver"); 369 assertEquals("America/Denver", tz.getID()); 370 } 371 372 @TestTargetNew( 373 level = TestLevel.COMPLETE, 374 notes = "", 375 method = "hasSameRules", 376 args = {java.util.TimeZone.class} 377 ) 378 @KnownFailure("Arizona doesn't observe DST") 379 public void test_hasSameRulesLjava_util_TimeZone() { 380 TimeZone tz1 = TimeZone.getTimeZone("America/Denver"); 381 TimeZone tz2 = TimeZone.getTimeZone("America/Phoenix"); 382 assertEquals(tz1.getDisplayName(false, 0), tz2.getDisplayName(false, 0)); 383 // Arizona doesn't observe DST. See http://phoenix.about.com/cs/weather/qt/timezone.htm 384 assertFalse(tz1.hasSameRules(tz2)); 385 assertFalse(tz1.hasSameRules(null)); 386 tz1 = TimeZone.getTimeZone("America/Montreal"); 387 tz2 = TimeZone.getTimeZone("America/New_York"); 388 assertEquals(tz1.getDisplayName(), tz2.getDisplayName()); 389 assertFalse(tz1.getID().equals(tz2.getID())); 390 assertTrue(tz2.hasSameRules(tz1)); 391 assertTrue(tz1.hasSameRules(tz1)); 392 } 393 394 @TestTargetNew( 395 level = TestLevel.COMPLETE, 396 notes = "", 397 method = "useDaylightTime", 398 args = {} 399 ) 400 public void test_useDaylightTime() { 401 // http://code.google.com/p/android/issues/detail?id=877 402 403 TimeZone asiaTaipei = TimeZone.getTimeZone("Asia/Taipei"); 404 assertFalse("Taiwan doesn't use DST", asiaTaipei.useDaylightTime()); 405 } 406 407 @TestTargetNew( 408 level = TestLevel.COMPLETE, 409 notes = "", 410 method = "setID", 411 args = {java.lang.String.class} 412 ) 413 public void test_setIDLjava_lang_String() { 414 TimeZone tz = TimeZone.getTimeZone("GMT-6"); 415 assertEquals("GMT-06:00", tz.getID()); 416 tz.setID("New ID for GMT-6"); 417 assertEquals("New ID for GMT-6", tz.getID()); 418 } 419 420 Locale loc = null; 421 422 protected void setUp() { 423 loc = Locale.getDefault(); 424 Locale.setDefault(Locale.US); 425 } 426 427 protected void tearDown() { 428 Locale.setDefault(loc); 429 } 430} 431