• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2010 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.emailcommon.utility;
18 
19 import android.content.Context;
20 import android.net.Uri;
21 import android.test.ProviderTestCase2;
22 import android.test.suitebuilder.annotation.MediumTest;
23 import android.test.suitebuilder.annotation.Suppress;
24 
25 import com.android.email.provider.EmailProvider;
26 import com.android.email.provider.ProviderTestUtils;
27 import com.android.emailcommon.provider.Account;
28 import com.android.emailcommon.provider.EmailContent;
29 import com.android.emailcommon.provider.EmailContent.Attachment;
30 import com.android.emailcommon.provider.EmailContent.Message;
31 import com.android.emailcommon.provider.Mailbox;
32 
33 import java.io.File;
34 import java.io.FileWriter;
35 import java.io.IOException;
36 
37 /**
38  * This is a series of medium tests for the Utility class.  These tests must be locally
39  * complete - no server(s) required.
40  *
41  * You can run this entire test case with:
42  *   runtest -c com.android.emailcommon.utility.UtilityMediumTests email
43  */
44 @Suppress
45 @MediumTest
46 public class UtilityMediumTests extends ProviderTestCase2<EmailProvider> {
47 
48     EmailProvider mProvider;
49     Context mMockContext;
50 
UtilityMediumTests()51     public UtilityMediumTests() {
52         super(EmailProvider.class, EmailContent.AUTHORITY);
53     }
54 
55     @Override
setUp()56     public void setUp() throws Exception {
57         super.setUp();
58         mMockContext = getMockContext();
59     }
60 
testFindExistingAccount()61     public void testFindExistingAccount() {
62         // Create two accounts
63         Account account1 = ProviderTestUtils.setupAccount("account1", false, mMockContext);
64         account1.mHostAuthRecv = ProviderTestUtils.setupHostAuth("ha1", -1, false, mMockContext);
65         account1.mHostAuthSend = ProviderTestUtils.setupHostAuth("ha1", -1, false, mMockContext);
66         account1.save(mMockContext);
67         Account account2 = ProviderTestUtils.setupAccount("account2", false, mMockContext);
68         account2.mHostAuthRecv = ProviderTestUtils.setupHostAuth("ha2", -1, false, mMockContext);
69         account2.mHostAuthSend = ProviderTestUtils.setupHostAuth("ha2", -1, false, mMockContext);
70         account2.save(mMockContext);
71         // Make sure we can find them
72         Account acct = Utility.findExistingAccount(mMockContext, -1, "address-ha1", "login-ha1");
73         assertNotNull(acct);
74         assertEquals("account1", acct.mDisplayName);
75         acct = Utility.findExistingAccount(mMockContext, -1, "address-ha2", "login-ha2");
76         assertNotNull(acct);
77         assertEquals("account2", acct.mDisplayName);
78         // We shouldn't find account
79         acct = Utility.findExistingAccount(mMockContext, -1, "address-ha3", "login-ha3");
80         assertNull(acct);
81         // Try to find account1, excluding account1
82         acct = Utility.findExistingAccount(mMockContext, account1.mId, "address-ha1", "login-ha1");
83         assertNull(acct);
84 
85         // Make sure we properly handle an underscore in the login name
86         Account account3 = ProviderTestUtils.setupAccount("account3", false, mMockContext);
87         account3.mHostAuthRecv = ProviderTestUtils.setupHostAuth("foo_ba", -1, false, mMockContext);
88         account3.mHostAuthSend = ProviderTestUtils.setupHostAuth("foo_ba", -1, false, mMockContext);
89         account3.save(mMockContext);
90         acct = Utility.findExistingAccount(mMockContext, -1, "address-foo_ba", "login-foo.ba");
91         assertNull(acct);
92         acct = Utility.findExistingAccount(mMockContext, -1, "address-foo_ba", "login-foo_ba");
93         assertNotNull(acct);
94     }
95 
testAttachmentExists()96     public void testAttachmentExists() throws IOException {
97         Account account = ProviderTestUtils.setupAccount("account", true, mMockContext);
98         // We return false with null attachment
99         assertFalse(Utility.attachmentExists(mMockContext, null));
100 
101         Mailbox mailbox =
102             ProviderTestUtils.setupMailbox("mailbox", account.mId, true, mMockContext);
103         Message message = ProviderTestUtils.setupMessage("foo", account.mId, mailbox.mId, false,
104                 true, mMockContext);
105         Attachment attachment = ProviderTestUtils.setupAttachment(message.mId, "filename.ext",
106                 69105, true, mMockContext);
107         attachment.mContentBytes = null;
108         // With no contentUri, we should return false
109         assertFalse(Utility.attachmentExists(mMockContext, attachment));
110 
111         attachment.mContentBytes = new byte[0];
112         // With contentBytes set, we should return true
113         assertTrue(Utility.attachmentExists(mMockContext, attachment));
114 
115         attachment.mContentBytes = null;
116         // Generate a file name in our data directory, and use that for contentUri
117         File file = mMockContext.getFileStreamPath("test.att");
118         // Delete the file if it already exists
119         if (file.exists()) {
120             assertTrue(file.delete());
121         }
122         // Should return false, because the file doesn't exist
123         assertFalse(Utility.attachmentExists(mMockContext, attachment));
124 
125         assertTrue(file.createNewFile());
126         // Put something in the file
127         FileWriter writer = new FileWriter(file);
128         writer.write("Foo");
129         writer.flush();
130         writer.close();
131         attachment.setContentUri("file://" + file.getAbsolutePath());
132         // Now, this should return true
133         assertTrue(Utility.attachmentExists(mMockContext, attachment));
134     }
135 
testBuildLimitOneUri()136     public void testBuildLimitOneUri() {
137         // EmailProvider supports "?limit="
138         assertEquals(Uri.parse("content://com.android.mail.provider?limit=1"),
139                 Utility.buildLimitOneUri(Uri.parse("content://com.android.mail.provider")));
140 
141         // Others don't -- so don't add it.
142         assertEquals(Uri.parse("content://com.android.mail.attachmentprovider"),
143                 Utility.buildLimitOneUri(Uri.parse("content://com.android.mail.attachmentprovider"
144                         )));
145         assertEquals(Uri.parse("content://gmail-ls/android@gmail.com"),
146                 Utility.buildLimitOneUri(Uri.parse("content://gmail-ls/android@gmail.com"
147                         )));
148     }
149 
testGetFirstRowLong()150     public void testGetFirstRowLong() {
151         Account account1 = ProviderTestUtils.setupAccount("1", true, mMockContext);
152         Account account2 = ProviderTestUtils.setupAccount("X1", true, mMockContext);
153         Account account3 = ProviderTestUtils.setupAccount("X2", true, mMockContext);
154 
155         // case 1. Account found
156         assertEquals((Long) account2.mId, Utility.getFirstRowLong(
157                 mMockContext, Account.CONTENT_URI, EmailContent.ID_PROJECTION,
158                 Account.DISPLAY_NAME + " like :1", new String[] {"X%"},
159                 Account.DISPLAY_NAME,
160                 EmailContent.ID_PROJECTION_COLUMN));
161         // different sort order
162         assertEquals((Long) account3.mId, Utility.getFirstRowLong(
163                 mMockContext, Account.CONTENT_URI, EmailContent.ID_PROJECTION,
164                 Account.DISPLAY_NAME + " like :1", new String[] {"X%"},
165                 Account.DISPLAY_NAME + " desc",
166                 EmailContent.ID_PROJECTION_COLUMN));
167 
168         // case 2. no row found
169         assertEquals(null, Utility.getFirstRowLong(
170                 mMockContext, Account.CONTENT_URI, EmailContent.ID_PROJECTION,
171                 Account.DISPLAY_NAME + " like :1", new String[] {"NO SUCH ACCOUNT"},
172                 null,
173                 EmailContent.ID_PROJECTION_COLUMN));
174 
175         // case 3. no row found with default value
176         assertEquals((Long) (-1L), Utility.getFirstRowLong(
177                 mMockContext, Account.CONTENT_URI, EmailContent.ID_PROJECTION,
178                 Account.DISPLAY_NAME + " like :1", new String[] {"NO SUCH ACCOUNT"},
179                 null,
180                 EmailContent.ID_PROJECTION_COLUMN, -1L));
181     }
182 
testGetFirstRowInt()183     public void testGetFirstRowInt() {
184         Account account1 = ProviderTestUtils.setupAccount("1", true, mMockContext);
185         Account account2 = ProviderTestUtils.setupAccount("X1", true, mMockContext);
186         Account account3 = ProviderTestUtils.setupAccount("X2", true, mMockContext);
187 
188         // case 1. Account found
189         assertEquals((Integer)(int) account2.mId, Utility.getFirstRowInt(
190                 mMockContext, Account.CONTENT_URI, EmailContent.ID_PROJECTION,
191                 Account.DISPLAY_NAME + " like :1", new String[] {"X%"},
192                 Account.DISPLAY_NAME,
193                 EmailContent.ID_PROJECTION_COLUMN));
194         // different sort order
195         assertEquals((Integer)(int) account3.mId, Utility.getFirstRowInt(
196                 mMockContext, Account.CONTENT_URI, EmailContent.ID_PROJECTION,
197                 Account.DISPLAY_NAME + " like :1", new String[] {"X%"},
198                 Account.DISPLAY_NAME + " desc",
199                 EmailContent.ID_PROJECTION_COLUMN));
200 
201         // case 2. no row found
202         assertEquals(null, Utility.getFirstRowInt(
203                 mMockContext, Account.CONTENT_URI, EmailContent.ID_PROJECTION,
204                 Account.DISPLAY_NAME + " like :1", new String[] {"NO SUCH ACCOUNT"},
205                 null,
206                 EmailContent.ID_PROJECTION_COLUMN));
207 
208         // case 3. no row found with default value
209         assertEquals((Integer) (-1), Utility.getFirstRowInt(
210                 mMockContext, Account.CONTENT_URI, EmailContent.ID_PROJECTION,
211                 Account.DISPLAY_NAME + " like :1", new String[] {"NO SUCH ACCOUNT"},
212                 null,
213                 EmailContent.ID_PROJECTION_COLUMN, -1));
214     }
215 
testGetFirstRowString()216     public void testGetFirstRowString() {
217         final String[] DISPLAY_NAME_PROJECTION = new String[] {Account.DISPLAY_NAME};
218 
219         Account account1 = ProviderTestUtils.setupAccount("1", true, mMockContext);
220         Account account2 = ProviderTestUtils.setupAccount("X1", true, mMockContext);
221         Account account3 = ProviderTestUtils.setupAccount("X2", true, mMockContext);
222 
223         // case 1. Account found
224         assertEquals(account2.mDisplayName, Utility.getFirstRowString(
225                 mMockContext, Account.CONTENT_URI, DISPLAY_NAME_PROJECTION,
226                 Account.DISPLAY_NAME + " like :1", new String[] {"X%"},
227                 Account.DISPLAY_NAME, 0));
228 
229         // different sort order
230         assertEquals(account3.mDisplayName, Utility.getFirstRowString(
231                 mMockContext, Account.CONTENT_URI, DISPLAY_NAME_PROJECTION,
232                 Account.DISPLAY_NAME + " like :1", new String[] {"X%"},
233                 Account.DISPLAY_NAME + " desc", 0));
234 
235         // case 2. no row found
236         assertEquals(null, Utility.getFirstRowString(
237                 mMockContext, Account.CONTENT_URI, DISPLAY_NAME_PROJECTION,
238                 Account.DISPLAY_NAME + " like :1", new String[] {"NO SUCH ACCOUNT"},
239                 null, 0));
240 
241         // case 3. no row found with default value
242         assertEquals("-", Utility.getFirstRowString(
243                 mMockContext, Account.CONTENT_URI, DISPLAY_NAME_PROJECTION,
244                 Account.DISPLAY_NAME + " like :1", new String[] {"NO SUCH ACCOUNT"},
245                 null, 0, "-"));
246     }
247 }
248