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

Unified Diff: ash/app_list/app_list_shower_delegate_unittest.cc

Issue 1874043002: Reland of AppListController refactoring part 2: Ash's AppListShowerDelegate imlementation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@mus_chrome_delegates_app_list_2
Patch Set: Created 4 years, 8 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
« no previous file with comments | « ash/app_list/app_list_shower_delegate_factory.cc ('k') | ash/app_list/app_list_view_delegate_factory.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/app_list/app_list_shower_delegate_unittest.cc
diff --git a/ash/app_list/app_list_shower_delegate_unittest.cc b/ash/app_list/app_list_shower_delegate_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..37b2526f11b3cfb5b784a06b1d0e1d226769c147
--- /dev/null
+++ b/ash/app_list/app_list_shower_delegate_unittest.cc
@@ -0,0 +1,196 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <memory>
+
+#include "ash/shell.h"
+#include "ash/shell_window_ids.h"
+#include "ash/test/ash_test_base.h"
+#include "ash/test/ash_test_helper.h"
+#include "ash/test/test_shell_delegate.h"
+#include "ash/wm/window_util.h"
+#include "base/command_line.h"
+#include "ui/app_list/app_list_switches.h"
+#include "ui/app_list/shower/app_list_shower_impl.h"
+#include "ui/app_list/views/app_list_view.h"
+#include "ui/aura/test/test_windows.h"
+#include "ui/aura/window.h"
+#include "ui/events/test/event_generator.h"
+
+namespace ash {
+
+namespace {
+const int kMinimalCenteredAppListMargin = 10;
+}
+
+// The parameter is true to test the centered app list, false for normal.
+// (The test name ends in "/0" for normal, "/1" for centered.)
+class AppListShowerDelegateTest : public test::AshTestBase,
+ public ::testing::WithParamInterface<bool> {
+ public:
+ AppListShowerDelegateTest();
+ virtual ~AppListShowerDelegateTest();
+
+ // testing::Test:
+ void SetUp() override;
+
+ app_list::AppListShowerImpl* GetAppListShower();
+ bool IsCentered() const;
+};
+
+AppListShowerDelegateTest::AppListShowerDelegateTest() {}
+
+AppListShowerDelegateTest::~AppListShowerDelegateTest() {}
+
+void AppListShowerDelegateTest::SetUp() {
+ AshTestBase::SetUp();
+ if (IsCentered()) {
+ base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
+ command_line->AppendSwitch(app_list::switches::kEnableCenteredAppList);
+ }
+
+ // Make the display big enough to hold the experimental app list.
+ UpdateDisplay("1024x768");
+}
+
+app_list::AppListShowerImpl* AppListShowerDelegateTest::GetAppListShower() {
+ return ash_test_helper()->test_shell_delegate()->app_list_shower();
+}
+
+bool AppListShowerDelegateTest::IsCentered() const {
+ return GetParam();
+}
+
+// Tests that app launcher hides when focus moves to a normal window.
+TEST_P(AppListShowerDelegateTest, HideOnFocusOut) {
+ Shell::GetInstance()->ShowAppList(NULL);
+ EXPECT_TRUE(Shell::GetInstance()->GetAppListTargetVisibility());
+
+ std::unique_ptr<aura::Window> window(CreateTestWindowInShellWithId(0));
+ wm::ActivateWindow(window.get());
+
+ EXPECT_FALSE(Shell::GetInstance()->GetAppListTargetVisibility());
+}
+
+// Tests that app launcher remains visible when focus is moved to a different
+// window in kShellWindowId_AppListContainer.
+TEST_P(AppListShowerDelegateTest, RemainVisibleWhenFocusingToApplistContainer) {
+ Shell::GetInstance()->ShowAppList(NULL);
+ EXPECT_TRUE(Shell::GetInstance()->GetAppListTargetVisibility());
+
+ aura::Window* applist_container = Shell::GetContainer(
+ Shell::GetPrimaryRootWindow(), kShellWindowId_AppListContainer);
+ std::unique_ptr<aura::Window> window(
+ aura::test::CreateTestWindowWithId(0, applist_container));
+ wm::ActivateWindow(window.get());
+
+ EXPECT_TRUE(Shell::GetInstance()->GetAppListTargetVisibility());
+}
+
+// Tests that clicking outside the app-list bubble closes it.
+TEST_P(AppListShowerDelegateTest, ClickOutsideBubbleClosesBubble) {
+ Shell* shell = Shell::GetInstance();
+ shell->ShowAppList(NULL);
+ aura::Window* app_window = GetAppListShower()->GetWindow();
+ ASSERT_TRUE(app_window);
+ ui::test::EventGenerator generator(shell->GetPrimaryRootWindow(), app_window);
+ // Click on the bubble itself. The bubble should remain visible.
+ generator.ClickLeftButton();
+ EXPECT_TRUE(shell->GetAppListTargetVisibility());
+
+ // Click outside the bubble. This should close it.
+ gfx::Rect app_window_bounds = app_window->GetBoundsInRootWindow();
+ gfx::Point point_outside =
+ gfx::Point(app_window_bounds.right(), app_window_bounds.y()) +
+ gfx::Vector2d(10, 0);
+ EXPECT_TRUE(shell->GetPrimaryRootWindow()->bounds().Contains(point_outside));
+ generator.MoveMouseToInHost(point_outside);
+ generator.ClickLeftButton();
+ EXPECT_FALSE(shell->GetAppListTargetVisibility());
+}
+
+// Tests that clicking outside the app-list bubble closes it.
+TEST_P(AppListShowerDelegateTest, TapOutsideBubbleClosesBubble) {
+ Shell* shell = Shell::GetInstance();
+ shell->ShowAppList(NULL);
+
+ aura::Window* app_window = GetAppListShower()->GetWindow();
+ ASSERT_TRUE(app_window);
+ gfx::Rect app_window_bounds = app_window->GetBoundsInRootWindow();
+
+ ui::test::EventGenerator generator(shell->GetPrimaryRootWindow());
+ // Click on the bubble itself. The bubble should remain visible.
+ generator.GestureTapAt(app_window_bounds.CenterPoint());
+ EXPECT_TRUE(shell->GetAppListTargetVisibility());
+
+ // Click outside the bubble. This should close it.
+ gfx::Point point_outside =
+ gfx::Point(app_window_bounds.right(), app_window_bounds.y()) +
+ gfx::Vector2d(10, 0);
+ EXPECT_TRUE(shell->GetPrimaryRootWindow()->bounds().Contains(point_outside));
+ generator.GestureTapAt(point_outside);
+ EXPECT_FALSE(shell->GetAppListTargetVisibility());
+}
+
+// Tests opening the app launcher on a non-primary display, then deleting the
+// display.
+TEST_P(AppListShowerDelegateTest, NonPrimaryDisplay) {
+ if (!SupportsMultipleDisplays())
+ return;
+
+ // Set up a screen with two displays (horizontally adjacent).
+ UpdateDisplay("1024x768,1024x768");
+
+ aura::Window::Windows root_windows = Shell::GetAllRootWindows();
+ ASSERT_EQ(2u, root_windows.size());
+ aura::Window* secondary_window = root_windows[1];
+ EXPECT_EQ("1024,0 1024x768",
+ secondary_window->GetBoundsInScreen().ToString());
+
+ Shell::GetInstance()->ShowAppList(secondary_window);
+ EXPECT_TRUE(Shell::GetInstance()->GetAppListTargetVisibility());
+
+ // Remove the secondary display. Shouldn't crash (http://crbug.com/368990).
+ UpdateDisplay("1024x768");
+
+ // Updating the displays should close the app list.
+ EXPECT_FALSE(Shell::GetInstance()->GetAppListTargetVisibility());
+}
+
+// Tests opening the app launcher on a tiny display that is too small to contain
+// it.
+TEST_P(AppListShowerDelegateTest, TinyDisplay) {
+ // Don't test this for the non-centered app list case; it isn't designed for
+ // small displays. The most common case of a small display --- when the
+ // virtual keyboard is open --- switches into the centered app list mode, so
+ // we just want to run this test in that case.
+ if (!IsCentered())
+ return;
+
+ // UpdateDisplay is not supported in this case, so just skip the test.
+ if (!SupportsHostWindowResize())
+ return;
+
+ // Set up a screen with a tiny display (height smaller than the app list).
+ UpdateDisplay("400x300");
+
+ Shell::GetInstance()->ShowAppList(NULL);
+ EXPECT_TRUE(Shell::GetInstance()->GetAppListTargetVisibility());
+
+ // The top of the app list should be on-screen (even if the bottom is not).
+ // We need to manually calculate the Y coordinate of the top of the app list
+ // from the anchor (center) and height. There isn't a bounds rect that gives
+ // the actual app list position (the widget bounds include the bubble border
+ // which is much bigger than the actual app list size).
+ app_list::AppListView* app_list = GetAppListShower()->GetView();
+ int app_list_view_top =
+ app_list->anchor_rect().y() - app_list->bounds().height() / 2;
+ EXPECT_GE(app_list_view_top, kMinimalCenteredAppListMargin);
+}
+
+INSTANTIATE_TEST_CASE_P(AppListShowerDelegateTestInstance,
+ AppListShowerDelegateTest,
+ ::testing::Bool());
+
+} // namespace ash
« no previous file with comments | « ash/app_list/app_list_shower_delegate_factory.cc ('k') | ash/app_list/app_list_view_delegate_factory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698