Make Mailbox parcelable

Also fix unit tests

Change-Id: I5f64f53b278b7bc27053d831760b155532a14e33
This commit is contained in:
Ben Komalo 2011-05-13 18:35:08 -07:00
parent 53ea83ebf9
commit e0bb7e7909
2 changed files with 121 additions and 9 deletions

View File

@ -27,11 +27,13 @@ import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.Log;
import java.security.InvalidParameterException;
public class Mailbox extends EmailContent implements SyncColumns, MailboxColumns {
public class Mailbox extends EmailContent implements SyncColumns, MailboxColumns, Parcelable {
public static final String TABLE_NAME = "Mailbox";
@SuppressWarnings("hiding")
public static final Uri CONTENT_URI = Uri.parse(EmailContent.CONTENT_URI + "/mailbox");
@ -470,4 +472,66 @@ public class Mailbox extends EmailContent implements SyncColumns, MailboxColumns
= mLastSeenMessageKey;
return hash;
}
// Parcelable
@Override
public int describeContents() {
return 0;
}
// Parcelable
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeParcelable(mBaseUri, flags);
dest.writeLong(mId);
dest.writeString(mDisplayName);
dest.writeString(mServerId);
dest.writeString(mParentServerId);
dest.writeLong(mParentKey);
dest.writeLong(mAccountKey);
dest.writeInt(mType);
dest.writeInt(mDelimiter);
dest.writeString(mSyncKey);
dest.writeInt(mSyncLookback);
dest.writeInt(mSyncInterval);
dest.writeLong(mSyncTime);
dest.writeInt(mFlagVisible ? 1 : 0);
dest.writeInt(mFlags);
dest.writeInt(mVisibleLimit);
dest.writeString(mSyncStatus);
dest.writeLong(mLastSeenMessageKey);
}
public Mailbox(Parcel in) {
mBaseUri = in.readParcelable(null);
mId = in.readLong();
mDisplayName = in.readString();
mServerId = in.readString();
mParentServerId = in.readString();
mParentKey = in.readLong();
mAccountKey = in.readLong();
mType = in.readInt();
mDelimiter = in.readInt();
mSyncKey = in.readString();
mSyncLookback = in.readInt();
mSyncInterval = in.readInt();
mSyncTime = in.readLong();
mFlagVisible = in.readInt() == 1;
mFlags = in.readInt();
mVisibleLimit = in.readInt();
mSyncStatus = in.readString();
mLastSeenMessageKey = in.readLong();
}
public static final Parcelable.Creator<Mailbox> CREATOR = new Parcelable.Creator<Mailbox>() {
@Override
public Mailbox createFromParcel(Parcel source) {
return new Mailbox(source);
}
@Override
public Mailbox[] newArray(int size) {
return new Mailbox[size];
}
};
}

View File

@ -29,10 +29,13 @@ import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.net.Uri;
import android.os.Parcel;
import android.test.MoreAsserts;
import android.test.ProviderTestCase2;
import android.test.suitebuilder.annotation.SmallTest;
import java.util.Arrays;
/**
* Unit tests for the Mailbox inner class.
* These tests must be locally complete - no server(s) required.
@ -495,14 +498,17 @@ public class MailboxTests extends ProviderTestCase2<EmailProvider> {
assertEquals(start + 1, Mailbox.restoreMailboxWithId(c, b1.mId).mSyncInterval);
}
public void testGetHashes() {
final Context c = mMockContext;
Mailbox testMailbox;
private Mailbox buildTestMailbox(String serverId) {
return buildTestMailbox(serverId, null);
}
testMailbox = new Mailbox();
testMailbox.mDisplayName = TEST_DISPLAY_NAME;
private Mailbox buildTestMailbox(String serverId, String name) {
name = (name == null) ? TEST_DISPLAY_NAME : name;
Mailbox testMailbox = new Mailbox();
testMailbox.mServerId = serverId;
testMailbox.mDisplayName = name;
testMailbox.mParentServerId = TEST_PARENT_SERVER_ID;
testMailbox.mServerId = TEST_SERVER_ID;
testMailbox.mSyncKey = TEST_SYNC_KEY;
testMailbox.mSyncStatus = TEST_SYNC_STATUS;
testMailbox.mAccountKey = 1L;
@ -515,6 +521,14 @@ public class MailboxTests extends ProviderTestCase2<EmailProvider> {
testMailbox.mSyncTime = 6L;
testMailbox.mType = 7;
testMailbox.mVisibleLimit = 8;
testMailbox.mLastSeenMessageKey = 9L;
return testMailbox;
}
public void testGetHashes() {
final Context c = mMockContext;
Mailbox testMailbox = buildTestMailbox(TEST_SERVER_ID);
testMailbox.save(c);
Object[] testHash;
@ -523,7 +537,7 @@ public class MailboxTests extends ProviderTestCase2<EmailProvider> {
TEST_PARENT_SERVER_ID, 1L /*mAccountKey*/, 7 /*mType */,
(int)'/' /*mDelimiter */, TEST_SYNC_KEY, 5 /*mSyncLookback*/,
4 /*mSyncInterval*/, 6L /*mSyncTime*/, true /*mFlagVisible*/, 2 /*mFlags*/,
8 /*mVisibleLimit*/, TEST_SYNC_STATUS, 3L /*mParentKey*/
8 /*mVisibleLimit*/, TEST_SYNC_STATUS, 3L /*mParentKey*/, 9L /*mLastSeen*/
};
MoreAsserts.assertEquals(testHash, testMailbox.getHashes());
@ -540,9 +554,43 @@ public class MailboxTests extends ProviderTestCase2<EmailProvider> {
null /*mParentServerId*/, 1L /*mAccountKey*/, 7 /*mType */,
(int)'/' /*mDelimiter */, null /*mSyncKey*/, 5 /*mSyncLookback*/,
4 /*mSyncInterval*/, 6L /*mSyncTime*/, false /*mFlagVisible*/, 2 /*mFlags*/,
8 /*mVisibleLimit*/, null /*mSyncStatus*/, 3L /*mParentKey*/
8 /*mVisibleLimit*/, null /*mSyncStatus*/, 3L /*mParentKey*/, 9L /*mLastSeen*/
};
MoreAsserts.assertEquals(testHash, testMailbox.getHashes());
}
public void testParcelling() {
Mailbox original = buildTestMailbox("serverId", "display name for mailbox");
Parcel p = Parcel.obtain();
original.writeToParcel(p, 0 /* flags */);
// Reset.
p.setDataPosition(0);
Mailbox unparcelled = Mailbox.CREATOR.createFromParcel(p);
MoreAsserts.assertEquals(original.getHashes(), unparcelled.getHashes());
Mailbox phony = buildTestMailbox("different ID", "display name for mailbox");
assertFalse(Arrays.equals(phony.getHashes(), unparcelled.getHashes()));
p.recycle();
}
public void testParcellingWithPartialMailbox() {
Mailbox unpopulated = new Mailbox();
unpopulated.mDisplayName = "the only thing filled in for some reason";
Parcel p = Parcel.obtain();
unpopulated.writeToParcel(p, 0 /* flags */);
// Reset.
p.setDataPosition(0);
Mailbox unparcelled = Mailbox.CREATOR.createFromParcel(p);
MoreAsserts.assertEquals(unpopulated.getHashes(), unparcelled.getHashes());
p.recycle();
}
}