blob: c285b54e259c05e813b7661de370ad4a5fb979c5 [file] [log] [blame]
Ben Lin7c35b032016-05-31 13:24:01 -07001/*
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
Garfield Tan25676032016-09-19 13:52:35 -070017package com.android.documentsui.manager;
Ben Lin7c35b032016-05-31 13:24:01 -070018
Garfield Tan239ab972016-09-16 13:33:48 -070019import static junit.framework.Assert.assertEquals;
20
Ben Lin25679912016-06-17 11:48:57 -070021import static org.junit.Assert.assertTrue;
22
Ben Lin5668b862016-06-28 17:12:52 -070023import android.provider.DocumentsContract.Root;
Ben Lin7c35b032016-05-31 13:24:01 -070024import android.support.test.filters.SmallTest;
25import android.support.test.runner.AndroidJUnit4;
26
Garfield Tan25676032016-09-19 13:52:35 -070027import com.android.documentsui.R;
Steve McKayd0805062016-09-15 14:30:38 -070028import com.android.documentsui.base.RootInfo;
Steve McKayd9caa6a2016-09-15 16:36:45 -070029import com.android.documentsui.base.State;
Ben Lin7c35b032016-05-31 13:24:01 -070030import com.android.documentsui.testing.TestDirectoryDetails;
31import com.android.documentsui.testing.TestMenu;
Garfield Tan239ab972016-09-16 13:33:48 -070032import com.android.documentsui.testing.TestMenuInflater;
Ben Lin7c35b032016-05-31 13:24:01 -070033import com.android.documentsui.testing.TestMenuItem;
34import com.android.documentsui.testing.TestSearchViewManager;
35import com.android.documentsui.testing.TestSelectionDetails;
36
37import org.junit.Before;
38import org.junit.Test;
39import org.junit.runner.RunWith;
40
Ben Lin7c35b032016-05-31 13:24:01 -070041@RunWith(AndroidJUnit4.class)
42@SmallTest
Garfield Tan25676032016-09-19 13:52:35 -070043public final class MenuManagerTest {
Ben Lin7c35b032016-05-31 13:24:01 -070044
45 private TestMenu testMenu;
46 private TestMenuItem rename;
Garfield Tan06c4b112016-09-14 11:05:58 -070047 private TestMenuItem selectAll;
Ben Lin7c35b032016-05-31 13:24:01 -070048 private TestMenuItem moveTo;
49 private TestMenuItem copyTo;
50 private TestMenuItem share;
51 private TestMenuItem delete;
52 private TestMenuItem createDir;
Ben Lin7c35b032016-05-31 13:24:01 -070053 private TestMenuItem settings;
54 private TestMenuItem newWindow;
Garfield Tan06c4b112016-09-14 11:05:58 -070055 private TestMenuItem open;
56 private TestMenuItem openWith;
57 private TestMenuItem openInNewWindow;
Ben Linebf2a172016-06-03 13:46:52 -070058 private TestMenuItem cut;
59 private TestMenuItem copy;
60 private TestMenuItem paste;
Ben Linb2dfa122016-08-11 17:42:57 -070061 private TestMenuItem pasteInto;
Ben Lin25679912016-06-17 11:48:57 -070062 private TestMenuItem advanced;
Ben Lin5668b862016-06-28 17:12:52 -070063 private TestMenuItem eject;
Ben Lin7c35b032016-05-31 13:24:01 -070064 private TestSelectionDetails selectionDetails;
Steve McKaye5d6ca22016-09-19 20:27:24 -070065 private TestDirectoryDetails dirDetails;
Ben Lin7c35b032016-05-31 13:24:01 -070066 private TestSearchViewManager testSearchManager;
Ben Lin5668b862016-06-28 17:12:52 -070067 private RootInfo testRootInfo;
Ben Lin25679912016-06-17 11:48:57 -070068 private State state = new State();
Steve McKaye5d6ca22016-09-19 20:27:24 -070069 private MenuManager mgr;
Ben Lin7c35b032016-05-31 13:24:01 -070070
71 @Before
72 public void setUp() {
73 testMenu = TestMenu.create();
74 rename = testMenu.findItem(R.id.menu_rename);
Garfield Tan06c4b112016-09-14 11:05:58 -070075 selectAll = testMenu.findItem(R.id.menu_select_all);
Ben Lin7c35b032016-05-31 13:24:01 -070076 moveTo = testMenu.findItem(R.id.menu_move_to);
77 copyTo = testMenu.findItem(R.id.menu_copy_to);
78 share = testMenu.findItem(R.id.menu_share);
79 delete = testMenu.findItem(R.id.menu_delete);
80 createDir = testMenu.findItem(R.id.menu_create_dir);
Ben Lin7c35b032016-05-31 13:24:01 -070081 settings = testMenu.findItem(R.id.menu_settings);
82 newWindow = testMenu.findItem(R.id.menu_new_window);
Garfield Tan06c4b112016-09-14 11:05:58 -070083 open = testMenu.findItem(R.id.menu_open);
84 openWith = testMenu.findItem(R.id.menu_open_with);
85 openInNewWindow = testMenu.findItem(R.id.menu_open_in_new_window);
Ben Linebf2a172016-06-03 13:46:52 -070086 cut = testMenu.findItem(R.id.menu_cut_to_clipboard);
87 copy = testMenu.findItem(R.id.menu_copy_to_clipboard);
88 paste = testMenu.findItem(R.id.menu_paste_from_clipboard);
Ben Linb2dfa122016-08-11 17:42:57 -070089 pasteInto = testMenu.findItem(R.id.menu_paste_into_folder);
Ben Lin25679912016-06-17 11:48:57 -070090 advanced = testMenu.findItem(R.id.menu_advanced);
Ben Lin5668b862016-06-28 17:12:52 -070091 eject = testMenu.findItem(R.id.menu_eject_root);
Ben Linebf2a172016-06-03 13:46:52 -070092
93 // These items by default are visible
94 testMenu.findItem(R.id.menu_select_all).setVisible(true);
95 testMenu.findItem(R.id.menu_list).setVisible(true);
Ben Lin7c35b032016-05-31 13:24:01 -070096
97 selectionDetails = new TestSelectionDetails();
Steve McKaye5d6ca22016-09-19 20:27:24 -070098 dirDetails = new TestDirectoryDetails();
Ben Lin7c35b032016-05-31 13:24:01 -070099 testSearchManager = new TestSearchViewManager();
Steve McKaye5d6ca22016-09-19 20:27:24 -0700100 mgr = new MenuManager(testSearchManager, state, dirDetails);
101
Ben Lin5668b862016-06-28 17:12:52 -0700102 testRootInfo = new RootInfo();
Ben Lin7c35b032016-05-31 13:24:01 -0700103 }
104
105 @Test
106 public void testActionMenu() {
107 selectionDetails.canDelete = true;
108 selectionDetails.canRename = true;
109
Ben Lin7c35b032016-05-31 13:24:01 -0700110 mgr.updateActionMenu(testMenu, selectionDetails);
111
112 rename.assertEnabled();
113 delete.assertVisible();
114 share.assertVisible();
115 copyTo.assertEnabled();
116 moveTo.assertEnabled();
117 }
118
119 @Test
120 public void testActionMenu_containsPartial() {
121 selectionDetails.containPartial = true;
Ben Lin7c35b032016-05-31 13:24:01 -0700122 mgr.updateActionMenu(testMenu, selectionDetails);
123
124 rename.assertDisabled();
125 share.assertInvisible();
126 copyTo.assertDisabled();
127 moveTo.assertDisabled();
128 }
129
130 @Test
131 public void testActionMenu_cantRename() {
132 selectionDetails.canRename = false;
Ben Lin7c35b032016-05-31 13:24:01 -0700133 mgr.updateActionMenu(testMenu, selectionDetails);
134
135 rename.assertDisabled();
136 }
137
138 @Test
139 public void testActionMenu_cantDelete() {
140 selectionDetails.canDelete = false;
Ben Lin7c35b032016-05-31 13:24:01 -0700141 mgr.updateActionMenu(testMenu, selectionDetails);
142
143 delete.assertInvisible();
144 // We shouldn't be able to move files if we can't delete them
145 moveTo.assertDisabled();
146 }
147
148 @Test
149 public void testActionMenu_containsDirectory() {
150 selectionDetails.containDirectories = true;
Ben Lin7c35b032016-05-31 13:24:01 -0700151 mgr.updateActionMenu(testMenu, selectionDetails);
152
153 // We can't share directories
154 share.assertInvisible();
155 }
156
157 @Test
Ben Lin25679912016-06-17 11:48:57 -0700158 public void testOptionMenu() {
Steve McKaye5d6ca22016-09-19 20:27:24 -0700159 mgr.updateOptionMenu(testMenu);
Ben Lin25679912016-06-17 11:48:57 -0700160
Ben Lin25679912016-06-17 11:48:57 -0700161 advanced.assertInvisible();
162 advanced.assertTitle(R.string.menu_advanced_show);
163 createDir.assertDisabled();
Ben Lin25679912016-06-17 11:48:57 -0700164 assertTrue(testSearchManager.updateMenuCalled());
165 }
166
167 @Test
Ben Lin25679912016-06-17 11:48:57 -0700168 public void testOptionMenu_showAdvanced() {
169 state.showAdvanced = true;
170 state.showAdvancedOption = true;
Steve McKaye5d6ca22016-09-19 20:27:24 -0700171 mgr.updateOptionMenu(testMenu);
Ben Lin25679912016-06-17 11:48:57 -0700172
173 advanced.assertVisible();
174 advanced.assertTitle(R.string.menu_advanced_hide);
175 }
176
177 @Test
Ben Lin7c35b032016-05-31 13:24:01 -0700178 public void testOptionMenu_canCreateDirectory() {
Steve McKaye5d6ca22016-09-19 20:27:24 -0700179 dirDetails.canCreateDirectory = true;
180 mgr.updateOptionMenu(testMenu);
Ben Lin7c35b032016-05-31 13:24:01 -0700181
182 createDir.assertEnabled();
183 }
184
185 @Test
Ben Lin7c35b032016-05-31 13:24:01 -0700186 public void testOptionMenu_hasRootSettings() {
Steve McKaye5d6ca22016-09-19 20:27:24 -0700187 dirDetails.hasRootSettings = true;
188 mgr.updateOptionMenu(testMenu);
Ben Lin7c35b032016-05-31 13:24:01 -0700189
190 settings.assertVisible();
191 }
192
193 @Test
194 public void testOptionMenu_shouldShowFancyFeatures() {
Steve McKaye5d6ca22016-09-19 20:27:24 -0700195 dirDetails.shouldShowFancyFeatures = true;
196 mgr.updateOptionMenu(testMenu);
Ben Lin7c35b032016-05-31 13:24:01 -0700197
198 newWindow.assertVisible();
199 }
Ben Linebf2a172016-06-03 13:46:52 -0700200
201 @Test
Garfield Tan239ab972016-09-16 13:33:48 -0700202 public void testInflateContextMenu_Files() {
203 TestMenuInflater inflater = new TestMenuInflater();
Garfield Tan239ab972016-09-16 13:33:48 -0700204
205 selectionDetails.containFiles = true;
206 selectionDetails.containDirectories = false;
207 mgr.inflateContextMenuForDocs(testMenu, inflater, selectionDetails);
208
209 assertEquals(R.menu.file_context_menu, inflater.lastInflatedMenuId);
210 }
211
212 @Test
213 public void testInflateContextMenu_Dirs() {
214 TestMenuInflater inflater = new TestMenuInflater();
Garfield Tan239ab972016-09-16 13:33:48 -0700215
216 selectionDetails.containFiles = false;
217 selectionDetails.containDirectories = true;
218 mgr.inflateContextMenuForDocs(testMenu, inflater, selectionDetails);
219
220 assertEquals(R.menu.dir_context_menu, inflater.lastInflatedMenuId);
221 }
222
223 @Test
224 public void testInflateContextMenu_Mixed() {
225 TestMenuInflater inflater = new TestMenuInflater();
Garfield Tan239ab972016-09-16 13:33:48 -0700226
227 selectionDetails.containFiles = true;
228 selectionDetails.containDirectories = true;
229 mgr.inflateContextMenuForDocs(testMenu, inflater, selectionDetails);
230
231 assertEquals(R.menu.mixed_context_menu, inflater.lastInflatedMenuId);
232 }
233
234 @Test
Ben Linb2dfa122016-08-11 17:42:57 -0700235 public void testContextMenu_EmptyArea() {
Steve McKaye5d6ca22016-09-19 20:27:24 -0700236 mgr.updateContextMenuForContainer(testMenu);
Garfield Tan06c4b112016-09-14 11:05:58 -0700237
238 selectAll.assertVisible();
239 paste.assertVisible();
240 createDir.assertVisible();
241 }
242
243 @Test
244 public void testContextMenu_OnFile() {
245 selectionDetails.size = 1;
Garfield Tan06c4b112016-09-14 11:05:58 -0700246 mgr.updateContextMenuForFiles(testMenu, selectionDetails);
247 open.assertVisible();
248 open.assertEnabled();
249 openWith.assertVisible();
250 openWith.assertEnabled();
Ben Linebf2a172016-06-03 13:46:52 -0700251 cut.assertVisible();
252 copy.assertVisible();
Garfield Tan06c4b112016-09-14 11:05:58 -0700253 rename.assertVisible();
Ben Linebf2a172016-06-03 13:46:52 -0700254 createDir.assertVisible();
255 delete.assertVisible();
256 }
257
258 @Test
Garfield Tan06c4b112016-09-14 11:05:58 -0700259 public void testContextMenu_OnMultipleFiles() {
Garfield Tan06c4b112016-09-14 11:05:58 -0700260 selectionDetails.size = 3;
261 mgr.updateContextMenuForFiles(testMenu, selectionDetails);
262 open.assertVisible();
263 open.assertDisabled();
264 openWith.assertVisible();
265 openWith.assertDisabled();
Ben Linebf2a172016-06-03 13:46:52 -0700266 }
Ben Lin5668b862016-06-28 17:12:52 -0700267
268 @Test
Ben Linb2dfa122016-08-11 17:42:57 -0700269 public void testContextMenu_OnWritableDirectory() {
Garfield Tan06c4b112016-09-14 11:05:58 -0700270 selectionDetails.size = 1;
Ben Linb2dfa122016-08-11 17:42:57 -0700271 selectionDetails.canPasteInto = true;
Garfield Tan06c4b112016-09-14 11:05:58 -0700272 mgr.updateContextMenuForDirs(testMenu, selectionDetails);
273 openInNewWindow.assertVisible();
274 openInNewWindow.assertEnabled();
Ben Linb2dfa122016-08-11 17:42:57 -0700275 cut.assertVisible();
276 copy.assertVisible();
Ben Linb2dfa122016-08-11 17:42:57 -0700277 pasteInto.assertVisible();
278 pasteInto.assertEnabled();
279 rename.assertVisible();
Ben Linb2dfa122016-08-11 17:42:57 -0700280 delete.assertVisible();
281 }
282
283 @Test
284 public void testContextMenu_OnNonWritableDirectory() {
Garfield Tan06c4b112016-09-14 11:05:58 -0700285 selectionDetails.size = 1;
Ben Linb2dfa122016-08-11 17:42:57 -0700286 selectionDetails.canPasteInto = false;
Garfield Tan06c4b112016-09-14 11:05:58 -0700287 mgr.updateContextMenuForDirs(testMenu, selectionDetails);
288 openInNewWindow.assertVisible();
289 openInNewWindow.assertEnabled();
Ben Linb2dfa122016-08-11 17:42:57 -0700290 cut.assertVisible();
291 copy.assertVisible();
Garfield Tan06c4b112016-09-14 11:05:58 -0700292 pasteInto.assertVisible();
Ben Linb2dfa122016-08-11 17:42:57 -0700293 pasteInto.assertDisabled();
294 rename.assertVisible();
Ben Linb2dfa122016-08-11 17:42:57 -0700295 delete.assertVisible();
296 }
297
Garfield Tan06c4b112016-09-14 11:05:58 -0700298 @Test
299 public void testContextMenu_OnMultipleDirectories() {
Garfield Tan06c4b112016-09-14 11:05:58 -0700300 selectionDetails.size = 3;
301 mgr.updateContextMenuForDirs(testMenu, selectionDetails);
302 openInNewWindow.assertVisible();
303 openInNewWindow.assertDisabled();
304 }
Ben Linb2dfa122016-08-11 17:42:57 -0700305
306 @Test
Garfield Tan25676032016-09-19 13:52:35 -0700307 public void testContextMenu_OnMixedDocs() {
Garfield Tan25676032016-09-19 13:52:35 -0700308 selectionDetails.containDirectories = true;
309 selectionDetails.containFiles = true;
310 selectionDetails.size = 2;
311 selectionDetails.canDelete = true;
312 mgr.updateContextMenu(testMenu, selectionDetails);
313 cut.assertVisible();
314 cut.assertEnabled();
315 copy.assertVisible();
316 copy.assertEnabled();
317 delete.assertVisible();
318 delete.assertEnabled();
319 }
320
321 @Test
322 public void testContextMenu_OnMixedDocs_hasPartialFile() {
Garfield Tan25676032016-09-19 13:52:35 -0700323 selectionDetails.containDirectories = true;
324 selectionDetails.containFiles = true;
325 selectionDetails.size = 2;
326 selectionDetails.containPartial = true;
327 selectionDetails.canDelete = true;
328 mgr.updateContextMenu(testMenu, selectionDetails);
329 cut.assertVisible();
330 cut.assertDisabled();
331 copy.assertVisible();
332 copy.assertDisabled();
333 delete.assertVisible();
334 delete.assertEnabled();
335 }
336
337 @Test
338 public void testContextMenu_OnMixedDocs_hasUndeletableFile() {
Garfield Tan25676032016-09-19 13:52:35 -0700339 selectionDetails.containDirectories = true;
340 selectionDetails.containFiles = true;
341 selectionDetails.size = 2;
342 selectionDetails.canDelete = false;
343 mgr.updateContextMenu(testMenu, selectionDetails);
344 cut.assertVisible();
345 cut.assertDisabled();
346 copy.assertVisible();
347 copy.assertEnabled();
348 delete.assertVisible();
349 delete.assertDisabled();
350 }
351
352 @Test
Ben Lin5668b862016-06-28 17:12:52 -0700353 public void testRootContextMenu() {
Ben Lin5668b862016-06-28 17:12:52 -0700354 mgr.updateRootContextMenu(testMenu, testRootInfo);
355
356 eject.assertVisible();
357 eject.assertDisabled();
358
359 settings.assertVisible();
360 settings.assertDisabled();
361 }
362
363 @Test
364 public void testRootContextMenu_hasRootSettings() {
365 testRootInfo.flags = Root.FLAG_HAS_SETTINGS;
Ben Lin5668b862016-06-28 17:12:52 -0700366 mgr.updateRootContextMenu(testMenu, testRootInfo);
367
368 settings.assertEnabled();
369 }
370
371 @Test
Ben Lin821727a2016-07-08 10:49:53 -0700372 public void testRootContextMenu_eject() {
Ben Lin5668b862016-06-28 17:12:52 -0700373 testRootInfo.flags = Root.FLAG_SUPPORTS_EJECT;
Ben Lin5668b862016-06-28 17:12:52 -0700374 mgr.updateRootContextMenu(testMenu, testRootInfo);
375
376 eject.assertEnabled();
377 }
Ben Lin821727a2016-07-08 10:49:53 -0700378
379 @Test
380 public void testRootContextMenu_ejectInProcess() {
381 testRootInfo.flags = Root.FLAG_SUPPORTS_EJECT;
382 testRootInfo.ejecting = true;
Ben Lin821727a2016-07-08 10:49:53 -0700383 mgr.updateRootContextMenu(testMenu, testRootInfo);
384
385 eject.assertDisabled();
386 }
Ben Lin7c35b032016-05-31 13:24:01 -0700387}