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