316 lines
9.5 KiB
Java
316 lines
9.5 KiB
Java
/*
|
|
* Copyright (C) 2011 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package com.android.email.activity;
|
|
|
|
import com.android.email.DBTestHelper;
|
|
import com.android.email.provider.ProviderTestUtils;
|
|
import com.android.emailcommon.provider.Account;
|
|
import com.android.emailcommon.provider.Mailbox;
|
|
|
|
import android.content.Context;
|
|
import android.test.AndroidTestCase;
|
|
|
|
/**
|
|
* Unit tests for {@link MailboxListFragment.FindParentMailboxTask}.
|
|
*/
|
|
public class FindParentMailboxTaskTest extends AndroidTestCase {
|
|
private Context mProviderContext;
|
|
|
|
/** ID of the account created by {@link #setUpMailboxes}. */
|
|
private long mAccountId;
|
|
|
|
/**
|
|
* IDs for the mailboxes created by {@link #setUpMailboxes}.
|
|
*
|
|
* Mailbox hierarchy:
|
|
* <pre>
|
|
* |-Inbox
|
|
* |-Parent
|
|
* |-Child1
|
|
* |-Child2
|
|
* |-GrandChild1
|
|
* |-GrandChild2
|
|
* </pre>
|
|
*/
|
|
private long mIdInbox;
|
|
private long mIdParent;
|
|
private long mIdChild1;
|
|
private long mIdChild2;
|
|
private long mIdGrandChild1;
|
|
private long mIdGrandChild2;
|
|
|
|
@Override
|
|
protected void setUp() throws Exception {
|
|
super.setUp();
|
|
|
|
mProviderContext = DBTestHelper.ProviderContextSetupHelper.getProviderContext(
|
|
getContext());
|
|
setUpMailboxes();
|
|
}
|
|
|
|
/**
|
|
* Set up a test account and mailboxes.
|
|
*/
|
|
private void setUpMailboxes() {
|
|
Account a = ProviderTestUtils.setupAccount("a", true, mProviderContext);
|
|
mAccountId = a.mId;
|
|
|
|
mIdInbox = createMailboxAndGetId("Inbox", a, Mailbox.TYPE_INBOX, Mailbox.NO_MAILBOX);
|
|
mIdParent = createMailboxAndGetId("P", a, Mailbox.TYPE_MAIL, Mailbox.NO_MAILBOX);
|
|
mIdChild1 = createMailboxAndGetId("C1", a, Mailbox.TYPE_MAIL, mIdParent);
|
|
mIdChild2 = createMailboxAndGetId("C2", a, Mailbox.TYPE_MAIL, mIdParent);
|
|
mIdGrandChild1 = createMailboxAndGetId("G1", a, Mailbox.TYPE_MAIL, mIdChild2);
|
|
mIdGrandChild2 = createMailboxAndGetId("G2", a, Mailbox.TYPE_MAIL, mIdChild2);
|
|
}
|
|
|
|
private long createMailboxAndGetId(String name, Account account, int type,
|
|
long parentMailboxId) {
|
|
Mailbox m = ProviderTestUtils.setupMailbox(name, account.mId, false, mProviderContext,
|
|
type);
|
|
m.mParentKey = parentMailboxId;
|
|
m.save(mProviderContext);
|
|
return m.mId;
|
|
}
|
|
|
|
/**
|
|
* Tests for two-pane. (highlighting is enabled)
|
|
*/
|
|
public void testWithHighlight() {
|
|
/*
|
|
* In the comments below, [MAILBOX] indicates "highlighted", and MAILBOX* indicates
|
|
* "selected".
|
|
*/
|
|
/*
|
|
* from:
|
|
* - [Child2]
|
|
* - GChild1
|
|
* - GChild2
|
|
*
|
|
* to:
|
|
* - Parent
|
|
* - Child1
|
|
* - [Child2]*
|
|
*/
|
|
doCheckWithHighlight(
|
|
mIdChild2, // Current parent
|
|
mIdChild2, // Current highlighted
|
|
|
|
mIdParent, // Next root
|
|
mIdChild2, // Next highlighted
|
|
mIdChild2 // Next selected
|
|
);
|
|
|
|
/*
|
|
* from:
|
|
* - Child2
|
|
* - [GChild1]
|
|
* - GChild2
|
|
*
|
|
* to:
|
|
* - [Parent]*
|
|
* - Child1
|
|
* - Child2
|
|
*/
|
|
doCheckWithHighlight(
|
|
mIdChild2, // Current parent
|
|
mIdGrandChild1, // Current highlighted
|
|
|
|
mIdParent, // Next root
|
|
mIdParent, // Next highlighted
|
|
mIdParent // Next selected
|
|
);
|
|
|
|
/*
|
|
* from:
|
|
* - [Parent]
|
|
* - Child1
|
|
* - Child2
|
|
*
|
|
* to:
|
|
* - Inbox
|
|
* - [Parent]*
|
|
*/
|
|
doCheckWithHighlight(
|
|
mIdParent, // Current parent
|
|
mIdParent, // Current highlighted
|
|
|
|
Mailbox.NO_MAILBOX, // Next root
|
|
mIdParent, // Next highlighted
|
|
mIdParent // Next selected
|
|
);
|
|
|
|
/*
|
|
* from:
|
|
* - Parent
|
|
* - [Child1]
|
|
* - Child2
|
|
*
|
|
* to:
|
|
* - [Inbox]*
|
|
* - Parent
|
|
*/
|
|
doCheckWithHighlight(
|
|
mIdParent, // Current parent
|
|
mIdChild1, // Current highlighted
|
|
|
|
Mailbox.NO_MAILBOX, // Next root
|
|
mIdInbox, // Next highlighted
|
|
mIdInbox // Next selected
|
|
);
|
|
|
|
/*
|
|
* Special case.
|
|
* Up from root view, with "Parent" highlighted. "Up" will be disabled in this case, but
|
|
* if we were to run the task, it'd work as if the current parent mailbox is gone.
|
|
* i.e. just show the top level mailboxes, with Inbox highlighted.
|
|
*
|
|
* from:
|
|
* - Inbox
|
|
* - [Parent]
|
|
*
|
|
* to:
|
|
* - [Inbox]
|
|
* - Parent
|
|
*/
|
|
doCheckWithHighlight(
|
|
Mailbox.NO_MAILBOX, // Current parent
|
|
mIdParent, // Current highlighted
|
|
|
|
Mailbox.NO_MAILBOX, // Next root
|
|
mIdInbox, // Next highlighted
|
|
mIdInbox // Next selected
|
|
);
|
|
|
|
/*
|
|
* Special case.
|
|
* Current parent mailbox is gone. The result should be same as the above.
|
|
*
|
|
* from:
|
|
* (current mailbox just removed)
|
|
*
|
|
* to:
|
|
* - [Inbox]
|
|
* - Parent
|
|
*/
|
|
doCheckWithHighlight(
|
|
12312234234L, // Current parent
|
|
mIdParent, // Current highlighted
|
|
|
|
Mailbox.NO_MAILBOX, // Next root
|
|
mIdInbox, // Next highlighted
|
|
mIdInbox // Next selected
|
|
);
|
|
}
|
|
|
|
private void doCheckWithHighlight(
|
|
long parentMailboxId, long highlightedMailboxId,
|
|
long expectedNextParent, long expectedNextHighlighted, long expectedNextSelected) {
|
|
doCheck(true, parentMailboxId, highlightedMailboxId,
|
|
expectedNextParent, expectedNextHighlighted, expectedNextSelected);
|
|
}
|
|
|
|
/**
|
|
* Tests for one-pane. (highlighting is disable)
|
|
*/
|
|
public void testWithNoHighlight() {
|
|
/*
|
|
* from:
|
|
* - Child2
|
|
* - GChild1
|
|
* - GChild2
|
|
*
|
|
* to:
|
|
* - Parent
|
|
* - Child1
|
|
* - Child2
|
|
*/
|
|
doCheckWithNoHighlight(
|
|
mIdChild2, // Current parent
|
|
mIdParent // Next root
|
|
);
|
|
/*
|
|
* from:
|
|
* - Parent
|
|
* - Child1
|
|
* - Child2
|
|
*
|
|
* to:
|
|
* - Inbox
|
|
* - Parent
|
|
*/
|
|
doCheckWithNoHighlight(
|
|
mIdParent, // Current parent
|
|
Mailbox.NO_MAILBOX // Next root
|
|
);
|
|
|
|
/*
|
|
* Special case.
|
|
* Current parent mailbox is gone. The top-level mailboxes should be shown.
|
|
*
|
|
* from:
|
|
* (current mailbox just removed)
|
|
*
|
|
* to:
|
|
* - Inbox
|
|
* - Parent
|
|
*/
|
|
doCheckWithNoHighlight(
|
|
12312234234L, // Current parent
|
|
Mailbox.NO_MAILBOX // Next root
|
|
);
|
|
}
|
|
|
|
private void doCheckWithNoHighlight(long parentMailboxId, long expectedNextParent) {
|
|
doCheck(false, parentMailboxId, Mailbox.NO_MAILBOX,
|
|
expectedNextParent, Mailbox.NO_MAILBOX,
|
|
expectedNextParent /* parent should always be selected */);
|
|
}
|
|
|
|
private void doCheck(boolean enableHighlight,
|
|
long parentMailboxId, long highlightedMailboxId,
|
|
long expectedNextParent, long expectedNextHighlighted, long expectedNextSelected) {
|
|
ResultCallback result = new ResultCallback();
|
|
|
|
MailboxListFragment.FindParentMailboxTask task
|
|
= new MailboxListFragment.FindParentMailboxTask(
|
|
mProviderContext, null, mAccountId, enableHighlight, parentMailboxId,
|
|
highlightedMailboxId, result);
|
|
|
|
// Can't execute an async task on the test thread, so emulate execution...
|
|
task.onSuccess(task.doInBackground((Void[]) null));
|
|
|
|
assertEquals("parent", expectedNextParent, result.mNextParentMailboxId);
|
|
assertEquals("highlighted", expectedNextHighlighted, result.mNextHighlightedMailboxId);
|
|
assertEquals("selected", expectedNextSelected, result.mNextSelectedMailboxId);
|
|
}
|
|
|
|
private static class ResultCallback
|
|
implements MailboxListFragment.FindParentMailboxTask.ResultCallback {
|
|
public long mNextParentMailboxId;
|
|
public long mNextHighlightedMailboxId;
|
|
public long mNextSelectedMailboxId;
|
|
|
|
@Override
|
|
public void onResult(long nextParentMailboxId, long nextHighlightedMailboxId,
|
|
long nextSelectedMailboxId) {
|
|
mNextParentMailboxId = nextParentMailboxId;
|
|
mNextHighlightedMailboxId = nextHighlightedMailboxId;
|
|
mNextSelectedMailboxId = nextSelectedMailboxId;
|
|
}
|
|
}
|
|
}
|