1 /* 2 * Copyright (C) 2010 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 com.android.calendar.CalendarUtils.TimeZoneUtils; 20 21 import android.content.res.Configuration; 22 import android.content.res.Resources.NotFoundException; 23 import android.database.MatrixCursor; 24 import android.provider.CalendarContract.CalendarCache; 25 import android.test.mock.MockResources; 26 import android.test.suitebuilder.annotation.SmallTest; 27 import android.test.suitebuilder.annotation.Smoke; 28 import android.text.format.Time; 29 30 import java.util.HashMap; 31 import java.util.Locale; 32 33 import junit.framework.TestCase; 34 35 /** 36 * Test class for verifying helper functions in Calendar's Utils 37 * 38 * You can run these tests with the following command: 39 * "adb shell am instrument -w -e class com.android.calendar.UtilsTests 40 * com.android.calendar.tests/android.test.InstrumentationTestRunner" 41 */ 42 public class UtilsTests extends TestCase { 43 HashMap<String, Boolean> mIsDuplicateName; 44 HashMap<String, Boolean> mIsDuplicateNameExpected; 45 MatrixCursor mDuplicateNameCursor; 46 private DbTestUtils dbUtils; 47 private final TimeZoneUtils timezoneUtils = new TimeZoneUtils(Utils.SHARED_PREFS_NAME); 48 49 private static final int NAME_COLUMN = 0; 50 private static final String[] DUPLICATE_NAME_COLUMNS = new String[] { "name" }; 51 private static final String[][] DUPLICATE_NAMES = new String[][] { 52 {"Pepper Pots"}, 53 {"Green Goblin"}, 54 {"Pepper Pots"}, 55 {"Peter Parker"}, 56 {"Silver Surfer"}, 57 {"John Jameson"}, 58 {"John Jameson"}, 59 {"Pepper Pots"} 60 }; 61 // First date is Thursday, Jan 1st, 1970. 62 private static final int[] JULIAN_DAYS = {2440588, 2440589, 2440590, 2440591, 2440592, 2440593, 63 2440594, 2440595, 2440596, 2440597, 2440598, 2440599, 2440600, 2440601 64 }; 65 private static final int[] EXPECTED_WEEK_MONDAY_START = { 66 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2 }; 67 private static final int[] EXPECTED_WEEK_SUNDAY_START = { 68 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2 }; 69 private static final int[] EXPECTED_WEEK_SATURDAY_START = { 70 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2 }; 71 private static final int[] WEEKS_FOR_JULIAN_MONDAYS = {1, 2}; 72 private static final int[] EXPECTED_JULIAN_MONDAYS = {2440592, 2440599}; 73 74 private static final int NOW_MONTH = 3; // April 75 private static final int NOW_DAY = 10; 76 private static final int NOW_YEAR = 2012; 77 private static final long NOW_TIME = createTimeInMillis(5, 5, 5, NOW_DAY, NOW_MONTH, NOW_YEAR); 78 private static final String DEFAULT_TIMEZONE = Time.getCurrentTimezone(); 79 80 /** 81 * Mock resources. Add translation strings for test here. 82 */ 83 private static class ResourcesForTest extends MockResources { 84 @Override 85 public String getString(int id) { 86 if (id == R.string.today) { 87 return "Today"; 88 } 89 if (id == R.string.tomorrow) { 90 return "Tomorrow"; 91 } 92 throw new IllegalArgumentException("unexpected resource ID: " + id); 93 } 94 95 @Override 96 public String getString(int id, Object... formatArgs) { 97 if (id == R.string.today_at_time_fmt) { 98 return String.format("Today at %s", formatArgs); 99 } 100 if (id == R.string.tomorrow_at_time_fmt) { 101 return String.format("Tomorrow at %s", formatArgs); 102 } 103 if (id == R.string.date_time_fmt) { 104 return String.format("%s, %s", formatArgs); 105 } 106 throw new IllegalArgumentException("unexpected resource ID: " + id); 107 } 108 109 @Override 110 public Configuration getConfiguration() { 111 Configuration config = new Configuration(); 112 config.locale = Locale.getDefault(); 113 return config; 114 } 115 } 116 117 private static long createTimeInMillis(int second, int minute, int hour, int monthDay, 118 int month, int year) { 119 return createTimeInMillis(second, minute, hour, monthDay, month, year, 120 Time.getCurrentTimezone()); 121 } 122 123 private static long createTimeInMillis(int second, int minute, int hour, int monthDay, 124 int month, int year, String timezone) { 125 Time t = new Time(timezone); 126 t.set(second, minute, hour, monthDay, month, year); 127 t.normalize(false); 128 return t.toMillis(false); 129 } 130 131 private void setTimezone(String tz) { 132 timezoneUtils.setTimeZone(dbUtils.getContext(), tz); 133 } 134 135 @Override 136 public void setUp() { 137 mIsDuplicateName = new HashMap<String, Boolean> (); 138 mDuplicateNameCursor = new MatrixCursor(DUPLICATE_NAME_COLUMNS); 139 for (int i = 0; i < DUPLICATE_NAMES.length; i++) { 140 mDuplicateNameCursor.addRow(DUPLICATE_NAMES[i]); 141 } 142 143 mIsDuplicateNameExpected = new HashMap<String, Boolean> (); 144 mIsDuplicateNameExpected.put("Pepper Pots", true); 145 mIsDuplicateNameExpected.put("Green Goblin", false); 146 mIsDuplicateNameExpected.put("Peter Parker", false); 147 mIsDuplicateNameExpected.put("Silver Surfer", false); 148 mIsDuplicateNameExpected.put("John Jameson", true); 149 150 // Set up fake db. 151 dbUtils = new DbTestUtils(new ResourcesForTest()); 152 dbUtils.getContentResolver().addProvider("settings", dbUtils.getContentProvider()); 153 dbUtils.getContentResolver().addProvider(CalendarCache.URI.getAuthority(), 154 dbUtils.getContentProvider()); 155 setTimezone(DEFAULT_TIMEZONE); 156 } 157 158 @Override 159 public void tearDown() { 160 mDuplicateNameCursor.close(); 161 162 // Must reset the timezone here, because even though the fake provider will be 163 // recreated/cleared, TimeZoneUtils statically holds on to a cached value. 164 setTimezone(Time.getCurrentTimezone()); 165 } 166 167 @Smoke 168 @SmallTest 169 public void testCheckForDuplicateNames() { 170 Utils.checkForDuplicateNames(mIsDuplicateName, mDuplicateNameCursor, NAME_COLUMN); 171 assertEquals(mIsDuplicateName, mIsDuplicateNameExpected); 172 } 173 174 @Smoke 175 @SmallTest 176 public void testGetWeeksSinceEpochFromJulianDay() { 177 for (int i = 0; i < JULIAN_DAYS.length; i++) { 178 assertEquals(EXPECTED_WEEK_MONDAY_START[i], 179 Utils.getWeeksSinceEpochFromJulianDay(JULIAN_DAYS[i], Time.MONDAY)); 180 assertEquals(EXPECTED_WEEK_SUNDAY_START[i], 181 Utils.getWeeksSinceEpochFromJulianDay(JULIAN_DAYS[i], Time.SUNDAY)); 182 assertEquals(EXPECTED_WEEK_SATURDAY_START[i], 183 Utils.getWeeksSinceEpochFromJulianDay(JULIAN_DAYS[i], Time.SATURDAY)); 184 } 185 } 186 187 @Smoke 188 @SmallTest 189 public void testGetJulianMondayFromWeeksSinceEpoch() { 190 for (int i = 0; i < WEEKS_FOR_JULIAN_MONDAYS.length; i++) { 191 assertEquals(EXPECTED_JULIAN_MONDAYS[i], 192 Utils.getJulianMondayFromWeeksSinceEpoch(WEEKS_FOR_JULIAN_MONDAYS[i])); 193 } 194 } 195 196 @Smoke 197 @SmallTest 198 public void testEquals() { 199 assertTrue(Utils.equals(null, null)); 200 assertFalse(Utils.equals("", null)); 201 assertFalse(Utils.equals(null, "")); 202 assertTrue(Utils.equals("","")); 203 204 Integer int1 = new Integer(1); 205 Integer int2 = new Integer(1); 206 assertTrue(Utils.equals(int1, int2)); 207 } 208 209 210 // Helper function to create test events for BusyBits testing 211 Event buildTestEvent(int startTime, int endTime, boolean allDay, int startDay, int endDay) { 212 Event e = new Event(); 213 e.startTime = startTime; 214 e.endTime = endTime; 215 e.allDay = allDay; 216 e.startDay = startDay; 217 e.endDay = endDay; 218 e.startMillis = e.startDay * 1000L * 3600L * 24L + e.startTime * 60L * 1000L; 219 e.endMillis = e.endDay * 1000L * 3600L * 24L + e.endTime * 60L * 1000L; 220 return e; 221 } 222 223 @Smoke 224 @SmallTest 225 public void testCreateBusyBitSegments() { 226 227 /* ArrayList<Event> events = new ArrayList<Event>(); 228 229 // Test cases that should return null 230 // Empty events list 231 assertEquals(null, Utils.createBusyBitSegments(10, 30, 100, 200, 0, events)); 232 // No events list 233 assertEquals(null, Utils.createBusyBitSegments(10, 30, 100, 200, 0, null)); 234 235 events.add(buildTestEvent(100, 130, false, 1, 1)); 236 events.add(buildTestEvent(1000, 1030, false, 1, 1)); 237 // Illegal pixel positions 238 assertEquals(null, Utils.createBusyBitSegments(30, 10, 100, 200, 1, events)); 239 // Illegal start and end times 240 assertEquals(null, Utils.createBusyBitSegments(10, 30, 200, 100, 1, events)); 241 assertEquals(null, Utils.createBusyBitSegments(10, 30, -10, 100, 1, events)); 242 assertEquals(null, Utils.createBusyBitSegments(10, 30, 24 * 60 + 100, 24 * 60 + 200, 1, 243 events)); 244 assertEquals(null, Utils.createBusyBitSegments(10, 30, 200, 24 * 60 + 100, 1, events)); 245 assertEquals(null, Utils.createBusyBitSegments(10, 30, 200, -100, 1, events)); 246 // No Events in time frame 247 assertEquals(null, Utils.createBusyBitSegments(10, 30, 500, 900, 1, events)); 248 249 // Test event that spans over the day 250 events.clear(); 251 events.add(buildTestEvent(100, 300, false, 1, 5)); 252 ArrayList<BusyBitsSegment> segments = new ArrayList<BusyBitsSegment>(); 253 assertEquals(null, Utils.createBusyBitSegments(0, 250, 200, 1200, 3, events)); 254 255 // test zero times events, events that are partially in the time span 256 // and all day events 257 events.clear(); 258 events.add(buildTestEvent(100, 300, false, 1, 1)); 259 events.add(buildTestEvent(1100, 1300, false, 1, 1)); 260 events.add(buildTestEvent(500, 600, true, 1, 1)); 261 events.add(buildTestEvent(700, 700, false, 1, 1)); 262 segments.clear(); 263 segments.add(new BusyBitsSegment(0, 10, false)); 264 segments.add(new BusyBitsSegment(90, 100, false)); 265 assertEquals(segments, Utils.createBusyBitSegments(0, 100, 200, 1200, 1, events)); 266 267 // Test event that spans over 2 days but start and end time do not 268 // overlap fully with tested time span 269 270 events.clear(); 271 events.add(buildTestEvent(23 * 60, 120, false, 1, 2)); 272 segments.clear(); 273 segments.add(new BusyBitsSegment(0, 120, false)); 274 assertEquals(segments, Utils.createBusyBitSegments(0, 240, 60, 180, 2, events)); 275 276 // Test overlapped events (two draw sizes) 277 events.clear(); 278 events.add(buildTestEvent(10, 200, false, 1, 1)); 279 events.add(buildTestEvent(150, 250, false, 1, 1)); 280 events.add(buildTestEvent(150, 250, false, 1, 1)); 281 events.add(buildTestEvent(200, 400, false, 1, 1)); 282 events.add(buildTestEvent(500, 700, false, 1, 1)); 283 events.add(buildTestEvent(550, 600, false, 1, 1)); 284 events.add(buildTestEvent(550, 580, false, 1, 1)); 285 events.add(buildTestEvent(560, 570, false, 1, 1)); 286 events.add(buildTestEvent(600, 700, false, 1, 1)); 287 events.add(buildTestEvent(620, 700, false, 1, 1)); 288 events.add(buildTestEvent(650, 700, false, 1, 1)); 289 events.add(buildTestEvent(800, 900, false, 1, 1)); 290 events.add(buildTestEvent(800, 900, false, 1, 1)); 291 events.add(buildTestEvent(800, 850, false, 1, 1)); 292 events.add(buildTestEvent(1000, 1200, false, 1, 1)); 293 events.add(buildTestEvent(1000, 1200, false, 1, 1)); 294 segments.clear(); 295 segments.add(new BusyBitsSegment(100, 149, false)); 296 segments.add(new BusyBitsSegment(150, 250, true)); 297 segments.add(new BusyBitsSegment(251, 400, false)); 298 segments.add(new BusyBitsSegment(500, 549, false)); 299 segments.add(new BusyBitsSegment(550, 700, true)); 300 segments.add(new BusyBitsSegment(800, 900, true)); 301 segments.add(new BusyBitsSegment(1000, 1100, true)); 302 assertEquals(segments, Utils.createBusyBitSegments(100, 1100, 100, 1100, 1, events)); 303 segments.clear(); 304 segments.add(new BusyBitsSegment(100, 111, false)); 305 segments.add(new BusyBitsSegment(112, 137, true)); 306 segments.add(new BusyBitsSegment(138, 175, false)); 307 segments.add(new BusyBitsSegment(200, 211, false)); 308 segments.add(new BusyBitsSegment(212, 250, true)); 309 segments.add(new BusyBitsSegment(275, 300, true)); 310 segments.add(new BusyBitsSegment(325, 350, true)); 311 assertEquals(segments, Utils.createBusyBitSegments(100, 350, 100, 1100, 1, events)); 312 */ 313 } 314 315 /** 316 * Tests the findNanpPhoneNumbers function. 317 */ 318 @SmallTest 319 public void testFindNanpPhoneNumber() { 320 final String[] NO_NUMBERS = new String[] {}; 321 322 findPhoneNumber("", NO_NUMBERS); 323 findPhoneNumber(" ", NO_NUMBERS); 324 findPhoneNumber("123", NO_NUMBERS); 325 findPhoneNumber("how much wood", NO_NUMBERS); 326 findPhoneNumber("abc1-650-555-1212", NO_NUMBERS); 327 findPhoneNumber("abc 5551212 def", new String[] { "5551212" }); 328 findPhoneNumber("1234567", NO_NUMBERS); 329 findPhoneNumber(" 2345678 ", new String[] { "2345678" }); 330 findPhoneNumber("1234567890", NO_NUMBERS); 331 findPhoneNumber("12345678901", new String[] { "12345678901" }); 332 findPhoneNumber("123456789012", NO_NUMBERS); 333 findPhoneNumber("+1-555-1212", NO_NUMBERS); 334 findPhoneNumber("+1 (650) 555-1212", new String[] { "+1 (650) 555-1212" }); 335 findPhoneNumber("(650) 555-1212, (650) 555-1213", 336 new String[] { "(650) 555-1212", "(650) 555-1213" }); 337 findPhoneNumber("Call 555-1212, 555-1213 and also 555-1214.", 338 new String[] { "555-1212", "555-1213", "555-1214." }); 339 findPhoneNumber("555-1212,555-1213,555-1214", new String[] { "555-1212" }); 340 findPhoneNumber("123 (650) 555-1212", new String[] { "(650) 555-1212" }); 341 findPhoneNumber("1-650-555-1212", new String[] { "1-650-555-1212" }); 342 findPhoneNumber("1650-555-1212", new String[] { "1650-555-1212" }); 343 findPhoneNumber("1650 555-1212", new String[] { "1650 555-1212" }); 344 findPhoneNumber("1650/555-1212", NO_NUMBERS); 345 findPhoneNumber("1650-555 1212", NO_NUMBERS); 346 findPhoneNumber("8-650-555-1212", NO_NUMBERS); 347 findPhoneNumber("8 650-555-1212", new String[] { "650-555-1212" }); 348 findPhoneNumber("650.555.1212", new String[] { "650.555.1212" }); 349 findPhoneNumber(" *#650.555.1212#*!", new String[] { "*#650.555.1212#*" }); 350 findPhoneNumber("555.1212", new String[] { "555.1212" }); 351 findPhoneNumber("6505551212 x123, 555-1212", new String[] { "6505551212", "555-1212" }); 352 findPhoneNumber("6505551212x123", new String[] { "6505551212" }); 353 findPhoneNumber("http://example.com/6505551212/", NO_NUMBERS); 354 findPhoneNumber("Mountain View, CA 94043 (650) 555-1212", new String[]{ "(650) 555-1212" }); 355 findPhoneNumber("New York, NY 10001-0001", NO_NUMBERS); 356 } 357 358 /** 359 * Finds the numbers in a block of text, and checks to see if the positions of the numbers 360 * match the expected values. 361 * 362 * @param text The text to search. 363 * @param matches Pairs of start/end positions. 364 */ 365 private static void findPhoneNumber(String text, String[] matches) { 366 int[] results = EventInfoFragment.findNanpPhoneNumbers(text); 367 368 assertEquals(results.length % 2, 0); 369 370 if (results.length / 2 != matches.length) { 371 fail("Text '" + text + "': expected " + matches.length 372 + " matches, found " + results.length / 2); 373 } 374 375 for (int i = 0; i < results.length / 2; i++) { 376 CharSequence seq = text.subSequence(results[i*2], results[i*2 + 1]); 377 assertEquals(matches[i], seq); 378 } 379 } 380 381 @SmallTest 382 public void testGetDisplayedDatetime_differentYear() { 383 // 4/12/2000 5pm - 4/12/2000 6pm 384 long start = createTimeInMillis(0, 0, 17, 12, 3, 2000); 385 long end = createTimeInMillis(0, 0, 18, 12, 3, 2000); 386 String result = Utils.getDisplayedDatetime(start, end, NOW_TIME, DEFAULT_TIMEZONE, 387 false, dbUtils.getContext()); 388 assertEquals("Wednesday, April 12, 2000, 5:00pm \u2013 6:00pm", result); 389 390 // 12/31/2012 5pm - 1/1/2013 6pm 391 start = createTimeInMillis(0, 0, 17, 31, 11, 2012); 392 end = createTimeInMillis(0, 0, 18, 1, 0, 2013); 393 result = Utils.getDisplayedDatetime(start, end, NOW_TIME, DEFAULT_TIMEZONE, 394 false, dbUtils.getContext()); 395 assertEquals("Mon, Dec 31, 2012, 5:00pm Tue, Jan 1, 2013, 6:00pm", result); 396 } 397 398 @SmallTest 399 public void testGetDisplayedDatetime_sameYear() { 400 // 4/12/2012 5pm - 4/12/2012 6pm 401 long start = createTimeInMillis(0, 0, 17, 12, 3, 2012); 402 long end = createTimeInMillis(0, 0, 18, 12, 3, 2012); 403 String result = Utils.getDisplayedDatetime(start, end, NOW_TIME, DEFAULT_TIMEZONE, 404 false, dbUtils.getContext()); 405 assertEquals("Thursday, April 12, 5:00pm \u2013 6:00pm", result); 406 } 407 408 @SmallTest 409 public void testGetDisplayedDatetime_today() { 410 // 4/10/2012 5pm - 4/10/2012 6pm 411 long start = createTimeInMillis(0, 0, 17, NOW_DAY, NOW_MONTH, NOW_YEAR); 412 long end = createTimeInMillis(0, 0, 18, NOW_DAY, NOW_MONTH, NOW_YEAR); 413 String result = Utils.getDisplayedDatetime(start, end, NOW_TIME, DEFAULT_TIMEZONE, 414 false, dbUtils.getContext()); 415 assertEquals("Today at 5:00pm \u2013 6:00pm", result); 416 } 417 418 @SmallTest 419 public void testGetDisplayedDatetime_todayMidnight() { 420 // 4/10/2012 5pm - 4/11/2012 12am 421 long start = createTimeInMillis(0, 0, 17, NOW_DAY, NOW_MONTH, NOW_YEAR); 422 long end = createTimeInMillis(0, 0, 0, NOW_DAY + 1, NOW_MONTH, NOW_YEAR); 423 String result = Utils.getDisplayedDatetime(start, end, NOW_TIME, DEFAULT_TIMEZONE, 424 false, dbUtils.getContext()); 425 assertEquals("Today at 5:00pm \u2013 midnight", result); 426 } 427 428 @SmallTest 429 public void testGetDisplayedDatetime_tomorrow() { 430 // 4/11/2012 12:01am - 4/11/2012 11:59pm 431 long start = createTimeInMillis(0, 1, 0, NOW_DAY + 1, NOW_MONTH, NOW_YEAR); 432 long end = createTimeInMillis(0, 59, 23, NOW_DAY + 1, NOW_MONTH, NOW_YEAR); 433 String result = Utils.getDisplayedDatetime(start, end, NOW_TIME, DEFAULT_TIMEZONE, 434 false, dbUtils.getContext()); 435 assertEquals("Tomorrow at 12:01am \u2013 11:59pm", result); 436 } 437 438 @SmallTest 439 public void testGetDisplayedDatetime_yesterday() { 440 // 4/9/2012 5pm - 4/9/2012 6pm 441 long start = createTimeInMillis(0, 0, 17, 9, 3, 2012); 442 long end = createTimeInMillis(0, 0, 18, 9, 3, 2012); 443 String result = Utils.getDisplayedDatetime(start, end, NOW_TIME, DEFAULT_TIMEZONE, 444 false, dbUtils.getContext()); 445 assertEquals("Monday, April 9, 5:00pm \u2013 6:00pm", result); 446 } 447 448 @SmallTest 449 public void testGetDisplayedDatetime_multiDay() { 450 // 4/10/2012 12:01am - 4/11/2012 12:01am 451 long start = createTimeInMillis(0, 1, 0, NOW_DAY, NOW_MONTH, NOW_YEAR); 452 long end = createTimeInMillis(0, 1, 0, NOW_DAY + 1, NOW_MONTH, NOW_YEAR); 453 String result = Utils.getDisplayedDatetime(start, end, NOW_TIME, DEFAULT_TIMEZONE, 454 false, dbUtils.getContext()); 455 assertEquals("Tue, Apr 10, 12:01am \u2013 Wed, Apr 11, 12:01am", result); 456 } 457 458 @SmallTest 459 public void testGetDisplayedDatetime_allDay() { 460 // 4/2/2012 12:00am - 4/3/2012 12:00am 461 long start = createTimeInMillis(0, 0, 0, 2, 3, NOW_YEAR, Time.TIMEZONE_UTC); 462 long end = createTimeInMillis(0, 0, 0, 3, 3, NOW_YEAR, Time.TIMEZONE_UTC); 463 String result = Utils.getDisplayedDatetime(start, end, NOW_TIME, DEFAULT_TIMEZONE, 464 true, dbUtils.getContext()); 465 assertEquals("Monday, April 2", result); 466 } 467 468 @SmallTest 469 public void testGetDisplayedDatetime_allDayToday() { 470 // 4/10/2012 12:00am - 4/11/2012 12:00am 471 long start = createTimeInMillis(0, 0, 0, NOW_DAY, NOW_MONTH, NOW_YEAR, Time.TIMEZONE_UTC); 472 long end = createTimeInMillis(0, 0, 0, NOW_DAY + 1, NOW_MONTH, NOW_YEAR, Time.TIMEZONE_UTC); 473 String result = Utils.getDisplayedDatetime(start, end, NOW_TIME, DEFAULT_TIMEZONE, 474 true, dbUtils.getContext()); 475 assertEquals("Today", result); 476 } 477 478 @SmallTest 479 public void testGetDisplayedDatetime_allDayMultiday() { 480 // 4/10/2012 12:00am - 4/13/2012 12:00am 481 long start = createTimeInMillis(0, 0, 0, NOW_DAY, NOW_MONTH, NOW_YEAR, Time.TIMEZONE_UTC); 482 long end = createTimeInMillis(0, 0, 0, NOW_DAY + 3, NOW_MONTH, NOW_YEAR, Time.TIMEZONE_UTC); 483 String result = Utils.getDisplayedDatetime(start, end, NOW_TIME, DEFAULT_TIMEZONE, 484 true, dbUtils.getContext()); 485 assertEquals("Tuesday, April 10 \u2013 Thursday, April 12", result); 486 } 487 488 @SmallTest 489 public void testGetDisplayedDatetime_differentTimezone() { 490 String localTz = "America/New_York"; 491 String eventTz = "America/Los_Angeles"; 492 setTimezone(localTz); 493 494 // 4/12/2012 5pm - 4/12/2012 6pm (Pacific) 495 long start = createTimeInMillis(0, 0, 17, 12, 3, 2012, eventTz); 496 long end = createTimeInMillis(0, 0, 18, 12, 3, 2012, eventTz); 497 String result = Utils.getDisplayedDatetime(start, end, NOW_TIME, localTz, false, 498 dbUtils.getContext()); 499 assertEquals("Thursday, April 12, 8:00pm \u2013 9:00pm", result); 500 } 501 502 @SmallTest 503 public void testGetDisplayedDatetime_allDayDiffTimezone() { 504 String localTz = "America/New_York"; 505 setTimezone(localTz); 506 507 // 4/2/2012 12:00am - 4/3/2012 12:00am 508 long start = createTimeInMillis(0, 0, 0, 2, 3, NOW_YEAR, Time.TIMEZONE_UTC); 509 long end = createTimeInMillis(0, 0, 0, 3, 3, NOW_YEAR, Time.TIMEZONE_UTC); 510 String result = Utils.getDisplayedDatetime(start, end, NOW_TIME, localTz, true, 511 dbUtils.getContext()); 512 assertEquals("Monday, April 2", result); 513 } 514 515 @SmallTest 516 public void testGetDisplayedDatetime_allDayTomorrowDiffTimezone() { 517 String localTz = "America/New_York"; 518 setTimezone(localTz); 519 520 // 4/2/2012 12:00am - 4/3/2012 12:00am 521 long start = createTimeInMillis(0, 0, 0, NOW_DAY + 1, NOW_MONTH, NOW_YEAR, 522 Time.TIMEZONE_UTC); 523 long end = createTimeInMillis(0, 0, 0, NOW_DAY + 2, NOW_MONTH, NOW_YEAR, 524 Time.TIMEZONE_UTC); 525 String result = Utils.getDisplayedDatetime(start, end, NOW_TIME, localTz, true, 526 dbUtils.getContext()); 527 assertEquals("Tomorrow", result); 528 } 529 530 // TODO: add tests for army time. 531 532 @SmallTest 533 public void testGetDisplayedTimezone_sameTimezone() { 534 String localTz = "America/New_York"; 535 setTimezone(localTz); 536 537 // 4/12/2012 5pm 538 long start = createTimeInMillis(0, 0, 17, 12, 3, 2012, localTz); 539 assertNull(Utils.getDisplayedTimezone(start, localTz, localTz)); 540 } 541 542 @SmallTest 543 public void testGetDisplayedTimezone_differentTimezone() { 544 String localTz = "America/New_York"; 545 String eventTz = "America/Los_Angeles"; 546 setTimezone(localTz); 547 548 // 1/12/2012 5pm (not daylight savings) 549 long start = createTimeInMillis(0, 0, 17, 12, 0, 2012, eventTz); 550 assertEquals("EST", Utils.getDisplayedTimezone(start, localTz, eventTz)); 551 } 552 553 @SmallTest 554 public void testGetDisplayedTimezone_differentTimezoneDst() { 555 String localTz = "America/New_York"; 556 String eventTz = "America/Los_Angeles"; 557 setTimezone(localTz); 558 559 // 4/12/2012 5pm (daylight savings) 560 long start = createTimeInMillis(0, 0, 17, 12, 3, 2012, eventTz); 561 assertEquals("EDT", Utils.getDisplayedTimezone(start, localTz, eventTz)); 562 } 563 } 564