1844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki/*
2844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki * Copyright (C) 2011 The Android Open Source Project
3844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki *
4844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki * Licensed under the Apache License, Version 2.0 (the "License");
5844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki * you may not use this file except in compliance with the License.
6844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki * You may obtain a copy of the License at
7844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki *
8844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki *      http://www.apache.org/licenses/LICENSE-2.0
9844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki *
10844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki * Unless required by applicable law or agreed to in writing, software
11844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki * distributed under the License is distributed on an "AS IS" BASIS,
12844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki * See the License for the specific language governing permissions and
14844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki * limitations under the License.
15844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki */
16844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
17844bf745044b4564f42a68f8b7d40105c4def294Makoto Onukipackage com.android.email.activity;
18844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
19844bf745044b4564f42a68f8b7d40105c4def294Makoto Onukiimport com.android.email.DBTestHelper;
20844bf745044b4564f42a68f8b7d40105c4def294Makoto Onukiimport com.android.email.provider.ProviderTestUtils;
21f5418f1f93b02e7fab9f15eb201800b65510998eMarc Blankimport com.android.emailcommon.provider.Account;
22844bf745044b4564f42a68f8b7d40105c4def294Makoto Onukiimport com.android.emailcommon.provider.Mailbox;
23844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
24844bf745044b4564f42a68f8b7d40105c4def294Makoto Onukiimport android.content.Context;
25844bf745044b4564f42a68f8b7d40105c4def294Makoto Onukiimport android.test.AndroidTestCase;
26844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
27844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki/**
28844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki * Unit tests for {@link MailboxListFragment.FindParentMailboxTask}.
29844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki */
30844bf745044b4564f42a68f8b7d40105c4def294Makoto Onukipublic class FindParentMailboxTaskTest extends AndroidTestCase {
31844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    private Context mProviderContext;
32844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
33844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    /** ID of the account created by {@link #setUpMailboxes}. */
34844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    private long mAccountId;
35844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
36844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    /**
37844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki     * IDs for the mailboxes created by {@link #setUpMailboxes}.
38844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki     *
39844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki     * Mailbox hierarchy:
40844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki     * <pre>
41844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki     * |-Inbox
42844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki     * |-Parent
43844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki     *   |-Child1
44844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki     *   |-Child2
45844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki     *     |-GrandChild1
46844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki     *     |-GrandChild2
47844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki     * </pre>
48844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki     */
49844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    private long mIdInbox;
50844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    private long mIdParent;
51844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    private long mIdChild1;
52844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    private long mIdChild2;
53844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    private long mIdGrandChild1;
54844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    private long mIdGrandChild2;
55844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
56844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    @Override
57844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    protected void setUp() throws Exception {
58844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        super.setUp();
59844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
60844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        mProviderContext = DBTestHelper.ProviderContextSetupHelper.getProviderContext(
61844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                getContext());
62844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        setUpMailboxes();
63844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    }
64844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
65844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    /**
66844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki     * Set up a test account and mailboxes.
67844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki     */
68844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    private void setUpMailboxes() {
69844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        Account a = ProviderTestUtils.setupAccount("a", true, mProviderContext);
70844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        mAccountId = a.mId;
71844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
72844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        mIdInbox = createMailboxAndGetId("Inbox", a, Mailbox.TYPE_INBOX, Mailbox.NO_MAILBOX);
73844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        mIdParent = createMailboxAndGetId("P", a, Mailbox.TYPE_MAIL, Mailbox.NO_MAILBOX);
74844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        mIdChild1 = createMailboxAndGetId("C1", a, Mailbox.TYPE_MAIL, mIdParent);
75844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        mIdChild2 = createMailboxAndGetId("C2", a, Mailbox.TYPE_MAIL, mIdParent);
76844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        mIdGrandChild1 = createMailboxAndGetId("G1", a, Mailbox.TYPE_MAIL, mIdChild2);
77844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        mIdGrandChild2 = createMailboxAndGetId("G2", a, Mailbox.TYPE_MAIL, mIdChild2);
78844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    }
79844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
80844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    private long createMailboxAndGetId(String name, Account account, int type,
81844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki            long parentMailboxId) {
82844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        Mailbox m = ProviderTestUtils.setupMailbox(name, account.mId, false, mProviderContext,
83844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                type);
84844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        m.mParentKey = parentMailboxId;
85844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        m.save(mProviderContext);
86844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        return m.mId;
87844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    }
88844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
89844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    /**
90844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki     * Tests for two-pane.  (highlighting is enabled)
91844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki     */
92844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    public void testWithHighlight() {
93844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        /*
94844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * In the comments below, [MAILBOX] indicates "highlighted", and MAILBOX* indicates
95844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * "selected".
96844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         */
97844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        /*
98844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * from:
99844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * - [Child2]
100844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *   - GChild1
101844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *   - GChild2
102844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *
103844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * to:
104844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * - Parent
105844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *   - Child1
106844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *   - [Child2]*
107844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         */
108844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        doCheckWithHighlight(
109844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                mIdChild2, // Current parent
110844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                mIdChild2, // Current highlighted
111844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
112844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                mIdParent, // Next root
113844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                mIdChild2, // Next highlighted
114844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                mIdChild2 // Next selected
115844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                );
116844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
117844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        /*
118844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * from:
119844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * - Child2
120844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *   - [GChild1]
121844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *   - GChild2
122844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *
123844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * to:
124844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * - [Parent]*
125844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *   - Child1
126844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *   - Child2
127844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         */
128844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        doCheckWithHighlight(
129844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                mIdChild2, // Current parent
130844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                mIdGrandChild1, // Current highlighted
131844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
132844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                mIdParent, // Next root
133844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                mIdParent, // Next highlighted
134844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                mIdParent // Next selected
135844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                );
136844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
137844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        /*
138844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * from:
139844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * - [Parent]
140844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *   - Child1
141844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *   - Child2
142844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *
143844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * to:
144844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * - Inbox
145844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * - [Parent]*
146844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         */
147844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        doCheckWithHighlight(
148844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                mIdParent, // Current parent
149844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                mIdParent, // Current highlighted
150844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
151844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                Mailbox.NO_MAILBOX, // Next root
152844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                mIdParent, // Next highlighted
153844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                mIdParent // Next selected
154844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                );
155844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
156844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        /*
157844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * from:
158844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * - Parent
159844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *   - [Child1]
160844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *   - Child2
161844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *
162844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * to:
163844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * - [Inbox]*
164844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * - Parent
165844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         */
166844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        doCheckWithHighlight(
167844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                mIdParent, // Current parent
168844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                mIdChild1, // Current highlighted
169844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
170844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                Mailbox.NO_MAILBOX, // Next root
171844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                mIdInbox, // Next highlighted
172844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                mIdInbox // Next selected
173844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                );
174844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
175844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        /*
176844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * Special case.
177844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * Up from root view, with "Parent" highlighted.  "Up" will be disabled in this case, but
178844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * if we were to run the task, it'd work as if the current parent mailbox is gone.
179844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * i.e. just show the top level mailboxes, with Inbox highlighted.
180844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *
181844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * from:
182844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * - Inbox
183844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * - [Parent]
184844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *
185844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * to:
186844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * - [Inbox]
187844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * - Parent
188844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         */
189844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        doCheckWithHighlight(
190844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                Mailbox.NO_MAILBOX, // Current parent
191844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                mIdParent, // Current highlighted
192844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
193844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                Mailbox.NO_MAILBOX, // Next root
194844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                mIdInbox, // Next highlighted
195844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                mIdInbox // Next selected
196844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                );
197844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
198844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        /*
199844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * Special case.
200844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * Current parent mailbox is gone.  The result should be same as the above.
201844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *
202844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * from:
203844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *  (current mailbox just removed)
204844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *
205844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * to:
206844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * - [Inbox]
207844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * - Parent
208844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         */
209844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        doCheckWithHighlight(
210844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                12312234234L, // Current parent
211844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                mIdParent, // Current highlighted
212844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
213844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                Mailbox.NO_MAILBOX, // Next root
214844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                mIdInbox, // Next highlighted
215844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                mIdInbox // Next selected
216844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                );
217844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    }
218844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
219844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    private void doCheckWithHighlight(
220844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki            long parentMailboxId, long highlightedMailboxId,
221844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki            long expectedNextParent, long expectedNextHighlighted, long expectedNextSelected) {
222844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        doCheck(true, parentMailboxId, highlightedMailboxId,
223844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                expectedNextParent, expectedNextHighlighted, expectedNextSelected);
224844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    }
225844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
226844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    /**
227844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki     * Tests for one-pane.  (highlighting is disable)
228844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki     */
229844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    public void testWithNoHighlight() {
230844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        /*
231844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * from:
232844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * - Child2
233844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *   - GChild1
234844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *   - GChild2
235844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *
236844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * to:
237844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * - Parent
238844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *   - Child1
239844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *   - Child2
240844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         */
241844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        doCheckWithNoHighlight(
242844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                mIdChild2, // Current parent
243844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                mIdParent // Next root
244844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                );
245844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        /*
246844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * from:
247844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * - Parent
248844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *   - Child1
249844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *   - Child2
250844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *
251844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * to:
252844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * - Inbox
253844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * - Parent
254844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         */
255844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        doCheckWithNoHighlight(
256844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                mIdParent, // Current parent
257844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                Mailbox.NO_MAILBOX // Next root
258844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                );
259844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
260844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        /*
261844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * Special case.
262844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * Current parent mailbox is gone.  The top-level mailboxes should be shown.
263844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *
264844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * from:
265844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *  (current mailbox just removed)
266844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         *
267844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * to:
268844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * - Inbox
269844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         * - Parent
270844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki         */
271844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        doCheckWithNoHighlight(
272844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                12312234234L, // Current parent
273844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                Mailbox.NO_MAILBOX // Next root
274844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                );
275844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    }
276844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
277844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    private void doCheckWithNoHighlight(long parentMailboxId, long expectedNextParent) {
278844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        doCheck(false, parentMailboxId, Mailbox.NO_MAILBOX,
279844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                expectedNextParent, Mailbox.NO_MAILBOX,
280844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                expectedNextParent /* parent should always be selected */);
281844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    }
282844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
283844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    private void doCheck(boolean enableHighlight,
284844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki            long parentMailboxId, long highlightedMailboxId,
285844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki            long expectedNextParent, long expectedNextHighlighted, long expectedNextSelected) {
286844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        ResultCallback result = new ResultCallback();
287844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
288844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        MailboxListFragment.FindParentMailboxTask task
289844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                = new MailboxListFragment.FindParentMailboxTask(
290844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                mProviderContext, null, mAccountId, enableHighlight, parentMailboxId,
291844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                highlightedMailboxId, result);
292844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
293844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        // Can't execute an async task on the test thread, so emulate execution...
29450d934360d51392ac2aa6f11de4d6e1446cf78c9Makoto Onuki        task.onSuccess(task.doInBackground((Void[]) null));
295844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
296844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        assertEquals("parent", expectedNextParent, result.mNextParentMailboxId);
297844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        assertEquals("highlighted", expectedNextHighlighted, result.mNextHighlightedMailboxId);
298844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        assertEquals("selected", expectedNextSelected, result.mNextSelectedMailboxId);
299844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    }
300844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
301844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    private static class ResultCallback
302844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki            implements MailboxListFragment.FindParentMailboxTask.ResultCallback {
303844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        public long mNextParentMailboxId;
304844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        public long mNextHighlightedMailboxId;
305844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        public long mNextSelectedMailboxId;
306844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki
307844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        @Override
308844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        public void onResult(long nextParentMailboxId, long nextHighlightedMailboxId,
309844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki                long nextSelectedMailboxId) {
310844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki            mNextParentMailboxId = nextParentMailboxId;
311844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki            mNextHighlightedMailboxId = nextHighlightedMailboxId;
312844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki            mNextSelectedMailboxId = nextSelectedMailboxId;
313844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki        }
314844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki    }
315844bf745044b4564f42a68f8b7d40105c4def294Makoto Onuki}
316