128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler/*
228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler * Copyright (C) 2009 The Android Open Source Project
328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler *
428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler * Licensed under the Apache License, Version 2.0 (the "License");
528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler * you may not use this file except in compliance with the License.
628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler * You may obtain a copy of the License at
728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler *
828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler *      http://www.apache.org/licenses/LICENSE-2.0
928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler *
1028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler * Unless required by applicable law or agreed to in writing, software
1128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler * distributed under the License is distributed on an "AS IS" BASIS,
1228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler * See the License for the specific language governing permissions and
1428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler * limitations under the License.
1528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler */
1628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler
1728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadlerpackage com.android.email.provider;
1828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler
1931d9acbf0623872f9d4a2b3210b5970854b654c7Marc Blankimport com.android.emailcommon.internet.Rfc822Output;
20f5418f1f93b02e7fab9f15eb201800b65510998eMarc Blankimport com.android.emailcommon.provider.Account;
21a7bc0319a75184ad706bb35c049af107ac3688e6Marc Blankimport com.android.emailcommon.provider.EmailContent;
22a7bc0319a75184ad706bb35c049af107ac3688e6Marc Blankimport com.android.emailcommon.provider.EmailContent.Attachment;
23a7bc0319a75184ad706bb35c049af107ac3688e6Marc Blankimport com.android.emailcommon.provider.EmailContent.Body;
24a7bc0319a75184ad706bb35c049af107ac3688e6Marc Blankimport com.android.emailcommon.provider.EmailContent.Message;
2512b82d9374947c9268217f45befe8a74bd9b60d7Ben Komaloimport com.android.emailcommon.provider.HostAuth;
2653ea83ebf91f820692e8fa8e781f5cc982dd94dbBen Komaloimport com.android.emailcommon.provider.Mailbox;
2731d9acbf0623872f9d4a2b3210b5970854b654c7Marc Blankimport com.android.emailcommon.utility.Utility;
2828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler
29897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onukiimport android.content.ContentUris;
3028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadlerimport android.content.Context;
31206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onukiimport android.net.Uri;
3220225d57609d6a5e482c088fdad60c29212d31a0Makoto Onukiimport android.test.MoreAsserts;
3328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler
34206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onukiimport java.io.File;
35206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onukiimport java.io.FileOutputStream;
36206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki
3728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadlerimport junit.framework.Assert;
3828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler
3928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadlerpublic class ProviderTestUtils extends Assert {
4028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler
4128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler    /**
4228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler     * No constructor - statics only
4328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler     */
4428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler    private ProviderTestUtils() {
4528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler    }
4628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler
4728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler    /**
4828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler     * Create an account for test purposes
4928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler     */
5028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler    public static Account setupAccount(String name, boolean saveIt, Context context) {
5128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        Account account = new Account();
5228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler
5328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        account.mDisplayName = name;
5428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        account.mEmailAddress = name + "@android.com";
5528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        account.mSyncKey = "sync-key-" + name;
5628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        account.mSyncLookback = 1;
57f5418f1f93b02e7fab9f15eb201800b65510998eMarc Blank        account.mSyncInterval = Account.CHECK_INTERVAL_NEVER;
58da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler        account.mHostAuthKeyRecv = 0;
59da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler        account.mHostAuthKeySend = 0;
6028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        account.mFlags = 4;
6128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        account.mSenderName = name;
6253093871c492d03947c494f17e2463b27345e083Marc Blank        account.mProtocolVersion = "2.5" + name;
63aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        account.mPolicyKey = 0;
64345fb8b737c1632fb2a7e69ac44b8612be6237edAndrew Stadler        account.mSecuritySyncKey = "sec-sync-key-" + name;
65345fb8b737c1632fb2a7e69ac44b8612be6237edAndrew Stadler        account.mSignature = "signature-" + name;
6628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        if (saveIt) {
679e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler            account.save(context);
6828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        }
6928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        return account;
7028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler    }
7128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler
7228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler    /**
73897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki     * Lightweight way of deleting an account for testing.
74897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki     */
75897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki    public static void deleteAccount(Context context, long accountId) {
76897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki        context.getContentResolver().delete(ContentUris.withAppendedId(
77f5418f1f93b02e7fab9f15eb201800b65510998eMarc Blank                Account.CONTENT_URI, accountId), null, null);
78897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki    }
79897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki
80897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki    /**
81da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler     * Create a hostauth record for test purposes
82da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler     */
83da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler    public static HostAuth setupHostAuth(String name, long accountId, boolean saveIt,
84da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler            Context context) {
85fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy        return setupHostAuth("protocol", name, saveIt, context);
86f3f15c12c93377a30682d0abe6fda88098d9c761Makoto Onuki    }
87f3f15c12c93377a30682d0abe6fda88098d9c761Makoto Onuki
88f3f15c12c93377a30682d0abe6fda88098d9c761Makoto Onuki    /**
89f3f15c12c93377a30682d0abe6fda88098d9c761Makoto Onuki     * Create a hostauth record for test purposes
90f3f15c12c93377a30682d0abe6fda88098d9c761Makoto Onuki     */
91fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy    public static HostAuth setupHostAuth(String protocol, String name, boolean saveIt,
92fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy            Context context) {
93da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler        HostAuth hostAuth = new HostAuth();
94da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler
9525144e2b7990c50bb3650faf1aec341837c05348Makoto Onuki        hostAuth.mProtocol = protocol;
96da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler        hostAuth.mAddress = "address-" + name;
97da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler        hostAuth.mPort = 100;
98da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler        hostAuth.mFlags = 200;
99da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler        hostAuth.mLogin = "login-" + name;
100da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler        hostAuth.mPassword = "password-" + name;
101da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler        hostAuth.mDomain = "domain-" + name;
102da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler
103da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler        if (saveIt) {
104da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler            hostAuth.save(context);
105da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler        }
106da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler        return hostAuth;
107da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler    }
108da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler
109da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler    /**
11028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler     * Create a mailbox for test purposes
11128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler     */
11228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler    public static Mailbox setupMailbox(String name, long accountId, boolean saveIt,
11328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler            Context context) {
114694257cb7e7a191b3314cb209b6c38a8a07583efMarc Blank        return setupMailbox(name, accountId, saveIt, context, Mailbox.TYPE_MAIL);
115694257cb7e7a191b3314cb209b6c38a8a07583efMarc Blank    }
116694257cb7e7a191b3314cb209b6c38a8a07583efMarc Blank    public static Mailbox setupMailbox(String name, long accountId, boolean saveIt,
117694257cb7e7a191b3314cb209b6c38a8a07583efMarc Blank            Context context, int type) {
118200c6bd9fa19b78acc2c1664f858521aa9885353Todd Kennedy        return setupMailbox(name, accountId, saveIt, context, type, '/');
119200c6bd9fa19b78acc2c1664f858521aa9885353Todd Kennedy    }
120200c6bd9fa19b78acc2c1664f858521aa9885353Todd Kennedy    public static Mailbox setupMailbox(String name, long accountId, boolean saveIt,
121200c6bd9fa19b78acc2c1664f858521aa9885353Todd Kennedy            Context context, int type, char delimiter) {
12228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        Mailbox box = new Mailbox();
12328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler
12422208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        int delimiterIndex = name.lastIndexOf(delimiter);
12522208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        String displayName = name;
12622208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        if (delimiterIndex > 0) {
12722208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy            displayName = name.substring(delimiterIndex + 1);
12822208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        }
12922208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        box.mDisplayName = displayName;
13022208771b7b39c5d131372ba6bc45ab23cc22232Todd Kennedy        box.mServerId = name;
13128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        box.mParentServerId = "parent-serverid-" + name;
1323a58509b2ad7b6f946eb0a4a7b0f75ece6d6a46fAndy Stadler        box.mParentKey = 4;
13328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        box.mAccountKey = accountId;
134694257cb7e7a191b3314cb209b6c38a8a07583efMarc Blank        box.mType = type;
135200c6bd9fa19b78acc2c1664f858521aa9885353Todd Kennedy        box.mDelimiter = delimiter;
13628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        box.mSyncKey = "sync-key-" + name;
13728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        box.mSyncLookback = 2;
138f5418f1f93b02e7fab9f15eb201800b65510998eMarc Blank        box.mSyncInterval = Account.CHECK_INTERVAL_NEVER;
13928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        box.mSyncTime = 3;
14028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        box.mFlagVisible = true;
14128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        box.mFlags = 5;
14228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler
14328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        if (saveIt) {
1449e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler            box.save(context);
14528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        }
14628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        return box;
14728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler    }
14828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler
14928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler    /**
15028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler     * Create a message for test purposes
15128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler     */
15228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler    public static Message setupMessage(String name, long accountId, long mailboxId,
15328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler            boolean addBody, boolean saveIt, Context context) {
154833fe73b99e62ad9cf6e80c782717c7de1ff12e4Makoto Onuki        // Default starred, read,  (backword compatibility)
155833fe73b99e62ad9cf6e80c782717c7de1ff12e4Makoto Onuki        return setupMessage(name, accountId, mailboxId, addBody, saveIt, context, true, true);
156833fe73b99e62ad9cf6e80c782717c7de1ff12e4Makoto Onuki    }
157833fe73b99e62ad9cf6e80c782717c7de1ff12e4Makoto Onuki
158833fe73b99e62ad9cf6e80c782717c7de1ff12e4Makoto Onuki    /**
159833fe73b99e62ad9cf6e80c782717c7de1ff12e4Makoto Onuki     * Create a message for test purposes
160833fe73b99e62ad9cf6e80c782717c7de1ff12e4Makoto Onuki     */
161833fe73b99e62ad9cf6e80c782717c7de1ff12e4Makoto Onuki    public static Message setupMessage(String name, long accountId, long mailboxId,
162833fe73b99e62ad9cf6e80c782717c7de1ff12e4Makoto Onuki            boolean addBody, boolean saveIt, Context context, boolean starred, boolean read) {
16328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        Message message = new Message();
16428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler
16528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        message.mDisplayName = name;
1660d00889f83fc8c1d69039a2c849b630fb4dd28ddAndrew Stadler        message.mTimeStamp = 100 + name.length();
16728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        message.mSubject = "subject " + name;
168833fe73b99e62ad9cf6e80c782717c7de1ff12e4Makoto Onuki        message.mFlagRead = read;
16917d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        message.mFlagSeen = read;
1706c21942ec45f561d711b3d74ecca8e62afb735c4Andrew Stadler        message.mFlagLoaded = Message.FLAG_LOADED_UNLOADED;
171833fe73b99e62ad9cf6e80c782717c7de1ff12e4Makoto Onuki        message.mFlagFavorite = starred;
17228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        message.mFlagAttachment = true;
173c41c47fa07a22f8a7612fb0191f152a36d95b7a5Andrew Stadler        message.mFlags = 0;
17428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler
17528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        message.mServerId = "serverid " + name;
1760d00889f83fc8c1d69039a2c849b630fb4dd28ddAndrew Stadler        message.mServerTimeStamp = 300 + name.length();
17728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        message.mMessageId = "messageid " + name;
17828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler
17928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        message.mMailboxKey = mailboxId;
18028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        message.mAccountKey = accountId;
18128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler
18228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        message.mFrom = "from " + name;
18328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        message.mTo = "to " + name;
18428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        message.mCc = "cc " + name;
18528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        message.mBcc = "bcc " + name;
18628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        message.mReplyTo = "replyto " + name;
18728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler
1884006e5fc224d097450fd66a321901b6636f7d9c4Marc Blank        message.mMeetingInfo = "123" + accountId + mailboxId + name.length();
1894006e5fc224d097450fd66a321901b6636f7d9c4Marc Blank
19028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        if (addBody) {
19128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler            message.mText = "body text " + name;
19228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler            message.mHtml = "body html " + name;
1930d00889f83fc8c1d69039a2c849b630fb4dd28ddAndrew Stadler            message.mSourceKey = 400 + name.length();
19428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        }
19528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler
19628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        if (saveIt) {
1979e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler            message.save(context);
19828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        }
19928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        return message;
20028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler    }
20128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler
20228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler    /**
203e7b9e4ab94093127002f4cddd3ffcc3deb1c0b41Marc Blank     * Create a test body
204e7b9e4ab94093127002f4cddd3ffcc3deb1c0b41Marc Blank     *
205e7b9e4ab94093127002f4cddd3ffcc3deb1c0b41Marc Blank     * @param messageId the message this body belongs to
206e7b9e4ab94093127002f4cddd3ffcc3deb1c0b41Marc Blank     * @param textContent the plain text for the body
207e7b9e4ab94093127002f4cddd3ffcc3deb1c0b41Marc Blank     * @param htmlContent the html text for the body
208e7b9e4ab94093127002f4cddd3ffcc3deb1c0b41Marc Blank     * @param saveIt if true, write the new attachment directly to the DB
209e7b9e4ab94093127002f4cddd3ffcc3deb1c0b41Marc Blank     * @param context use this context
210e7b9e4ab94093127002f4cddd3ffcc3deb1c0b41Marc Blank     */
211e7b9e4ab94093127002f4cddd3ffcc3deb1c0b41Marc Blank    public static Body setupBody(long messageId, String textContent, String htmlContent,
212e7b9e4ab94093127002f4cddd3ffcc3deb1c0b41Marc Blank            boolean saveIt, Context context) {
213e7b9e4ab94093127002f4cddd3ffcc3deb1c0b41Marc Blank        Body body = new Body();
214e7b9e4ab94093127002f4cddd3ffcc3deb1c0b41Marc Blank        body.mMessageKey = messageId;
215e7b9e4ab94093127002f4cddd3ffcc3deb1c0b41Marc Blank        body.mHtmlContent = htmlContent;
21617d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        body.mTextContent = textContent;
217e7b9e4ab94093127002f4cddd3ffcc3deb1c0b41Marc Blank        body.mSourceKey = messageId + 0x1000;
218e7b9e4ab94093127002f4cddd3ffcc3deb1c0b41Marc Blank        if (saveIt) {
219e7b9e4ab94093127002f4cddd3ffcc3deb1c0b41Marc Blank            body.save(context);
220e7b9e4ab94093127002f4cddd3ffcc3deb1c0b41Marc Blank        }
221e7b9e4ab94093127002f4cddd3ffcc3deb1c0b41Marc Blank        return body;
222e7b9e4ab94093127002f4cddd3ffcc3deb1c0b41Marc Blank    }
223e7b9e4ab94093127002f4cddd3ffcc3deb1c0b41Marc Blank
224e7b9e4ab94093127002f4cddd3ffcc3deb1c0b41Marc Blank    /**
2254119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler     * Create a test attachment.  A few fields are specified by params, and all other fields
2264119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler     * are generated using pseudo-unique values.
227758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank     *
2284119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler     * @param messageId the message to attach to
2294119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler     * @param fileName the "file" to indicate in the attachment
2304119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler     * @param length the "length" of the attachment
231f19f9cf4d3e5229715da77fe05a1a2bbd8da3f41Marc Blank     * @param flags the flags to set in the attachment
2324119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler     * @param saveIt if true, write the new attachment directly to the DB
2334119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler     * @param context use this context
2344119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler     */
2354119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler    public static Attachment setupAttachment(long messageId, String fileName, long length,
236f19f9cf4d3e5229715da77fe05a1a2bbd8da3f41Marc Blank            int flags, boolean saveIt, Context context) {
2374119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler        Attachment att = new Attachment();
2384119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler        att.mSize = length;
2394119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler        att.mFileName = fileName;
2404119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler        att.mContentId = "contentId " + fileName;
24117d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        att.setContentUri("contentUri " + fileName);
2424119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler        att.mMessageKey = messageId;
2434119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler        att.mMimeType = "mimeType " + fileName;
2444119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler        att.mLocation = "location " + fileName;
2454119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler        att.mEncoding = "encoding " + fileName;
2463aaba9eb87db34ea0861d70d5c08f84d7ca97ab0Andrew Stadler        att.mContent = "content " + fileName;
247f19f9cf4d3e5229715da77fe05a1a2bbd8da3f41Marc Blank        att.mFlags = flags;
24820225d57609d6a5e482c088fdad60c29212d31a0Makoto Onuki        att.mContentBytes = Utility.toUtf8("content " + fileName);
24975a873be8420e50f0aeb5a77716358ee0ca66b01Marc Blank        att.mAccountKey = messageId + 0x1000;
2504119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler        if (saveIt) {
2519e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler            att.save(context);
2524119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler        }
2534119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler        return att;
2544119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler    }
2554119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler
256f19f9cf4d3e5229715da77fe05a1a2bbd8da3f41Marc Blank    /**
257f19f9cf4d3e5229715da77fe05a1a2bbd8da3f41Marc Blank     * Create a test attachment with flags = 0 (see above)
258f19f9cf4d3e5229715da77fe05a1a2bbd8da3f41Marc Blank     *
259f19f9cf4d3e5229715da77fe05a1a2bbd8da3f41Marc Blank     * @param messageId the message to attach to
260f19f9cf4d3e5229715da77fe05a1a2bbd8da3f41Marc Blank     * @param fileName the "file" to indicate in the attachment
261f19f9cf4d3e5229715da77fe05a1a2bbd8da3f41Marc Blank     * @param length the "length" of the attachment
262f19f9cf4d3e5229715da77fe05a1a2bbd8da3f41Marc Blank     * @param saveIt if true, write the new attachment directly to the DB
263f19f9cf4d3e5229715da77fe05a1a2bbd8da3f41Marc Blank     * @param context use this context
264f19f9cf4d3e5229715da77fe05a1a2bbd8da3f41Marc Blank     */
265f19f9cf4d3e5229715da77fe05a1a2bbd8da3f41Marc Blank    public static Attachment setupAttachment(long messageId, String fileName, long length,
266f19f9cf4d3e5229715da77fe05a1a2bbd8da3f41Marc Blank            boolean saveIt, Context context) {
267f19f9cf4d3e5229715da77fe05a1a2bbd8da3f41Marc Blank        return setupAttachment(messageId, fileName, length, 0, saveIt, context);
268f19f9cf4d3e5229715da77fe05a1a2bbd8da3f41Marc Blank    }
269f19f9cf4d3e5229715da77fe05a1a2bbd8da3f41Marc Blank
270758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank    private static void assertEmailContentEqual(String caller, EmailContent expect,
27153093871c492d03947c494f17e2463b27345e083Marc Blank            EmailContent actual) {
27253093871c492d03947c494f17e2463b27345e083Marc Blank        if (expect == actual) {
27353093871c492d03947c494f17e2463b27345e083Marc Blank            return;
27453093871c492d03947c494f17e2463b27345e083Marc Blank        }
27553093871c492d03947c494f17e2463b27345e083Marc Blank
27653093871c492d03947c494f17e2463b27345e083Marc Blank        assertEquals(caller + " mId", expect.mId, actual.mId);
27753093871c492d03947c494f17e2463b27345e083Marc Blank        assertEquals(caller + " mBaseUri", expect.mBaseUri, actual.mBaseUri);
27853093871c492d03947c494f17e2463b27345e083Marc Blank    }
27953093871c492d03947c494f17e2463b27345e083Marc Blank
2804119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler    /**
28128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler     * Compare two accounts for equality
282758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank     *
28328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler     * TODO: check host auth?
28428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler     */
28528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler    public static void assertAccountEqual(String caller, Account expect, Account actual) {
28628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        if (expect == actual) {
28728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler            return;
28828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        }
28928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler
29053093871c492d03947c494f17e2463b27345e083Marc Blank        assertEmailContentEqual(caller, expect, actual);
29128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mDisplayName", expect.mDisplayName, actual.mDisplayName);
29228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mEmailAddress", expect.mEmailAddress, actual.mEmailAddress);
29328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mSyncKey", expect.mSyncKey, actual.mSyncKey);
29428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler
29528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mSyncLookback", expect.mSyncLookback, actual.mSyncLookback);
2969e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler        assertEquals(caller + " mSyncInterval", expect.mSyncInterval, actual.mSyncInterval);
29728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mHostAuthKeyRecv", expect.mHostAuthKeyRecv,
29828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler                actual.mHostAuthKeyRecv);
29928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mHostAuthKeySend", expect.mHostAuthKeySend,
30028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler                actual.mHostAuthKeySend);
30128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mFlags", expect.mFlags, actual.mFlags);
30228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mSenderName", expect.mSenderName, actual.mSenderName);
30353093871c492d03947c494f17e2463b27345e083Marc Blank        assertEquals(caller + " mProtocolVersion", expect.mProtocolVersion,
30453093871c492d03947c494f17e2463b27345e083Marc Blank                actual.mProtocolVersion);
305345fb8b737c1632fb2a7e69ac44b8612be6237edAndrew Stadler        assertEquals(caller + " mSecuritySyncKey", expect.mSecuritySyncKey,
306345fb8b737c1632fb2a7e69ac44b8612be6237edAndrew Stadler                actual.mSecuritySyncKey);
307345fb8b737c1632fb2a7e69ac44b8612be6237edAndrew Stadler        assertEquals(caller + " mSignature", expect.mSignature, actual.mSignature);
30817d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        assertEquals(caller + " mPolicyKey", expect.mPolicyKey, actual.mPolicyKey);
30917d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        assertEquals(caller + " mPingDuration", expect.mPingDuration, actual.mPingDuration);
31028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler    }
31128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler
31228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler    /**
313da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler     * Compare two hostauth records for equality
314da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler     */
315da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler    public static void assertHostAuthEqual(String caller, HostAuth expect, HostAuth actual) {
3160993190cafebc107bd27a26996b5d63d4a4ede10Marc Blank        assertHostAuthEqual(caller, expect, actual, true);
3170993190cafebc107bd27a26996b5d63d4a4ede10Marc Blank    }
3180993190cafebc107bd27a26996b5d63d4a4ede10Marc Blank
3190993190cafebc107bd27a26996b5d63d4a4ede10Marc Blank    public static void assertHostAuthEqual(String caller, HostAuth expect, HostAuth actual,
3200993190cafebc107bd27a26996b5d63d4a4ede10Marc Blank            boolean testEmailContent) {
321da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler        if (expect == actual) {
322da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler            return;
323da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler        }
324da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler
3250993190cafebc107bd27a26996b5d63d4a4ede10Marc Blank        if (testEmailContent) {
3260993190cafebc107bd27a26996b5d63d4a4ede10Marc Blank            assertEmailContentEqual(caller, expect, actual);
3270993190cafebc107bd27a26996b5d63d4a4ede10Marc Blank        }
328da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler        assertEquals(caller + " mProtocol", expect.mProtocol, actual.mProtocol);
329da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler        assertEquals(caller + " mAddress", expect.mAddress, actual.mAddress);
330da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler        assertEquals(caller + " mPort", expect.mPort, actual.mPort);
331da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler        assertEquals(caller + " mFlags", expect.mFlags, actual.mFlags);
332da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler        assertEquals(caller + " mLogin", expect.mLogin, actual.mLogin);
333da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler        assertEquals(caller + " mPassword", expect.mPassword, actual.mPassword);
334da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler        assertEquals(caller + " mDomain", expect.mDomain, actual.mDomain);
335da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler        // This field is dead and is not checked
336da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler//      assertEquals(caller + " mAccountKey", expect.mAccountKey, actual.mAccountKey);
337da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler    }
338da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler
339da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler    /**
34028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler     * Compare two mailboxes for equality
34128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler     */
34228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler    public static void assertMailboxEqual(String caller, Mailbox expect, Mailbox actual) {
34328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        if (expect == actual) {
34428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler            return;
34528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        }
34628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler
34753093871c492d03947c494f17e2463b27345e083Marc Blank        assertEmailContentEqual(caller, expect, actual);
34828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mDisplayName", expect.mDisplayName, actual.mDisplayName);
34928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mServerId", expect.mServerId, actual.mServerId);
35028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mParentServerId", expect.mParentServerId, actual.mParentServerId);
3513a58509b2ad7b6f946eb0a4a7b0f75ece6d6a46fAndy Stadler        assertEquals(caller + " mParentKey", expect.mParentKey, actual.mParentKey);
35228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mAccountKey", expect.mAccountKey, actual.mAccountKey);
35328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mType", expect.mType, actual.mType);
35428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mDelimiter", expect.mDelimiter, actual.mDelimiter);
35528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mSyncKey", expect.mSyncKey, actual.mSyncKey);
35628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mSyncLookback", expect.mSyncLookback, actual.mSyncLookback);
3579e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler        assertEquals(caller + " mSyncInterval", expect.mSyncInterval, actual.mSyncInterval);
35828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mSyncTime", expect.mSyncTime, actual.mSyncTime);
35928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mFlagVisible", expect.mFlagVisible, actual.mFlagVisible);
36017d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        assertEquals(caller + " mSyncStatus", expect.mSyncStatus, actual.mSyncStatus);
36117d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        assertEquals(caller + " mLastTouchedTime", expect.mLastTouchedTime, actual.mLastTouchedTime);
36217d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        assertEquals(caller + " mUiSyncStatus", expect.mUiSyncStatus, actual.mUiSyncStatus);
36317d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        assertEquals(caller + " mUiLastSyncResult", expect.mUiLastSyncResult, actual.mUiLastSyncResult);
36417d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        assertEquals(caller + " mTotalCount", expect.mTotalCount, actual.mTotalCount);
36517d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        assertEquals(caller + " mHierarchicalName", expect.mHierarchicalName, actual.mHierarchicalName);
36617d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        assertEquals(caller + " mLastFullSyncTime", expect.mLastFullSyncTime, actual.mLastFullSyncTime);
36728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler    }
36828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler
36928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler    /**
37028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler     * Compare two messages for equality
371758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank     *
37228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler     * TODO: body?
37328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler     * TODO: attachments?
37428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler     */
37528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler    public static void assertMessageEqual(String caller, Message expect, Message actual) {
37628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        if (expect == actual) {
37728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler            return;
37828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        }
37928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler
38053093871c492d03947c494f17e2463b27345e083Marc Blank        assertEmailContentEqual(caller, expect, actual);
38128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mDisplayName", expect.mDisplayName, actual.mDisplayName);
38228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mTimeStamp", expect.mTimeStamp, actual.mTimeStamp);
38328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mSubject", expect.mSubject, actual.mSubject);
38428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mFlagRead = false", expect.mFlagRead, actual.mFlagRead);
38517d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        assertEquals(caller + " mFlagRead = false", expect.mFlagSeen, actual.mFlagSeen);
38628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mFlagLoaded", expect.mFlagLoaded, actual.mFlagLoaded);
38728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mFlagFavorite", expect.mFlagFavorite, actual.mFlagFavorite);
38828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mFlagAttachment", expect.mFlagAttachment, actual.mFlagAttachment);
38928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mFlags", expect.mFlags, actual.mFlags);
39028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler
39128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mServerId", expect.mServerId, actual.mServerId);
3920d00889f83fc8c1d69039a2c849b630fb4dd28ddAndrew Stadler        assertEquals(caller + " mServerTimeStamp", expect.mServerTimeStamp,actual.mServerTimeStamp);
39317d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        assertEquals(caller + " mDraftInfo", expect.mDraftInfo,actual.mDraftInfo);
39428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mMessageId", expect.mMessageId, actual.mMessageId);
39528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler
39628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mMailboxKey", expect.mMailboxKey, actual.mMailboxKey);
39728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mAccountKey", expect.mAccountKey, actual.mAccountKey);
39817d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        assertEquals(caller + " mMainMailboxKey", expect.mMainMailboxKey, actual.mMainMailboxKey);
39928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler
40028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mFrom", expect.mFrom, actual.mFrom);
40128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mTo", expect.mTo, actual.mTo);
40228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mCc", expect.mCc, actual.mCc);
40328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mBcc", expect.mBcc, actual.mBcc);
40428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mReplyTo", expect.mReplyTo, actual.mReplyTo);
40528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler
4064006e5fc224d097450fd66a321901b6636f7d9c4Marc Blank        assertEquals(caller + " mMeetingInfo", expect.mMeetingInfo, actual.mMeetingInfo);
4074006e5fc224d097450fd66a321901b6636f7d9c4Marc Blank
408e7b9e4ab94093127002f4cddd3ffcc3deb1c0b41Marc Blank        assertEquals(caller + " mSnippet", expect.mSnippet, actual.mSnippet);
409e7b9e4ab94093127002f4cddd3ffcc3deb1c0b41Marc Blank
41017d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        assertEquals(caller + " mProtocolSearchInfo", expect.mProtocolSearchInfo, actual.mProtocolSearchInfo);
41117d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie
41217d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        assertEquals(caller + " mThreadTopic", expect.mThreadTopic, actual.mThreadTopic);
41317d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie
41417d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        assertEquals(caller + " mSyncData", expect.mSyncData, actual.mSyncData);
41517d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie
41617d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        assertEquals(caller + " mSyncData", expect.mServerConversationId, actual.mServerConversationId);
41717d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie
41828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mText", expect.mText, actual.mText);
41928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler        assertEquals(caller + " mHtml", expect.mHtml, actual.mHtml);
420e25698319325d5e9619bc45ae85d861b0f1c5954Marc Blank        assertEquals(caller + " mSourceKey", expect.mSourceKey, actual.mSourceKey);
42117d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        assertEquals(caller + " mQuotedTextStartPos", expect.mQuotedTextStartPos, actual.mQuotedTextStartPos);
42228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler    }
4234119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler
4244119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler    /**
4254119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler     * Compare to attachments for equality
426758a532fce2f672673d38b2daa5f67eb757b118bMarc Blank     *
4274119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler     * TODO: file / content URI mapping?  Compare the actual files?
4284119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler     */
4294119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler    public static void assertAttachmentEqual(String caller, Attachment expect, Attachment actual) {
4304119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler        if (expect == actual) {
4314119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler            return;
4324119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler        }
4334119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler
43453093871c492d03947c494f17e2463b27345e083Marc Blank        assertEmailContentEqual(caller, expect, actual);
4354119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler        assertEquals(caller + " mFileName", expect.mFileName, actual.mFileName);
43617d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        assertEquals(caller + " mMimeType", expect.mMimeType, actual.mMimeType);
43717d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        assertEquals(caller + " mSize", expect.mSize, actual.mSize);
4384119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler        assertEquals(caller + " mContentId", expect.mContentId, actual.mContentId);
43917d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        assertEquals(caller + " mContentUri", expect.getContentUri(), actual.getContentUri());
44017d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        assertEquals(caller + " mCachedFileUri", expect.getCachedFileUri(), actual.getCachedFileUri());
4414119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler        assertEquals(caller + " mMessageKey", expect.mMessageKey, actual.mMessageKey);
4424119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler        assertEquals(caller + " mLocation", expect.mLocation, actual.mLocation);
4434119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler        assertEquals(caller + " mEncoding", expect.mEncoding, actual.mEncoding);
4443aaba9eb87db34ea0861d70d5c08f84d7ca97ab0Andrew Stadler        assertEquals(caller + " mContent", expect.mContent, actual.mContent);
4453aaba9eb87db34ea0861d70d5c08f84d7ca97ab0Andrew Stadler        assertEquals(caller + " mFlags", expect.mFlags, actual.mFlags);
44620225d57609d6a5e482c088fdad60c29212d31a0Makoto Onuki        MoreAsserts.assertEquals(caller + " mContentBytes",
44720225d57609d6a5e482c088fdad60c29212d31a0Makoto Onuki                expect.mContentBytes, actual.mContentBytes);
44875a873be8420e50f0aeb5a77716358ee0ca66b01Marc Blank        assertEquals(caller + " mAccountKey", expect.mAccountKey, actual.mAccountKey);
4494119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler    }
450206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki
451206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki    /**
452206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki     * Create a temporary EML file based on {@code msg} in the directory {@code directory}.
453206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki     */
454206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki    public static Uri createTempEmlFile(Context context, Message msg, File directory)
455206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki            throws Exception {
456206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki        // Write out the message in rfc822 format
457206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki        File outputFile = File.createTempFile("message", "tmp", directory);
458206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki        assertNotNull(outputFile);
459206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki        FileOutputStream outputStream = new FileOutputStream(outputFile);
46017d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        Rfc822Output.writeTo(context, msg, outputStream, true, false, null);
461206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki        outputStream.close();
462206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki
463206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki        return Uri.fromFile(outputFile);
464206d4e842d287a7a4e6bedf4963fb7f0f58e113fMakoto Onuki    }
46528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler}
466