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 import java.util.Calendar; 27 28 /** 29 * Unit tests for {@link android.text.format.DateUtils#formatDateRange}. 30 */ 31 public class FormatDateRangeTest extends AndroidTestCase { 32 33 private class DateTest { 34 public Time date1; 35 public Time date2; 36 public int flags; 37 public String expectedOutput; 38 DateTest(int year1, int month1, int day1, int hour1, int minute1, int year2, int month2, int day2, int hour2, int minute2, int flags, String output)39 public DateTest(int year1, int month1, int day1, int hour1, int minute1, 40 int year2, int month2, int day2, int hour2, int minute2, 41 int flags, String output) { 42 if ((flags & DateUtils.FORMAT_UTC) != 0) { 43 date1 = new Time(Time.TIMEZONE_UTC); 44 date2 = new Time(Time.TIMEZONE_UTC); 45 } else { 46 date1 = new Time(); 47 date2 = new Time(); 48 } 49 50 // If the year is zero, then set it to the current year. 51 if (year1 == 0 && year2 == 0) { 52 date1.set(System.currentTimeMillis()); 53 year1 = year2 = date1.year; 54 } 55 56 date1.set(0, minute1, hour1, day1, month1, year1); 57 date1.normalize(true /* ignore isDst */); 58 59 date2.set(0, minute2, hour2, day2, month2, year2); 60 date2.normalize(true /* ignore isDst */); 61 62 this.flags = flags; 63 expectedOutput = output; 64 } 65 66 // Single point in time. (not a range) DateTest(int year1, int month1, int day1, int hour1, int minute1, int flags, String output)67 public DateTest(int year1, int month1, int day1, int hour1, int minute1, 68 int flags, String output) { 69 this(year1, month1, day1, hour1, minute1, 70 year1, month1, day1, hour1, minute1, 71 flags, output); 72 } 73 } 74 75 private Resources mResources; 76 77 DateTest[] tests = { 78 new DateTest(0, 10, 9, 8, 0, 0, 10, 9, 11, 0, 79 DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_ABBREV_ALL, "8am \u2013 11am"), 80 new DateTest(0, 10, 9, 8, 0, 0, 10, 9, 11, 0, 81 DateUtils.FORMAT_SHOW_TIME, "8:00am \u2013 11:00am"), 82 new DateTest(0, 10, 9, 8, 0, 0, 10, 9, 17, 0, 83 DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_24HOUR, "08:00 \u2013 17:00"), 84 new DateTest(0, 10, 9, 8, 0, 0, 10, 9, 12, 0, 85 DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_ABBREV_ALL, "8am \u2013 noon"), 86 new DateTest(0, 10, 9, 8, 0, 0, 10, 9, 12, 0, 87 DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_NO_NOON | DateUtils.FORMAT_ABBREV_ALL, 88 "8am \u2013 12pm"), 89 new DateTest(0, 10, 9, 8, 0, 0, 10, 9, 12, 0, 90 DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_CAP_NOON | DateUtils.FORMAT_ABBREV_ALL, 91 "8am \u2013 Noon"), 92 new DateTest(0, 10, 9, 10, 30, 0, 10, 9, 13, 0, 93 DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_ABBREV_ALL, "10:30am \u2013 1pm"), 94 new DateTest(0, 10, 9, 13, 0, 0, 10, 9, 14, 0, 95 DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_ABBREV_ALL, "1pm \u2013 2pm"), 96 new DateTest(0, 10, 9, 0, 0, 0, 10, 9, 14, 0, 97 DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_ABBREV_ALL, "12am \u2013 2pm"), 98 new DateTest(0, 10, 9, 20, 0, 0, 10, 10, 0, 0, 99 DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_ABBREV_ALL, "8pm \u2013 midnight"), 100 new DateTest(0, 10, 10, 0, 0, 101 DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_ABBREV_ALL, "12am"), 102 new DateTest(0, 10, 9, 20, 0, 0, 10, 10, 0, 0, 103 DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_24HOUR | DateUtils.FORMAT_ABBREV_ALL, 104 "20:00 \u2013 00:00"), 105 new DateTest(0, 10, 10, 0, 0, 106 DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_24HOUR | DateUtils.FORMAT_ABBREV_ALL, 107 "00:00"), 108 new DateTest(0, 10, 9, 20, 0, 0, 10, 10, 0, 0, 109 DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL, "Nov 9"), 110 new DateTest(0, 10, 10, 0, 0, 0, 10, 10, 0, 0, 111 DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL, "Nov 10"), 112 new DateTest(0, 10, 9, 20, 0, 0, 10, 10, 0, 0, 113 DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_24HOUR | DateUtils.FORMAT_ABBREV_ALL, 114 "Nov 9"), 115 new DateTest(0, 10, 10, 0, 0, 116 DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_24HOUR | DateUtils.FORMAT_ABBREV_ALL, 117 "Nov 10"), 118 new DateTest(0, 10, 9, 20, 0, 0, 10, 10, 0, 0, 119 DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_NO_MIDNIGHT | DateUtils.FORMAT_ABBREV_ALL, 120 "8pm \u2013 12am"), 121 new DateTest(0, 10, 9, 20, 0, 0, 10, 10, 0, 0, 122 DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_CAP_MIDNIGHT | DateUtils.FORMAT_ABBREV_ALL, 123 "8pm \u2013 Midnight"), 124 new DateTest(0, 10, 9, 0, 0, 0, 10, 10, 0, 0, 125 DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_ABBREV_ALL, "12am \u2013 midnight"), 126 new DateTest(0, 10, 9, 0, 0, 0, 10, 10, 0, 0, 127 DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_24HOUR | DateUtils.FORMAT_ABBREV_ALL, 128 "00:00 \u2013 00:00"), 129 new DateTest(0, 10, 9, 0, 0, 0, 10, 10, 0, 0, 130 DateUtils.FORMAT_UTC | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL, "Nov 9"), 131 new DateTest(0, 10, 9, 0, 0, 0, 10, 10, 0, 0, 132 DateUtils.FORMAT_UTC | DateUtils.FORMAT_ABBREV_ALL, "Nov 9"), 133 new DateTest(0, 10, 9, 0, 0, 0, 10, 10, 0, 0, 134 DateUtils.FORMAT_UTC, "November 9"), 135 new DateTest(0, 10, 8, 0, 0, 0, 10, 10, 0, 0, 136 DateUtils.FORMAT_UTC | DateUtils.FORMAT_ABBREV_ALL, "Nov 8 \u2013 9"), 137 new DateTest(0, 10, 9, 0, 0, 0, 10, 11, 0, 0, 138 DateUtils.FORMAT_UTC | DateUtils.FORMAT_ABBREV_ALL, "Nov 9 \u2013 10"), 139 new DateTest(0, 10, 9, 8, 0, 0, 10, 11, 17, 0, 140 DateUtils.FORMAT_UTC | DateUtils.FORMAT_ABBREV_ALL, "Nov 9 \u2013 11"), 141 new DateTest(0, 9, 29, 8, 0, 0, 10, 3, 17, 0, 142 DateUtils.FORMAT_UTC | DateUtils.FORMAT_ABBREV_ALL, "Oct 29 \u2013 Nov 3"), 143 new DateTest(2007, 11, 29, 8, 0, 2008, 0, 2, 17, 0, 144 DateUtils.FORMAT_UTC | DateUtils.FORMAT_ABBREV_ALL, "Dec 29, 2007 \u2013 Jan 2, 2008"), 145 new DateTest(2007, 11, 29, 0, 0, 2008, 0, 2, 0, 0, 146 DateUtils.FORMAT_UTC | DateUtils.FORMAT_ABBREV_ALL, "Dec 29, 2007 \u2013 Jan 1, 2008"), 147 new DateTest(2007, 11, 29, 8, 0, 2008, 0, 2, 17, 0, 148 DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_ABBREV_ALL, 149 "Dec 29, 2007, 8am \u2013 Jan 2, 2008, 5pm"), 150 new DateTest(0, 10, 9, 8, 0, 0, 10, 11, 17, 0, 151 DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_ABBREV_ALL, 152 "Nov 9, 8am \u2013 Nov 11, 5pm"), 153 new DateTest(2007, 10, 9, 8, 0, 2007, 10, 11, 17, 0, 154 DateUtils.FORMAT_SHOW_WEEKDAY | DateUtils.FORMAT_ABBREV_ALL, 155 "Fri, Nov 9, 2007 \u2013 Sun, Nov 11, 2007"), 156 new DateTest(2007, 10, 9, 8, 0, 2007, 10, 11, 17, 0, 157 DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_WEEKDAY | DateUtils.FORMAT_ABBREV_ALL, 158 "Fri, Nov 9, 2007, 8am \u2013 Sun, Nov 11, 2007, 5pm"), 159 new DateTest(2007, 11, 3, 13, 0, 2007, 11, 3, 14, 0, 160 DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_YEAR, 161 "1:00pm \u2013 2:00pm, December 3, 2007"), 162 // Tests that FORMAT_SHOW_YEAR takes precedence over FORMAT_NO_YEAR: 163 new DateTest(2007, 11, 3, 13, 0, 2007, 11, 3, 13, 0, 164 DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_YEAR | DateUtils.FORMAT_NO_YEAR, 165 "December 3, 2007"), 166 // Tests that year isn't shown by default with no year flags when time is the current year: 167 new DateTest( 168 Calendar.getInstance().get(Calendar.YEAR), 0, 3, 13, 0, 169 DateUtils.FORMAT_SHOW_DATE, 170 "January 3"), 171 // Tests that the year is shown by default with no year flags when time isn't the current year: 172 new DateTest( 173 Calendar.getInstance().get(Calendar.YEAR) - 1, 0, 3, 13, 0, 174 DateUtils.FORMAT_SHOW_DATE, 175 "January 3, 2008"), 176 }; 177 178 @Override setUp()179 protected void setUp() throws Exception { 180 super.setUp(); 181 182 mResources = mContext.getResources(); 183 } 184 185 @MediumTest testAll()186 public void testAll() throws Exception { 187 int len = tests.length; 188 for (int index = 0; index < len; index++) { 189 DateTest dateTest = tests[index]; 190 long startMillis = dateTest.date1.toMillis(false /* use isDst */); 191 long endMillis = dateTest.date2.toMillis(false /* use isDst */); 192 int flags = dateTest.flags; 193 String output = DateUtils.formatDateRange(mContext, startMillis, endMillis, flags); 194 if (!dateTest.expectedOutput.equals(output)) { 195 Log.i("FormatDateRangeTest", "index " + index 196 + " expected: " + dateTest.expectedOutput 197 + " actual: " + output); 198 } 199 assertEquals(dateTest.expectedOutput, output); 200 } 201 } 202 } 203