ProviderTests.java revision 4119218e2fd64341ac946fb8f2cbdb796a444cb8
17143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler/* 27143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Copyright (C) 2009 The Android Open Source Project 37143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * 47143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Licensed under the Apache License, Version 2.0 (the "License"); 57143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * you may not use this file except in compliance with the License. 67143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * You may obtain a copy of the License at 77143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * 87143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * http://www.apache.org/licenses/LICENSE-2.0 97143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * 107143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Unless required by applicable law or agreed to in writing, software 117143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * distributed under the License is distributed on an "AS IS" BASIS, 127143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * See the License for the specific language governing permissions and 147143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * limitations under the License. 157143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 167143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 177143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerpackage com.android.email.provider; 187143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 19976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blankimport java.io.File; 20976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blankimport java.io.IOException; 21976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank 22976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blankimport java.util.ArrayList; 23976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank 247143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport com.android.email.provider.EmailContent.Account; 25976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blankimport com.android.email.provider.EmailContent.Attachment; 267143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport com.android.email.provider.EmailContent.Body; 277143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport com.android.email.provider.EmailContent.Mailbox; 287143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport com.android.email.provider.EmailContent.Message; 29ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadlerimport com.android.email.provider.EmailContent.MessageColumns; 307143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 31ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadlerimport android.content.ContentResolver; 327143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport android.content.ContentUris; 33ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadlerimport android.content.ContentValues; 347143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport android.content.Context; 357143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport android.database.Cursor; 367143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport android.net.Uri; 37976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blankimport android.os.Environment; 387143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerimport android.test.ProviderTestCase2; 397143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 407143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler/** 417143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Tests of the Email provider. 427143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * 437143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * You can run this entire test case with: 447143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * runtest -c com.android.email.provider.ProviderTests email 457143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 467143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadlerpublic class ProviderTests extends ProviderTestCase2<EmailProvider> { 477143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 487143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler EmailProvider mProvider; 497143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Context mMockContext; 507143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 517143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public ProviderTests() { 527143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler super(EmailProvider.class, EmailProvider.EMAIL_AUTHORITY); 537143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 547143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 557143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler @Override 567143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void setUp() throws Exception { 577143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler super.setUp(); 587143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext = getMockContext(); 597143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 607143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 617143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler @Override 627143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void tearDown() throws Exception { 637143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler super.tearDown(); 647143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 657143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 667143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 677143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test simple account save/retrieve 687143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 697143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testAccountSave() { 7028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("account-save", true, mMockContext); 717143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 727143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 737143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Account account2 = EmailContent.Account.restoreAccountWithId(mMockContext, account1Id); 747143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 7528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler ProviderTestUtils.assertAccountEqual("testAccountSave", account1, account2); 767143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 777143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 787143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 797143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: HostAuth tests 807143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 817143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 827143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 837143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test simple mailbox save/retrieve 847143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 857143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testMailboxSave() { 8628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("mailbox-save", true, mMockContext); 877143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 8828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, 8928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler mMockContext); 907143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 917143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 927143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Mailbox box2 = EmailContent.Mailbox.restoreMailboxWithId(mMockContext, box1Id); 937143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 9428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler ProviderTestUtils.assertMailboxEqual("testMailboxSave", box1, box2); 957143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 967143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 974119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler private static String[] expectedAttachmentNames = 98976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank new String[] {"attachment1.doc", "attachment2.xls", "attachment3"}; 99976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // The lengths need to be kept in ascending order 1004119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler private static long[] expectedAttachmentSizes = new long[] {31415L, 97701L, 151213L}; 101976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank 1027143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 1037143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test simple message save/retrieve 1047143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * 1057143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: serverId vs. serverIntId 1067143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 1077143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testMessageSave() { 10828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("message-save", true, mMockContext); 1097143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 11028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 1117143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 1127143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 1137143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // Test a simple message (saved with no body) 11428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 11528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 1167143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long message1Id = message1.mId; 1177143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Message message1get = EmailContent.Message.restoreMessageWithId(mMockContext, message1Id); 11828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler ProviderTestUtils.assertMessageEqual("testMessageSave", message1, message1get); 1197143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 1207143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // Test a message saved with a body 1217143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // Note that it will read back w/o the text & html so we must extract those 12228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message2 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, true, 12328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 1247143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long message2Id = message2.mId; 1257143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String text2 = message2.mText; 1267143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String html2 = message2.mHtml; 1277143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler message2.mText = null; 1287143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler message2.mHtml = null; 1297143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Message message2get = EmailContent.Message.restoreMessageWithId(mMockContext, message2Id); 13028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler ProviderTestUtils.assertMessageEqual("testMessageSave", message2, message2get); 1317143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 1327143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // Now see if there's a body saved with the right stuff 1337143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // TODO it might make sense to add a function to restore the body with the message id 1347143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Cursor c = null; 1357143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler try { 1367143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler c = mMockContext.getContentResolver().query( 1377143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler EmailContent.Body.CONTENT_URI, 1387143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler EmailContent.Body.CONTENT_PROJECTION, 1397143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler EmailContent.Body.MESSAGE_KEY + "=?", 1407143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler new String[] { 1417143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String.valueOf(message2Id) 1427143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler }, 1437143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler null); 1447143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numBodies = c.getCount(); 1457143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numBodies); 1467143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler c.moveToFirst(); 1477143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Body body2 = EmailContent.getContent(c, Body.class); 1487143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals("body text", text2, body2.mTextContent); 1497143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals("body html", html2, body2.mHtmlContent); 1507143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } finally { 151976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank c.close(); 152976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 153976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank 1544119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Message with attachments and body 155976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank Message message3 = ProviderTestUtils.setupMessage("message3", account1Id, box1Id, true, 156976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank false, mMockContext); 157976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank ArrayList<Attachment> atts = new ArrayList<Attachment>(); 158976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank for (int i = 0; i < 3; i++) { 1594119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler atts.add(ProviderTestUtils.setupAttachment( 1604119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler -1, expectedAttachmentNames[i], expectedAttachmentSizes[i], 1614119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler false, mMockContext)); 162976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 163976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank message3.mAttachments = atts; 164976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank message3.saveOrUpdate(mMockContext); 165976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank long message3Id = message3.mId; 166976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank 167976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // Now check the attachments; there should be three and they should match name and size 168976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank c = null; 169976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank try { 170976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // Note that there is NO guarantee of the order of returned records in the general case, 171976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // so we specifically ask for ordering by size. The expectedAttachmentSizes array must 172976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // be kept sorted by size (ascending) for this test to work properly 173976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank c = mMockContext.getContentResolver().query( 174976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank Attachment.CONTENT_URI, 175976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank Attachment.CONTENT_PROJECTION, 176976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank Attachment.MESSAGE_KEY + "=?", 177976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank new String[] { 178976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank String.valueOf(message3Id) 179976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank }, 180976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank Attachment.SIZE); 181976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank int numAtts = c.getCount(); 182976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals(3, numAtts); 183976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank int i = 0; 184976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank while (c.moveToNext()) { 1854119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment actual = EmailContent.getContent(c, Attachment.class); 1864119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler ProviderTestUtils.assertAttachmentEqual("save-message3", atts.get(i), actual); 1874119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler i++; 1884119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } 1894119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } finally { 1904119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c.close(); 1914119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } 1924119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 1934119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Message with attachments but no body 1944119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Message message4 = ProviderTestUtils.setupMessage("message4", account1Id, box1Id, false, 1954119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler false, mMockContext); 1964119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler atts = new ArrayList<Attachment>(); 1974119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler for (int i = 0; i < 3; i++) { 1984119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler atts.add(ProviderTestUtils.setupAttachment( 1994119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler -1, expectedAttachmentNames[i], expectedAttachmentSizes[i], 2004119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler false, mMockContext)); 2014119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } 2024119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler message4.mAttachments = atts; 2034119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler message4.saveOrUpdate(mMockContext); 2044119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler long message4Id = message4.mId; 2054119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 2064119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Now check the attachments; there should be three and they should match name and size 2074119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c = null; 2084119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler try { 2094119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Note that there is NO guarantee of the order of returned records in the general case, 2104119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // so we specifically ask for ordering by size. The expectedAttachmentSizes array must 2114119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // be kept sorted by size (ascending) for this test to work properly 2124119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c = mMockContext.getContentResolver().query( 2134119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment.CONTENT_URI, 2144119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment.CONTENT_PROJECTION, 2154119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment.MESSAGE_KEY + "=?", 2164119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler new String[] { 2174119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler String.valueOf(message4Id) 2184119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler }, 2194119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment.SIZE); 2204119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler int numAtts = c.getCount(); 2214119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler assertEquals(3, numAtts); 2224119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler int i = 0; 2234119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler while (c.moveToNext()) { 2244119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment actual = EmailContent.getContent(c, Attachment.class); 2254119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler ProviderTestUtils.assertAttachmentEqual("save-message4", atts.get(i), actual); 226976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank i++; 227976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 228976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } finally { 229976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank c.close(); 2307143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 2317143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 2327143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 2337143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 2347143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: update account 2357143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 2367143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 2377143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 2387143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: update mailbox 2397143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 2407143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 2417143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 2427143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: update message 2437143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 2447143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 2457143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 2467143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test delete account 2477143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: hostauth 2487143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 2497143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testAccountDelete() { 25028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("account-delete-1", true, mMockContext); 2517143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 25228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account2 = ProviderTestUtils.setupAccount("account-delete-2", true, mMockContext); 2537143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account2Id = account2.mId; 2547143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 2557143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are two accounts 2567143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numBoxes = EmailContent.count(mMockContext, Account.CONTENT_URI, null, null); 2577143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(2, numBoxes); 2587143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 2597143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete one of them 2607143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Uri uri = ContentUris.withAppendedId(Account.CONTENT_URI, account1Id); 2617143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 2627143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 2637143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there's only one account now 2647143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numBoxes = EmailContent.count(mMockContext, Account.CONTENT_URI, null, null); 2657143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numBoxes); 2667143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 2677143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete the other one 2687143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler uri = ContentUris.withAppendedId(Account.CONTENT_URI, account2Id); 2697143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 2707143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 2717143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are no accounts now 2727143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numBoxes = EmailContent.count(mMockContext, Account.CONTENT_URI, null, null); 2737143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numBoxes); 2747143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 2757143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 2767143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 2777143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test delete mailbox 2787143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 2797143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testMailboxDelete() { 28028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("mailbox-delete", true, mMockContext); 2817143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 28228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 2837143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 28428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box2 = ProviderTestUtils.setupMailbox("box2", account1Id, true, mMockContext); 2857143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box2Id = box2.mId; 2867143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 2877143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String selection = EmailContent.MailboxColumns.ACCOUNT_KEY + "=?"; 2887143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String[] selArgs = new String[] { String.valueOf(account1Id) }; 2897143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 2907143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are two mailboxes 2917143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numBoxes = EmailContent.count(mMockContext, Mailbox.CONTENT_URI, selection, selArgs); 2927143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(2, numBoxes); 2937143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 2947143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete one of them 2957143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Uri uri = ContentUris.withAppendedId(Mailbox.CONTENT_URI, box1Id); 2967143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 2977143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 2987143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there's only one mailbox now 2997143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numBoxes = EmailContent.count(mMockContext, Mailbox.CONTENT_URI, selection, selArgs); 3007143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numBoxes); 3017143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3027143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete the other one 3037143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler uri = ContentUris.withAppendedId(Mailbox.CONTENT_URI, box2Id); 3047143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 3057143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3067143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are no mailboxes now 3077143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numBoxes = EmailContent.count(mMockContext, Mailbox.CONTENT_URI, selection, selArgs); 3087143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numBoxes); 3097143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 3107143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3117143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 3127143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test delete message 3137143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: body 3147143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: attachments 3157143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 3167143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testMessageDelete() { 31728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("message-delete", true, mMockContext); 3187143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 31928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 3207143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 32128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 32228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 3237143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long message1Id = message1.mId; 32428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message2 = ProviderTestUtils.setupMessage("message2", account1Id, box1Id, false, 32528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 3267143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long message2Id = message2.mId; 3277143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3287143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String selection = EmailContent.MessageColumns.ACCOUNT_KEY + "=? AND " + 3297143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler EmailContent.MessageColumns.MAILBOX_KEY + "=?"; 3307143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String[] selArgs = new String[] { String.valueOf(account1Id), String.valueOf(box1Id) }; 3317143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3327143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are two messages 3337143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 3347143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(2, numMessages); 3357143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3367143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete one of them 3377143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Uri uri = ContentUris.withAppendedId(Message.CONTENT_URI, message1Id); 3387143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 3397143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3407143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there's only one message now 3417143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 3427143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numMessages); 3437143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3447143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete the other one 3457143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler uri = ContentUris.withAppendedId(Message.CONTENT_URI, message2Id); 3467143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 3477143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3487143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are no messages now 3497143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 3507143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numMessages); 3517143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 3527143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 3537143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 354ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * Test delete synced message 355ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * TODO: body 356ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * TODO: attachments 357ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler */ 358ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler public void testSyncedMessageDelete() { 35928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("synced-message-delete", true, 36028448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler mMockContext); 361ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long account1Id = account1.mId; 36228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 363ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long box1Id = box1.mId; 36428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 36528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 366ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long message1Id = message1.mId; 36728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message2 = ProviderTestUtils.setupMessage("message2", account1Id, box1Id, false, 36828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 369ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long message2Id = message2.mId; 370ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 371ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String selection = EmailContent.MessageColumns.ACCOUNT_KEY + "=? AND " 372ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler + EmailContent.MessageColumns.MAILBOX_KEY + "=?"; 373ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String[] selArgs = new String[] { 374ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String.valueOf(account1Id), String.valueOf(box1Id) 375ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler }; 376ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 377ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there are two messages 378ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler int numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 379ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(2, numMessages); 380ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 381ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure we start with no synced deletions 382ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.DELETED_CONTENT_URI, selection, 383ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 384ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(0, numMessages); 385ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 386ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // now delete one of them SYNCED 387ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler Uri uri = ContentUris.withAppendedId(Message.SYNCED_CONTENT_URI, message1Id); 388ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 389ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 390ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there's only one message now 391ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 392ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(1, numMessages); 393ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 394ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there's one synced deletion now 395ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.DELETED_CONTENT_URI, selection, 396ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 397ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(1, numMessages); 398ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 399ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // now delete the other one NOT SYNCED 400ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler uri = ContentUris.withAppendedId(Message.CONTENT_URI, message2Id); 401ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 402ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 403ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there are no messages now 404ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 405ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(0, numMessages); 406ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 407ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there's still one deletion now 408ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.DELETED_CONTENT_URI, selection, 409ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 410ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(1, numMessages); 411ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler } 412ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 413ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler /** 414ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * Test message update 415ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * TODO: body 416ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler * TODO: attachments 417ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler */ 418ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler public void testMessageUpdate() { 41928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("message-update", true, mMockContext); 420ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long account1Id = account1.mId; 42128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 422ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long box1Id = box1.mId; 42328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false, 42428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 425ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long message1Id = message1.mId; 42628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Message message2 = ProviderTestUtils.setupMessage("message2", account1Id, box1Id, false, 42728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler true, mMockContext); 428ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler long message2Id = message2.mId; 429ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler ContentResolver cr = mMockContext.getContentResolver(); 430ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 431ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String selection = EmailContent.MessageColumns.ACCOUNT_KEY + "=? AND " 432ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler + EmailContent.MessageColumns.MAILBOX_KEY + "=?"; 433ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String[] selArgs = new String[] { 434ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler String.valueOf(account1Id), String.valueOf(box1Id) 435ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler }; 436ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 437ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there are two messages 438ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler int numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 439ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(2, numMessages); 440ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 441ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // change the first one 442ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler Uri uri = ContentUris.withAppendedId(Message.CONTENT_URI, message1Id); 443ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler ContentValues cv = new ContentValues(); 444ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cv.put(MessageColumns.FROM_LIST, "from-list"); 445ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cr.update(uri, cv, null, null); 446ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 447ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there's no updated message 448ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.UPDATED_CONTENT_URI, selection, 449ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 450ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(0, numMessages); 451ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 452ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // get the message back from the provider, make sure the change "stuck" 453ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler Message restoredMessage = Message.restoreMessageWithId(mMockContext, message1Id); 454ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals("from-list", restoredMessage.mFrom); 455ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 456ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // change the second one 457ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler uri = ContentUris.withAppendedId(Message.SYNCED_CONTENT_URI, message2Id); 458ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cv = new ContentValues(); 459ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cv.put(MessageColumns.FROM_LIST, "from-list"); 460ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cr.update(uri, cv, null, null); 461ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 462ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure there's one updated message 463ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.UPDATED_CONTENT_URI, selection, 464ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 465ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(1, numMessages); 466ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 467ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // get the message back from the provider, make sure the change "stuck", 468ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // as before 469ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler restoredMessage = Message.restoreMessageWithId(mMockContext, message2Id); 470ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals("from-list", restoredMessage.mFrom); 471ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 472ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // get the original message back from the provider 473ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler Cursor c = cr.query(Message.UPDATED_CONTENT_URI, Message.CONTENT_PROJECTION, null, null, 474ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler null); 475ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler try { 476ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertTrue(c.moveToFirst()); 477ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler Message originalMessage = EmailContent.getContent(c, Message.class); 478ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // make sure this has the original value 479ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals("from message2", originalMessage.mFrom); 480ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // Should only be one 481ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertFalse(c.moveToNext()); 482ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler } finally { 483ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler c.close(); 484ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler } 485ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 486ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // delete the second message 487ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler cr.delete(ContentUris.withAppendedId(Message.SYNCED_CONTENT_URI, message2Id), null, null); 488ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 489ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // hey, presto! the change should be gone 490ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.UPDATED_CONTENT_URI, selection, 491ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 492ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(0, numMessages); 493ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 494ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler // and there should now be a deleted record 495ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler numMessages = EmailContent.count(mMockContext, Message.DELETED_CONTENT_URI, selection, 496ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler selArgs); 497ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler assertEquals(1, numMessages); 498ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler } 499ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler 500ddc871d9eddd088c0200a30dbfeb24812a81cf80Andrew Stadler /** 5017143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: cascaded delete account 5027143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: hostauth 5037143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: body 5047143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: attachments 5057143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: create other account, mailbox & messages and confirm the right objects were deleted 5067143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 5077143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testCascadeDeleteAccount() { 50828448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("account-delete-cascade", true, 50928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler mMockContext); 5107143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 51128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 5127143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 51328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler /* Message message1 = */ ProviderTestUtils.setupMessage("message1", account1Id, box1Id, 51428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler false, true, mMockContext); 51528448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler /* Message message2 = */ ProviderTestUtils.setupMessage("message2", account1Id, box1Id, 51628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler false, true, mMockContext); 5177143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 5187143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there is one account, one mailbox, and two messages 5197143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numAccounts = EmailContent.count(mMockContext, Account.CONTENT_URI, null, null); 5207143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numAccounts); 5217143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numBoxes = EmailContent.count(mMockContext, Mailbox.CONTENT_URI, null, null); 5227143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(1, numBoxes); 5237143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, null, null); 5247143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(2, numMessages); 5257143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 5267143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // delete the account 5277143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Uri uri = ContentUris.withAppendedId(Account.CONTENT_URI, account1Id); 5287143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 5297143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 5307143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are no accounts, mailboxes, or messages 5317143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numAccounts = EmailContent.count(mMockContext, Account.CONTENT_URI, null, null); 5327143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numAccounts); 5337143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numBoxes = EmailContent.count(mMockContext, Mailbox.CONTENT_URI, null, null); 5347143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numBoxes); 5357143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, null, null); 5367143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numMessages); 5377143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 5387143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 5397143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 5407143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * Test cascaded delete mailbox 5417143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: body 5427143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: attachments 5437143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: create other mailbox & messages and confirm the right objects were deleted 5447143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 5457143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler public void testCascadeDeleteMailbox() { 54628448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Account account1 = ProviderTestUtils.setupAccount("mailbox-delete-cascade", true, 54728448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler mMockContext); 5487143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long account1Id = account1.mId; 54928448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mMockContext); 5507143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler long box1Id = box1.mId; 55128448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler /* Message message1 = */ ProviderTestUtils.setupMessage("message1", account1Id, box1Id, 55228448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler false, true, mMockContext); 55328448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler /* Message message2 = */ ProviderTestUtils.setupMessage("message2", account1Id, box1Id, 55428448e782b825d1978c0923003a2cf91efe733dcAndrew Stadler false, true, mMockContext); 5557143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 5567143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String selection = EmailContent.MessageColumns.ACCOUNT_KEY + "=? AND " + 5577143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler EmailContent.MessageColumns.MAILBOX_KEY + "=?"; 5587143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler String[] selArgs = new String[] { String.valueOf(account1Id), String.valueOf(box1Id) }; 5597143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 5607143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // make sure there are two messages 5617143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler int numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 5627143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(2, numMessages); 5637143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 5647143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // now delete the mailbox 5657143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler Uri uri = ContentUris.withAppendedId(Mailbox.CONTENT_URI, box1Id); 5667143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler mMockContext.getContentResolver().delete(uri, null, null); 5677143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 5687143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler // there should now be zero messages 5697143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler numMessages = EmailContent.count(mMockContext, Message.CONTENT_URI, selection, selArgs); 5707143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler assertEquals(0, numMessages); 5717143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler } 5727143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 5737143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler /** 5747143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: Test cascaded delete message 5757143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: body 5767143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler * TODO: attachments 5777143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler */ 5787143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler 579976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank /** 580976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank * Test that our unique file name algorithm works as expected. Since this test requires an 581976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank * SD card, we check the environment first, and return immediately if none is mounted. 582976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank * @throws IOException 583976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank */ 584976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank public void testCreateUniqueFile() throws IOException { 585976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // Delete existing files, if they exist 586976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { 587976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank return; 588976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 589976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank try { 590976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank String fileName = "A11achm3n1.doc"; 591976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank File uniqueFile = Attachment.createUniqueFile(fileName); 592976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals(fileName, uniqueFile.getName()); 593976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank if (uniqueFile.createNewFile()) { 594976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank uniqueFile = Attachment.createUniqueFile(fileName); 595976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals("A11achm3n1-2.doc", uniqueFile.getName()); 596976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank if (uniqueFile.createNewFile()) { 597976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank uniqueFile = Attachment.createUniqueFile(fileName); 598976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals("A11achm3n1-3.doc", uniqueFile.getName()); 599976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 600976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 601976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank fileName = "A11achm3n1"; 602976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank uniqueFile = Attachment.createUniqueFile(fileName); 603976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals(fileName, uniqueFile.getName()); 604976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank if (uniqueFile.createNewFile()) { 605976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank uniqueFile = Attachment.createUniqueFile(fileName); 606976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank assertEquals("A11achm3n1-2", uniqueFile.getName()); 607976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 608976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } finally { 609976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank File directory = Environment.getExternalStorageDirectory(); 610976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // These are the files that should be created earlier in the test. Make sure 611976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank // they are deleted for the next go-around 612976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank String[] fileNames = new String[] {"A11achm3n1.doc", "A11achm3n1-2.doc", "A11achm3n1"}; 613976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank int length = fileNames.length; 614976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank for (int i = 0; i < length; i++) { 615976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank File file = new File(directory, fileNames[i]); 616976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank if (file.exists()) { 617976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank file.delete(); 618976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 619976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 620976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 621976f92908dd2f69f21f62690632ff24b08d9f5d3Marc Blank } 6224119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 6234119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler /** 6244119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler * Test retrieving attachments by message ID (using EmailContent.Attachment.MESSAGE_ID_URI) 6254119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler */ 6264119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler public void testGetAttachmentByMessageIdUri() { 6274119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 6284119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Note, we don't strictly need accounts, mailboxes or messages to run this test. 6294119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment a1 = ProviderTestUtils.setupAttachment(1, "a1", 100, true, mMockContext); 6304119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment a2 = ProviderTestUtils.setupAttachment(1, "a2", 200, true, mMockContext); 6314119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment a3 = ProviderTestUtils.setupAttachment(2, "a3", 300, true, mMockContext); 6324119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment a4 = ProviderTestUtils.setupAttachment(2, "a4", 400, true, mMockContext); 6334119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 6344119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Now ask for the attachments of message id=1 6354119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler // Note: Using the "sort by size" trick to bring them back in expected order 6364119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Uri uri = ContentUris.withAppendedId(Attachment.MESSAGE_ID_URI, 1); 6374119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Cursor c = mMockContext.getContentResolver().query(uri, Attachment.CONTENT_PROJECTION, 6384119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler null, null, Attachment.SIZE); 6394119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler assertEquals(2, c.getCount()); 6404119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler 6414119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler try { 6424119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c.moveToFirst(); 6434119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment a1Get = EmailContent.getContent(c, Attachment.class); 6444119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler ProviderTestUtils.assertAttachmentEqual("getAttachByUri-1", a1, a1Get); 6454119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c.moveToNext(); 6464119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler Attachment a2Get = EmailContent.getContent(c, Attachment.class); 6474119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler ProviderTestUtils.assertAttachmentEqual("getAttachByUri-2", a2, a2Get); 6484119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } finally { 6494119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler c.close(); 6504119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } 6514119218e2fd64341ac946fb8f2cbdb796a444cb8Andrew Stadler } 6527143d969dde180b7a44bdc42ade6ca2878d0760dAndrew Stadler} 653