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