1 /* 2 * Copyright (C) 2014 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.emailcommon.utility; 18 19 import android.test.AndroidTestCase; 20 import android.test.IsolatedContext; 21 import android.test.mock.MockContentResolver; 22 import android.test.suitebuilder.annotation.SmallTest; 23 import android.text.TextUtils; 24 25 import com.android.emailcommon.utility.Utility.NewFileCreator; 26 27 import java.io.File; 28 import java.io.IOException; 29 import java.text.ParseException; 30 import java.util.Calendar; 31 import java.util.GregorianCalendar; 32 import java.util.TimeZone; 33 34 @SmallTest 35 public class UtilityTest extends AndroidTestCase { testParseDateTimesHelper(String date, int year, int month, int day, int hour, int minute, int second)36 private void testParseDateTimesHelper(String date, int year, int month, 37 int day, int hour, int minute, int second) throws Exception { 38 GregorianCalendar cal = Utility.parseDateTimeToCalendar(date); 39 assertEquals(year, cal.get(Calendar.YEAR)); 40 assertEquals(month, cal.get(Calendar.MONTH) + 1); 41 assertEquals(day, cal.get(Calendar.DAY_OF_MONTH)); 42 assertEquals(hour, cal.get(Calendar.HOUR_OF_DAY)); 43 assertEquals(minute, cal.get(Calendar.MINUTE)); 44 assertEquals(second, cal.get(Calendar.SECOND)); 45 } 46 47 @SmallTest testParseDateTimes()48 public void testParseDateTimes() throws Exception { 49 testParseDateTimesHelper("20090211T180303Z", 2009, 2, 11, 18, 3, 3); 50 testParseDateTimesHelper("20090211", 2009, 2, 11, 0, 0, 0); 51 try { 52 testParseDateTimesHelper("200902", 0, 0, 0, 0, 0, 0); 53 fail("Expected ParseException"); 54 } catch (ParseException e) { 55 // expected 56 } 57 } 58 testParseEmailDateTimeHelper(String date, int year, int month, int day, int hour, int minute, int second, int millis)59 private void testParseEmailDateTimeHelper(String date, int year, int month, 60 int day, int hour, int minute, int second, int millis) throws Exception { 61 GregorianCalendar cal = new GregorianCalendar(year, month - 1, day, 62 hour, minute, second); 63 cal.setTimeZone(TimeZone.getTimeZone("GMT")); 64 long timeInMillis = Utility.parseEmailDateTimeToMillis(date); 65 assertEquals(cal.getTimeInMillis() + millis, timeInMillis); 66 } 67 68 @SmallTest testParseEmailDateTime()69 public void testParseEmailDateTime() throws Exception { 70 testParseEmailDateTimeHelper("2010-02-23T16:01:05.000Z", 71 2010, 2, 23, 16, 1, 5, 0); 72 testParseEmailDateTimeHelper("2009-02-11T18:03:31.123Z", 73 2009, 2, 11, 18, 3, 31, 123); 74 testParseEmailDateTimeHelper("2009-02-11", 75 2009, 2, 11, 0, 0, 0, 0); 76 try { 77 testParseEmailDateTimeHelper("2010-02", 1970, 1, 1, 0, 0, 0, 0); 78 fail("Expected ParseException"); 79 } catch (ParseException e) { 80 // expected 81 } 82 } 83 getCountdownFileCreator()84 private static NewFileCreator getCountdownFileCreator() { 85 return new NewFileCreator() { 86 private int mCountdown = 5; 87 @Override 88 public boolean createNewFile(File f) throws IOException { 89 return mCountdown-- <= 0; 90 } 91 }; 92 } 93 getTrueFileCreator()94 private static NewFileCreator getTrueFileCreator() { 95 return new NewFileCreator() { 96 @Override 97 public boolean createNewFile(File f) throws IOException { 98 return true; 99 } 100 }; 101 } 102 103 @SmallTest 104 public void testCreateUniqueFileCompare() throws Exception { 105 final File directory = 106 new IsolatedContext(new MockContentResolver(), getContext()).getFilesDir(); 107 108 final File created1 = 109 Utility.createUniqueFileInternal(getCountdownFileCreator(), directory, "file"); 110 assertNotNull(created1); 111 assertFalse(TextUtils.equals(created1.getName(), "file")); 112 113 final File created2 = 114 Utility.createUniqueFileInternal(getTrueFileCreator(), directory, "file"); 115 assertNotNull(created2); 116 assertTrue(TextUtils.equals(created2.getName(), "file")); 117 118 final File created3 = 119 Utility.createUniqueFileInternal(getCountdownFileCreator(), directory, "file.ext"); 120 assertNotNull(created3); 121 assertFalse(TextUtils.equals(created3.getName(), "file.ext")); 122 123 final File created4 = 124 Utility.createUniqueFileInternal(getTrueFileCreator(), directory, "file.ext"); 125 assertNotNull(created4); 126 assertTrue(TextUtils.equals(created4.getName(), "file.ext")); 127 } 128 129 @SmallTest 130 public void testCreateUniqueFileWithPercent() throws Exception { 131 final File directory = 132 new IsolatedContext(new MockContentResolver(), getContext()).getFilesDir(); 133 134 final File created1 = 135 Utility.createUniqueFileInternal(getTrueFileCreator(), directory, "file%s"); 136 assertNotNull(created1); 137 138 final File created2 = 139 Utility.createUniqueFileInternal(getTrueFileCreator(), directory, "file%s.ext"); 140 assertNotNull(created2); 141 } 142 143 @SmallTest 144 public void testCreateUniqueFile() throws Exception { 145 final File directory = 146 new IsolatedContext(new MockContentResolver(), getContext()).getFilesDir(); 147 148 final File created1 = 149 Utility.createUniqueFileInternal(getTrueFileCreator(), directory, "file"); 150 assertNotNull(created1); 151 152 final File created2 = 153 Utility.createUniqueFileInternal(getCountdownFileCreator(), directory, "file"); 154 assertNotNull(created2); 155 156 final File created3 = 157 Utility.createUniqueFileInternal(getTrueFileCreator(), directory, "file.ext"); 158 assertNotNull(created3); 159 160 final File created4 = 161 Utility.createUniqueFileInternal(getCountdownFileCreator(), directory, "file.ext"); 162 assertNotNull(created4); 163 164 final File created5 = 165 Utility.createUniqueFileInternal(getTrueFileCreator(), directory, ".ext"); 166 assertNotNull(created5); 167 168 final File created6 = 169 Utility.createUniqueFileInternal(getCountdownFileCreator(), directory, ".ext"); 170 assertNotNull(created6); 171 172 final File created7 = 173 Utility.createUniqueFileInternal(getTrueFileCreator(), directory, "."); 174 assertNotNull(created7); 175 176 final File created8 = 177 Utility.createUniqueFileInternal(getCountdownFileCreator(), directory, "."); 178 assertNotNull(created8); 179 } 180 181 @SmallTest 182 public void testCreateUniqueFileExtensions() throws Exception { 183 final File directory = 184 new IsolatedContext(new MockContentResolver(), getContext()).getFilesDir(); 185 186 final File created1 = 187 Utility.createUniqueFileInternal(getTrueFileCreator(), directory, "file"); 188 assertNotNull(created1); 189 assertEquals(created1.getName().indexOf('.'), -1); 190 191 final File created2 = 192 Utility.createUniqueFileInternal(getCountdownFileCreator(), directory, "file"); 193 assertNotNull(created2); 194 assertEquals(created2.getName().indexOf('.'), -1); 195 196 final File created3 = 197 Utility.createUniqueFileInternal(getTrueFileCreator(), directory, "file.ext"); 198 assertNotNull(created3); 199 assertEquals(created3.getName().length() - created3.getName().lastIndexOf('.'), 4); 200 201 final File created4 = 202 Utility.createUniqueFileInternal(getCountdownFileCreator(), directory, "file.ext"); 203 assertNotNull(created4); 204 assertEquals(created4.getName().length() - created4.getName().lastIndexOf('.'), 4); 205 } 206 } 207