TimeZoneTest.java revision 28b7a26b06f7cb8ffba5d6fcd44e35060a7800dd
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.TestTargetNew; 21import dalvik.annotation.TestTargets; 22import dalvik.annotation.TestLevel; 23import dalvik.annotation.TestTargetClass; 24import dalvik.annotation.KnownFailure; 25import dalvik.annotation.AndroidOnly; 26 27import java.util.Calendar; 28import java.util.Date; 29import java.util.GregorianCalendar; 30import java.util.Locale; 31import java.util.SimpleTimeZone; 32import java.util.TimeZone; 33 34import tests.support.Support_TimeZone; 35 36@TestTargetClass(TimeZone.class) 37public class TimeZoneTest extends junit.framework.TestCase { 38 39 private static final int ONE_HOUR = 3600000; 40 41 /** 42 * @tests java.util.TimeZone#getDefault() 43 */ 44 @TestTargetNew( 45 level = TestLevel.COMPLETE, 46 notes = "", 47 method = "getDefault", 48 args = {} 49 ) 50 public void test_getDefault() { 51 assertNotSame("returns identical", 52 TimeZone.getDefault(), TimeZone.getDefault()); 53 } 54 55 /** 56 * @tests java.util.TimeZone#getDSTSavings() 57 */ 58 @TestTargetNew( 59 level = TestLevel.COMPLETE, 60 notes = "", 61 method = "getDSTSavings", 62 args = {} 63 ) 64 @KnownFailure("Might be a difference in data.") 65 public void test_getDSTSavings() { 66 // Test for method int java.util.TimeZone.getDSTSavings() 67 68 // test on subclass SimpleTimeZone 69 TimeZone st1 = TimeZone.getTimeZone("America/New_York"); 70 assertEquals("T1A. Incorrect daylight savings returned", 71 ONE_HOUR, st1.getDSTSavings()); 72 73 // a SimpleTimeZone with daylight savings different then 1 hour 74 st1 = TimeZone.getTimeZone("Australia/Lord_Howe"); 75 assertEquals("T1B. Incorrect daylight savings returned", 76 1800000, st1.getDSTSavings()); 77 78 // test on subclass Support_TimeZone, an instance with daylight savings 79 TimeZone tz1 = new Support_TimeZone(-5 * ONE_HOUR, true); 80 assertEquals("T2. Incorrect daylight savings returned", 81 ONE_HOUR, tz1.getDSTSavings()); 82 83 // an instance without daylight savings 84 tz1 = new Support_TimeZone(3 * ONE_HOUR, false); 85 assertEquals("T3. Incorrect daylight savings returned, ", 86 0, tz1.getDSTSavings()); 87 } 88 89 /** 90 * @tests java.util.TimeZone#getOffset(long) 91 */ 92 @TestTargetNew( 93 level = TestLevel.COMPLETE, 94 notes = "", 95 method = "getOffset", 96 args = {long.class} 97 ) 98 public void test_getOffset_long() { 99 // Test for method int java.util.TimeZone.getOffset(long time) 100 101 // test on subclass SimpleTimeZone 102 TimeZone st1 = TimeZone.getTimeZone("EST"); 103 long time1 = new GregorianCalendar(1998, Calendar.NOVEMBER, 11) 104 .getTimeInMillis(); 105 assertEquals("T1. Incorrect offset returned", 106 -(5 * ONE_HOUR), st1.getOffset(time1)); 107 108 long time2 = new GregorianCalendar(1998, Calendar.JUNE, 11) 109 .getTimeInMillis(); 110// Not working as expected on RI. 111// st1 = TimeZone.getTimeZone("EST"); 112// assertEquals("T2. Incorrect offset returned", 113// -(4 * ONE_HOUR), st1.getOffset(time2)); 114 115 // test on subclass Support_TimeZone, an instance with daylight savings 116 TimeZone tz1 = new Support_TimeZone(-5 * ONE_HOUR, true); 117 assertEquals("T3. Incorrect offset returned, ", 118 -(5 * ONE_HOUR), tz1.getOffset(time1)); 119 assertEquals("T4. Incorrect offset returned, ", 120 -(4 * ONE_HOUR), tz1.getOffset(time2)); 121 122 // an instance without daylight savings 123 tz1 = new Support_TimeZone(3 * ONE_HOUR, false); 124 assertEquals("T5. Incorrect offset returned, ", 125 (3 * ONE_HOUR), tz1.getOffset(time1)); 126 assertEquals("T6. Incorrect offset returned, ", 127 (3 * ONE_HOUR), tz1.getOffset(time2)); 128 } 129 130 /** 131 * @tests java.util.TimeZone#getTimeZone(java.lang.String) 132 */ 133 @TestTargetNew( 134 level = TestLevel.COMPLETE, 135 notes = "", 136 method = "getTimeZone", 137 args = {java.lang.String.class} 138 ) 139 @KnownFailure("Android fails the last test.") 140 public void test_getTimeZoneLjava_lang_String() { 141 assertEquals("Must return GMT when given an invalid TimeZone id SMT-8.", 142 "GMT", TimeZone.getTimeZone("SMT-8").getID()); 143 assertEquals("Must return GMT when given an invalid TimeZone time GMT+28:70.", 144 "GMT", TimeZone.getTimeZone("GMT+28:70").getID()); 145 assertEquals("Must return GMT when given an invalid TimeZone time GMT+28:30.", 146 "GMT", TimeZone.getTimeZone("GMT+28:30").getID()); 147 assertEquals("Must return GMT when given an invalid TimeZone time GMT+8:70.", 148 "GMT", TimeZone.getTimeZone("GMT+8:70").getID()); 149 assertEquals("Must return GMT when given an invalid TimeZone time GMT+3:.", 150 "GMT", TimeZone.getTimeZone("GMT+3:").getID()); 151 assertEquals("Must return GMT when given an invalid TimeZone time GMT+3:0.", 152 "GMT", TimeZone.getTimeZone("GMT+3:0").getID()); 153 assertEquals("Must return GMT when given an invalid TimeZone time GMT+2360.", 154 "GMT", TimeZone.getTimeZone("GMT+2360").getID()); 155 assertEquals("Must return GMT when given an invalid TimeZone time GMT+892.", 156 "GMT", TimeZone.getTimeZone("GMT+892").getID()); 157 assertEquals("Must return GMT when given an invalid TimeZone time GMT+082.", 158 "GMT", TimeZone.getTimeZone("GMT+082").getID()); 159 assertEquals("Must return GMT when given an invalid TimeZone time GMT+28.", 160 "GMT", TimeZone.getTimeZone("GMT+28").getID()); 161 assertEquals("Must return GMT when given an invalid TimeZone time GMT+30.", 162 "GMT", TimeZone.getTimeZone("GMT+30").getID()); 163 assertEquals("Must return GMT when given TimeZone GMT.", 164 "GMT", TimeZone.getTimeZone("GMT").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 an invalid TimeZone time GMT-8.45.", 170 "GMT", TimeZone.getTimeZone("GMT-8.45").getID()); 171 assertEquals("Must return GMT when given an invalid TimeZone time GMT-123:23.", 172 "GMT", TimeZone.getTimeZone("GMT-123:23").getID()); 173 assertEquals("Must return proper GMT formatted string for GMT+8:30 (eg. GMT+08:20).", 174 "GMT+08:30", TimeZone.getTimeZone("GMT+8:30").getID()); 175 assertEquals("Must return proper GMT formatted string for GMT+3 (eg. GMT+08:20).", 176 "GMT+03:00", TimeZone.getTimeZone("GMT+3").getID()); 177 assertEquals("Must return proper GMT formatted string for GMT+3:02 (eg. GMT+08:20).", 178 "GMT+03:02", TimeZone.getTimeZone("GMT+3:02").getID()); 179 assertEquals("Must return proper GMT formatted string for GMT+2359 (eg. GMT+08:20).", 180 "GMT+23:59", TimeZone.getTimeZone("GMT+2359").getID()); 181 assertEquals("Must return proper GMT formatted string for GMT+520 (eg. GMT+08:20).", 182 "GMT+05:20", TimeZone.getTimeZone("GMT+520").getID()); 183 assertEquals("Must return proper GMT formatted string for GMT+052 (eg. GMT+08:20).", 184 "GMT+00:52", TimeZone.getTimeZone("GMT+052").getID()); 185 assertEquals("Must return proper GMT formatted string for GMT-0 (eg. GMT+08:20).", 186 "GMT-00:00", TimeZone.getTimeZone("GMT-0").getID()); 187 } 188 189 /** 190 * @tests java.util.TimeZone#setDefault(java.util.TimeZone) 191 */ 192 @TestTargetNew( 193 level = TestLevel.COMPLETE, 194 notes = "", 195 method = "setDefault", 196 args = {java.util.TimeZone.class} 197 ) 198 public void test_setDefaultLjava_util_TimeZone() { 199 TimeZone oldDefault = TimeZone.getDefault(); 200 TimeZone zone = new SimpleTimeZone(45, "TEST"); 201 TimeZone.setDefault(zone); 202 assertEquals("timezone not set", zone, TimeZone.getDefault()); 203 TimeZone.setDefault(null); 204 assertEquals("default not restored", 205 oldDefault, TimeZone.getDefault()); 206 } 207 208 class Mock_TimeZone extends TimeZone { 209 @Override 210 public int getOffset(int era, int year, int month, int day, int dayOfWeek, int milliseconds) { 211 return 0; 212 } 213 214 @Override 215 public int getRawOffset() { 216 return 0; 217 } 218 219 @Override 220 public boolean inDaylightTime(Date date) { 221 return false; 222 } 223 224 @Override 225 public void setRawOffset(int offsetMillis) { 226 227 } 228 229 @Override 230 public boolean useDaylightTime() { 231 return false; 232 } 233 } 234 235 @TestTargetNew( 236 level = TestLevel.COMPLETE, 237 notes = "", 238 method = "TimeZone", 239 args = {} 240 ) 241 public void test_constructor() { 242 assertNotNull(new Mock_TimeZone()); 243 } 244 245 @TestTargetNew( 246 level = TestLevel.COMPLETE, 247 notes = "", 248 method = "clone", 249 args = {} 250 ) 251 public void test_clone() { 252 TimeZone tz1 = TimeZone.getDefault(); 253 TimeZone tz2 = (TimeZone)tz1.clone(); 254 255 assertTrue(tz1.equals(tz2)); 256 } 257 258 @TestTargetNew( 259 level = TestLevel.COMPLETE, 260 notes = "", 261 method = "getAvailableIDs", 262 args = {} 263 ) 264 public void test_getAvailableIDs() { 265 String[] str = TimeZone.getAvailableIDs(); 266 assertNotNull(str); 267 assertTrue(str.length != 0); 268 for(int i = 0; i < str.length; i++) { 269 assertNotNull(TimeZone.getTimeZone(str[i])); 270 } 271 } 272 273 @TestTargetNew( 274 level = TestLevel.COMPLETE, 275 notes = "", 276 method = "getAvailableIDs", 277 args = {int.class} 278 ) 279 public void test_getAvailableIDsI() { 280 String[] str = TimeZone.getAvailableIDs(0); 281 assertNotNull(str); 282 assertTrue(str.length != 0); 283 for(int i = 0; i < str.length; i++) { 284 assertNotNull(TimeZone.getTimeZone(str[i])); 285 } 286 } 287 288 @TestTargetNew( 289 level = TestLevel.COMPLETE, 290 notes = "", 291 method = "getDisplayName", 292 args = {} 293 ) 294 public void test_getDisplayName() { 295 TimeZone tz = TimeZone.getTimeZone("GMT-6"); 296 assertEquals("GMT-06:00", tz.getDisplayName()); 297 tz = TimeZone.getTimeZone("America/Los_Angeles"); 298 assertEquals("Pacific Standard Time", tz.getDisplayName()); 299 } 300 301 @TestTargetNew( 302 level = TestLevel.COMPLETE, 303 notes = "", 304 method = "getDisplayName", 305 args = {java.util.Locale.class} 306 ) 307 @KnownFailure("Some locales were removed last minute in cupcake") 308 public void test_getDisplayNameLjava_util_Locale() { 309 TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles"); 310 assertEquals("Pacific Standard Time", tz.getDisplayName(new Locale("US"))); 311 assertEquals("Heure normale du Pacifique", tz.getDisplayName(Locale.FRANCE)); 312 } 313 314 @TestTargetNew( 315 level = TestLevel.COMPLETE, 316 notes = "", 317 method = "getDisplayName", 318 args = {boolean.class, int.class} 319 ) 320 public void test_getDisplayNameZI() { 321 TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles"); 322 assertEquals("PST", tz.getDisplayName(false, 0)); 323 assertEquals("Pacific Daylight Time", tz.getDisplayName(true, 1)); 324 assertEquals("Pacific Standard Time", tz.getDisplayName(false, 1)); 325 } 326 327 @TestTargetNew( 328 level = TestLevel.COMPLETE, 329 notes = "", 330 method = "getDisplayName", 331 args = {boolean.class, int.class, java.util.Locale.class} 332 ) 333 @AndroidOnly("fail on RI. See comment below") 334 @KnownFailure("Some locales were removed last minute in cupcake") 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 = "setID", 385 args = {java.lang.String.class} 386 ) 387 public void test_setIDLjava_lang_String() { 388 TimeZone tz = TimeZone.getTimeZone("GMT-6"); 389 assertEquals("GMT-06:00", tz.getID()); 390 tz.setID("New ID for GMT-6"); 391 assertEquals("New ID for GMT-6", tz.getID()); 392 } 393 394 Locale loc = null; 395 396 protected void setUp() { 397 loc = Locale.getDefault(); 398 Locale.setDefault(Locale.US); 399 } 400 401 protected void tearDown() { 402 Locale.setDefault(loc); 403 } 404} 405