Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(904)

Unified Diff: chrome/browser/ui/app_list/app_context_menu_unittest.cc

Issue 2393453002: arc: Fix Arc app item context menu. (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/app_list/app_context_menu_unittest.cc
diff --git a/chrome/browser/ui/app_list/app_context_menu_unittest.cc b/chrome/browser/ui/app_list/app_context_menu_unittest.cc
index 2569317b01795b81e4a113097a46c9df57dc0046..10495a1b5aa04fd4c9b627da8190480993bece47 100644
--- a/chrome/browser/ui/app_list/app_context_menu_unittest.cc
+++ b/chrome/browser/ui/app_list/app_context_menu_unittest.cc
@@ -24,6 +24,7 @@
#if defined(OS_CHROMEOS)
#include "chrome/browser/ui/app_list/arc/arc_app_item.h"
+#include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h"
#include "chrome/browser/ui/app_list/arc/arc_app_test.h"
#include "components/arc/test/fake_app_instance.h"
#include "components/arc/test/fake_arc_bridge_service.h"
@@ -149,18 +150,23 @@ class AppContextMenuTest : public AppListTestBase {
bool is_checked;
};
+ void ValidateItemState(const ui::MenuModel* menu_model,
+ int index,
+ const MenuState& state) {
+ EXPECT_EQ(state.command_id, menu_model->GetCommandIdAt(index));
+ if (state.command_id == -1)
+ return; // Don't check separator.
+ EXPECT_EQ(state.is_enabled, menu_model->IsEnabledAt(index));
+ EXPECT_EQ(state.is_checked, menu_model->IsItemCheckedAt(index));
+ }
+
void ValidateMenuState(const ui::MenuModel* menu_model,
const std::vector<MenuState>& states) {
ASSERT_NE(nullptr, menu_model);
size_t state_index = 0;
for (int i = 0; i < menu_model->GetItemCount(); ++i) {
ASSERT_LT(state_index, states.size());
- const MenuState& state = states[state_index++];
- EXPECT_EQ(state.command_id, menu_model->GetCommandIdAt(i));
- if (state.command_id == -1)
- continue; // Don't check separator.
- EXPECT_EQ(state.is_enabled, menu_model->IsEnabledAt(i));
- EXPECT_EQ(state.is_checked, menu_model->IsItemCheckedAt(i));
+ ValidateItemState(menu_model, i, states[state_index++]);
}
EXPECT_EQ(state_index, states.size());
}
@@ -348,7 +354,7 @@ TEST_F(AppContextMenuTest, ArcMenu) {
ArcAppTest arc_test;
arc_test.SetUp(profile());
- const arc::mojom::AppInfo& app_info = arc_test.fake_apps()[0];
+ const arc::mojom::AppInfo& app_info = arc_test.fake_apps()[1];
khmel 2016/10/03 23:48:03 0 app is sticky and does not have uninstall item.
const std::string app_id = ArcAppTest::GetAppId(app_info);
controller()->SetAppPinnable(app_id, AppListControllerDelegate::PIN_EDITABLE);
@@ -360,17 +366,14 @@ TEST_F(AppContextMenuTest, ArcMenu) {
ui::MenuModel* menu = item.GetContextMenuModel();
ASSERT_NE(nullptr, menu);
- ASSERT_EQ(4, menu->GetItemCount());
- EXPECT_EQ(app_list::AppContextMenu::LAUNCH_NEW, menu->GetCommandIdAt(0));
- EXPECT_TRUE(menu->IsEnabledAt(0));
- EXPECT_FALSE(menu->IsItemCheckedAt(0));
- EXPECT_EQ(-1, menu->GetCommandIdAt(1)); // separator
- EXPECT_EQ(app_list::AppContextMenu::TOGGLE_PIN, menu->GetCommandIdAt(2));
- EXPECT_TRUE(menu->IsEnabledAt(2));
- EXPECT_FALSE(menu->IsItemCheckedAt(2));
- EXPECT_EQ(app_list::AppContextMenu::SHOW_APP_INFO, menu->GetCommandIdAt(3));
- EXPECT_TRUE(menu->IsEnabledAt(3));
- EXPECT_FALSE(menu->IsItemCheckedAt(3));
+ ASSERT_EQ(6, menu->GetItemCount());
+ ValidateItemState(menu, 0, MenuState(app_list::AppContextMenu::LAUNCH_NEW));
+ ValidateItemState(menu, 1, MenuState()); // separator
+ ValidateItemState(menu, 2, MenuState(app_list::AppContextMenu::TOGGLE_PIN));
+ ValidateItemState(menu, 3, MenuState()); // separator
+ ValidateItemState(menu, 4, MenuState(app_list::AppContextMenu::UNINSTALL));
+ ValidateItemState(
+ menu, 5, MenuState(app_list::AppContextMenu::SHOW_APP_INFO));
// Test activate request.
EXPECT_EQ(0u, arc_test.app_instance()->launch_requests().size());
@@ -386,31 +389,82 @@ TEST_F(AppContextMenuTest, ArcMenu) {
// It is not expected that menu model is unchanged on GetContextMenuModel. Arc
// app menu requires model to be recalculated.
menu = item.GetContextMenuModel();
- ASSERT_EQ(2, menu->GetItemCount());
- EXPECT_EQ(app_list::AppContextMenu::TOGGLE_PIN, menu->GetCommandIdAt(0));
- EXPECT_TRUE(menu->IsEnabledAt(0));
- EXPECT_FALSE(menu->IsItemCheckedAt(0));
- EXPECT_EQ(app_list::AppContextMenu::SHOW_APP_INFO, menu->GetCommandIdAt(1));
- EXPECT_TRUE(menu->IsEnabledAt(1));
- EXPECT_FALSE(menu->IsItemCheckedAt(1));
+ ASSERT_EQ(4, menu->GetItemCount());
+ ValidateItemState(menu, 0, MenuState(app_list::AppContextMenu::TOGGLE_PIN));
+ ValidateItemState(menu, 1, MenuState()); // separator
+ ValidateItemState(menu, 2, MenuState(app_list::AppContextMenu::UNINSTALL));
+ ValidateItemState(
+ menu, 3, MenuState(app_list::AppContextMenu::SHOW_APP_INFO));
+ // This makes all apps non-ready.
+ controller()->SetAppOpen(app_id, false);
+ arc::InstanceHolder<arc::mojom::AppInstance>::Observer* instance_observer =
+ arc_test.arc_app_list_prefs();
+ instance_observer->OnInstanceClosed();
+
+ menu = item.GetContextMenuModel();
+ ASSERT_EQ(6, menu->GetItemCount());
+ ValidateItemState(menu, 0, MenuState(app_list::AppContextMenu::LAUNCH_NEW));
+ ValidateItemState(menu, 1, MenuState()); // separator
+ ValidateItemState(menu, 2, MenuState(app_list::AppContextMenu::TOGGLE_PIN));
+ ValidateItemState(menu, 3, MenuState()); // separator
+ ValidateItemState(
+ menu, 4, MenuState(app_list::AppContextMenu::UNINSTALL, false, false));
+ ValidateItemState(
+ menu, 5,
+ MenuState(app_list::AppContextMenu::SHOW_APP_INFO, false, false));
+
+ // Uninstall all apps.
arc_test.app_instance()->RefreshAppList();
arc_test.app_instance()->SendRefreshAppList(
std::vector<arc::mojom::AppInfo>());
controller()->SetAppOpen(app_id, false);
+ // No app available case.
menu = item.GetContextMenuModel();
- ASSERT_EQ(4, menu->GetItemCount());
- EXPECT_EQ(app_list::AppContextMenu::LAUNCH_NEW, menu->GetCommandIdAt(0));
- EXPECT_TRUE(menu->IsEnabledAt(0));
- EXPECT_FALSE(menu->IsItemCheckedAt(0));
- EXPECT_EQ(-1, menu->GetCommandIdAt(1)); // separator
- EXPECT_EQ(app_list::AppContextMenu::TOGGLE_PIN, menu->GetCommandIdAt(2));
- EXPECT_TRUE(menu->IsEnabledAt(2));
- EXPECT_FALSE(menu->IsItemCheckedAt(2));
- EXPECT_EQ(app_list::AppContextMenu::SHOW_APP_INFO, menu->GetCommandIdAt(3));
- EXPECT_TRUE(menu->IsEnabledAt(3));
- EXPECT_FALSE(menu->IsItemCheckedAt(3));
+ EXPECT_EQ(0, menu->GetItemCount());
+}
+
+
+TEST_F(AppContextMenuTest, ArcMenuShortcut) {
+ ArcAppTest arc_test;
+ arc_test.SetUp(profile());
+
+ const arc::mojom::ShortcutInfo& shortcut_info = arc_test.fake_shortcuts()[0];
+ const std::string app_id = ArcAppTest::GetAppId(shortcut_info);
+ controller()->SetAppPinnable(app_id, AppListControllerDelegate::PIN_EDITABLE);
+
+ arc_test.app_instance()->SendInstallShortcuts(arc_test.fake_shortcuts());
+
+ ArcAppItem item(profile(), nullptr, app_id, std::string());
+
+ ui::MenuModel* menu = item.GetContextMenuModel();
+ ASSERT_NE(nullptr, menu);
+
+ ASSERT_EQ(6, menu->GetItemCount());
+ ValidateItemState(menu, 0, MenuState(app_list::AppContextMenu::LAUNCH_NEW));
+ ValidateItemState(menu, 1, MenuState()); // separator
+ ValidateItemState(menu, 2, MenuState(app_list::AppContextMenu::TOGGLE_PIN));
+ ValidateItemState(menu, 3, MenuState()); // separator
+ ValidateItemState(menu, 4, MenuState(app_list::AppContextMenu::UNINSTALL));
+ ValidateItemState(
+ menu, 5, MenuState(app_list::AppContextMenu::SHOW_APP_INFO));
+
+ // This makes all apps non-ready. Shortcut is still uninstall-able.
+ arc::InstanceHolder<arc::mojom::AppInstance>::Observer* instance_observer =
+ arc_test.arc_app_list_prefs();
+ instance_observer->OnInstanceClosed();
+
+ menu = item.GetContextMenuModel();
+ ASSERT_EQ(6, menu->GetItemCount());
+ ValidateItemState(menu, 0, MenuState(app_list::AppContextMenu::LAUNCH_NEW));
+ ValidateItemState(menu, 1, MenuState()); // separator
+ ValidateItemState(menu, 2, MenuState(app_list::AppContextMenu::TOGGLE_PIN));
+ ValidateItemState(menu, 3, MenuState()); // separator
+ ValidateItemState(menu, 4, MenuState(app_list::AppContextMenu::UNINSTALL));
+ ValidateItemState(
+ menu, 5,
+ MenuState(app_list::AppContextMenu::SHOW_APP_INFO, false, false));
}
TEST_F(AppContextMenuTest, ArcMenuStickyItem) {
@@ -430,46 +484,14 @@ TEST_F(AppContextMenuTest, ArcMenuStickyItem) {
ui::MenuModel* menu = item.GetContextMenuModel();
ASSERT_NE(nullptr, menu);
- ASSERT_EQ(4, menu->GetItemCount());
- EXPECT_EQ(app_list::AppContextMenu::LAUNCH_NEW, menu->GetCommandIdAt(0));
- EXPECT_TRUE(menu->IsEnabledAt(0));
- EXPECT_FALSE(menu->IsItemCheckedAt(0));
- EXPECT_EQ(-1, menu->GetCommandIdAt(1)); // separator
- EXPECT_EQ(app_list::AppContextMenu::TOGGLE_PIN, menu->GetCommandIdAt(2));
- EXPECT_TRUE(menu->IsEnabledAt(2));
- EXPECT_FALSE(menu->IsItemCheckedAt(2));
- EXPECT_EQ(app_list::AppContextMenu::SHOW_APP_INFO, menu->GetCommandIdAt(3));
- EXPECT_TRUE(menu->IsEnabledAt(3));
- EXPECT_FALSE(menu->IsItemCheckedAt(3));
-
- // No "uninstall" entry.
- }
-
- {
- // Verify normal app menu
- const arc::mojom::AppInfo& app_info = arc_test.fake_apps()[1];
- const std::string app_id = ArcAppTest::GetAppId(app_info);
- controller()->SetAppPinnable(app_id,
- AppListControllerDelegate::PIN_EDITABLE);
- ArcAppItem item(profile(), nullptr, app_id, std::string());
- ui::MenuModel* menu = item.GetContextMenuModel();
- ASSERT_NE(nullptr, menu);
-
- ASSERT_EQ(6, menu->GetItemCount());
- EXPECT_EQ(app_list::AppContextMenu::LAUNCH_NEW, menu->GetCommandIdAt(0));
- EXPECT_TRUE(menu->IsEnabledAt(0));
- EXPECT_FALSE(menu->IsItemCheckedAt(0));
- EXPECT_EQ(-1, menu->GetCommandIdAt(1)); // separator
- EXPECT_EQ(app_list::AppContextMenu::TOGGLE_PIN, menu->GetCommandIdAt(2));
- EXPECT_TRUE(menu->IsEnabledAt(2));
- EXPECT_FALSE(menu->IsItemCheckedAt(2));
- EXPECT_EQ(-1, menu->GetCommandIdAt(3)); // separator
- EXPECT_EQ(app_list::AppContextMenu::UNINSTALL, menu->GetCommandIdAt(4));
- EXPECT_TRUE(menu->IsEnabledAt(4));
- EXPECT_FALSE(menu->IsItemCheckedAt(4));
- EXPECT_EQ(app_list::AppContextMenu::SHOW_APP_INFO, menu->GetCommandIdAt(5));
- EXPECT_TRUE(menu->IsEnabledAt(5));
- EXPECT_FALSE(menu->IsItemCheckedAt(5));
+ ASSERT_EQ(5, menu->GetItemCount());
+ ValidateItemState(menu, 0, MenuState(app_list::AppContextMenu::LAUNCH_NEW));
+ ValidateItemState(menu, 1, MenuState()); // separator
+ ValidateItemState(menu, 2, MenuState(app_list::AppContextMenu::TOGGLE_PIN));
+ ValidateItemState(menu, 3, MenuState()); // separator
+ ValidateItemState(
+ menu, 4, MenuState(app_list::AppContextMenu::SHOW_APP_INFO));
}
}
+
#endif

Powered by Google App Engine
This is Rietveld 408576698