replicant-packages_apps_Email/tests/src/com/android/email/activity/FindParentMailboxTaskTest.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;
}
}
}