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