blob: 1ca593ed6f8f72dfe9c9c609da27f82efba84089 [file] [log] [blame]
/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.documentsui.picker;
import static com.android.documentsui.base.State.ACTION_CREATE;
import static com.android.documentsui.base.State.ACTION_OPEN;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import android.provider.DocumentsContract.Root;
import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;
import com.android.documentsui.R;
import com.android.documentsui.base.RootInfo;
import com.android.documentsui.base.State;
import com.android.documentsui.testing.TestDirectoryDetails;
import com.android.documentsui.testing.TestMenu;
import com.android.documentsui.testing.TestMenuItem;
import com.android.documentsui.testing.TestSearchViewManager;
import com.android.documentsui.testing.TestSelectionDetails;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(AndroidJUnit4.class)
@SmallTest
public final class MenuManagerTest {
private TestMenu testMenu;
private TestMenuItem open;
private TestMenuItem openInNewWindow;
private TestMenuItem openWith;
private TestMenuItem share;
private TestMenuItem delete;
private TestMenuItem rename;
private TestMenuItem selectAll;
private TestMenuItem createDir;
private TestMenuItem grid;
private TestMenuItem list;
private TestMenuItem cut;
private TestMenuItem copy;
private TestMenuItem paste;
private TestMenuItem pasteInto;
private TestMenuItem advanced;
private TestMenuItem settings;
private TestMenuItem eject;
private TestSelectionDetails selectionDetails;
private TestDirectoryDetails dirDetails;
private TestSearchViewManager testSearchManager;
private State state = new State();
private RootInfo testRootInfo;
private MenuManager mgr;
@Before
public void setUp() {
testMenu = TestMenu.create();
open = testMenu.findItem(R.id.menu_open);
openInNewWindow = testMenu.findItem(R.id.menu_open_in_new_window);
openWith = testMenu.findItem(R.id.menu_open_with);
share = testMenu.findItem(R.id.menu_share);
delete = testMenu.findItem(R.id.menu_delete);
rename = testMenu.findItem(R.id.menu_rename);
selectAll = testMenu.findItem(R.id.menu_select_all);
createDir = testMenu.findItem(R.id.menu_create_dir);
grid = testMenu.findItem(R.id.menu_grid);
list = testMenu.findItem(R.id.menu_list);
cut = testMenu.findItem(R.id.menu_cut_to_clipboard);
copy = testMenu.findItem(R.id.menu_copy_to_clipboard);
paste = testMenu.findItem(R.id.menu_paste_from_clipboard);
pasteInto = testMenu.findItem(R.id.menu_paste_into_folder);
advanced = testMenu.findItem(R.id.menu_advanced);
settings = testMenu.findItem(R.id.menu_settings);
eject = testMenu.findItem(R.id.menu_eject_root);
selectionDetails = new TestSelectionDetails();
dirDetails = new TestDirectoryDetails();
testSearchManager = new TestSearchViewManager();
mgr = new MenuManager(testSearchManager, state, dirDetails);
testRootInfo = new RootInfo();
state.action = ACTION_CREATE;
state.allowMultiple = true;
}
@Test
public void testActionMenu() {
mgr.updateActionMenu(testMenu, selectionDetails);
open.assertInvisible();
delete.assertInvisible();
share.assertInvisible();
rename.assertInvisible();
selectAll.assertVisible();
}
@Test
public void testActionMenu_openAction() {
state.action = ACTION_OPEN;
mgr.updateActionMenu(testMenu, selectionDetails);
open.assertVisible();
}
@Test
public void testActionMenu_notAllowMultiple() {
state.allowMultiple = false;
mgr.updateActionMenu(testMenu, selectionDetails);
selectAll.assertInvisible();
}
@Test
public void testOptionMenu() {
mgr.updateOptionMenu(testMenu);
advanced.assertInvisible();
advanced.assertTitle(R.string.menu_advanced_show);
createDir.assertDisabled();
assertTrue(testSearchManager.showMenuCalled());
}
@Test
public void testOptionMenu_notPicking() {
state.action = ACTION_OPEN;
state.derivedMode = State.MODE_LIST;
mgr.updateOptionMenu(testMenu);
createDir.assertInvisible();
grid.assertVisible();
list.assertInvisible();
assertFalse(testSearchManager.showMenuCalled());
}
@Test
public void testOptionMenu_canCreateDirectory() {
dirDetails.canCreateDirectory = true;
mgr.updateOptionMenu(testMenu);
createDir.assertEnabled();
}
@Test
public void testOptionMenu_showAdvanced() {
state.showAdvanced = true;
state.showAdvancedOption = true;
mgr.updateOptionMenu(testMenu);
advanced.assertVisible();
advanced.assertTitle(R.string.menu_advanced_hide);
}
@Test
public void testOptionMenu_inRecents() {
dirDetails.isInRecents = true;
mgr.updateOptionMenu(testMenu);
grid.assertInvisible();
list.assertInvisible();
}
@Test
public void testContextMenu_EmptyArea() {
mgr.updateContextMenuForContainer(testMenu);
selectAll.assertVisible();
paste.assertVisible();
createDir.assertVisible();
}
@Test
public void testContextMenu_OnFile() {
mgr.updateContextMenuForFiles(testMenu, selectionDetails);
// We don't want share in pickers.
share.assertInvisible();
// We don't want openWith in pickers.
openWith.assertInvisible();
cut.assertVisible();
copy.assertVisible();
rename.assertInvisible();
delete.assertVisible();
}
@Test
public void testContextMenu_OnDirectory() {
selectionDetails.canPasteInto = true;
mgr.updateContextMenuForDirs(testMenu, selectionDetails);
// We don't want openInNewWindow in pickers
openInNewWindow.assertInvisible();
cut.assertVisible();
copy.assertVisible();
// Doesn't matter if directory is selected, we don't want pasteInto for DocsActivity
pasteInto.assertInvisible();
rename.assertInvisible();
delete.assertVisible();
}
@Test
public void testContextMenu_OnMixedDocs() {
selectionDetails.containDirectories = true;
selectionDetails.containFiles = true;
selectionDetails.size = 2;
selectionDetails.canDelete = true;
mgr.updateContextMenu(testMenu, selectionDetails);
cut.assertVisible();
copy.assertVisible();
delete.assertVisible();
}
@Test
public void testContextMenu_OnMixedDocs_hasPartialFile() {
selectionDetails.containDirectories = true;
selectionDetails.containFiles = true;
selectionDetails.size = 2;
selectionDetails.containPartial = true;
selectionDetails.canDelete = true;
mgr.updateContextMenu(testMenu, selectionDetails);
cut.assertVisible();
cut.assertDisabled();
copy.assertVisible();
copy.assertDisabled();
delete.assertVisible();
delete.assertEnabled();
}
@Test
public void testContextMenu_OnMixedDocs_hasUndeletableFile() {
selectionDetails.containDirectories = true;
selectionDetails.containFiles = true;
selectionDetails.size = 2;
selectionDetails.canDelete = false;
mgr.updateContextMenu(testMenu, selectionDetails);
cut.assertVisible();
cut.assertDisabled();
copy.assertVisible();
copy.assertEnabled();
delete.assertVisible();
delete.assertDisabled();
}
@Test
public void testRootContextMenu() {
mgr.updateRootContextMenu(testMenu, testRootInfo);
eject.assertInvisible();
settings.assertInvisible();
}
@Test
public void testRootContextMenu_hasRootSettings() {
testRootInfo.flags = Root.FLAG_HAS_SETTINGS;
mgr.updateRootContextMenu(testMenu, testRootInfo);
settings.assertInvisible();
}
@Test
public void testRootContextMenu_canEject() {
testRootInfo.flags = Root.FLAG_SUPPORTS_EJECT;
mgr.updateRootContextMenu(testMenu, testRootInfo);
eject.assertInvisible();
}
}