1f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project/*
2f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project
3f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project *
4f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project * you may not use this file except in compliance with the License.
6f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project * You may obtain a copy of the License at
7f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project *
8f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project *
10f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project * See the License for the specific language governing permissions and
14f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project * limitations under the License.
15f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project */
16f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
171a44d5dcabc18cd5ef111f732ccff91683a1a093Neal Nguyenpackage android.text.format;
18f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
19f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Projectimport android.test.suitebuilder.annotation.SmallTest;
20f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Projectimport android.test.suitebuilder.annotation.Suppress;
21f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Projectimport android.text.format.Time;
22f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Projectimport android.util.Log;
236c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Rootimport android.util.TimeFormatException;
24f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
25f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Projectimport junit.framework.TestCase;
26f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
27f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Projectpublic class TimeTest extends TestCase {
28f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
29f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    @SmallTest
30f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public void testNormalize0() throws Exception {
31f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        Time t = new Time(Time.TIMEZONE_UTC);
32f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        t.parse("20060432T010203");
33f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        t.normalize(false /* use isDst */);
34f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project//        System.out.println("got: " + t.year + '-'
35f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project//                + t.month + '-' + t.monthDay
36f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project//                + ' ' + t.hour + ':' + t.minute
37f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project//                + ':' + t.second
38f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project//                + "( " + t.isDst + ',' + t.gmtoff
39f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project//                + ',' + t.weekDay
40f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project//                + ',' + t.yearDay + ')');
41f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
42f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
43f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private static class DateTest {
44f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        public int year1;
45f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        public int month1;
46f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        public int day1;
47f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        public int hour1;
48f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        public int minute1;
49f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        public int dst1;
50f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
51f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        public int offset;
52f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
53f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        public int year2;
54f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        public int month2;
55f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        public int day2;
56f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        public int hour2;
57f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        public int minute2;
58f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        public int dst2;
59f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
60f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        public DateTest(int year1, int month1, int day1, int hour1, int minute1, int dst1,
61f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                int offset, int year2, int month2, int day2, int hour2, int minute2,
62f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                int dst2) {
63f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            this.year1 = year1;
64f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            this.month1 = month1;
65f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            this.day1 = day1;
66f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            this.hour1 = hour1;
67f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            this.minute1 = minute1;
68f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            this.dst1 = dst1;
69f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            this.offset = offset;
70f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            this.year2 = year2;
71f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            this.month2 = month2;
72f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            this.day2 = day2;
73f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            this.hour2 = hour2;
74f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            this.minute2 = minute2;
75f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            this.dst2 = dst2;
76f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
77f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
78f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        public DateTest(int year1, int month1, int day1, int hour1, int minute1,
79f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                int offset, int year2, int month2, int day2, int hour2, int minute2) {
80f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            this.year1 = year1;
81f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            this.month1 = month1;
82f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            this.day1 = day1;
83f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            this.hour1 = hour1;
84f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            this.minute1 = minute1;
85f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            this.dst1 = -1;
86f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            this.offset = offset;
87f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            this.year2 = year2;
88f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            this.month2 = month2;
89f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            this.day2 = day2;
90f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            this.hour2 = hour2;
91f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            this.minute2 = minute2;
92f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            this.dst2 = -1;
93f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
94f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
95f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
96f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    // These tests assume that DST changes on Nov 4, 2007 at 2am (to 1am).
97f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
98f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    // The "offset" field in "dayTests" represents days.
99f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    // Use normalize(true) with these tests to change the date by 1 day.
100f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private DateTest[] dayTests = {
101f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // The month numbers are 0-relative, so Jan=0, Feb=1,...Dec=11
102f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
103f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Nov 4, 12am + 0 day = Nov 4, 12am
104f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Nov 5, 12am + 0 day = Nov 5, 12am
105f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            new DateTest(2007, 10, 4, 0, 0, 0, 2007, 10, 4, 0, 0),
106f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            new DateTest(2007, 10, 5, 0, 0, 0, 2007, 10, 5, 0, 0),
107f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
108f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Nov 3, 12am + 1 day = Nov 4, 12am
109f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Nov 4, 12am + 1 day = Nov 5, 12am
110f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Nov 5, 12am + 1 day = Nov 6, 12am
111f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            new DateTest(2007, 10, 3, 0, 0, 1, 2007, 10, 4, 0, 0),
112f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            new DateTest(2007, 10, 4, 0, 0, 1, 2007, 10, 5, 0, 0),
113f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            new DateTest(2007, 10, 5, 0, 0, 1, 2007, 10, 6, 0, 0),
114f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
115f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Nov 3, 1am + 1 day = Nov 4, 1am
116f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Nov 4, 1am + 1 day = Nov 5, 1am
117f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Nov 5, 1am + 1 day = Nov 6, 1am
118f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            new DateTest(2007, 10, 3, 1, 0, 1, 2007, 10, 4, 1, 0),
119f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            new DateTest(2007, 10, 4, 1, 0, 1, 2007, 10, 5, 1, 0),
120f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            new DateTest(2007, 10, 5, 1, 0, 1, 2007, 10, 6, 1, 0),
121f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
122f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Nov 3, 2am + 1 day = Nov 4, 2am
123f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Nov 4, 2am + 1 day = Nov 5, 2am
124f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Nov 5, 2am + 1 day = Nov 6, 2am
125f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            new DateTest(2007, 10, 3, 2, 0, 1, 2007, 10, 4, 2, 0),
126f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            new DateTest(2007, 10, 4, 2, 0, 1, 2007, 10, 5, 2, 0),
127f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            new DateTest(2007, 10, 5, 2, 0, 1, 2007, 10, 6, 2, 0),
128f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    };
129f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
130f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    // The "offset" field in "minuteTests" represents minutes.
131f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    // Use normalize(false) with these tests.
132f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private DateTest[] minuteTests = {
133f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // The month numbers are 0-relative, so Jan=0, Feb=1,...Dec=11
134f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
135f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Nov 4, 12am + 0 minutes = Nov 4, 12am
136f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Nov 5, 12am + 0 minutes = Nov 5, 12am
137f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            new DateTest(2007, 10, 4, 0, 0, 0, 2007, 10, 4, 0, 0),
138f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            new DateTest(2007, 10, 5, 0, 0, 0, 2007, 10, 5, 0, 0),
139f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
140f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Nov 3, 12am + 60 minutes = Nov 3, 1am
141f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Nov 4, 12am + 60 minutes = Nov 4, 1am
142f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Nov 5, 12am + 60 minutes = Nov 5, 1am
143f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            new DateTest(2007, 10, 3, 0, 0, 60, 2007, 10, 3, 1, 0),
144f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            new DateTest(2007, 10, 4, 0, 0, 60, 2007, 10, 4, 1, 0),
145f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            new DateTest(2007, 10, 5, 0, 0, 60, 2007, 10, 5, 1, 0),
146f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
147f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Nov 3, 1am + 60 minutes = Nov 3, 2am
148f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Nov 4, 1am (PDT) + 30 minutes = Nov 4, 1:30am (PDT)
149f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Nov 4, 1am (PDT) + 60 minutes = Nov 4, 1am (PST)
150f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            new DateTest(2007, 10, 3, 1, 0, 60, 2007, 10, 3, 2, 0),
151f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            new DateTest(2007, 10, 4, 1, 0, 1, 30, 2007, 10, 4, 1, 30, 1),
152f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            new DateTest(2007, 10, 4, 1, 0, 1, 60, 2007, 10, 4, 1, 0, 0),
153f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
154f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Nov 4, 1:30am (PDT) + 15 minutes = Nov 4, 1:45am (PDT)
155f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Nov 4, 1:30am (PDT) + 30 minutes = Nov 4, 1:00am (PST)
156f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Nov 4, 1:30am (PDT) + 60 minutes = Nov 4, 1:30am (PST)
157f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            new DateTest(2007, 10, 4, 1, 30, 1, 15, 2007, 10, 4, 1, 45, 1),
158f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            new DateTest(2007, 10, 4, 1, 30, 1, 30, 2007, 10, 4, 1, 0, 0),
159f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            new DateTest(2007, 10, 4, 1, 30, 1, 60, 2007, 10, 4, 1, 30, 0),
160f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
161f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Nov 4, 1:30am (PST) + 15 minutes = Nov 4, 1:45am (PST)
162f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Nov 4, 1:30am (PST) + 30 minutes = Nov 4, 2:00am (PST)
163f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Nov 5, 1am + 60 minutes = Nov 5, 2am
164f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            new DateTest(2007, 10, 4, 1, 30, 0, 15, 2007, 10, 4, 1, 45, 0),
165f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            new DateTest(2007, 10, 4, 1, 30, 0, 30, 2007, 10, 4, 2, 0, 0),
166f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            new DateTest(2007, 10, 5, 1, 0, 60, 2007, 10, 5, 2, 0),
167f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
168f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Nov 3, 2am + 60 minutes = Nov 3, 3am
169f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Nov 4, 2am + 30 minutes = Nov 4, 2:30am
170f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Nov 4, 2am + 60 minutes = Nov 4, 3am
171f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Nov 5, 2am + 60 minutes = Nov 5, 3am
172f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            new DateTest(2007, 10, 3, 2, 0, 60, 2007, 10, 3, 3, 0),
173f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            new DateTest(2007, 10, 4, 2, 0, 30, 2007, 10, 4, 2, 30),
174f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            new DateTest(2007, 10, 4, 2, 0, 60, 2007, 10, 4, 3, 0),
175f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            new DateTest(2007, 10, 5, 2, 0, 60, 2007, 10, 5, 3, 0),
176f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    };
177f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
178f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    @SmallTest
179f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public void testNormalize1() throws Exception {
180f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        Time local = new Time("America/Los_Angeles");
181f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
182f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        int len = dayTests.length;
183f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        for (int index = 0; index < len; index++) {
184f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            DateTest test = dayTests[index];
185f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            local.set(0, test.minute1, test.hour1, test.day1, test.month1, test.year1);
186f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // call normalize() to make sure that isDst is set
187f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            local.normalize(false /* use isDst */);
188f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            local.monthDay += test.offset;
189f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            local.normalize(true /* ignore isDst */);
190f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (local.year != test.year2 || local.month != test.month2
191f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    || local.monthDay != test.day2 || local.hour != test.hour2
192f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    || local.minute != test.minute2) {
193f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                String expectedTime = String.format("%d-%02d-%02d %02d:%02d",
194f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        test.year2, test.month2, test.day2, test.hour2, test.minute2);
195f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                String actualTime = String.format("%d-%02d-%02d %02d:%02d",
196f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        local.year, local.month, local.monthDay, local.hour, local.minute);
197f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                throw new RuntimeException(
198f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        "day test index " + index + ", normalize(): expected local " + expectedTime
199f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                                + " got: " + actualTime);
200f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
201f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
202f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            local.set(0, test.minute1, test.hour1, test.day1, test.month1, test.year1);
203f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // call normalize() to make sure that isDst is set
204f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            local.normalize(false /* use isDst */);
205f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            local.monthDay += test.offset;
206f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            long millis = local.toMillis(true /* ignore isDst */);
207f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            local.set(millis);
208f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (local.year != test.year2 || local.month != test.month2
209f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    || local.monthDay != test.day2 || local.hour != test.hour2
210f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    || local.minute != test.minute2) {
211f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                String expectedTime = String.format("%d-%02d-%02d %02d:%02d",
212f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        test.year2, test.month2, test.day2, test.hour2, test.minute2);
213f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                String actualTime = String.format("%d-%02d-%02d %02d:%02d",
214f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        local.year, local.month, local.monthDay, local.hour, local.minute);
215f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                throw new RuntimeException(
216f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        "day test index " + index + ", toMillis(): expected local " + expectedTime
217f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                                + " got: " + actualTime);
218f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
219f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
220f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
221f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        len = minuteTests.length;
222f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        for (int index = 0; index < len; index++) {
223f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            DateTest test = minuteTests[index];
224f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            local.set(0, test.minute1, test.hour1, test.day1, test.month1, test.year1);
225f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            local.isDst = test.dst1;
226f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // call normalize() to make sure that isDst is set
227f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            local.normalize(false /* use isDst */);
228f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (test.dst2 == -1) test.dst2 = local.isDst;
229f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            local.minute += test.offset;
230f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            local.normalize(false /* use isDst */);
231f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (local.year != test.year2 || local.month != test.month2
232f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    || local.monthDay != test.day2 || local.hour != test.hour2
233f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    || local.minute != test.minute2 || local.isDst != test.dst2) {
234f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                String expectedTime = String.format("%d-%02d-%02d %02d:%02d isDst: %d",
235f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        test.year2, test.month2, test.day2, test.hour2, test.minute2,
236f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        test.dst2);
237f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                String actualTime = String.format("%d-%02d-%02d %02d:%02d isDst: %d",
238f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        local.year, local.month, local.monthDay, local.hour, local.minute,
239f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        local.isDst);
240f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                throw new RuntimeException(
241f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        "minute test index " + index + ", normalize(): expected local " + expectedTime
242f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                                + " got: " + actualTime);
243f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
244f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
245f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            local.set(0, test.minute1, test.hour1, test.day1, test.month1, test.year1);
246f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            local.isDst = test.dst1;
247f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // call normalize() to make sure that isDst is set
248f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            local.normalize(false /* use isDst */);
249f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (test.dst2 == -1) test.dst2 = local.isDst;
250f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            local.minute += test.offset;
251f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            long millis = local.toMillis(false /* use isDst */);
252f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            local.set(millis);
253f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (local.year != test.year2 || local.month != test.month2
254f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    || local.monthDay != test.day2 || local.hour != test.hour2
255f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    || local.minute != test.minute2 || local.isDst != test.dst2) {
256f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                String expectedTime = String.format("%d-%02d-%02d %02d:%02d isDst: %d",
257f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        test.year2, test.month2, test.day2, test.hour2, test.minute2,
258f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        test.dst2);
259f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                String actualTime = String.format("%d-%02d-%02d %02d:%02d isDst: %d",
260f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        local.year, local.month, local.monthDay, local.hour, local.minute,
261f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        local.isDst);
262f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                throw new RuntimeException(
263f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        "minute test index " + index + ", toMillis(): expected local " + expectedTime
264f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                                + " got: " + actualTime);
265f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
266f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
267f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
268f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
269f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    @SmallTest
270f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public void testSwitchTimezone0() throws Exception {
271f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        Time t = new Time(Time.TIMEZONE_UTC);
272f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        t.parse("20061005T120000");
273f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        t.switchTimezone("America/Los_Angeles");
274f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        // System.out.println("got: " + t);
275f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
276f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
277f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    @SmallTest
278f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public void testCtor0() throws Exception {
279f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        Time t = new Time(Time.TIMEZONE_UTC);
280f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        assertEquals(Time.TIMEZONE_UTC, t.timezone);
281f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
282f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
283f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    @SmallTest
284f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public void testGetActualMaximum0() throws Exception {
285f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        Time t = new Time(Time.TIMEZONE_UTC);
286f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        int r = t.getActualMaximum(Time.SECOND);
287f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        // System.out.println("r=" + r);
288f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
289f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
290f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    @SmallTest
291f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public void testClear0() throws Exception {
292f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        Time t = new Time(Time.TIMEZONE_UTC);
293f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        t.clear(Time.TIMEZONE_UTC);
294f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
295f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
296f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    @SmallTest
297f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public void testCompare0() throws Exception {
298f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        Time a = new Time(Time.TIMEZONE_UTC);
299f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        Time b = new Time("America/Los_Angeles");
300f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        int r = Time.compare(a, b);
301f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        // System.out.println("r=" + r);
302f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
303f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
304f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    @SmallTest
305f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public void testFormat0() throws Exception {
306f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        Time t = new Time(Time.TIMEZONE_UTC);
307f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        String r = t.format("%Y%m%dT%H%M%S");
308f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        // System.out.println("r='" + r + "'");
309f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
310f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
311f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    @SmallTest
312f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public void testToString0() throws Exception {
313f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        Time t = new Time(Time.TIMEZONE_UTC);
314f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        String r = t.toString();
315f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        // System.out.println("r='" + r + "'");
316f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
317f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
318f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    @SmallTest
319f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public void testGetCurrentTimezone0() throws Exception {
320f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        String r = Time.getCurrentTimezone();
321f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        // System.out.println("r='" + r + "'");
322f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
323f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
324f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    @SmallTest
325f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public void testSetToNow0() throws Exception {
326f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        Time t = new Time(Time.TIMEZONE_UTC);
327f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        t.setToNow();
328f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        // System.out.println("t=" + t);
329f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
330f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
331f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    @SmallTest
332f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public void testMillis0() throws Exception {
333f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        Time t = new Time(Time.TIMEZONE_UTC);
334f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        t.set(0, 0, 0, 1, 1, 2006);
335f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        long r = t.toMillis(true /* ignore isDst */);
336f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        // System.out.println("r=" + r);
337f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        t.set(1, 0, 0, 1, 1, 2006);
338f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        r = t.toMillis(true /* ignore isDst */);
339f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        // System.out.println("r=" + r);
340f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
341f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
342f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    @SmallTest
343f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public void testMillis1() throws Exception {
344f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        Time t = new Time(Time.TIMEZONE_UTC);
345f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        t.set(1, 0, 0, 1, 0, 1970);
346f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        long r = t.toMillis(true /* ignore isDst */);
347f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        // System.out.println("r=" + r);
348f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
349f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
350f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    @SmallTest
351f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public void testParse0() throws Exception {
352f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        Time t = new Time(Time.TIMEZONE_UTC);
353f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        t.parse("12345678T901234");
354f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        // System.out.println("t=" + t);
355f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
356f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
357f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    @SmallTest
3586c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root    public void testParse33390() throws Exception {
3596c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root        Time t = new Time(Time.TIMEZONE_UTC);
3606c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root
3616c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root        t.parse3339("1980-05-23");
362de8aa87016a8dc2c252002ec60f6285b7a839336Kenny Root        if (!t.allDay || t.year != 1980 || t.month != 04 || t.monthDay != 23) {
3636c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root            fail("Did not parse all-day date correctly");
3646c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root        }
3656c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root
3666c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root        t.parse3339("1980-05-23T09:50:50");
367de8aa87016a8dc2c252002ec60f6285b7a839336Kenny Root        if (t.allDay || t.year != 1980 || t.month != 04 || t.monthDay != 23 ||
3686c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root                t.hour != 9 || t.minute != 50 || t.second != 50 ||
3696c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root                t.gmtoff != 0) {
3706c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root            fail("Did not parse timezone-offset-less date correctly");
3716c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root        }
3726c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root
3736c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root        t.parse3339("1980-05-23T09:50:50Z");
374de8aa87016a8dc2c252002ec60f6285b7a839336Kenny Root        if (t.allDay || t.year != 1980 || t.month != 04 || t.monthDay != 23 ||
3756c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root                t.hour != 9 || t.minute != 50 || t.second != 50 ||
3766c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root                t.gmtoff != 0) {
3776c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root            fail("Did not parse UTC date correctly");
3786c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root        }
3796c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root
3806c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root        t.parse3339("1980-05-23T09:50:50.0Z");
381de8aa87016a8dc2c252002ec60f6285b7a839336Kenny Root        if (t.allDay || t.year != 1980 || t.month != 04 || t.monthDay != 23 ||
3826c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root                t.hour != 9 || t.minute != 50 || t.second != 50 ||
3836c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root                t.gmtoff != 0) {
3846c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root            fail("Did not parse UTC date correctly");
3856c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root        }
3866c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root
3876c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root        t.parse3339("1980-05-23T09:50:50.12Z");
388de8aa87016a8dc2c252002ec60f6285b7a839336Kenny Root        if (t.allDay || t.year != 1980 || t.month != 04 || t.monthDay != 23 ||
3896c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root                t.hour != 9 || t.minute != 50 || t.second != 50 ||
3906c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root                t.gmtoff != 0) {
3916c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root            fail("Did not parse UTC date correctly");
3926c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root        }
3936c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root
3946c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root        t.parse3339("1980-05-23T09:50:50.123Z");
395de8aa87016a8dc2c252002ec60f6285b7a839336Kenny Root        if (t.allDay || t.year != 1980 || t.month != 04 || t.monthDay != 23 ||
3966c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root                t.hour != 9 || t.minute != 50 || t.second != 50 ||
3976c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root                t.gmtoff != 0) {
3986c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root            fail("Did not parse UTC date correctly");
3996c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root        }
4006c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root
401de8aa87016a8dc2c252002ec60f6285b7a839336Kenny Root        // The time should be normalized to UTC
402de8aa87016a8dc2c252002ec60f6285b7a839336Kenny Root        t.parse3339("1980-05-23T09:50:50-01:05");
403de8aa87016a8dc2c252002ec60f6285b7a839336Kenny Root        if (t.allDay || t.year != 1980 || t.month != 04 || t.monthDay != 23 ||
404de8aa87016a8dc2c252002ec60f6285b7a839336Kenny Root                t.hour != 10 || t.minute != 55 || t.second != 50 ||
405de8aa87016a8dc2c252002ec60f6285b7a839336Kenny Root                t.gmtoff != 0) {
4066c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root            fail("Did not parse timezone-offset date correctly");
4076c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root        }
4086c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root
409de8aa87016a8dc2c252002ec60f6285b7a839336Kenny Root        // The time should be normalized to UTC
410de8aa87016a8dc2c252002ec60f6285b7a839336Kenny Root        t.parse3339("1980-05-23T09:50:50.123-01:05");
411de8aa87016a8dc2c252002ec60f6285b7a839336Kenny Root        if (t.allDay || t.year != 1980 || t.month != 04 || t.monthDay != 23 ||
412de8aa87016a8dc2c252002ec60f6285b7a839336Kenny Root                t.hour != 10 || t.minute != 55 || t.second != 50 ||
413de8aa87016a8dc2c252002ec60f6285b7a839336Kenny Root                t.gmtoff != 0) {
4146c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root            fail("Did not parse timezone-offset date correctly");
4156c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root        }
4166c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root
4176c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root        try {
4186c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root            t.parse3339("1980");
4196c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root            fail("Did not throw error on truncated input length");
4206c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root        } catch (TimeFormatException e) {
4216c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root            // Successful
4226c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root        }
4236c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root
4246c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root        try {
4256c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root            t.parse3339("1980-05-23T09:50:50.123+");
4266c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root            fail("Did not throw error on truncated timezone offset");
4276c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root        } catch (TimeFormatException e1) {
4286c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root            // Successful
4296c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root        }
4306c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root
4316c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root        try {
4326c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root            t.parse3339("1980-05-23T09:50:50.123+05:0");
4336c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root            fail("Did not throw error on truncated timezone offset");
4346c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root        } catch (TimeFormatException e1) {
4356c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root            // Successful
4366c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root        }
4376c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root    }
4386c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root
4396c2d4029f1fecb51e0b002e652fd18e18d059fe0Kenny Root    @SmallTest
440f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public void testSet0() throws Exception {
441f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        Time t = new Time(Time.TIMEZONE_UTC);
442f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        t.set(1000L);
443f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        // System.out.println("t.year=" + t.year);
444f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        // System.out.println("t=" + t);
445f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        t.set(2000L);
446f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        // System.out.println("t=" + t);
447f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        t.set(1000L * 60);
448f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        // System.out.println("t=" + t);
449f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        t.set((1000L * 60 * 60 * 24) + 1000L);
450f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        // System.out.println("t=" + t);
451f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
452f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
453f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    @SmallTest
454f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public void testSet1() throws Exception {
455f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        Time t = new Time(Time.TIMEZONE_UTC);
456f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        t.set(1, 2, 3, 4, 5, 6);
457f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        // System.out.println("t=" + t);
458f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
459f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
460f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    // Timezones that cover the world.  Some GMT offsets occur more than
461f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    // once in case some cities decide to change their GMT offset.
462f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private static final String[] mTimeZones = {
463f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Pacific/Kiritimati",
464f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Pacific/Enderbury",
465f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Pacific/Fiji",
466f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Antarctica/South_Pole",
467f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Pacific/Norfolk",
468f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Pacific/Ponape",
469f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Asia/Magadan",
470f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Australia/Lord_Howe",
471f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Australia/Sydney",
472f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Australia/Adelaide",
473f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Asia/Tokyo",
474f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Asia/Seoul",
475f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Asia/Taipei",
476f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Asia/Singapore",
477f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Asia/Hong_Kong",
478f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Asia/Saigon",
479f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Asia/Bangkok",
480f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Indian/Cocos",
481f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Asia/Rangoon",
482f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Asia/Omsk",
483f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Antarctica/Mawson",
484f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Asia/Colombo",
485f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Asia/Calcutta",
486f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Asia/Oral",
487f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Asia/Kabul",
488f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Asia/Dubai",
489f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Asia/Tehran",
490f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Europe/Moscow",
491f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Asia/Baghdad",
492f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Africa/Mogadishu",
493f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Europe/Athens",
494f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Africa/Cairo",
495f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Europe/Rome",
496f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Europe/Berlin",
497f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Europe/Amsterdam",
498f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Africa/Tunis",
499f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Europe/London",
500f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Europe/Dublin",
501f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Atlantic/St_Helena",
502f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Africa/Monrovia",
503f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Africa/Accra",
504f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Atlantic/Azores",
505f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Atlantic/South_Georgia",
506f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "America/Noronha",
507f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "America/Sao_Paulo",
508f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "America/Cayenne",
509f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "America/St_Johns",
510f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "America/Puerto_Rico",
511f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "America/Aruba",
512f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "America/New_York",
513f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "America/Chicago",
514f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "America/Denver",
515f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "America/Los_Angeles",
516f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "America/Anchorage",
517f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Pacific/Marquesas",
518f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "America/Adak",
519f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Pacific/Honolulu",
520f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        "Pacific/Midway",
521f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    };
522f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
523f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    @Suppress
524f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public void disableTestGetJulianDay() throws Exception {
525f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        Time time = new Time();
526f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
527f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        // For each day of the year, and for each timezone, get the Julian
528f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        // day for 12am and then check that if we change the time we get the
529f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        // same Julian day.
530f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        for (int monthDay = 1; monthDay <= 366; monthDay++) {
531f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            for (int zoneIndex = 0; zoneIndex < mTimeZones.length; zoneIndex++) {
532f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                // We leave the "month" as zero because we are changing the
533f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                // "monthDay" from 1 to 366.  The call to normalize() will
534f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                // then change the "month" (but we don't really care).
535f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                time.set(0, 0, 0, monthDay, 0, 2008);
536f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                time.timezone = mTimeZones[zoneIndex];
537f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                long millis = time.normalize(true);
538f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                if (zoneIndex == 0) {
539f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Log.i("TimeTest", time.format("%B %d, %Y"));
540f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                }
541f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
542f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                // This is the Julian day for 12am for this day of the year
543f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                int julianDay = Time.getJulianDay(millis, time.gmtoff);
544f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
545f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                // Change the time during the day and check that we get the same
546f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                // Julian day.
547f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                for (int hour = 0; hour < 24; hour++) {
548f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    for (int minute = 0; minute < 60; minute += 15) {
549f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        time.set(0, minute, hour, monthDay, 0, 2008);
550f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        millis = time.normalize(true);
551f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        int day = Time.getJulianDay(millis, time.gmtoff);
552f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        if (day != julianDay) {
553f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                            Log.e("TimeTest", "Julian day: " + day + " at time "
554f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                                    + time.hour + ":" + time.minute
555f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                                    + " != today's Julian day: " + julianDay
556f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                                    + " timezone: " + time.timezone);
557f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        }
558f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        assertEquals(day, julianDay);
559f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    }
560f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                }
561f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
562f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
563f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
564f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
565f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    @Suppress
566f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public void disableTestSetJulianDay() throws Exception {
567f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        Time time = new Time();
568f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
569f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        // For each day of the year in 2008, and for each timezone,
570f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        // test that we can set the Julian day correctly.
571f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        for (int monthDay = 1; monthDay <= 366; monthDay++) {
572f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            for (int zoneIndex = 0; zoneIndex < mTimeZones.length; zoneIndex++) {
573f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                // We leave the "month" as zero because we are changing the
574f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                // "monthDay" from 1 to 366.  The call to normalize() will
575f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                // then change the "month" (but we don't really care).
576f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                time.set(0, 0, 0, monthDay, 0, 2008);
577f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                time.timezone = mTimeZones[zoneIndex];
578f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                long millis = time.normalize(true);
579f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                if (zoneIndex == 0) {
580f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Log.i("TimeTest", time.format("%B %d, %Y"));
581f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                }
582f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                int julianDay = Time.getJulianDay(millis, time.gmtoff);
583f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
584f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                time.setJulianDay(julianDay);
585f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
586f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                // Some places change daylight saving time at 12am and so there
587f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                // is no 12am on some days in some timezones.  In those cases,
588f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                // the time is set to 1am.
589f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                // Examples: Africa/Cairo on April 25, 2008
590f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                //  America/Sao_Paulo on October 12, 2008
591f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                //  Atlantic/Azores on March 30, 2008
592f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                assertTrue(time.hour == 0 || time.hour == 1);
593f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                assertEquals(0, time.minute);
594f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                assertEquals(0, time.second);
595f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
596f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                millis = time.toMillis(false);
597f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                int day = Time.getJulianDay(millis, time.gmtoff);
598f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                if (day != julianDay) {
599f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Log.i("TimeTest", "Error: gmtoff " + (time.gmtoff / 3600.0)
600f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                            + " day " + julianDay
601f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                            + " millis " + millis
602f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                            + " " + time.format("%B %d, %Y") + " " + time.timezone);
603f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                }
604f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                assertEquals(day, julianDay);
605f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
606f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
607f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
608f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project}
609