• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2009 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.email;
18 
19 import com.android.email.mail.Folder;
20 import com.android.email.mail.MockFolder;
21 
22 import android.test.AndroidTestCase;
23 import android.test.suitebuilder.annotation.SmallTest;
24 
25 /**
26  * This is a series of unit tests for the MessagingController class.
27  *
28  * Technically these are functional because they use the underlying preferences framework.
29  */
30 @SmallTest
31 public class MessagingControllerUnitTests extends AndroidTestCase {
32 
33     private Preferences mPreferences;
34 
35     private String mUuid;
36     private Account mAccount;
37 
38     @Override
setUp()39     protected void setUp() throws Exception {
40         super.setUp();
41 
42         mPreferences = Preferences.getPreferences(getContext());
43     }
44 
45     /**
46      * Delete any dummy accounts we set up for this test
47      */
48     @Override
tearDown()49     protected void tearDown() throws Exception {
50         super.tearDown();
51 
52         if (mAccount != null && mPreferences != null) {
53             mAccount.delete(mPreferences);
54         }
55     }
56 
57     /**
58      * Test the code that copies server-supplied folder names into the account data
59      */
testUpdateAccountFolderNames()60     public void testUpdateAccountFolderNames() {
61         MessagingController mc = MessagingController.getInstance(getContext());
62         // Create a dummy account
63         createTestAccount();
64         // Refresh it to fill in all fields (many will have default values)
65         mAccount.refresh(mPreferences);
66 
67         // Replace one entry, others are not included
68         Folder[] folders1 = new Folder[] {
69                 new MyMockFolder(Folder.FolderRole.DRAFTS, "DRAFTS_1"),
70         };
71         mc.updateAccountFolderNames(mAccount, folders1);
72         checkServerFolderNames("folders1", mAccount, "DRAFTS_1", "Sent", "Trash", "Outbox");
73 
74         // test that the data is shared across multiple account instantiations
75         Account account2 = new Account(mPreferences, mUuid);
76         checkServerFolderNames("folders1-2", account2, "DRAFTS_1", "Sent", "Trash", "Outbox");
77 
78         // Replace one entry, others are included but called out as unknown
79         Folder[] folders2 = new Folder[] {
80                 new MyMockFolder(Folder.FolderRole.UNKNOWN, "DRAFTS_2"),
81                 new MyMockFolder(Folder.FolderRole.SENT, "SENT_2"),
82                 new MyMockFolder(Folder.FolderRole.UNKNOWN, "TRASH_2"),
83                 new MyMockFolder(Folder.FolderRole.UNKNOWN, "OUTBOX_2"),
84         };
85         mc.updateAccountFolderNames(mAccount, folders2);
86         checkServerFolderNames("folders2", mAccount, "DRAFTS_1", "SENT_2", "Trash", "Outbox");
87 
88         // test that the data is shared across multiple account instantiations
89         account2 = new Account(mPreferences, mUuid);
90         checkServerFolderNames("folders2-2", account2, "DRAFTS_1", "SENT_2", "Trash", "Outbox");
91 
92         // Replace one entry, check that "other" is ignored, check that Outbox is ignored
93         Folder[] folders3 = new Folder[] {
94                 new MyMockFolder(Folder.FolderRole.OTHER, "OTHER_3a"),
95                 new MyMockFolder(Folder.FolderRole.TRASH, "TRASH_3"),
96                 new MyMockFolder(Folder.FolderRole.OTHER, "OTHER_3b"),
97                 new MyMockFolder(Folder.FolderRole.OUTBOX, "OUTBOX_3"),
98         };
99         mc.updateAccountFolderNames(mAccount, folders3);
100         checkServerFolderNames("folders3", mAccount, "DRAFTS_1", "SENT_2", "TRASH_3", "Outbox");
101 
102         // test that the data is shared across multiple account instantiations
103         account2 = new Account(mPreferences, mUuid);
104         checkServerFolderNames("folders3-2", account2, "DRAFTS_1", "SENT_2", "TRASH_3", "Outbox");
105     }
106 
107     /**
108      * Quickly check all four folder name slots in mAccount
109      */
checkServerFolderNames(String diagnostic, Account account, String drafts, String sent, String trash, String outbox)110     private void checkServerFolderNames(String diagnostic, Account account,
111             String drafts, String sent, String trash, String outbox) {
112         assertEquals(diagnostic, drafts, account.getDraftsFolderName());
113         assertEquals(diagnostic, sent, account.getSentFolderName());
114         assertEquals(diagnostic, trash, account.getTrashFolderName());
115         assertEquals(diagnostic, outbox, account.getOutboxFolderName());
116     }
117 
118     /**
119      * MockFolder allows setting and retrieving role & name
120      */
121     private static class MyMockFolder extends MockFolder {
122         private FolderRole mRole;
123         private String mName;
124 
MyMockFolder(FolderRole role, String name)125         public MyMockFolder(FolderRole role, String name) {
126             mRole = role;
127             mName = name;
128         }
129 
getName()130         public String getName() {
131             return mName;
132         }
133 
134         @Override
getRole()135         public FolderRole getRole() {
136             return mRole;
137         }
138     }
139 
140     /**
141      * Create a dummy account with minimal fields
142      */
createTestAccount()143     private void createTestAccount() {
144         mAccount = new Account(getContext());
145         mAccount.save(mPreferences);
146 
147         mUuid = mAccount.getUuid();
148     }
149 
150 }
151