1818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira/**
2818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira * Copyright (c) 2012, Google Inc.
3818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira *
4818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira * Licensed under the Apache License, Version 2.0 (the "License");
5818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira * you may not use this file except in compliance with the License.
6818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira * You may obtain a copy of the License at
7818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira *
8818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira *     http://www.apache.org/licenses/LICENSE-2.0
9818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira *
10818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira * Unless required by applicable law or agreed to in writing, software
11818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira * distributed under the License is distributed on an "AS IS" BASIS,
12818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira * See the License for the specific language governing permissions and
14818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira * limitations under the License.
15818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira */
16818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira
17818143e2163648acc0c91f123b84777d65cd70cfMindy Pereirapackage com.android.mail.compose;
18818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira
196d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrookimport android.content.ContentResolver;
206d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrookimport android.content.Context;
216d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrookimport android.content.Intent;
22818143e2163648acc0c91f123b84777d65cd70cfMindy Pereiraimport android.database.Cursor;
231666816f97b7d69124d25f61415b8e258357e4dbMindy Pereiraimport android.database.MatrixCursor;
24818143e2163648acc0c91f123b84777d65cd70cfMindy Pereiraimport android.net.Uri;
25818143e2163648acc0c91f123b84777d65cd70cfMindy Pereiraimport android.test.ActivityInstrumentationTestCase2;
2665b06f52e5b6336493388923be88bdd2ded4e1d1mindypimport android.test.suitebuilder.annotation.SmallTest;
271666816f97b7d69124d25f61415b8e258357e4dbMindy Pereiraimport android.text.Html;
28818143e2163648acc0c91f123b84777d65cd70cfMindy Pereiraimport android.text.TextUtils;
29818143e2163648acc0c91f123b84777d65cd70cfMindy Pereiraimport android.text.util.Rfc822Tokenizer;
30818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira
316d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrookimport com.android.mail.compose.ComposeActivity;
32818143e2163648acc0c91f123b84777d65cd70cfMindy Pereiraimport com.android.mail.providers.Account;
33bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereiraimport com.android.mail.providers.Attachment;
346d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrookimport com.android.mail.providers.MailAppProvider;
353ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereiraimport com.android.mail.providers.Message;
361883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereiraimport com.android.mail.providers.ReplyFromAccount;
37818143e2163648acc0c91f123b84777d65cd70cfMindy Pereiraimport com.android.mail.providers.UIProvider;
38818143e2163648acc0c91f123b84777d65cd70cfMindy Pereiraimport com.android.mail.utils.AccountUtils;
396d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrookimport com.android.mail.utils.LogUtils;
40384b8de1a1e18b29fe392151b06ce6fbe07be4bdScott Kennedyimport com.android.mail.utils.MatrixCursorWithCachedColumns;
416d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrookimport com.android.mail.utils.Utils;
42818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira
431883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereiraimport org.json.JSONArray;
44bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereiraimport org.json.JSONException;
451883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira
466d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrookimport java.lang.Deprecated;
476d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrookimport java.lang.Throwable;
486d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrookimport java.util.Arrays;
491666816f97b7d69124d25f61415b8e258357e4dbMindy Pereiraimport java.util.Date;
50f2b71bb326eca61fc54d21a3968f845fd36b1705Mindy Pereiraimport java.util.HashSet;
511666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira
5265b06f52e5b6336493388923be88bdd2ded4e1d1mindyp@SmallTest
53818143e2163648acc0c91f123b84777d65cd70cfMindy Pereirapublic class ComposeActivityTest extends ActivityInstrumentationTestCase2<ComposeActivity> {
546d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    // TODO: Remove usages of FromAddressSpinner#initialize and ComposeActivity#initReplyRecipients.
556d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    // The internal state of the activity instance may have the wrong mReplyFromAccount as
566d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    // this is set when handling the initial intent.  Theses tests should
576d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    // instantiate the ComposeActivity with the correct reply all intent
586d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
596d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    // This varible shouldn't be used, as it may not match the state of the ComposeActivity
606d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    // TODO: remove usage of this variable
616d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    @Deprecated
62818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira    private Account mAccount;
63818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira
642efacc5297c5a2f575a8c98181f4dcd51ed79f9ePaul Westbrook    private static final Account[] EMPTY_ACCOUNT_LIST = new Account[0];
652efacc5297c5a2f575a8c98181f4dcd51ed79f9ePaul Westbrook
66818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira    public ComposeActivityTest() {
67818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira        super(ComposeActivity.class);
68818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira    }
69818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira
706d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    private Message getRefMessage(ContentResolver resolver, Uri folderListUri) {
716d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        Cursor foldersCursor = resolver.query(folderListUri,
72cfb7f33ff8ef9dc60b9143af32de64c7a3d71f36Mindy Pereira                UIProvider.FOLDERS_PROJECTION, null, null, null);
73818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira        Uri convUri = null;
74818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira        if (foldersCursor != null) {
75818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira            foldersCursor.moveToFirst();
76818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira            convUri = Uri.parse(foldersCursor
77818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                    .getString(UIProvider.FOLDER_CONVERSATION_LIST_URI_COLUMN));
789e2d407fdafeb874e640eb84017feaf784309075Scott Kennedy            foldersCursor.close();
79818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira        }
806d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
816d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        Cursor convCursor = resolver.query(convUri,
82818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                UIProvider.CONVERSATION_PROJECTION, null, null, null);
83818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira        Uri messagesUri = null;
84818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira        if (convCursor != null) {
85818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira            convCursor.moveToFirst();
86818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira            messagesUri = Uri.parse(convCursor
87818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                    .getString(UIProvider.CONVERSATION_MESSAGE_LIST_URI_COLUMN));
889e2d407fdafeb874e640eb84017feaf784309075Scott Kennedy            convCursor.close();
89818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira        }
906d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
916d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        Cursor msgCursor = resolver.query(messagesUri,
92818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                UIProvider.MESSAGE_PROJECTION, null, null, null);
93818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira        if (msgCursor != null) {
94818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira            msgCursor.moveToFirst();
95818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira        }
96a831b2f1ba6d3c18d5e54563df8bae1f589c4257Mindy Pereira        return new Message(msgCursor);
97818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira    }
98818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira
996d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
1006d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    private Message getRefMessage(ContentResolver resolver) {
1016d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        return getRefMessage(resolver, mAccount.folderListUri);
1026d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    }
1036d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
1046d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    public void setAccount(ComposeActivity activity, String accountName) {
1051666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira        // Get a mock account.
1066d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Account account = getAccountForName(activity, accountName);
1076d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        if (account != null) {
1086d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook            mAccount = account;
1096d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook            activity.setAccount(mAccount);
1106d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        }
1116d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    }
1126d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
1136d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    private Account[] getAccounts(Context context) {
1146d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        return AccountUtils.getSyncingAccounts(context);
1156d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    }
1166d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
1176d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    private Account getAccountForName(Context context, String accountName) {
1186d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        Account[] results = getAccounts(context);
1191666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira        for (Account account : results) {
1201666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira            if (account.name.equals(accountName)) {
1216d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                return account;
1221666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira            }
1231666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira        }
1246d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        return null;
1251666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira    }
1261666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira
12765b06f52e5b6336493388923be88bdd2ded4e1d1mindyp    /**
12865b06f52e5b6336493388923be88bdd2ded4e1d1mindyp     * Test the cases where: The user's reply-to is one of their custom from's
12965b06f52e5b6336493388923be88bdd2ded4e1d1mindyp     * and they are replying all to a message where their custom from was a
13065b06f52e5b6336493388923be88bdd2ded4e1d1mindyp     * recipient. TODO: verify web behavior
13165b06f52e5b6336493388923be88bdd2ded4e1d1mindyp     */
1326d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    public void testRecipientsRefReplyAllCustomFromReplyTo() throws Throwable {
1336d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final ComposeActivity activity = getActivity();
1346d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        setAccount(activity, "account3@mockuiprovider.com");
1356d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Message refMessage = getRefMessage(activity.getContentResolver());
13665b06f52e5b6336493388923be88bdd2ded4e1d1mindyp        final String customFrom = "CUSTOMaccount3@mockuiprovider.com";
13765b06f52e5b6336493388923be88bdd2ded4e1d1mindyp        refMessage.setFrom("account3@mockuiprovider.com");
13865b06f52e5b6336493388923be88bdd2ded4e1d1mindyp        refMessage.setTo("someotheraccount1@mockuiprovider.com, "
13965b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                + "someotheraccount2@mockuiprovider.com, someotheraccount3@mockuiprovider.com, "
14065b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                + customFrom);
14165b06f52e5b6336493388923be88bdd2ded4e1d1mindyp        refMessage.setReplyTo(customFrom);
1426d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        activity.mFromSpinner = new FromAddressSpinner(activity);
14365b06f52e5b6336493388923be88bdd2ded4e1d1mindyp        ReplyFromAccount a = new ReplyFromAccount(mAccount, mAccount.uri, customFrom,
14465b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                customFrom, customFrom, true, true);
14565b06f52e5b6336493388923be88bdd2ded4e1d1mindyp        JSONArray array = new JSONArray();
14665b06f52e5b6336493388923be88bdd2ded4e1d1mindyp        array.put(a.serialize());
14765b06f52e5b6336493388923be88bdd2ded4e1d1mindyp        mAccount.accountFromAddresses = array.toString();
14865b06f52e5b6336493388923be88bdd2ded4e1d1mindyp        ReplyFromAccount currentAccount = new ReplyFromAccount(mAccount, mAccount.uri,
14965b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                mAccount.name, mAccount.name, customFrom, true, false);
1506d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        activity.mFromSpinner.setCurrentAccount(currentAccount);
1516d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
1526d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        activity.mFromSpinner.initialize(ComposeActivity.REPLY_ALL,
1532efacc5297c5a2f575a8c98181f4dcd51ed79f9ePaul Westbrook                currentAccount.account, EMPTY_ACCOUNT_LIST, null);
1546d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        runTestOnUiThread(new Runnable() {
1558750066b10f80e2a8080016973b3296d76d18266Mark Wei            @Override
15665b06f52e5b6336493388923be88bdd2ded4e1d1mindyp            public void run() {
157ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy                activity.initReplyRecipients(refMessage, ComposeActivity.REPLY_ALL);
15865b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                String[] to = activity.getToAddresses();
15965b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                String[] cc = activity.getCcAddresses();
16065b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                String[] bcc = activity.getBccAddresses();
16165b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                String toAsString = TextUtils.join(",", to);
16265b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                assertEquals(3, to.length);
16365b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                assertFalse(toAsString.contains(customFrom));
16465b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                assertEquals(0, cc.length);
16565b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                assertEquals(0, bcc.length);
16665b06f52e5b6336493388923be88bdd2ded4e1d1mindyp            }
16765b06f52e5b6336493388923be88bdd2ded4e1d1mindyp        });
16865b06f52e5b6336493388923be88bdd2ded4e1d1mindyp    }
16965b06f52e5b6336493388923be88bdd2ded4e1d1mindyp
17065b06f52e5b6336493388923be88bdd2ded4e1d1mindyp    /**
17165b06f52e5b6336493388923be88bdd2ded4e1d1mindyp     * Test the cases where: The user sent a message to one of
17265b06f52e5b6336493388923be88bdd2ded4e1d1mindyp     * their custom froms and just replied to that message
17365b06f52e5b6336493388923be88bdd2ded4e1d1mindyp     */
1746d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    public void testRecipientsRefReplyAllOnlyAccount() throws Throwable {
1756d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final ComposeActivity activity = getActivity();
1766d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        setAccount(activity, "account3@mockuiprovider.com");
1776d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Message refMessage = getRefMessage(activity.getContentResolver());
17865b06f52e5b6336493388923be88bdd2ded4e1d1mindyp        refMessage.setFrom("account3@mockuiprovider.com");
17965b06f52e5b6336493388923be88bdd2ded4e1d1mindyp        refMessage.setTo("account3@mockuiprovider.com");
18065b06f52e5b6336493388923be88bdd2ded4e1d1mindyp        final Account account = mAccount;
1816d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        activity.mFromSpinner = new FromAddressSpinner(activity);
18265b06f52e5b6336493388923be88bdd2ded4e1d1mindyp        ReplyFromAccount currentAccount = new ReplyFromAccount(mAccount, mAccount.uri,
18365b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                mAccount.name, mAccount.name, mAccount.name, true, false);
1846d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        activity.mFromSpinner.setCurrentAccount(currentAccount);
1856d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
1866d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        activity.mFromSpinner.initialize(ComposeActivity.REPLY_ALL,
1872efacc5297c5a2f575a8c98181f4dcd51ed79f9ePaul Westbrook                currentAccount.account, EMPTY_ACCOUNT_LIST, null);
1886d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        runTestOnUiThread(new Runnable() {
1898750066b10f80e2a8080016973b3296d76d18266Mark Wei            @Override
19065b06f52e5b6336493388923be88bdd2ded4e1d1mindyp            public void run() {
191ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy                activity.initReplyRecipients(refMessage, ComposeActivity.REPLY_ALL);
19265b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                String[] to = activity.getToAddresses();
19365b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                String[] cc = activity.getCcAddresses();
19465b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                String[] bcc = activity.getBccAddresses();
19565b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                String toAsString = TextUtils.join(",", to);
19665b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                assertEquals(1, to.length);
197184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler                assertTrue(toAsString.contains(account.getEmailAddress()));
19865b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                assertEquals(0, cc.length);
19965b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                assertEquals(0, bcc.length);
20065b06f52e5b6336493388923be88bdd2ded4e1d1mindyp            }
20165b06f52e5b6336493388923be88bdd2ded4e1d1mindyp        });
20265b06f52e5b6336493388923be88bdd2ded4e1d1mindyp    }
20365b06f52e5b6336493388923be88bdd2ded4e1d1mindyp
20465b06f52e5b6336493388923be88bdd2ded4e1d1mindyp    /**
20565b06f52e5b6336493388923be88bdd2ded4e1d1mindyp     * Test the cases where: The user sent a message to one of
20665b06f52e5b6336493388923be88bdd2ded4e1d1mindyp     * their custom froms and just replied to that message
20765b06f52e5b6336493388923be88bdd2ded4e1d1mindyp     */
2086d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    public void testRecipientsRefReplyAllOnlyCustomFrom() throws Throwable {
2096d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final ComposeActivity activity = getActivity();
2106d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        setAccount(activity, "account3@mockuiprovider.com");
2116d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Message refMessage = getRefMessage(activity.getContentResolver());
21265b06f52e5b6336493388923be88bdd2ded4e1d1mindyp        final String customFrom = "CUSTOMaccount3@mockuiprovider.com";
21365b06f52e5b6336493388923be88bdd2ded4e1d1mindyp        refMessage.setFrom("account3@mockuiprovider.com");
21465b06f52e5b6336493388923be88bdd2ded4e1d1mindyp        refMessage.setTo(customFrom);
2156d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        activity.mFromSpinner = new FromAddressSpinner(activity);
21665b06f52e5b6336493388923be88bdd2ded4e1d1mindyp        ReplyFromAccount a = new ReplyFromAccount(mAccount, mAccount.uri, customFrom,
21765b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                customFrom, customFrom, true, true);
21865b06f52e5b6336493388923be88bdd2ded4e1d1mindyp        JSONArray array = new JSONArray();
21965b06f52e5b6336493388923be88bdd2ded4e1d1mindyp        array.put(a.serialize());
22065b06f52e5b6336493388923be88bdd2ded4e1d1mindyp        mAccount.accountFromAddresses = array.toString();
22165b06f52e5b6336493388923be88bdd2ded4e1d1mindyp        ReplyFromAccount currentAccount = new ReplyFromAccount(mAccount, mAccount.uri,
22265b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                mAccount.name, mAccount.name, customFrom, true, false);
2236d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        activity.mFromSpinner.setCurrentAccount(currentAccount);
2246d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
2256d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        activity.mFromSpinner.initialize(ComposeActivity.REPLY_ALL,
2262efacc5297c5a2f575a8c98181f4dcd51ed79f9ePaul Westbrook                currentAccount.account, EMPTY_ACCOUNT_LIST, null);
2276d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        runTestOnUiThread(new Runnable() {
2288750066b10f80e2a8080016973b3296d76d18266Mark Wei            @Override
22965b06f52e5b6336493388923be88bdd2ded4e1d1mindyp            public void run() {
230ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy                activity.initReplyRecipients(refMessage, ComposeActivity.REPLY_ALL);
23165b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                String[] to = activity.getToAddresses();
23265b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                String[] cc = activity.getCcAddresses();
23365b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                String[] bcc = activity.getBccAddresses();
23465b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                String toAsString = TextUtils.join(",", to);
23565b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                assertEquals(1, to.length);
23665b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                assertTrue(toAsString.contains(customFrom));
23765b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                assertEquals(0, cc.length);
23865b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                assertEquals(0, bcc.length);
23965b06f52e5b6336493388923be88bdd2ded4e1d1mindyp            }
24065b06f52e5b6336493388923be88bdd2ded4e1d1mindyp        });
24165b06f52e5b6336493388923be88bdd2ded4e1d1mindyp    }
24265b06f52e5b6336493388923be88bdd2ded4e1d1mindyp
2436d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    public void testReply() throws Throwable {
2446d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final ComposeActivity activity = getActivity();
2456d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        setAccount(activity, "account0@mockuiprovider.com");
2466d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Message refMessage = getRefMessage(activity.getContentResolver());
2478960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy        final String refMessageFromAccount = refMessage.getFrom();
248818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira
2496d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        runTestOnUiThread(new Runnable() {
2508750066b10f80e2a8080016973b3296d76d18266Mark Wei            @Override
251818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira            public void run() {
252ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy                activity.initReplyRecipients(refMessage, ComposeActivity.REPLY);
253818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                String[] to = activity.getToAddresses();
254818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                String[] cc = activity.getCcAddresses();
255818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                String[] bcc = activity.getBccAddresses();
256818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                assertTrue(to.length == 1);
257818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                assertEquals(refMessageFromAccount,
258818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                        Rfc822Tokenizer.tokenize(to[0])[0].getAddress());
259818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                assertTrue(cc.length == 0);
260818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                assertTrue(bcc.length == 0);
261818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira            }
262818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira        });
263818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira    }
264818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira
2656d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    public void testReplyWithReplyTo() throws Throwable {
2666d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final ComposeActivity activity = getActivity();
2676d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        setAccount(activity, "account1@mockuiprovider.com");
2686d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Message refMessage = getRefMessage(activity.getContentResolver());
2698960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy        refMessage.setReplyTo("replytofromaccount1@mock.com");
2708960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy        final String refReplyToAccount = refMessage.getReplyTo();
2711666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira
2726d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        runTestOnUiThread(new Runnable() {
2738750066b10f80e2a8080016973b3296d76d18266Mark Wei            @Override
2741666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira            public void run() {
275ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy                activity.initReplyRecipients(refMessage, ComposeActivity.REPLY);
2761666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira                String[] to = activity.getToAddresses();
2771666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira                String[] cc = activity.getCcAddresses();
2781666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira                String[] bcc = activity.getBccAddresses();
2791666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira                assertTrue(to.length == 1);
2801666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira                assertEquals(refReplyToAccount,
2811666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira                        Rfc822Tokenizer.tokenize(to[0])[0].getAddress());
2821666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira                assertTrue(cc.length == 0);
2831666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira                assertTrue(bcc.length == 0);
2841666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira            }
2851666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira        });
2861666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira    }
2871666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira
288fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp    /**
289263a0afc4612eff931fe43e9c815665fb49bb617mindyp     * Reply to a message you sent yourself to some recipients in the to field.
290263a0afc4612eff931fe43e9c815665fb49bb617mindyp     */
2916d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    public void testReplyToSelf() throws Throwable {
2926d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final ComposeActivity activity = getActivity();
2936d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        setAccount(activity, "account1@mockuiprovider.com");
2946d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Message refMessage = getRefMessage(activity.getContentResolver());
295263a0afc4612eff931fe43e9c815665fb49bb617mindyp        refMessage.setFrom("Account Test <account1@mockuiprovider.com>");
296263a0afc4612eff931fe43e9c815665fb49bb617mindyp        refMessage.setTo("test1@gmail.com");
2976d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        runTestOnUiThread(new Runnable() {
2988750066b10f80e2a8080016973b3296d76d18266Mark Wei            @Override
299263a0afc4612eff931fe43e9c815665fb49bb617mindyp            public void run() {
300ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy                activity.initReplyRecipients(refMessage, ComposeActivity.REPLY);
301263a0afc4612eff931fe43e9c815665fb49bb617mindyp                String[] to = activity.getToAddresses();
302263a0afc4612eff931fe43e9c815665fb49bb617mindyp                String[] cc = activity.getCcAddresses();
303263a0afc4612eff931fe43e9c815665fb49bb617mindyp                String[] bcc = activity.getBccAddresses();
304263a0afc4612eff931fe43e9c815665fb49bb617mindyp                assertTrue(to.length == 1);
305263a0afc4612eff931fe43e9c815665fb49bb617mindyp                String toAsString = TextUtils.join(",", to);
306263a0afc4612eff931fe43e9c815665fb49bb617mindyp                assertTrue(toAsString.contains("test1@gmail.com"));
307263a0afc4612eff931fe43e9c815665fb49bb617mindyp                assertTrue(cc.length == 0);
308263a0afc4612eff931fe43e9c815665fb49bb617mindyp                assertTrue(bcc.length == 0);
309263a0afc4612eff931fe43e9c815665fb49bb617mindyp            }
310263a0afc4612eff931fe43e9c815665fb49bb617mindyp        });
311263a0afc4612eff931fe43e9c815665fb49bb617mindyp    }
312263a0afc4612eff931fe43e9c815665fb49bb617mindyp
313263a0afc4612eff931fe43e9c815665fb49bb617mindyp    /**
314263a0afc4612eff931fe43e9c815665fb49bb617mindyp     * Reply-all to a message you sent.
315263a0afc4612eff931fe43e9c815665fb49bb617mindyp     */
3166d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    public void testReplyAllToSelf() throws Throwable {
3176d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final ComposeActivity activity = getActivity();
3186d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        setAccount(activity, "account1@mockuiprovider.com");
3196d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Message refMessage = getRefMessage(activity.getContentResolver());
320263a0afc4612eff931fe43e9c815665fb49bb617mindyp        refMessage.setFrom("Account Test <account1@mockuiprovider.com>");
321263a0afc4612eff931fe43e9c815665fb49bb617mindyp        refMessage.setTo("test1@gmail.com, test2@gmail.com");
3226d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        runTestOnUiThread(new Runnable() {
3238750066b10f80e2a8080016973b3296d76d18266Mark Wei            @Override
324263a0afc4612eff931fe43e9c815665fb49bb617mindyp            public void run() {
325ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy                activity.initReplyRecipients(refMessage, ComposeActivity.REPLY_ALL);
326263a0afc4612eff931fe43e9c815665fb49bb617mindyp                String[] to = activity.getToAddresses();
327263a0afc4612eff931fe43e9c815665fb49bb617mindyp                String[] cc = activity.getCcAddresses();
328263a0afc4612eff931fe43e9c815665fb49bb617mindyp                String[] bcc = activity.getBccAddresses();
329263a0afc4612eff931fe43e9c815665fb49bb617mindyp                assertEquals(to.length, 2);
330263a0afc4612eff931fe43e9c815665fb49bb617mindyp                String toAsString = TextUtils.join(",", to);
331263a0afc4612eff931fe43e9c815665fb49bb617mindyp                assertTrue(toAsString.contains("test1@gmail.com"));
332263a0afc4612eff931fe43e9c815665fb49bb617mindyp                assertTrue(toAsString.contains("test2@gmail.com"));
333263a0afc4612eff931fe43e9c815665fb49bb617mindyp                assertTrue(cc.length == 0);
334263a0afc4612eff931fe43e9c815665fb49bb617mindyp                assertTrue(bcc.length == 0);
335263a0afc4612eff931fe43e9c815665fb49bb617mindyp            }
336263a0afc4612eff931fe43e9c815665fb49bb617mindyp        });
337263a0afc4612eff931fe43e9c815665fb49bb617mindyp    }
338263a0afc4612eff931fe43e9c815665fb49bb617mindyp
339263a0afc4612eff931fe43e9c815665fb49bb617mindyp    /**
340263a0afc4612eff931fe43e9c815665fb49bb617mindyp     * Reply-all to a message you sent with some to and some CC recips.
341263a0afc4612eff931fe43e9c815665fb49bb617mindyp     */
3426d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    public void testReplyAllToSelfWithCc() throws Throwable {
3436d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final ComposeActivity activity = getActivity();
3446d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        setAccount(activity, "account1@mockuiprovider.com");
3456d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Message refMessage = getRefMessage(activity.getContentResolver());
346263a0afc4612eff931fe43e9c815665fb49bb617mindyp        refMessage.setFrom("Account Test <account1@mockuiprovider.com>");
347263a0afc4612eff931fe43e9c815665fb49bb617mindyp        refMessage.setTo("test1@gmail.com, test2@gmail.com");
348263a0afc4612eff931fe43e9c815665fb49bb617mindyp        refMessage.setCc("testcc@gmail.com");
3496d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        runTestOnUiThread(new Runnable() {
3508750066b10f80e2a8080016973b3296d76d18266Mark Wei            @Override
351263a0afc4612eff931fe43e9c815665fb49bb617mindyp            public void run() {
352ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy                activity.initReplyRecipients(refMessage, ComposeActivity.REPLY_ALL);
353263a0afc4612eff931fe43e9c815665fb49bb617mindyp                String[] to = activity.getToAddresses();
354263a0afc4612eff931fe43e9c815665fb49bb617mindyp                String[] cc = activity.getCcAddresses();
355263a0afc4612eff931fe43e9c815665fb49bb617mindyp                String[] bcc = activity.getBccAddresses();
356263a0afc4612eff931fe43e9c815665fb49bb617mindyp                assertEquals(to.length, 2);
357263a0afc4612eff931fe43e9c815665fb49bb617mindyp                String toAsString = TextUtils.join(",", to);
358263a0afc4612eff931fe43e9c815665fb49bb617mindyp                assertTrue(toAsString.contains("test1@gmail.com"));
359263a0afc4612eff931fe43e9c815665fb49bb617mindyp                assertTrue(toAsString.contains("test2@gmail.com"));
360263a0afc4612eff931fe43e9c815665fb49bb617mindyp                String ccAsString = TextUtils.join(",", cc);
361263a0afc4612eff931fe43e9c815665fb49bb617mindyp                assertTrue(ccAsString.contains("testcc@gmail.com"));
362263a0afc4612eff931fe43e9c815665fb49bb617mindyp                assertTrue(cc.length == 1);
363263a0afc4612eff931fe43e9c815665fb49bb617mindyp                assertTrue(bcc.length == 0);
364263a0afc4612eff931fe43e9c815665fb49bb617mindyp            }
365263a0afc4612eff931fe43e9c815665fb49bb617mindyp        });
366263a0afc4612eff931fe43e9c815665fb49bb617mindyp    }
367263a0afc4612eff931fe43e9c815665fb49bb617mindyp
3686d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    public void testReplyAll() throws Throwable {
3696d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final ComposeActivity activity = getActivity();
3706d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        setAccount(activity, "account0@mockuiprovider.com");
3716d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Message refMessage = getRefMessage(activity.getContentResolver());
3728960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy        final String[] refMessageTo = TextUtils.split(refMessage.getTo(), ",");
3738960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy        final String refMessageFromAccount = refMessage.getFrom();
374818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira
3756d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        runTestOnUiThread(new Runnable() {
3768750066b10f80e2a8080016973b3296d76d18266Mark Wei            @Override
377818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira            public void run() {
378ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy                activity.initReplyRecipients(refMessage, ComposeActivity.REPLY_ALL);
379818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                String[] to = activity.getToAddresses();
380818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                String[] cc = activity.getCcAddresses();
381818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                String[] bcc = activity.getBccAddresses();
382818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                assertTrue(to.length == 1);
383818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                assertEquals(refMessageFromAccount,
384818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                        Rfc822Tokenizer.tokenize(to[0])[0].getAddress());
385818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                assertEquals(cc.length, refMessageTo.length);
386818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                assertTrue(bcc.length == 0);
387818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira            }
388818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira        });
389818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira    }
390818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira
3916d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    public void testReplyAllWithReplyTo() throws Throwable {
3926d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final ComposeActivity activity = getActivity();
3936d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        setAccount(activity, "account1@mockuiprovider.com");
3946d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Message refMessage = getRefMessage(activity.getContentResolver());
3958960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy        refMessage.setReplyTo("replytofromaccount1@mock.com");
3968960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy        final String[] refMessageTo = TextUtils.split(refMessage.getTo(), ",");
3978960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy        final String refReplyToAccount = refMessage.getReplyTo();
3981666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira
3996d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        runTestOnUiThread(new Runnable() {
4008750066b10f80e2a8080016973b3296d76d18266Mark Wei            @Override
4011666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira            public void run() {
402ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy                activity.initReplyRecipients(refMessage, ComposeActivity.REPLY_ALL);
4031666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira                String[] to = activity.getToAddresses();
4041666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira                String[] cc = activity.getCcAddresses();
4051666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira                String[] bcc = activity.getBccAddresses();
4061666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira                assertTrue(to.length == 1);
4071666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira                assertEquals(refReplyToAccount, Rfc822Tokenizer.tokenize(to[0])[0].getAddress());
4081666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira                assertEquals(cc.length, refMessageTo.length);
4091666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira                assertTrue(bcc.length == 0);
4101666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira            }
4111666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira        });
4121666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira    }
4131666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira
414384b8de1a1e18b29fe392151b06ce6fbe07be4bdScott Kennedy    private static Message getRefMessageWithCc(long messageId, boolean hasAttachments) {
415384b8de1a1e18b29fe392151b06ce6fbe07be4bdScott Kennedy        MatrixCursor cursor = new MatrixCursorWithCachedColumns(UIProvider.MESSAGE_PROJECTION);
4161666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira        final String messageUri = "content://xxx/message/" + messageId;
4171666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira        Object[] messageValues = new Object[UIProvider.MESSAGE_PROJECTION.length];
4181666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira        messageValues[UIProvider.MESSAGE_ID_COLUMN] = Long.valueOf(messageId);
4191666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira        messageValues[UIProvider.MESSAGE_URI_COLUMN] = messageUri;
4201666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira        messageValues[UIProvider.MESSAGE_SUBJECT_COLUMN] = "Message subject";
4211666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira        messageValues[UIProvider.MESSAGE_SNIPPET_COLUMN] = "SNIPPET";
4221666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira        String html = "<html><body><b><i>This is some html!!!</i></b></body></html>";
4231666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira        messageValues[UIProvider.MESSAGE_BODY_HTML_COLUMN] = html;
4241666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira        messageValues[UIProvider.MESSAGE_BODY_TEXT_COLUMN] = Html.fromHtml(html);
4253ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        messageValues[UIProvider.MESSAGE_HAS_ATTACHMENTS_COLUMN] = hasAttachments ? 1 : 0;
4261666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira        messageValues[UIProvider.MESSAGE_DATE_RECEIVED_MS_COLUMN] = new Date().getTime();
4271666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira        messageValues[UIProvider.MESSAGE_ATTACHMENT_LIST_URI_COLUMN] = messageUri
4281666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira                + "/getAttachments";
4291666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira        messageValues[UIProvider.MESSAGE_TO_COLUMN] = "account1@mock.com, account2@mock.com";
4301666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira        messageValues[UIProvider.MESSAGE_FROM_COLUMN] = "fromaccount1@mock.com";
4311666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira        messageValues[UIProvider.MESSAGE_CC_COLUMN] = "accountcc1@mock.com, accountcc2@mock.com";
4321666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira        cursor.addRow(messageValues);
4331666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira        cursor.moveToFirst();
434a831b2f1ba6d3c18d5e54563df8bae1f589c4257Mindy Pereira        return new Message(cursor);
4351666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira    }
4361666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira
4376d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    public void testReplyAllWithCc() throws Throwable {
4386d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final ComposeActivity activity = getActivity();
4396d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        setAccount(activity, "account1@mockuiprovider.com");
4403ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        final Message refMessage = getRefMessageWithCc(0, false);
4418960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy        final String[] refMessageTo = TextUtils.split(refMessage.getTo(), ",");
4428960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy        final String[] refMessageCc = TextUtils.split(refMessage.getCc(), ",");
4438960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy        final String refMessageFromAccount = refMessage.getFrom();
4441666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira
4456d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        runTestOnUiThread(new Runnable() {
4468750066b10f80e2a8080016973b3296d76d18266Mark Wei            @Override
4471666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira            public void run() {
448ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy                activity.initReplyRecipients(refMessage, ComposeActivity.REPLY_ALL);
4491666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira                String[] to = activity.getToAddresses();
4501666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira                String[] cc = activity.getCcAddresses();
4511666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira                String[] bcc = activity.getBccAddresses();
4521666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira                assertTrue(to.length == 1);
4536d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                assertEquals(refMessageFromAccount,
4546d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                        Rfc822Tokenizer.tokenize(to[0])[0].getAddress());
4551666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira                assertEquals(cc.length, refMessageTo.length + refMessageCc.length);
456f2b71bb326eca61fc54d21a3968f845fd36b1705Mindy Pereira                HashSet<String> ccMap = new HashSet<String>();
457f2b71bb326eca61fc54d21a3968f845fd36b1705Mindy Pereira                for (String recip : cc) {
458f2b71bb326eca61fc54d21a3968f845fd36b1705Mindy Pereira                    ccMap.add(Rfc822Tokenizer.tokenize(recip.trim())[0].getAddress());
459f2b71bb326eca61fc54d21a3968f845fd36b1705Mindy Pereira                }
460f2b71bb326eca61fc54d21a3968f845fd36b1705Mindy Pereira                for (String toRecip : refMessageTo) {
461f2b71bb326eca61fc54d21a3968f845fd36b1705Mindy Pereira                    assertTrue(ccMap.contains(toRecip.trim()));
462f2b71bb326eca61fc54d21a3968f845fd36b1705Mindy Pereira                }
463f2b71bb326eca61fc54d21a3968f845fd36b1705Mindy Pereira                for (String ccRecip : refMessageCc) {
464f2b71bb326eca61fc54d21a3968f845fd36b1705Mindy Pereira                    assertTrue(ccMap.contains(ccRecip.trim()));
465f2b71bb326eca61fc54d21a3968f845fd36b1705Mindy Pereira                }
4661666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira                assertTrue(bcc.length == 0);
4671666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira            }
4681666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira        });
4691666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira    }
4701666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira
4716d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    public void testForward() throws Throwable {
4726d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final ComposeActivity activity = getActivity();
4736d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        setAccount(activity, "account0@mockuiprovider.com");
4746d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Message refMessage = getRefMessage(activity.getContentResolver());
475818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira
4766d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        runTestOnUiThread(new Runnable() {
4778750066b10f80e2a8080016973b3296d76d18266Mark Wei            @Override
478818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira            public void run() {
479ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy                activity.initReplyRecipients(refMessage, ComposeActivity.FORWARD);
480818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                String[] to = activity.getToAddresses();
481818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                String[] cc = activity.getCcAddresses();
482818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                String[] bcc = activity.getBccAddresses();
483818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                assertEquals(to.length, 0);
484818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                assertEquals(cc.length, 0);
485818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                assertEquals(bcc.length, 0);
486818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira            }
487818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira        });
488818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira    }
489818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira
4906d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    public void testCompose() throws Throwable {
4916d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final ComposeActivity activity = getActivity();
4926d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        setAccount(activity, "account0@mockuiprovider.com");
4936d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Message refMessage = getRefMessage(activity.getContentResolver());
494818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira
4956d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        runTestOnUiThread(new Runnable() {
4968750066b10f80e2a8080016973b3296d76d18266Mark Wei            @Override
497818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira            public void run() {
498ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy                activity.initReplyRecipients(refMessage, ComposeActivity.COMPOSE);
499818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                String[] to = activity.getToAddresses();
500818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                String[] cc = activity.getCcAddresses();
501818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                String[] bcc = activity.getBccAddresses();
502818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                assertEquals(to.length, 0);
503818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                assertEquals(cc.length, 0);
504818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira                assertEquals(bcc.length, 0);
505818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira            }
506818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira        });
507818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira    }
5081883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira
5091883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira    /**
5101883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira     * Test the cases where: The user is replying to a message they sent
5111883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira     */
5126d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    public void testRecipientsRefMessageReplyToSelf() throws Throwable {
5136d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final ComposeActivity activity = getActivity();
5146d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        setAccount(activity, "account0@mockuiprovider.com");
5156d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Message refMessage = getRefMessage(activity.getContentResolver());
5168960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy        refMessage.setFrom("account0@mockuiprovider.com");
5178960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy        refMessage.setTo("someotheraccount@mockuiprovider.com");
5181883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira
5196d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        runTestOnUiThread(new Runnable() {
5208750066b10f80e2a8080016973b3296d76d18266Mark Wei            @Override
5211883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira            public void run() {
522ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy                activity.initReplyRecipients(refMessage, ComposeActivity.REPLY);
5231883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira                String[] to = activity.getToAddresses();
5241883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira                String[] cc = activity.getCcAddresses();
5251883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira                String[] bcc = activity.getBccAddresses();
5261883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira                assertEquals(to.length, 1);
5278960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy                assertTrue(to[0].contains(refMessage.getTo()));
5281883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira                assertEquals(cc.length, 0);
5291883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira                assertEquals(bcc.length, 0);
5301883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira            }
5311883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira        });
5321883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira    }
5331883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira
5341883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira    /**
5351883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira     * Test the cases where:
5361883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira     * The user is replying to a message sent from one of their custom froms
5371883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira     */
5386d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    public void testRecipientsRefMessageReplyToCustomFrom() throws Throwable {
5396d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final ComposeActivity activity = getActivity();
5406d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        setAccount(activity, "account1@mockuiprovider.com");
5416d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Message refMessage = getRefMessage(activity.getContentResolver());
5428960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy        refMessage.setFrom("CUSTOMaccount1@mockuiprovider.com");
5438960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy        refMessage.setTo("someotheraccount@mockuiprovider.com");
5446d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        activity.mFromSpinner = new FromAddressSpinner(activity);
5458960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy        ReplyFromAccount a = new ReplyFromAccount(mAccount, mAccount.uri, refMessage.getFrom(),
5468960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy                refMessage.getFrom(), refMessage.getFrom(), true, true);
5471883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira        JSONArray array = new JSONArray();
5481883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira        array.put(a.serialize());
5491883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira        mAccount.accountFromAddresses = array.toString();
5501883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira        ReplyFromAccount currentAccount = new ReplyFromAccount(mAccount, mAccount.uri,
5511883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira                mAccount.name, mAccount.name, mAccount.name, true, false);
5526d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        activity.mFromSpinner.setCurrentAccount(currentAccount);
5536d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        activity.mFromSpinner.initialize(ComposeActivity.REPLY, currentAccount.account,
5542efacc5297c5a2f575a8c98181f4dcd51ed79f9ePaul Westbrook                EMPTY_ACCOUNT_LIST, null);
5551883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira
5566d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        runTestOnUiThread(new Runnable() {
5578750066b10f80e2a8080016973b3296d76d18266Mark Wei            @Override
5581883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira            public void run() {
559ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy                activity.initReplyRecipients(refMessage, ComposeActivity.REPLY);
5601883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira                String[] to = activity.getToAddresses();
5611883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira                String[] cc = activity.getCcAddresses();
5621883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira                String[] bcc = activity.getBccAddresses();
5631883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira                assertEquals(to.length, 1);
5648960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy                assertTrue(to[0].contains(refMessage.getTo()));
5651883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira                assertEquals(cc.length, 0);
5661883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira                assertEquals(bcc.length, 0);
5671883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira            }
5681883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira        });
5691883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira    }
570b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira
571cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira    /**
572cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira     * Test the cases where:
573cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira     * The user is replying to a message sent from one of their custom froms
574cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira     */
5756d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    public void testRecipientsRefMessageReplyAllCustomFrom() throws Throwable {
5766d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final ComposeActivity activity = getActivity();
5776d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        setAccount(activity, "account1@mockuiprovider.com");
5786d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Message refMessage = getRefMessage(activity.getContentResolver());
579fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp        final String customFrom = "CUSTOMaccount1@mockuiprovider.com";
5808960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy        refMessage.setFrom("senderaccount@mockuiprovider.com");
5818960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy        refMessage.setTo("someotheraccount@mockuiprovider.com, "
58265b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                + "someotheraccount2@mockuiprovider.com, someotheraccount4@mockuiprovider.com, "
5838960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy                + customFrom);
5846d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        activity.mFromSpinner = new FromAddressSpinner(activity);
585cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira        ReplyFromAccount a = new ReplyFromAccount(mAccount, mAccount.uri, customFrom,
586fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp                customFrom, customFrom, true, true);
587cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira        JSONArray array = new JSONArray();
588cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira        array.put(a.serialize());
589cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira        mAccount.accountFromAddresses = array.toString();
590cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira        ReplyFromAccount currentAccount = new ReplyFromAccount(mAccount, mAccount.uri,
591cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira                mAccount.name, mAccount.name, mAccount.name, true, false);
5926d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        activity.mFromSpinner.setCurrentAccount(currentAccount);
5936d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        activity.mFromSpinner.initialize(ComposeActivity.REPLY_ALL,
5942efacc5297c5a2f575a8c98181f4dcd51ed79f9ePaul Westbrook                currentAccount.account, EMPTY_ACCOUNT_LIST, null);
5956d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        runTestOnUiThread(new Runnable() {
5968750066b10f80e2a8080016973b3296d76d18266Mark Wei            @Override
597cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira            public void run() {
598ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy                activity.initReplyRecipients(refMessage, ComposeActivity.REPLY_ALL);
599cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira                String[] to = activity.getToAddresses();
600cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira                String[] cc = activity.getCcAddresses();
601cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira                String[] bcc = activity.getBccAddresses();
602cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira                String toAsString = TextUtils.join(",", to);
603cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira                String ccAsString = TextUtils.join(",", cc);
604cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira                String bccAsString = TextUtils.join(",", bcc);
605cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira                assertEquals(to.length, 1);
606cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira                assertFalse(toAsString.contains(customFrom));
607cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira                assertFalse(ccAsString.contains(customFrom));
608cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira                assertFalse(bccAsString.contains(customFrom));
609cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira            }
610cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira        });
611cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira    }
612cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira
613fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp    /**
614fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp     * Test the cases where:
615fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp     * The user is replying to a message sent from one of their custom froms
616fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp     */
6176d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    public void testRecipientsRefMessageReplyAllCustomFromThisAccount() throws Throwable {
6186d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final ComposeActivity activity = getActivity();
6196d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        setAccount(activity, "account1@mockuiprovider.com");
6206d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Message refMessage = getRefMessage(activity.getContentResolver());
621fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp        final String customFrom = "CUSTOMaccount1@mockuiprovider.com";
6228960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy        refMessage.setFrom("account1@mockuiprovider.com");
6238960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy        refMessage.setTo("someotheraccount@mockuiprovider.com, "
62465b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                + "someotheraccount2@mockuiprovider.com, someotheraccount4@mockuiprovider.com, "
6258960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy                + customFrom);
6266d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        activity.mFromSpinner = new FromAddressSpinner(activity);
627fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp        ReplyFromAccount a = new ReplyFromAccount(mAccount, mAccount.uri, customFrom,
628fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp                customFrom, customFrom, true, true);
629fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp        JSONArray array = new JSONArray();
630fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp        array.put(a.serialize());
631fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp        mAccount.accountFromAddresses = array.toString();
632fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp        ReplyFromAccount currentAccount = new ReplyFromAccount(mAccount, mAccount.uri,
633fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp                mAccount.name, mAccount.name, mAccount.name, true, false);
6346d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        activity.mFromSpinner.setCurrentAccount(currentAccount);
6356d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        activity.mFromSpinner.initialize(ComposeActivity.REPLY_ALL,
6362efacc5297c5a2f575a8c98181f4dcd51ed79f9ePaul Westbrook                currentAccount.account, EMPTY_ACCOUNT_LIST, null);
6376d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        runTestOnUiThread(new Runnable() {
6388750066b10f80e2a8080016973b3296d76d18266Mark Wei            @Override
639fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp            public void run() {
640ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy                activity.initReplyRecipients(refMessage, ComposeActivity.REPLY_ALL);
641fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp                String[] to = activity.getToAddresses();
642fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp                String[] cc = activity.getCcAddresses();
643fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp                String[] bcc = activity.getBccAddresses();
644fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp                String toAsString = TextUtils.join(",", to);
645fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp                String ccAsString = TextUtils.join(",", cc);
646fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp                String bccAsString = TextUtils.join(",", bcc);
647fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp                // Should have the same count as the original message.
648fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp                assertEquals(to.length, 3);
649fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp                assertFalse(toAsString.contains(customFrom));
650fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp                assertFalse(ccAsString.contains(customFrom));
651fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp                assertFalse(bccAsString.contains(customFrom));
652fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp            }
653fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp        });
654fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp    }
655fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp
6566d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    // Test replying to a message in the first account in the list, and verify that
6576d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    // the Compose Activity's from account for the reply is correct
6586d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    public void testReplySendingAccount0() throws Throwable {
6596d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Context context = getInstrumentation().getContext();
6606d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        // Get the test account
6616d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Account currentAccount = getAccountForName(context, "account0@mockuiprovider.com");
6626d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
6636d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        // Get the message to be replied to
6646d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Message refMessage =
6656d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                getRefMessage(context.getContentResolver(), currentAccount.folderListUri);
6666d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
6676d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        // Create the reply intent
6686d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Intent replyIntent =
6696d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                ComposeActivity.updateActionIntent(currentAccount, refMessage.uri,
6706d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                        ComposeActivity.REPLY, new Intent());
6716d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
6726d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        setActivityIntent(replyIntent);
6736d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
6746d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final ComposeActivity activity = getActivity();
6756d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final String refMessageFromAccount = refMessage.getFrom();
6766d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
6776d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        runTestOnUiThread(new Runnable() {
6786d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook            @Override
6796d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook            public void run() {
6806d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                String[] to = activity.getToAddresses();
6816d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                String[] cc = activity.getCcAddresses();
6826d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                String[] bcc = activity.getBccAddresses();
6836d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                Account fromAccount = activity.getFromAccount();
6846d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                assertEquals(1, to.length);
6856d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                assertEquals(refMessageFromAccount,
6866d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                        Rfc822Tokenizer.tokenize(to[0])[0].getAddress());
6876d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                assertEquals(0, cc.length);
6886d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                assertEquals(0, bcc.length);
689184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler                assertEquals("account0@mockuiprovider.com", fromAccount.getEmailAddress());
6906d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook            }
6916d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        });
6926d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    }
6936d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
6946d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    // Test replying to a message in the third account in the list, and verify that
6956d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    // the Compose Activity's from account for the reply is correct
6966d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    public void testReplySendingAccount1() throws Throwable {
6976d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Context context = getInstrumentation().getContext();
6986d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        // Get the test account
6996d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Account currentAccount = getAccountForName(context, "account2@mockuiprovider.com");
7006d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
7016d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        // Get the message to be replied to
7026d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Message refMessage =
7036d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                getRefMessage(context.getContentResolver(), currentAccount.folderListUri);
7046d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
7056d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        // Create the reply intent
7066d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Intent replyIntent =
7076d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                ComposeActivity.updateActionIntent(currentAccount, refMessage.uri,
7086d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                        ComposeActivity.REPLY, new Intent());
7096d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
7106d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        setActivityIntent(replyIntent);
7116d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
7126d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final ComposeActivity activity = getActivity();
7136d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        Account fromAccount = activity.getFromAccount();
7146d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
7156d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final String refMessageFromAccount = refMessage.getFrom();
7166d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
7176d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        runTestOnUiThread(new Runnable() {
7186d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook            @Override
7196d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook            public void run() {
7206d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                String[] to = activity.getToAddresses();
7216d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                String[] cc = activity.getCcAddresses();
7226d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                String[] bcc = activity.getBccAddresses();
7236d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                Account fromAccount = activity.getFromAccount();
7246d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                assertEquals(1, to.length);
7256d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                assertEquals(refMessageFromAccount,
7266d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                        Rfc822Tokenizer.tokenize(to[0])[0].getAddress());
7276d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                assertEquals(0, cc.length);
7286d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                assertEquals(0, bcc.length);
729184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler                assertEquals("account2@mockuiprovider.com", fromAccount.getEmailAddress());
7306d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook            }
7316d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        });
7326d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    }
7336d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
734184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler    // Test a mailto VIEW Intent, with an account specified in JSON format
735184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler    public void testMailToAccountJSON() throws Throwable {
7366d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Context context = getInstrumentation().getContext();
7376d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        // Get the test account
7386d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Account currentAccount = getAccountForName(context, "account2@mockuiprovider.com");
7396d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
7406d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        // Create the mailto intent
7416d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Intent mailtoIntent =
7426d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                new Intent(Intent.ACTION_VIEW, Uri.parse("mailto:test@localhost.com"));
743184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler        mailtoIntent.putExtra(Utils.EXTRA_ACCOUNT, currentAccount.serialize());
7446d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
7456d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        setActivityIntent(mailtoIntent);
7466d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
7476d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final ComposeActivity activity = getActivity();
7486d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        Account fromAccount = activity.getFromAccount();
7496d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
7506d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        runTestOnUiThread(new Runnable() {
7516d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook            @Override
7526d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook            public void run() {
7536d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                String[] to = activity.getToAddresses();
7546d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                String[] cc = activity.getCcAddresses();
7556d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                String[] bcc = activity.getBccAddresses();
7566d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                Account fromAccount = activity.getFromAccount();
7576d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                assertEquals( 1, to.length);
7586d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                assertEquals("test@localhost.com",
7596d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                        Rfc822Tokenizer.tokenize(to[0])[0].getAddress());
7606d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                assertEquals(0, cc.length);
7616d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                assertEquals(0, bcc.length);
762184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler                assertEquals("account2@mockuiprovider.com", fromAccount.getEmailAddress());
763184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler            }
764184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler        });
765184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler    }
766184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler
767184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler    // Test a COMPOSE Intent, with an account specified in parcel format
768184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler    public void testMailToAccount() throws Throwable {
769184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler        final Context context = getInstrumentation().getContext();
770184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler        // Get the test account
771184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler        final Account currentAccount = getAccountForName(context, "account2@mockuiprovider.com");
772184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler
773184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler        // Create the mailto intent
774184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler        Intent intent = new Intent(context, ComposeActivity.class);
775184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler        intent.putExtra(ComposeActivity.EXTRA_FROM_EMAIL_TASK, true);
776184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler        intent.putExtra(ComposeActivity.EXTRA_ACTION, ComposeActivity.COMPOSE);
777184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler        intent.putExtra(Utils.EXTRA_ACCOUNT, currentAccount);
778184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler        intent.putExtra(ComposeActivity.EXTRA_TO, "test@localhost.com");
779184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler
780184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler        setActivityIntent(intent);
781184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler
782184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler        final ComposeActivity activity = getActivity();
783184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler        Account fromAccount = activity.getFromAccount();
784184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler
785184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler        runTestOnUiThread(new Runnable() {
786184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler            @Override
787184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler            public void run() {
788184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler                String[] to = activity.getToAddresses();
789184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler                String[] cc = activity.getCcAddresses();
790184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler                String[] bcc = activity.getBccAddresses();
791184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler                Account fromAccount = activity.getFromAccount();
792184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler                assertEquals( 1, to.length);
793184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler                assertEquals("test@localhost.com",
794184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler                        Rfc822Tokenizer.tokenize(to[0])[0].getAddress());
795184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler                assertEquals(0, cc.length);
796184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler                assertEquals(0, bcc.length);
797184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler                assertEquals("account2@mockuiprovider.com", fromAccount.getEmailAddress());
7986d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook            }
7996d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        });
8006d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    }
8016d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
8026d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    // Test a mailto VIEW Intent, with no account specified.  The fromAccount should default to the
8036d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    // last sent account.
8046d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    public void testMailToAccountWithLastSentAccount() throws Throwable {
8056d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Context context = getInstrumentation().getContext();
8066d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
8076d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        // Set the last sent account to account0
8086d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Account lastSentAccount = getAccountForName(context, "account1@mockuiprovider.com");
8096d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        MailAppProvider appProvider = MailAppProvider.getInstance();
8106d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        appProvider.setLastSentFromAccount(lastSentAccount.uri.toString());
8116d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
8126d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        // Create the mailto intent
8136d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Intent mailtoIntent =
8146d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                new Intent(Intent.ACTION_VIEW, Uri.parse("mailto:test@localhost.com"));
8156d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
8166d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        setActivityIntent(mailtoIntent);
8176d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
8186d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final ComposeActivity activity = getActivity();
8196d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        Account fromAccount = activity.getFromAccount();
8206d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
8216d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        runTestOnUiThread(new Runnable() {
8226d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook            @Override
8236d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook            public void run() {
8246d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                String[] to = activity.getToAddresses();
8256d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                String[] cc = activity.getCcAddresses();
8266d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                String[] bcc = activity.getBccAddresses();
8276d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                Account fromAccount = activity.getFromAccount();
8286d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                assertEquals( 1, to.length);
8296d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                assertEquals("test@localhost.com",
8306d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                        Rfc822Tokenizer.tokenize(to[0])[0].getAddress());
8316d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                assertEquals(0, cc.length);
8326d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                assertEquals(0, bcc.length);
833184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler                assertEquals("account1@mockuiprovider.com", fromAccount.getEmailAddress());
8346d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook            }
8356d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        });
8366d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    }
8376d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
8389e2d407fdafeb874e640eb84017feaf784309075Scott Kennedy    private static String createAttachmentsJson() {
839bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira        Attachment attachment1 = new Attachment();
840bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira        attachment1.contentUri = Uri.parse("www.google.com");
8418750066b10f80e2a8080016973b3296d76d18266Mark Wei        attachment1.setContentType("img/jpeg");
8428750066b10f80e2a8080016973b3296d76d18266Mark Wei        attachment1.setName("attachment1");
843bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira        Attachment attachment2 = new Attachment();
844bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira        attachment2.contentUri = Uri.parse("www.google.com");
8458750066b10f80e2a8080016973b3296d76d18266Mark Wei        attachment2.setContentType("img/jpeg");
8468750066b10f80e2a8080016973b3296d76d18266Mark Wei        attachment2.setName("attachment2");
847bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira        JSONArray attachments = new JSONArray();
848bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira        try {
849bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira            attachments.put(attachment1.toJSON());
850bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira            attachments.put(attachment2.toJSON());
851bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira        } catch (JSONException e) {
852bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira            assertTrue(false);
853bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira        }
854bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira        return attachments.toString();
855bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira    }
856bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira
857b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira    // First test: switch reply to reply all to fwd, 1 to recipient, 1 cc recipient.
8586d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    public void testChangeModes0() throws Throwable {
8596d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final ComposeActivity activity = getActivity();
8606d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        setAccount(activity, "account0@mockuiprovider.com");
8616d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Message refMessage = getRefMessage(activity.getContentResolver());
8628960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy        refMessage.setFrom("fromaccount@mockuiprovider.com");
8638960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy        refMessage.setTo("account0@mockuiprovider.com");
8648960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy        refMessage.setCc("ccaccount@mockuiprovider.com");
8656d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        runTestOnUiThread(new Runnable() {
8668750066b10f80e2a8080016973b3296d76d18266Mark Wei            @Override
867b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira            public void run() {
868b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                activity.mRefMessage = refMessage;
869ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy                activity.initReplyRecipients(refMessage, ComposeActivity.REPLY);
870b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                String[] to = activity.getToAddresses();
871b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                String[] cc = activity.getCcAddresses();
872b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                String[] bcc = activity.getBccAddresses();
87365b06f52e5b6336493388923be88bdd2ded4e1d1mindyp                assertEquals(1, to.length);
8748960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy                assertTrue(to[0].contains(refMessage.getFrom()));
875b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                assertEquals(cc.length, 0);
876b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                assertEquals(bcc.length, 0);
877b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                activity.onNavigationItemSelected(1, ComposeActivity.REPLY_ALL);
878b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                assertEquals(activity.getToAddresses().length, 1);
8798960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy                assertTrue(activity.getToAddresses()[0].contains(refMessage.getFrom()));
880b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                assertEquals(activity.getCcAddresses().length, 1);
8818960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy                assertTrue(activity.getCcAddresses()[0].contains(refMessage.getCc()));
882b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                assertEquals(activity.getBccAddresses().length, 0);
883b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                activity.onNavigationItemSelected(2, ComposeActivity.FORWARD);
884bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira                assertEquals(activity.getToAddresses().length, 0);
885bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira                assertEquals(activity.getCcAddresses().length, 0);
886bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira                assertEquals(activity.getBccAddresses().length, 0);
887b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira            }
888b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira        });
889b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira    }
890b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira
891bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira    // Switch reply to reply all to fwd, 2 to recipients, 1 cc recipient.
8926d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    public void testChangeModes1() throws Throwable {
8936d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final ComposeActivity activity = getActivity();
8946d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        setAccount(activity, "account0@mockuiprovider.com");
8956d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Message refMessage = getRefMessage(activity.getContentResolver());
8968960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy        refMessage.setFrom("fromaccount@mockuiprovider.com");
8978960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy        refMessage.setTo("account0@mockuiprovider.com, toaccount0@mockuiprovider.com");
8988960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy        refMessage.setCc("ccaccount@mockuiprovider.com");
8996d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        runTestOnUiThread(new Runnable() {
9008750066b10f80e2a8080016973b3296d76d18266Mark Wei            @Override
901b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira            public void run() {
902b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                activity.mRefMessage = refMessage;
903ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy                activity.initReplyRecipients(refMessage, ComposeActivity.REPLY);
904b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                String[] to = activity.getToAddresses();
905b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                String[] cc = activity.getCcAddresses();
906b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                String[] bcc = activity.getBccAddresses();
907b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                assertEquals(to.length, 1);
9088960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy                assertTrue(to[0].contains(refMessage.getFrom()));
909b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                assertEquals(cc.length, 0);
910b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                assertEquals(bcc.length, 0);
911b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                activity.onNavigationItemSelected(1, ComposeActivity.REPLY_ALL);
912b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                assertEquals(activity.getToAddresses().length, 1);
9138960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy                assertTrue(activity.getToAddresses()[0].contains(refMessage.getFrom()));
914b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                assertEquals(activity.getCcAddresses().length, 2);
9158960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy                assertTrue(activity.getCcAddresses()[0].contains(refMessage.getCc())
9168960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy                        || activity.getCcAddresses()[1].contains(refMessage.getCc()));
917b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                assertTrue(activity.getCcAddresses()[0].contains("toaccount0@mockuiprovider.com")
918b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                        || activity.getCcAddresses()[1]
9196d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                        .contains("toaccount0@mockuiprovider.com"));
920b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                assertEquals(activity.getBccAddresses().length, 0);
921b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                activity.onNavigationItemSelected(2, ComposeActivity.FORWARD);
922bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira                assertEquals(activity.getToAddresses().length, 0);
923bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira                assertEquals(activity.getCcAddresses().length, 0);
924bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira                assertEquals(activity.getBccAddresses().length, 0);
925b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira            }
926b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira        });
927b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira    }
928b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira
929bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira    // Switch reply to reply all to fwd, 2 to recipients, 2 cc recipients.
9306d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    public void testChangeModes2() throws Throwable {
9316d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final ComposeActivity activity = getActivity();
9326d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        setAccount(activity, "account0@mockuiprovider.com");
9336d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Message refMessage = getRefMessage(activity.getContentResolver());
9348960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy        refMessage.setFrom("fromaccount@mockuiprovider.com");
9358960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy        refMessage.setTo("account0@mockuiprovider.com, toaccount0@mockuiprovider.com");
9368960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy        refMessage.setCc("ccaccount@mockuiprovider.com, ccaccount2@mockuiprovider.com");
9376d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        runTestOnUiThread(new Runnable() {
9388750066b10f80e2a8080016973b3296d76d18266Mark Wei            @Override
939b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira            public void run() {
940b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                activity.mRefMessage = refMessage;
941ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy                activity.initReplyRecipients(refMessage, ComposeActivity.REPLY);
942b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                String[] to = activity.getToAddresses();
943b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                String[] cc = activity.getCcAddresses();
944b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                String[] bcc = activity.getBccAddresses();
945b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                assertEquals(to.length, 1);
9468960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy                assertTrue(to[0].contains(refMessage.getFrom()));
947b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                assertEquals(cc.length, 0);
948b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                assertEquals(bcc.length, 0);
949b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                activity.onNavigationItemSelected(1, ComposeActivity.REPLY_ALL);
950b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                assertEquals(activity.getToAddresses().length, 1);
9518960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy                assertTrue(activity.getToAddresses()[0].contains(refMessage.getFrom()));
952b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                assertEquals(activity.getCcAddresses().length, 3);
953b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                assertTrue(activity.getCcAddresses()[0].contains("ccaccount@mockuiprovider.com")
954b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                        || activity.getCcAddresses()[1].contains("ccaccount@mockuiprovider.com")
955b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                        || activity.getCcAddresses()[2].contains("ccaccount@mockuiprovider.com"));
956b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                assertTrue(activity.getCcAddresses()[0].contains("ccaccount2@mockuiprovider.com")
957b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                        || activity.getCcAddresses()[1].contains("ccaccount2@mockuiprovider.com")
958b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                        || activity.getCcAddresses()[2].contains("ccaccount2@mockuiprovider.com"));
959b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                assertTrue(activity.getCcAddresses()[0].contains("toaccount0@mockuiprovider.com")
960bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira                        || activity.getCcAddresses()[1].contains("toaccount0@mockuiprovider.com")
961bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira                        || activity.getCcAddresses()[2].contains("toaccount0@mockuiprovider.com"));
962b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                assertTrue(activity.getCcAddresses()[0].contains("toaccount0@mockuiprovider.com")
963b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                        || activity.getCcAddresses()[1]
9646d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                        .contains("toaccount0@mockuiprovider.com")
965b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                        || activity.getCcAddresses()[2]
9666d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                        .contains("toaccount0@mockuiprovider.com"));
967b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                assertEquals(activity.getBccAddresses().length, 0);
968b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira                activity.onNavigationItemSelected(2, ComposeActivity.FORWARD);
969bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira                assertEquals(activity.getToAddresses().length, 0);
970bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira                assertEquals(activity.getCcAddresses().length, 0);
971bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira                assertEquals(activity.getBccAddresses().length, 0);
972bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira            }
973bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira        });
974bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira    }
975bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira
976bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira    // Switch reply to reply all to fwd, 2 attachments.
9776d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    public void testChangeModes3() throws Throwable {
9786d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final ComposeActivity activity = getActivity();
9796d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        setAccount(activity, "account0@mockuiprovider.com");
9806d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Message refMessage = getRefMessage(activity.getContentResolver());
981bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira        refMessage.hasAttachments = true;
982bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira        refMessage.attachmentsJson = createAttachmentsJson();
9836d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        runTestOnUiThread(new Runnable() {
9848750066b10f80e2a8080016973b3296d76d18266Mark Wei            @Override
985bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira            public void run() {
986bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira                activity.mRefMessage = refMessage;
987bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira                activity.initAttachments(refMessage);
988bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira                assertEquals(activity.getAttachments().size(), 2);
989bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira                activity.onNavigationItemSelected(1, ComposeActivity.REPLY);
990bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira                assertEquals(activity.getAttachments().size(), 0);
991bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira                activity.onNavigationItemSelected(1, ComposeActivity.REPLY_ALL);
992bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira                assertEquals(activity.getAttachments().size(), 0);
993bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira                activity.onNavigationItemSelected(2, ComposeActivity.FORWARD);
994bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira                assertEquals(activity.getAttachments().size(), 2);
995b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira            }
996b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira        });
997b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira    }
998818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira}
999