• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 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.documentsui.picker;
18 
19 import static com.android.documentsui.base.State.ACTION_CREATE;
20 import static com.android.documentsui.base.State.ACTION_OPEN;
21 import static org.junit.Assert.assertFalse;
22 import static org.junit.Assert.assertTrue;
23 
24 import android.provider.DocumentsContract.Root;
25 import android.support.test.filters.SmallTest;
26 import android.support.test.runner.AndroidJUnit4;
27 
28 import com.android.documentsui.R;
29 import com.android.documentsui.base.DocumentInfo;
30 import com.android.documentsui.base.RootInfo;
31 import com.android.documentsui.base.State;
32 import com.android.documentsui.testing.TestDirectoryDetails;
33 import com.android.documentsui.testing.TestMenu;
34 import com.android.documentsui.testing.TestMenuItem;
35 import com.android.documentsui.testing.TestSearchViewManager;
36 import com.android.documentsui.testing.TestSelectionDetails;
37 
38 import org.junit.Before;
39 import org.junit.Test;
40 import org.junit.runner.RunWith;
41 
42 @RunWith(AndroidJUnit4.class)
43 @SmallTest
44 public final class MenuManagerTest {
45 
46     private TestMenu testMenu;
47     private TestMenuItem open;
48     private TestMenuItem openInNewWindow;
49     private TestMenuItem openWith;
50     private TestMenuItem share;
51     private TestMenuItem delete;
52     private TestMenuItem rename;
53     private TestMenuItem selectAll;
54     private TestMenuItem createDir;
55     private TestMenuItem grid;
56     private TestMenuItem list;
57     private TestMenuItem cut;
58     private TestMenuItem copy;
59     private TestMenuItem paste;
60     private TestMenuItem pasteInto;
61     private TestMenuItem advanced;
62     private TestMenuItem settings;
63     private TestMenuItem eject;
64     private TestMenuItem view;
65 
66     private TestSelectionDetails selectionDetails;
67     private TestDirectoryDetails dirDetails;
68     private TestSearchViewManager testSearchManager;
69     private State state = new State();
70     private RootInfo testRootInfo;
71     private DocumentInfo testDocInfo;
72     private MenuManager mgr;
73 
74     @Before
setUp()75     public void setUp() {
76         testMenu = TestMenu.create();
77         open = testMenu.findItem(R.id.menu_open);
78         openInNewWindow = testMenu.findItem(R.id.menu_open_in_new_window);
79         openWith = testMenu.findItem(R.id.menu_open_with);
80         share = testMenu.findItem(R.id.menu_share);
81         delete = testMenu.findItem(R.id.menu_delete);
82         rename =  testMenu.findItem(R.id.menu_rename);
83         selectAll = testMenu.findItem(R.id.menu_select_all);
84         createDir = testMenu.findItem(R.id.menu_create_dir);
85         grid = testMenu.findItem(R.id.menu_grid);
86         list = testMenu.findItem(R.id.menu_list);
87         cut = testMenu.findItem(R.id.menu_cut_to_clipboard);
88         copy = testMenu.findItem(R.id.menu_copy_to_clipboard);
89         paste = testMenu.findItem(R.id.menu_paste_from_clipboard);
90         pasteInto = testMenu.findItem(R.id.menu_paste_into_folder);
91         view = testMenu.findItem(R.id.menu_view_in_owner);
92 
93         advanced = testMenu.findItem(R.id.menu_advanced);
94         settings = testMenu.findItem(R.id.menu_settings);
95         eject = testMenu.findItem(R.id.menu_eject_root);
96 
97         selectionDetails = new TestSelectionDetails();
98         dirDetails = new TestDirectoryDetails();
99         testSearchManager = new TestSearchViewManager();
100         mgr = new MenuManager(testSearchManager, state, dirDetails);
101 
102         testRootInfo = new RootInfo();
103         testDocInfo = new DocumentInfo();
104         state.action = ACTION_CREATE;
105         state.allowMultiple = true;
106     }
107 
108     @Test
testActionMenu()109     public void testActionMenu() {
110         mgr.updateActionMenu(testMenu, selectionDetails);
111 
112         open.assertInvisible();
113         delete.assertInvisible();
114         share.assertInvisible();
115         rename.assertInvisible();
116         selectAll.assertVisible();
117         view.assertInvisible();
118     }
119 
120     @Test
testActionMenu_openAction()121     public void testActionMenu_openAction() {
122         state.action = ACTION_OPEN;
123         mgr.updateActionMenu(testMenu, selectionDetails);
124 
125         open.assertVisible();
126     }
127 
128 
129     @Test
testActionMenu_notAllowMultiple()130     public void testActionMenu_notAllowMultiple() {
131         state.allowMultiple = false;
132         mgr.updateActionMenu(testMenu, selectionDetails);
133 
134         selectAll.assertInvisible();
135     }
136 
137     @Test
testOptionMenu()138     public void testOptionMenu() {
139         mgr.updateOptionMenu(testMenu);
140 
141         advanced.assertInvisible();
142         advanced.assertTitle(R.string.menu_advanced_show);
143         createDir.assertDisabled();
144         assertTrue(testSearchManager.showMenuCalled());
145     }
146 
147     @Test
testOptionMenu_notPicking()148     public void testOptionMenu_notPicking() {
149         state.action = ACTION_OPEN;
150         state.derivedMode = State.MODE_LIST;
151         mgr.updateOptionMenu(testMenu);
152 
153         createDir.assertInvisible();
154         grid.assertVisible();
155         list.assertInvisible();
156         assertFalse(testSearchManager.showMenuCalled());
157     }
158 
159     @Test
testOptionMenu_canCreateDirectory()160     public void testOptionMenu_canCreateDirectory() {
161         dirDetails.canCreateDirectory = true;
162         mgr.updateOptionMenu(testMenu);
163 
164         createDir.assertEnabled();
165     }
166 
167     @Test
testOptionMenu_showAdvanced()168     public void testOptionMenu_showAdvanced() {
169         state.showAdvanced = true;
170         state.showDeviceStorageOption = true;
171         mgr.updateOptionMenu(testMenu);
172 
173         advanced.assertVisible();
174         advanced.assertTitle(R.string.menu_advanced_hide);
175     }
176 
177     @Test
testOptionMenu_inRecents()178     public void testOptionMenu_inRecents() {
179         dirDetails.isInRecents = true;
180         mgr.updateOptionMenu(testMenu);
181 
182         grid.assertInvisible();
183         list.assertInvisible();
184     }
185 
186     @Test
testContextMenu_EmptyArea()187     public void testContextMenu_EmptyArea() {
188         dirDetails.hasItemsToPaste = false;
189         dirDetails.canCreateDoc = false;
190         dirDetails.canCreateDirectory = false;
191 
192         mgr.updateContextMenuForContainer(testMenu);
193 
194         selectAll.assertVisible();
195         selectAll.assertEnabled();
196         paste.assertVisible();
197         paste.assertDisabled();
198         createDir.assertVisible();
199         createDir.assertDisabled();
200     }
201 
202     @Test
testContextMenu_EmptyArea_NoItemToPaste()203     public void testContextMenu_EmptyArea_NoItemToPaste() {
204         dirDetails.hasItemsToPaste = false;
205         dirDetails.canCreateDoc = true;
206 
207         mgr.updateContextMenuForContainer(testMenu);
208 
209         selectAll.assertVisible();
210         selectAll.assertEnabled();
211         paste.assertVisible();
212         paste.assertDisabled();
213         createDir.assertVisible();
214         createDir.assertDisabled();
215     }
216 
217     @Test
testContextMenu_EmptyArea_CantCreateDoc()218     public void testContextMenu_EmptyArea_CantCreateDoc() {
219         dirDetails.hasItemsToPaste = true;
220         dirDetails.canCreateDoc = false;
221 
222         mgr.updateContextMenuForContainer(testMenu);
223 
224         selectAll.assertVisible();
225         selectAll.assertEnabled();
226         paste.assertVisible();
227         paste.assertDisabled();
228         createDir.assertVisible();
229         createDir.assertDisabled();
230     }
231 
232     @Test
testContextMenu_EmptyArea_canPaste()233     public void testContextMenu_EmptyArea_canPaste() {
234         dirDetails.hasItemsToPaste = true;
235         dirDetails.canCreateDoc = true;
236 
237         mgr.updateContextMenuForContainer(testMenu);
238 
239         selectAll.assertVisible();
240         selectAll.assertEnabled();
241         paste.assertVisible();
242         paste.assertEnabled();
243         createDir.assertVisible();
244         createDir.assertDisabled();
245     }
246 
247     @Test
testContextMenu_EmptyArea_CanCreateDirectory()248     public void testContextMenu_EmptyArea_CanCreateDirectory() {
249         dirDetails.canCreateDirectory = true;
250 
251         mgr.updateContextMenuForContainer(testMenu);
252 
253         selectAll.assertVisible();
254         selectAll.assertEnabled();
255         paste.assertVisible();
256         paste.assertDisabled();
257         createDir.assertVisible();
258         createDir.assertEnabled();
259     }
260 
261     @Test
testContextMenu_OnFile()262     public void testContextMenu_OnFile() {
263         mgr.updateContextMenuForFiles(testMenu, selectionDetails);
264         // We don't want share in pickers.
265         share.assertInvisible();
266         // We don't want openWith in pickers.
267         openWith.assertInvisible();
268         cut.assertVisible();
269         copy.assertVisible();
270         rename.assertInvisible();
271         delete.assertVisible();
272     }
273 
274     @Test
testContextMenu_OnDirectory()275     public void testContextMenu_OnDirectory() {
276         selectionDetails.canPasteInto = true;
277         mgr.updateContextMenuForDirs(testMenu, selectionDetails);
278         // We don't want openInNewWindow in pickers
279         openInNewWindow.assertInvisible();
280         cut.assertVisible();
281         copy.assertVisible();
282         // Doesn't matter if directory is selected, we don't want pasteInto for DocsActivity
283         pasteInto.assertInvisible();
284         rename.assertInvisible();
285         delete.assertVisible();
286     }
287 
288     @Test
testContextMenu_OnMixedDocs()289     public void testContextMenu_OnMixedDocs() {
290         selectionDetails.containDirectories = true;
291         selectionDetails.containFiles = true;
292         selectionDetails.size = 2;
293         selectionDetails.canDelete = true;
294         mgr.updateContextMenu(testMenu, selectionDetails);
295         cut.assertVisible();
296         copy.assertVisible();
297         delete.assertVisible();
298     }
299 
300     @Test
testContextMenu_OnMixedDocs_hasPartialFile()301     public void testContextMenu_OnMixedDocs_hasPartialFile() {
302         selectionDetails.containDirectories = true;
303         selectionDetails.containFiles = true;
304         selectionDetails.size = 2;
305         selectionDetails.containPartial = true;
306         selectionDetails.canDelete = true;
307         mgr.updateContextMenu(testMenu, selectionDetails);
308         cut.assertVisible();
309         cut.assertDisabled();
310         copy.assertVisible();
311         copy.assertDisabled();
312         delete.assertVisible();
313         delete.assertEnabled();
314     }
315 
316     @Test
testContextMenu_OnMixedDocs_hasUndeletableFile()317     public void testContextMenu_OnMixedDocs_hasUndeletableFile() {
318         selectionDetails.containDirectories = true;
319         selectionDetails.containFiles = true;
320         selectionDetails.size = 2;
321         selectionDetails.canDelete = false;
322         mgr.updateContextMenu(testMenu, selectionDetails);
323         cut.assertVisible();
324         cut.assertDisabled();
325         copy.assertVisible();
326         copy.assertEnabled();
327         delete.assertVisible();
328         delete.assertDisabled();
329     }
330 
331     @Test
testRootContextMenu()332     public void testRootContextMenu() {
333         mgr.updateRootContextMenu(testMenu, testRootInfo, testDocInfo);
334 
335         eject.assertInvisible();
336         openInNewWindow.assertInvisible();
337         pasteInto.assertInvisible();
338         settings.assertInvisible();
339     }
340 
341     @Test
testRootContextMenu_hasRootSettings()342     public void testRootContextMenu_hasRootSettings() {
343         testRootInfo.flags = Root.FLAG_HAS_SETTINGS;
344         mgr.updateRootContextMenu(testMenu, testRootInfo, testDocInfo);
345 
346         settings.assertInvisible();
347     }
348 
349     @Test
testRootContextMenu_nonWritableRoot()350     public void testRootContextMenu_nonWritableRoot() {
351         dirDetails.hasItemsToPaste = true;
352         mgr.updateRootContextMenu(testMenu, testRootInfo, testDocInfo);
353 
354         pasteInto.assertInvisible();
355     }
356 
357     @Test
testRootContextMenu_nothingToPaste()358     public void testRootContextMenu_nothingToPaste() {
359         testRootInfo.flags = Root.FLAG_SUPPORTS_CREATE;
360         dirDetails.hasItemsToPaste = false;
361         mgr.updateRootContextMenu(testMenu, testRootInfo, testDocInfo);
362 
363         pasteInto.assertInvisible();
364     }
365 
366     @Test
testRootContextMenu_canEject()367     public void testRootContextMenu_canEject() {
368         testRootInfo.flags = Root.FLAG_SUPPORTS_EJECT;
369         mgr.updateRootContextMenu(testMenu, testRootInfo, testDocInfo);
370 
371         eject.assertInvisible();
372     }
373 }
374