ProviderTestUtils.java revision 25144e2b7990c50bb3650faf1aec341837c05348
1/* 2 * Copyright (C) 2009 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 17package com.android.email.provider; 18 19import com.android.email.Utility; 20import com.android.email.mail.transport.Rfc822Output; 21import com.android.email.provider.EmailContent.Account; 22import com.android.email.provider.EmailContent.Attachment; 23import com.android.email.provider.EmailContent.HostAuth; 24import com.android.email.provider.EmailContent.Mailbox; 25import com.android.email.provider.EmailContent.Message; 26 27import android.content.Context; 28import android.net.Uri; 29import android.test.MoreAsserts; 30 31import java.io.File; 32import java.io.FileOutputStream; 33 34import junit.framework.Assert; 35 36public class ProviderTestUtils extends Assert { 37 38 /** 39 * No constructor - statics only 40 */ 41 private ProviderTestUtils() { 42 } 43 44 /** 45 * Create an account for test purposes 46 */ 47 public static Account setupAccount(String name, boolean saveIt, Context context) { 48 Account account = new Account(); 49 50 account.mDisplayName = name; 51 account.mEmailAddress = name + "@android.com"; 52 account.mSyncKey = "sync-key-" + name; 53 account.mSyncLookback = 1; 54 account.mSyncInterval = EmailContent.Account.CHECK_INTERVAL_NEVER; 55 account.mHostAuthKeyRecv = 0; 56 account.mHostAuthKeySend = 0; 57 account.mFlags = 4; 58 account.mIsDefault = true; 59 account.mCompatibilityUuid = "test-uid-" + name; 60 account.mSenderName = name; 61 account.mRingtoneUri = "content://ringtone-" + name; 62 account.mProtocolVersion = "2.5" + name; 63 account.mNewMessageCount = 5 + name.length(); 64 account.mSecurityFlags = 7; 65 account.mSecuritySyncKey = "sec-sync-key-" + name; 66 account.mSignature = "signature-" + name; 67 if (saveIt) { 68 account.save(context); 69 } 70 return account; 71 } 72 73 /** 74 * Create a hostauth record for test purposes 75 */ 76 public static HostAuth setupHostAuth(String name, long accountId, boolean saveIt, 77 Context context) { 78 return setupHostAuth("protocol", name, accountId, saveIt, context); 79 } 80 81 /** 82 * Create a hostauth record for test purposes 83 */ 84 public static HostAuth setupHostAuth(String protocol, String name, long accountId, 85 boolean saveIt, Context context) { 86 HostAuth hostAuth = new HostAuth(); 87 88 hostAuth.mProtocol = protocol; 89 hostAuth.mAddress = "address-" + name; 90 hostAuth.mPort = 100; 91 hostAuth.mFlags = 200; 92 hostAuth.mLogin = "login-" + name; 93 hostAuth.mPassword = "password-" + name; 94 hostAuth.mDomain = "domain-" + name; 95 hostAuth.mAccountKey = accountId; 96 97 if (saveIt) { 98 hostAuth.save(context); 99 } 100 return hostAuth; 101 } 102 103 /** 104 * Create a mailbox for test purposes 105 */ 106 public static Mailbox setupMailbox(String name, long accountId, boolean saveIt, 107 Context context) { 108 return setupMailbox(name, accountId, saveIt, context, Mailbox.TYPE_MAIL); 109 } 110 111 public static Mailbox setupMailbox(String name, long accountId, boolean saveIt, 112 Context context, int type) { 113 Mailbox box = new Mailbox(); 114 115 box.mDisplayName = name; 116 box.mServerId = "serverid-" + name; 117 box.mParentServerId = "parent-serverid-" + name; 118 box.mAccountKey = accountId; 119 box.mType = type; 120 box.mDelimiter = 1; 121 box.mSyncKey = "sync-key-" + name; 122 box.mSyncLookback = 2; 123 box.mSyncInterval = EmailContent.Account.CHECK_INTERVAL_NEVER; 124 box.mSyncTime = 3; 125 // Should always be saved as zero 126 box.mUnreadCount = 0; 127 box.mFlagVisible = true; 128 box.mFlags = 5; 129 box.mVisibleLimit = 6; 130 131 if (saveIt) { 132 box.save(context); 133 } 134 return box; 135 } 136 137 /** 138 * Create a message for test purposes 139 */ 140 public static Message setupMessage(String name, long accountId, long mailboxId, 141 boolean addBody, boolean saveIt, Context context) { 142 // Default starred, read, (backword compatibility) 143 return setupMessage(name, accountId, mailboxId, addBody, saveIt, context, true, true); 144 } 145 146 /** 147 * Create a message for test purposes 148 */ 149 public static Message setupMessage(String name, long accountId, long mailboxId, 150 boolean addBody, boolean saveIt, Context context, boolean starred, boolean read) { 151 Message message = new Message(); 152 153 message.mDisplayName = name; 154 message.mTimeStamp = 100 + name.length(); 155 message.mSubject = "subject " + name; 156 message.mFlagRead = read; 157 message.mFlagLoaded = Message.FLAG_LOADED_UNLOADED; 158 message.mFlagFavorite = starred; 159 message.mFlagAttachment = true; 160 message.mFlags = 0; 161 162 message.mServerId = "serverid " + name; 163 message.mServerTimeStamp = 300 + name.length(); 164 message.mClientId = "clientid " + name; 165 message.mMessageId = "messageid " + name; 166 167 message.mMailboxKey = mailboxId; 168 message.mAccountKey = accountId; 169 170 message.mFrom = "from " + name; 171 message.mTo = "to " + name; 172 message.mCc = "cc " + name; 173 message.mBcc = "bcc " + name; 174 message.mReplyTo = "replyto " + name; 175 176 message.mMeetingInfo = "123" + accountId + mailboxId + name.length(); 177 178 if (addBody) { 179 message.mText = "body text " + name; 180 message.mHtml = "body html " + name; 181 message.mTextReply = "reply text " + name; 182 message.mHtmlReply = "reply html " + name; 183 message.mSourceKey = 400 + name.length(); 184 message.mIntroText = "intro text " + name; 185 } 186 187 if (saveIt) { 188 message.save(context); 189 } 190 return message; 191 } 192 193 /** 194 * Create a test attachment. A few fields are specified by params, and all other fields 195 * are generated using pseudo-unique values. 196 * 197 * @param messageId the message to attach to 198 * @param fileName the "file" to indicate in the attachment 199 * @param length the "length" of the attachment 200 * @param flags the flags to set in the attachment 201 * @param saveIt if true, write the new attachment directly to the DB 202 * @param context use this context 203 */ 204 public static Attachment setupAttachment(long messageId, String fileName, long length, 205 int flags, boolean saveIt, Context context) { 206 Attachment att = new Attachment(); 207 att.mSize = length; 208 att.mFileName = fileName; 209 att.mContentId = "contentId " + fileName; 210 att.mContentUri = "contentUri " + fileName; 211 att.mMessageKey = messageId; 212 att.mMimeType = "mimeType " + fileName; 213 att.mLocation = "location " + fileName; 214 att.mEncoding = "encoding " + fileName; 215 att.mContent = "content " + fileName; 216 att.mFlags = flags; 217 att.mContentBytes = Utility.toUtf8("content " + fileName); 218 if (saveIt) { 219 att.save(context); 220 } 221 return att; 222 } 223 224 /** 225 * Create a test attachment with flags = 0 (see above) 226 * 227 * @param messageId the message to attach to 228 * @param fileName the "file" to indicate in the attachment 229 * @param length the "length" of the attachment 230 * @param saveIt if true, write the new attachment directly to the DB 231 * @param context use this context 232 */ 233 public static Attachment setupAttachment(long messageId, String fileName, long length, 234 boolean saveIt, Context context) { 235 return setupAttachment(messageId, fileName, length, 0, saveIt, context); 236 } 237 238 private static void assertEmailContentEqual(String caller, EmailContent expect, 239 EmailContent actual) { 240 if (expect == actual) { 241 return; 242 } 243 244 assertEquals(caller + " mId", expect.mId, actual.mId); 245 assertEquals(caller + " mBaseUri", expect.mBaseUri, actual.mBaseUri); 246 } 247 248 /** 249 * Compare two accounts for equality 250 * 251 * TODO: check host auth? 252 */ 253 public static void assertAccountEqual(String caller, Account expect, Account actual) { 254 if (expect == actual) { 255 return; 256 } 257 258 assertEmailContentEqual(caller, expect, actual); 259 assertEquals(caller + " mDisplayName", expect.mDisplayName, actual.mDisplayName); 260 assertEquals(caller + " mEmailAddress", expect.mEmailAddress, actual.mEmailAddress); 261 assertEquals(caller + " mSyncKey", expect.mSyncKey, actual.mSyncKey); 262 263 assertEquals(caller + " mSyncLookback", expect.mSyncLookback, actual.mSyncLookback); 264 assertEquals(caller + " mSyncInterval", expect.mSyncInterval, actual.mSyncInterval); 265 assertEquals(caller + " mHostAuthKeyRecv", expect.mHostAuthKeyRecv, 266 actual.mHostAuthKeyRecv); 267 assertEquals(caller + " mHostAuthKeySend", expect.mHostAuthKeySend, 268 actual.mHostAuthKeySend); 269 assertEquals(caller + " mFlags", expect.mFlags, actual.mFlags); 270 assertEquals(caller + " mIsDefault", expect.mIsDefault, actual.mIsDefault); 271 assertEquals(caller + " mCompatibilityUuid", expect.mCompatibilityUuid, 272 actual.mCompatibilityUuid); 273 assertEquals(caller + " mSenderName", expect.mSenderName, actual.mSenderName); 274 assertEquals(caller + " mRingtoneUri", expect.mRingtoneUri, actual.mRingtoneUri); 275 assertEquals(caller + " mProtocolVersion", expect.mProtocolVersion, 276 actual.mProtocolVersion); 277 assertEquals(caller + " mNewMessageCount", expect.mNewMessageCount, 278 actual.mNewMessageCount); 279 assertEquals(caller + " mSecurityFlags", expect.mSecurityFlags, actual.mSecurityFlags); 280 assertEquals(caller + " mSecuritySyncKey", expect.mSecuritySyncKey, 281 actual.mSecuritySyncKey); 282 assertEquals(caller + " mSignature", expect.mSignature, actual.mSignature); 283 } 284 285 /** 286 * Compare two hostauth records for equality 287 */ 288 public static void assertHostAuthEqual(String caller, HostAuth expect, HostAuth actual) { 289 if (expect == actual) { 290 return; 291 } 292 293 assertEmailContentEqual(caller, expect, actual); 294 assertEquals(caller + " mProtocol", expect.mProtocol, actual.mProtocol); 295 assertEquals(caller + " mAddress", expect.mAddress, actual.mAddress); 296 assertEquals(caller + " mPort", expect.mPort, actual.mPort); 297 assertEquals(caller + " mFlags", expect.mFlags, actual.mFlags); 298 assertEquals(caller + " mLogin", expect.mLogin, actual.mLogin); 299 assertEquals(caller + " mPassword", expect.mPassword, actual.mPassword); 300 assertEquals(caller + " mDomain", expect.mDomain, actual.mDomain); 301 // This field is dead and is not checked 302// assertEquals(caller + " mAccountKey", expect.mAccountKey, actual.mAccountKey); 303 } 304 305 /** 306 * Compare two mailboxes for equality 307 */ 308 public static void assertMailboxEqual(String caller, Mailbox expect, Mailbox actual) { 309 if (expect == actual) { 310 return; 311 } 312 313 assertEmailContentEqual(caller, expect, actual); 314 assertEquals(caller + " mDisplayName", expect.mDisplayName, actual.mDisplayName); 315 assertEquals(caller + " mServerId", expect.mServerId, actual.mServerId); 316 assertEquals(caller + " mParentServerId", expect.mParentServerId, actual.mParentServerId); 317 assertEquals(caller + " mAccountKey", expect.mAccountKey, actual.mAccountKey); 318 assertEquals(caller + " mType", expect.mType, actual.mType); 319 assertEquals(caller + " mDelimiter", expect.mDelimiter, actual.mDelimiter); 320 assertEquals(caller + " mSyncKey", expect.mSyncKey, actual.mSyncKey); 321 assertEquals(caller + " mSyncLookback", expect.mSyncLookback, actual.mSyncLookback); 322 assertEquals(caller + " mSyncInterval", expect.mSyncInterval, actual.mSyncInterval); 323 assertEquals(caller + " mSyncTime", expect.mSyncTime, actual.mSyncTime); 324 assertEquals(caller + " mUnreadCount", expect.mUnreadCount, actual.mUnreadCount); 325 assertEquals(caller + " mFlagVisible", expect.mFlagVisible, actual.mFlagVisible); 326 assertEquals(caller + " mFlags", expect.mFlags, actual.mFlags); 327 assertEquals(caller + " mVisibleLimit", expect.mVisibleLimit, actual.mVisibleLimit); 328 } 329 330 /** 331 * Compare two messages for equality 332 * 333 * TODO: body? 334 * TODO: attachments? 335 */ 336 public static void assertMessageEqual(String caller, Message expect, Message actual) { 337 if (expect == actual) { 338 return; 339 } 340 341 assertEmailContentEqual(caller, expect, actual); 342 assertEquals(caller + " mDisplayName", expect.mDisplayName, actual.mDisplayName); 343 assertEquals(caller + " mTimeStamp", expect.mTimeStamp, actual.mTimeStamp); 344 assertEquals(caller + " mSubject", expect.mSubject, actual.mSubject); 345 assertEquals(caller + " mFlagRead = false", expect.mFlagRead, actual.mFlagRead); 346 assertEquals(caller + " mFlagLoaded", expect.mFlagLoaded, actual.mFlagLoaded); 347 assertEquals(caller + " mFlagFavorite", expect.mFlagFavorite, actual.mFlagFavorite); 348 assertEquals(caller + " mFlagAttachment", expect.mFlagAttachment, actual.mFlagAttachment); 349 assertEquals(caller + " mFlags", expect.mFlags, actual.mFlags); 350 351 assertEquals(caller + " mServerId", expect.mServerId, actual.mServerId); 352 assertEquals(caller + " mServerTimeStamp", expect.mServerTimeStamp,actual.mServerTimeStamp); 353 assertEquals(caller + " mClientId", expect.mClientId, actual.mClientId); 354 assertEquals(caller + " mMessageId", expect.mMessageId, actual.mMessageId); 355 356 assertEquals(caller + " mMailboxKey", expect.mMailboxKey, actual.mMailboxKey); 357 assertEquals(caller + " mAccountKey", expect.mAccountKey, actual.mAccountKey); 358 359 assertEquals(caller + " mFrom", expect.mFrom, actual.mFrom); 360 assertEquals(caller + " mTo", expect.mTo, actual.mTo); 361 assertEquals(caller + " mCc", expect.mCc, actual.mCc); 362 assertEquals(caller + " mBcc", expect.mBcc, actual.mBcc); 363 assertEquals(caller + " mReplyTo", expect.mReplyTo, actual.mReplyTo); 364 365 assertEquals(caller + " mMeetingInfo", expect.mMeetingInfo, actual.mMeetingInfo); 366 367 assertEquals(caller + " mText", expect.mText, actual.mText); 368 assertEquals(caller + " mHtml", expect.mHtml, actual.mHtml); 369 assertEquals(caller + " mTextReply", expect.mTextReply, actual.mTextReply); 370 assertEquals(caller + " mHtmlReply", expect.mHtmlReply, actual.mHtmlReply); 371 assertEquals(caller + " mSourceKey", expect.mSourceKey, actual.mSourceKey); 372 assertEquals(caller + " mIntroText", expect.mIntroText, actual.mIntroText); 373 } 374 375 /** 376 * Compare to attachments for equality 377 * 378 * TODO: file / content URI mapping? Compare the actual files? 379 */ 380 public static void assertAttachmentEqual(String caller, Attachment expect, Attachment actual) { 381 if (expect == actual) { 382 return; 383 } 384 385 assertEmailContentEqual(caller, expect, actual); 386 assertEquals(caller + " mSize", expect.mSize, actual.mSize); 387 assertEquals(caller + " mFileName", expect.mFileName, actual.mFileName); 388 assertEquals(caller + " mContentId", expect.mContentId, actual.mContentId); 389 assertEquals(caller + " mContentUri", expect.mContentUri, actual.mContentUri); 390 assertEquals(caller + " mMessageKey", expect.mMessageKey, actual.mMessageKey); 391 assertEquals(caller + " mMimeType", expect.mMimeType, actual.mMimeType); 392 assertEquals(caller + " mLocation", expect.mLocation, actual.mLocation); 393 assertEquals(caller + " mEncoding", expect.mEncoding, actual.mEncoding); 394 assertEquals(caller + " mContent", expect.mContent, actual.mContent); 395 assertEquals(caller + " mFlags", expect.mFlags, actual.mFlags); 396 MoreAsserts.assertEquals(caller + " mContentBytes", 397 expect.mContentBytes, actual.mContentBytes); 398 } 399 400 /** 401 * Create a temporary EML file based on {@code msg} in the directory {@code directory}. 402 */ 403 public static Uri createTempEmlFile(Context context, Message msg, File directory) 404 throws Exception { 405 // Write out the message in rfc822 format 406 File outputFile = File.createTempFile("message", "tmp", directory); 407 assertNotNull(outputFile); 408 FileOutputStream outputStream = new FileOutputStream(outputFile); 409 Rfc822Output.writeTo(context, msg.mId, outputStream, false, false); 410 outputStream.close(); 411 412 return Uri.fromFile(outputFile); 413 } 414} 415