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