• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.test.AndroidTestCase;
20 import android.text.format.DateUtils;
21 import android.text.format.Time;
22 import android.util.Log;
23 
24 import androidx.test.filters.SmallTest;
25 
26 /**
27  * Unit tests for {@link android.text.format.Time#getWeekNumber}.
28  */
29 public class WeekNumberTest extends AndroidTestCase {
30 
31     static private class DateAndWeekNumber {
32         public Time date;
33         public Time allDayDate;
34         public int expectedWeekNumber;
35 
DateAndWeekNumber(int year, int month, int day, int expectedWeekNumber)36         public DateAndWeekNumber(int year, int month, int day, int expectedWeekNumber) {
37             date = new Time();
38             allDayDate = new Time(Time.TIMEZONE_UTC);
39 
40             date.set(0, 0, 0, day, month, year);
41             date.normalize(true /* ignore isDst */);
42 
43             allDayDate.set(day, month, year);
44             allDayDate.normalize(true /* ignore isDst */);
45 
46             this.expectedWeekNumber = expectedWeekNumber;
47         }
48     }
49 
50     DateAndWeekNumber[] tests = {
51             new DateAndWeekNumber(1998, 11, 28, 53),
52             new DateAndWeekNumber(1998, 11, 29, 53),
53             new DateAndWeekNumber(1998, 11, 30, 53),
54             new DateAndWeekNumber(1998, 11, 31, 53),
55             new DateAndWeekNumber(1999, 0, 1, 53),
56             new DateAndWeekNumber(1999, 0, 2, 53),
57             new DateAndWeekNumber(1999, 0, 3, 53),
58             new DateAndWeekNumber(1999, 0, 4, 1),
59             new DateAndWeekNumber(1999, 0, 10, 1),
60             new DateAndWeekNumber(1999, 0, 20, 3),
61             new DateAndWeekNumber(1999, 0, 30, 4),
62 
63             new DateAndWeekNumber(1999, 11, 28, 52),
64             new DateAndWeekNumber(1999, 11, 29, 52),
65             new DateAndWeekNumber(1999, 11, 30, 52),
66             new DateAndWeekNumber(1999, 11, 31, 52),
67             new DateAndWeekNumber(2000, 0, 1, 52),
68             new DateAndWeekNumber(2000, 0, 2, 52),
69             new DateAndWeekNumber(2000, 0, 3, 1),
70             new DateAndWeekNumber(2000, 0, 4, 1),
71             new DateAndWeekNumber(2000, 0, 10, 2),
72             new DateAndWeekNumber(2000, 0, 20, 3),
73             new DateAndWeekNumber(2000, 0, 30, 4),
74 
75             new DateAndWeekNumber(2000, 11, 28, 52),
76             new DateAndWeekNumber(2000, 11, 29, 52),
77             new DateAndWeekNumber(2000, 11, 30, 52),
78             new DateAndWeekNumber(2000, 11, 31, 52),
79             new DateAndWeekNumber(2001, 0, 1, 1),
80             new DateAndWeekNumber(2001, 0, 2, 1),
81             new DateAndWeekNumber(2001, 0, 3, 1),
82             new DateAndWeekNumber(2001, 0, 4, 1),
83             new DateAndWeekNumber(2001, 0, 10, 2),
84             new DateAndWeekNumber(2001, 0, 20, 3),
85             new DateAndWeekNumber(2001, 0, 30, 5),
86 
87             new DateAndWeekNumber(2001, 11, 28, 52),
88             new DateAndWeekNumber(2001, 11, 29, 52),
89             new DateAndWeekNumber(2001, 11, 30, 52),
90             new DateAndWeekNumber(2001, 11, 31, 1),
91             new DateAndWeekNumber(2002, 0, 1, 1),
92             new DateAndWeekNumber(2002, 0, 2, 1),
93             new DateAndWeekNumber(2002, 0, 3, 1),
94             new DateAndWeekNumber(2002, 0, 4, 1),
95             new DateAndWeekNumber(2002, 0, 10, 2),
96             new DateAndWeekNumber(2002, 0, 20, 3),
97             new DateAndWeekNumber(2002, 0, 30, 5),
98 
99             new DateAndWeekNumber(2002, 11, 28, 52),
100             new DateAndWeekNumber(2002, 11, 29, 52),
101             new DateAndWeekNumber(2002, 11, 30, 1),
102             new DateAndWeekNumber(2002, 11, 31, 1),
103             new DateAndWeekNumber(2003, 0, 1, 1),
104             new DateAndWeekNumber(2003, 0, 2, 1),
105             new DateAndWeekNumber(2003, 0, 3, 1),
106             new DateAndWeekNumber(2003, 0, 4, 1),
107             new DateAndWeekNumber(2003, 0, 10, 2),
108             new DateAndWeekNumber(2003, 0, 20, 4),
109             new DateAndWeekNumber(2003, 0, 30, 5),
110 
111             new DateAndWeekNumber(2003, 11, 28, 52),
112             new DateAndWeekNumber(2003, 11, 29, 1),
113             new DateAndWeekNumber(2003, 11, 30, 1),
114             new DateAndWeekNumber(2003, 11, 31, 1),
115             new DateAndWeekNumber(2004, 0, 1, 1),
116             new DateAndWeekNumber(2004, 0, 2, 1),
117             new DateAndWeekNumber(2004, 0, 3, 1),
118             new DateAndWeekNumber(2004, 0, 4, 1),
119             new DateAndWeekNumber(2004, 0, 10, 2),
120             new DateAndWeekNumber(2004, 0, 20, 4),
121             new DateAndWeekNumber(2004, 0, 30, 5),
122 
123             new DateAndWeekNumber(2004, 0, 1, 1),
124             new DateAndWeekNumber(2004, 1, 1, 5),
125             new DateAndWeekNumber(2004, 2, 1, 10),
126             new DateAndWeekNumber(2004, 3, 1, 14),
127             new DateAndWeekNumber(2004, 4, 1, 18),
128             new DateAndWeekNumber(2004, 5, 1, 23),
129             new DateAndWeekNumber(2004, 6, 1, 27),
130             new DateAndWeekNumber(2004, 7, 1, 31),
131             new DateAndWeekNumber(2004, 8, 1, 36),
132             new DateAndWeekNumber(2004, 9, 1, 40),
133             new DateAndWeekNumber(2004, 10, 1, 45),
134             new DateAndWeekNumber(2004, 11, 1, 49),
135 
136             new DateAndWeekNumber(2004, 11, 28, 53),
137             new DateAndWeekNumber(2004, 11, 29, 53),
138             new DateAndWeekNumber(2004, 11, 30, 53),
139             new DateAndWeekNumber(2004, 11, 31, 53),
140             new DateAndWeekNumber(2005, 0, 1, 53),
141             new DateAndWeekNumber(2005, 0, 2, 53),
142             new DateAndWeekNumber(2005, 0, 3, 1),
143             new DateAndWeekNumber(2005, 0, 4, 1),
144             new DateAndWeekNumber(2005, 0, 10, 2),
145             new DateAndWeekNumber(2005, 0, 20, 3),
146             new DateAndWeekNumber(2005, 0, 30, 4),
147 
148             new DateAndWeekNumber(2005, 11, 28, 52),
149             new DateAndWeekNumber(2005, 11, 29, 52),
150             new DateAndWeekNumber(2005, 11, 30, 52),
151             new DateAndWeekNumber(2005, 11, 31, 52),
152             new DateAndWeekNumber(2006, 0, 1, 52),
153             new DateAndWeekNumber(2006, 0, 2, 1),
154             new DateAndWeekNumber(2006, 0, 3, 1),
155             new DateAndWeekNumber(2006, 0, 4, 1),
156             new DateAndWeekNumber(2006, 0, 10, 2),
157             new DateAndWeekNumber(2006, 0, 20, 3),
158             new DateAndWeekNumber(2006, 0, 30, 5),
159 
160             new DateAndWeekNumber(2006, 11, 28, 52),
161             new DateAndWeekNumber(2006, 11, 29, 52),
162             new DateAndWeekNumber(2006, 11, 30, 52),
163             new DateAndWeekNumber(2006, 11, 31, 52),
164             new DateAndWeekNumber(2007, 0, 1, 1),
165             new DateAndWeekNumber(2007, 0, 2, 1),
166             new DateAndWeekNumber(2007, 0, 3, 1),
167             new DateAndWeekNumber(2007, 0, 4, 1),
168             new DateAndWeekNumber(2007, 0, 10, 2),
169             new DateAndWeekNumber(2007, 0, 20, 3),
170             new DateAndWeekNumber(2007, 0, 30, 5),
171 
172             new DateAndWeekNumber(2007, 11, 28, 52),
173             new DateAndWeekNumber(2007, 11, 29, 52),
174             new DateAndWeekNumber(2007, 11, 30, 52),
175             new DateAndWeekNumber(2007, 11, 31, 1),
176             new DateAndWeekNumber(2008, 0, 1, 1),
177             new DateAndWeekNumber(2008, 0, 2, 1),
178             new DateAndWeekNumber(2008, 0, 3, 1),
179             new DateAndWeekNumber(2008, 0, 4, 1),
180             new DateAndWeekNumber(2008, 0, 10, 2),
181             new DateAndWeekNumber(2008, 0, 20, 3),
182             new DateAndWeekNumber(2008, 0, 30, 5),
183 
184             new DateAndWeekNumber(2008, 11, 28, 52),
185             new DateAndWeekNumber(2008, 11, 29, 1),
186             new DateAndWeekNumber(2008, 11, 30, 1),
187             new DateAndWeekNumber(2008, 11, 31, 1),
188             new DateAndWeekNumber(2009, 0, 1, 1),
189             new DateAndWeekNumber(2009, 0, 2, 1),
190             new DateAndWeekNumber(2009, 0, 3, 1),
191             new DateAndWeekNumber(2009, 0, 4, 1),
192             new DateAndWeekNumber(2009, 0, 10, 2),
193             new DateAndWeekNumber(2009, 0, 20, 4),
194             new DateAndWeekNumber(2009, 0, 30, 5),
195     };
196 
197     @Override
setUp()198     protected void setUp() throws Exception {
199         super.setUp();
200     }
201 
202     @SmallTest
testAll()203     public void testAll() throws Exception {
204         int len = tests.length;
205         for (int index = 0; index < len; index++) {
206             DateAndWeekNumber test = tests[index];
207             int weekNumber = test.date.getWeekNumber();
208             if (weekNumber != test.expectedWeekNumber) {
209                 long millis = test.date.toMillis(false /* use isDst */);
210                 int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_NUMERIC_DATE;
211                 String output = DateUtils.formatDateTime(mContext, millis, flags);
212                 Log.i("WeekNumberTest", "index " + index
213                         + " date: " + output
214                         + " expected: " + test.expectedWeekNumber
215                         + " actual: " + weekNumber);
216             }
217             assertEquals(weekNumber, test.expectedWeekNumber);
218 
219             weekNumber = test.allDayDate.getWeekNumber();
220             if (weekNumber != test.expectedWeekNumber) {
221                 long millis = test.date.toMillis(false /* use isDst */);
222                 int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_NUMERIC_DATE;
223                 String output = DateUtils.formatDateTime(mContext, millis, flags);
224                 Log.i("WeekNumberTest", "(all-day) index " + index
225                         + " date: " + output
226                         + " expected: " + test.expectedWeekNumber
227                         + " actual: " + weekNumber);
228             }
229             assertEquals(weekNumber, test.expectedWeekNumber);
230         }
231     }
232 }
233