Code drop from //branches/cupcake/...@124589
[android/platform/packages/apps/Calendar.git] / tests / src / com / android / calendar / FormatDateRangeTest.java
1 /*
2  * Copyright (C) 2007 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package com.android.calendar;
18
19 import android.content.res.Resources;
20 import android.text.format.DateUtils;
21 import android.text.format.Time;
22 import android.test.AndroidTestCase;
23 import android.test.suitebuilder.annotation.MediumTest;
24 import android.util.Log;
25
26
27 /**
28  * Unit tests for {@link android.text.format.DateUtils#formatDateRange}.
29  */
30 public class FormatDateRangeTest extends AndroidTestCase {
31
32     private class DateRange {
33         public Time date1;
34         public Time date2;
35         public int flags;
36         public String expectedOutput;
37
38         public DateRange(int year1, int month1, int day1, int hour1, int minute1,
39                 int year2, int month2, int day2, int hour2, int minute2,
40                 int flags, String output) {
41             if ((flags & DateUtils.FORMAT_UTC) != 0) {
42                 date1 = new Time(Time.TIMEZONE_UTC);
43                 date2 = new Time(Time.TIMEZONE_UTC);
44             } else {
45                 date1 = new Time();
46                 date2 = new Time();
47             }
48
49             // If the year is zero, then set it to the current year.
50             if (year1 == 0 && year2 == 0) {
51                 date1.set(System.currentTimeMillis());
52                 year1 = year2 = date1.year;
53             }
54
55             date1.set(0, minute1, hour1, day1, month1, year1);
56             date1.normalize(true /* ignore isDst */);
57
58             date2.set(0, minute2, hour2, day2, month2, year2);
59             date2.normalize(true /* ignore isDst */);
60
61             this.flags = flags;
62             expectedOutput = output;
63         }
64     }
65
66     private Resources mResources;
67
68     DateRange[] tests = {
69             new DateRange(0, 10, 9, 8, 0, 0, 10, 9, 11, 0,
70                     DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_ABBREV_ALL, "8am \u2013 11am"),
71             new DateRange(0, 10, 9, 8, 0, 0, 10, 9, 11, 0,
72                     DateUtils.FORMAT_SHOW_TIME, "8:00am \u2013 11:00am"),
73             new DateRange(0, 10, 9, 8, 0, 0, 10, 9, 17, 0,
74                     DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_24HOUR, "08:00 \u2013 17:00"),
75             new DateRange(0, 10, 9, 8, 0, 0, 10, 9, 12, 0,
76                     DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_ABBREV_ALL, "8am \u2013 noon"),
77             new DateRange(0, 10, 9, 8, 0, 0, 10, 9, 12, 0,
78                     DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_NO_NOON | DateUtils.FORMAT_ABBREV_ALL,
79                     "8am \u2013 12pm"),
80             new DateRange(0, 10, 9, 8, 0, 0, 10, 9, 12, 0,
81                     DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_CAP_NOON | DateUtils.FORMAT_ABBREV_ALL,
82                     "8am \u2013 Noon"),
83             new DateRange(0, 10, 9, 10, 30, 0, 10, 9, 13, 0,
84                     DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_ABBREV_ALL, "10:30am \u2013 1pm"),
85             new DateRange(0, 10, 9, 13, 0, 0, 10, 9, 14, 0,
86                     DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_ABBREV_ALL, "1pm \u2013 2pm"),
87             new DateRange(0, 10, 9, 0, 0, 0, 10, 9, 14, 0,
88                     DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_ABBREV_ALL, "12am \u2013 2pm"),
89             new DateRange(0, 10, 9, 20, 0, 0, 10, 10, 0, 0,
90                     DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_ABBREV_ALL, "8pm \u2013 midnight"),
91             new DateRange(0, 10, 10, 0, 0, 0, 10, 10, 0, 0,
92                     DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_ABBREV_ALL, "12am"),
93             new DateRange(0, 10, 9, 20, 0, 0, 10, 10, 0, 0,
94                     DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_24HOUR | DateUtils.FORMAT_ABBREV_ALL,
95                     "20:00 \u2013 00:00"),
96             new DateRange(0, 10, 10, 0, 0, 0, 10, 10, 0, 0,
97                     DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_24HOUR | DateUtils.FORMAT_ABBREV_ALL,
98                     "00:00"),
99             new DateRange(0, 10, 9, 20, 0, 0, 10, 10, 0, 0,
100                     DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL, "Nov 9"),
101             new DateRange(0, 10, 10, 0, 0, 0, 10, 10, 0, 0,
102                     DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL, "Nov 10"),
103             new DateRange(0, 10, 9, 20, 0, 0, 10, 10, 0, 0,
104                     DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_24HOUR | DateUtils.FORMAT_ABBREV_ALL,
105                     "Nov 9"),
106             new DateRange(0, 10, 10, 0, 0, 0, 10, 10, 0, 0,
107                     DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_24HOUR | DateUtils.FORMAT_ABBREV_ALL,
108                     "Nov 10"),
109             new DateRange(0, 10, 9, 20, 0, 0, 10, 10, 0, 0,
110                     DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_NO_MIDNIGHT | DateUtils.FORMAT_ABBREV_ALL,
111                     "8pm \u2013 12am"),
112             new DateRange(0, 10, 9, 20, 0, 0, 10, 10, 0, 0,
113                     DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_CAP_MIDNIGHT | DateUtils.FORMAT_ABBREV_ALL,
114                     "8pm \u2013 Midnight"),
115             new DateRange(0, 10, 9, 0, 0, 0, 10, 10, 0, 0,
116                     DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_ABBREV_ALL, "12am \u2013 midnight"),
117             new DateRange(0, 10, 9, 0, 0, 0, 10, 10, 0, 0,
118                     DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_24HOUR | DateUtils.FORMAT_ABBREV_ALL,
119                     "00:00 \u2013 00:00"),
120             new DateRange(0, 10, 9, 0, 0, 0, 10, 10, 0, 0,
121                     DateUtils.FORMAT_UTC | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL, "Nov 9"),
122             new DateRange(0, 10, 9, 0, 0, 0, 10, 10, 0, 0,
123                     DateUtils.FORMAT_UTC | DateUtils.FORMAT_ABBREV_ALL, "Nov 9"),
124             new DateRange(0, 10, 9, 0, 0, 0, 10, 10, 0, 0,
125                     DateUtils.FORMAT_UTC, "November 9"),
126             new DateRange(0, 10, 8, 0, 0, 0, 10, 10, 0, 0,
127                     DateUtils.FORMAT_UTC | DateUtils.FORMAT_ABBREV_ALL, "Nov 8 \u2013 9"),
128             new DateRange(0, 10, 9, 0, 0, 0, 10, 11, 0, 0,
129                     DateUtils.FORMAT_UTC | DateUtils.FORMAT_ABBREV_ALL, "Nov 9 \u2013 10"),
130             new DateRange(0, 10, 9, 8, 0, 0, 10, 11, 17, 0,
131                     DateUtils.FORMAT_UTC | DateUtils.FORMAT_ABBREV_ALL, "Nov 9 \u2013 11"),
132             new DateRange(0, 9, 29, 8, 0, 0, 10, 3, 17, 0,
133                     DateUtils.FORMAT_UTC | DateUtils.FORMAT_ABBREV_ALL, "Oct 29 \u2013 Nov 3"),
134             new DateRange(2007, 11, 29, 8, 0, 2008, 0, 2, 17, 0,
135                     DateUtils.FORMAT_UTC | DateUtils.FORMAT_ABBREV_ALL, "Dec 29, 2007 \u2013 Jan 2, 2008"),
136             new DateRange(2007, 11, 29, 0, 0, 2008, 0, 2, 0, 0,
137                     DateUtils.FORMAT_UTC | DateUtils.FORMAT_ABBREV_ALL, "Dec 29, 2007 \u2013 Jan 1, 2008"),
138             new DateRange(2007, 11, 29, 8, 0, 2008, 0, 2, 17, 0,
139                     DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_ABBREV_ALL,
140                     "Dec 29, 2007, 8am \u2013 Jan 2, 2008, 5pm"),
141             new DateRange(0, 10, 9, 8, 0, 0, 10, 11, 17, 0,
142                     DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_ABBREV_ALL,
143                     "Nov 9, 8am \u2013 Nov 11, 5pm"),
144             new DateRange(2007, 10, 9, 8, 0, 2007, 10, 11, 17, 0,
145                     DateUtils.FORMAT_SHOW_WEEKDAY | DateUtils.FORMAT_ABBREV_ALL,
146                     "Fri, Nov 9, 2007 \u2013 Sun, Nov 11, 2007"),
147             new DateRange(2007, 10, 9, 8, 0, 2007, 10, 11, 17, 0,
148                     DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_WEEKDAY | DateUtils.FORMAT_ABBREV_ALL,
149                     "Fri, Nov 9, 2007, 8am \u2013 Sun, Nov 11, 2007, 5pm"),
150             new DateRange(2007, 11, 3, 13, 0, 2007, 11, 3, 14, 0,
151                     DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_YEAR,
152                     "1:00pm \u2013 2:00pm, December 3, 2007"),
153     };
154
155     @Override
156     protected void setUp() throws Exception {
157         super.setUp();
158
159         mResources = mContext.getResources();
160     }
161
162     @MediumTest
163     public void testAll() throws Exception {
164         int len = tests.length;
165         for (int index = 0; index < len; index++) {
166             DateRange dateRange = tests[index];
167             long startMillis = dateRange.date1.toMillis(false /* use isDst */);
168             long endMillis = dateRange.date2.toMillis(false /* use isDst */);
169             int flags = dateRange.flags;
170             String output = DateUtils.formatDateRange(mContext, startMillis, endMillis, flags);
171             if (!dateRange.expectedOutput.equals(output)) {
172                 Log.i("FormatDateRangeTest", "index " + index
173                         + " expected: " + dateRange.expectedOutput
174                         + " actual: " + output);
175             }
176             assertEquals(dateRange.expectedOutput, output);
177         }
178     }
179 }