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

Unified Diff: ash/wm/overview/window_selector_unittest.cc

Issue 23654037: Add panels as a single group of windows per display for overview window cycling. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 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: ash/wm/overview/window_selector_unittest.cc
diff --git a/ash/wm/overview/window_selector_unittest.cc b/ash/wm/overview/window_selector_unittest.cc
index 3210259ca4b753f6db96305c6a9ae0fda42e5281..6322d1a930895d057c8e6f593033c0b4e54e074f 100644
--- a/ash/wm/overview/window_selector_unittest.cc
+++ b/ash/wm/overview/window_selector_unittest.cc
@@ -2,11 +2,14 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "ash/launcher/launcher.h"
#include "ash/root_window_controller.h"
#include "ash/screen_ash.h"
#include "ash/shell.h"
#include "ash/test/ash_test_base.h"
+#include "ash/test/launcher_view_test_api.h"
#include "ash/test/shell_test_api.h"
+#include "ash/test/test_launcher_delegate.h"
#include "ash/wm/mru_window_tracker.h"
#include "ash/wm/overview/window_selector.h"
#include "ash/wm/overview/window_selector_controller.h"
@@ -34,10 +37,27 @@ class WindowSelectorTest : public test::AshTestBase {
WindowSelectorTest() {}
virtual ~WindowSelectorTest() {}
+ virtual void SetUp() OVERRIDE {
+ test::AshTestBase::SetUp();
+ ASSERT_TRUE(test::TestLauncherDelegate::instance());
+
+ launcher_view_test_.reset(new test::LauncherViewTestAPI(
+ Launcher::ForPrimaryDisplay()->GetLauncherViewForTest()));
+ launcher_view_test_->SetAnimationDuration(1);
+ }
+
aura::Window* CreateWindow(const gfx::Rect& bounds) {
return CreateTestWindowInShellWithDelegate(&wd, -1, bounds);
}
+ aura::Window* CreatePanelWindow(const gfx::Rect& bounds) {
+ aura::Window* window = CreateTestWindowInShellWithDelegateAndType(
+ NULL, aura::client::WINDOW_TYPE_PANEL, 0, bounds);
+ test::TestLauncherDelegate::instance()->AddLauncherItem(window);
+ launcher_view_test()->RunMessageLoopUntilAnimationsDone();
+ return window;
+ }
+
bool WindowsOverlapping(aura::Window* window1, aura::Window* window2) {
gfx::RectF window1_bounds = GetTransformedTargetBounds(window1);
gfx::RectF window2_bounds = GetTransformedTargetBounds(window2);
@@ -95,8 +115,13 @@ class WindowSelectorTest : public test::AshTestBase {
Shell::GetActiveRootWindow())->GetFocusedWindow();
}
+ test::LauncherViewTestAPI* launcher_view_test() {
+ return launcher_view_test_.get();
+ }
+
private:
aura::test::TestWindowDelegate wd;
+ scoped_ptr<test::LauncherViewTestAPI> launcher_view_test_;
DISALLOW_COPY_AND_ASSIGN(WindowSelectorTest);
};
@@ -106,7 +131,11 @@ TEST_F(WindowSelectorTest, Basic) {
gfx::Rect bounds(0, 0, 400, 400);
scoped_ptr<aura::Window> window1(CreateWindow(bounds));
scoped_ptr<aura::Window> window2(CreateWindow(bounds));
+ scoped_ptr<aura::Window> panel1(CreatePanelWindow(bounds));
+ scoped_ptr<aura::Window> panel2(CreatePanelWindow(bounds));
EXPECT_TRUE(WindowsOverlapping(window1.get(), window2.get()));
+ EXPECT_TRUE(WindowsOverlapping(window1.get(), panel1.get()));
+ EXPECT_TRUE(WindowsOverlapping(panel1.get(), panel2.get()));
wm::ActivateWindow(window2.get());
EXPECT_FALSE(wm::IsActiveWindow(window1.get()));
EXPECT_TRUE(wm::IsActiveWindow(window2.get()));
@@ -117,6 +146,10 @@ TEST_F(WindowSelectorTest, Basic) {
ToggleOverview();
EXPECT_EQ(NULL, GetFocusedWindow());
EXPECT_FALSE(WindowsOverlapping(window1.get(), window2.get()));
+ EXPECT_FALSE(WindowsOverlapping(window1.get(), panel1.get()));
+ // Panels 1 and 2 should still be overlapping being in a single selector
+ // item.
+ EXPECT_TRUE(WindowsOverlapping(panel1.get(), panel2.get()));
// Clicking window 1 should activate it.
ClickWindow(window1.get());
@@ -148,6 +181,81 @@ TEST_F(WindowSelectorTest, BasicCycle) {
EXPECT_TRUE(wm::IsActiveWindow(window3.get()));
}
+// Tests cycles between panel and normal windows.
+TEST_F(WindowSelectorTest, CyclePanels) {
+ gfx::Rect bounds(0, 0, 400, 400);
+ scoped_ptr<aura::Window> window1(CreateWindow(bounds));
+ scoped_ptr<aura::Window> window2(CreateWindow(bounds));
+ scoped_ptr<aura::Window> panel1(CreatePanelWindow(bounds));
+ scoped_ptr<aura::Window> panel2(CreatePanelWindow(bounds));
+ wm::ActivateWindow(window2.get());
+ wm::ActivateWindow(window1.get());
+ wm::ActivateWindow(panel2.get());
+ wm::ActivateWindow(panel1.get());
+ EXPECT_TRUE(wm::IsActiveWindow(panel1.get()));
+
+ // Cycling once should select window1 since the panels are grouped into a
+ // single selectable item.
+ Cycle(WindowSelector::FORWARD);
+ StopCycling();
+ EXPECT_TRUE(wm::IsActiveWindow(window1.get()));
+
+ // Cycling again should select the most recently used panel.
+ Cycle(WindowSelector::FORWARD);
+ StopCycling();
+ EXPECT_TRUE(wm::IsActiveWindow(panel1.get()));
+}
+
+// Tests cycles between panel and normal windows.
+TEST_F(WindowSelectorTest, CyclePanelsDestroyed) {
+ gfx::Rect bounds(0, 0, 400, 400);
+ scoped_ptr<aura::Window> window1(CreateWindow(bounds));
+ scoped_ptr<aura::Window> window2(CreateWindow(bounds));
+ scoped_ptr<aura::Window> window3(CreateWindow(bounds));
+ scoped_ptr<aura::Window> panel1(CreatePanelWindow(bounds));
+ scoped_ptr<aura::Window> panel2(CreatePanelWindow(bounds));
+ wm::ActivateWindow(window3.get());
+ wm::ActivateWindow(panel2.get());
+ wm::ActivateWindow(panel1.get());
+ wm::ActivateWindow(window2.get());
+ wm::ActivateWindow(window1.get());
+ EXPECT_TRUE(wm::IsActiveWindow(window1.get()));
+
+ // Cycling once highlights window2.
+ Cycle(WindowSelector::FORWARD);
+ // All panels are destroyed.
+ panel1.reset();
+ panel2.reset();
+ // Cycling again should now select window3.
+ Cycle(WindowSelector::FORWARD);
+ StopCycling();
+ EXPECT_TRUE(wm::IsActiveWindow(window3.get()));
+}
+
+// Tests cycles between panel and normal windows.
+TEST_F(WindowSelectorTest, CycleMruPanelDestroyed) {
+ gfx::Rect bounds(0, 0, 400, 400);
+ scoped_ptr<aura::Window> window1(CreateWindow(bounds));
+ scoped_ptr<aura::Window> window2(CreateWindow(bounds));
+ scoped_ptr<aura::Window> panel1(CreatePanelWindow(bounds));
+ scoped_ptr<aura::Window> panel2(CreatePanelWindow(bounds));
+ wm::ActivateWindow(panel2.get());
+ wm::ActivateWindow(panel1.get());
+ wm::ActivateWindow(window2.get());
+ wm::ActivateWindow(window1.get());
+ EXPECT_TRUE(wm::IsActiveWindow(window1.get()));
+
+ // Cycling once highlights window2.
+ Cycle(WindowSelector::FORWARD);
+ // Panel 1 is the next item as the MRU panel, removing it should make panel 2
+ // the next window to be selected.
+ panel1.reset();
+ // Cycling again should now select window3.
+ Cycle(WindowSelector::FORWARD);
+ StopCycling();
+ EXPECT_TRUE(wm::IsActiveWindow(panel2.get()));
+}
+
// Tests that a newly created window aborts overview.
TEST_F(WindowSelectorTest, NewWindowCancelsOveriew) {
gfx::Rect bounds(0, 0, 400, 400);
@@ -257,24 +365,40 @@ TEST_F(WindowSelectorTest, MultipleDisplays) {
if (!SupportsMultipleDisplays())
return;
- UpdateDisplay("400x400,400x400");
+ UpdateDisplay("600x400,600x400");
Shell::RootWindowList root_windows = Shell::GetAllRootWindows();
-
- scoped_ptr<aura::Window> window1(CreateWindow(gfx::Rect(0, 0, 100, 100)));
- scoped_ptr<aura::Window> window2(CreateWindow(gfx::Rect(0, 0, 100, 100)));
- scoped_ptr<aura::Window> window3(CreateWindow(gfx::Rect(450, 0, 100, 100)));
- scoped_ptr<aura::Window> window4(CreateWindow(gfx::Rect(450, 0, 100, 100)));
+ gfx::Rect bounds1(0, 0, 200, 200);
+ gfx::Rect bounds2(650, 0, 200, 200);
+
+ scoped_ptr<aura::Window> window1(CreateWindow(bounds1));
+ scoped_ptr<aura::Window> window2(CreateWindow(bounds1));
+ scoped_ptr<aura::Window> window3(CreateWindow(bounds2));
+ scoped_ptr<aura::Window> window4(CreateWindow(bounds2));
+ scoped_ptr<aura::Window> panel1(CreatePanelWindow(bounds1));
+ scoped_ptr<aura::Window> panel2(CreatePanelWindow(bounds1));
+ scoped_ptr<aura::Window> panel3(CreatePanelWindow(bounds2));
+ scoped_ptr<aura::Window> panel4(CreatePanelWindow(bounds2));
EXPECT_EQ(root_windows[0], window1->GetRootWindow());
EXPECT_EQ(root_windows[0], window2->GetRootWindow());
EXPECT_EQ(root_windows[1], window3->GetRootWindow());
EXPECT_EQ(root_windows[1], window4->GetRootWindow());
+ EXPECT_EQ(root_windows[0], panel1->GetRootWindow());
+ EXPECT_EQ(root_windows[0], panel2->GetRootWindow());
+ EXPECT_EQ(root_windows[1], panel3->GetRootWindow());
+ EXPECT_EQ(root_windows[1], panel4->GetRootWindow());
+
// In overview mode, each window remains in the same root window.
ToggleOverview();
EXPECT_EQ(root_windows[0], window1->GetRootWindow());
EXPECT_EQ(root_windows[0], window2->GetRootWindow());
EXPECT_EQ(root_windows[1], window3->GetRootWindow());
EXPECT_EQ(root_windows[1], window4->GetRootWindow());
+ EXPECT_EQ(root_windows[0], panel1->GetRootWindow());
+ EXPECT_EQ(root_windows[0], panel2->GetRootWindow());
+ EXPECT_EQ(root_windows[1], panel3->GetRootWindow());
+ EXPECT_EQ(root_windows[1], panel4->GetRootWindow());
+
root_windows[0]->bounds().Contains(
ToEnclosingRect(GetTransformedBounds(window1.get())));
root_windows[0]->bounds().Contains(
@@ -283,6 +407,18 @@ TEST_F(WindowSelectorTest, MultipleDisplays) {
ToEnclosingRect(GetTransformedBounds(window3.get())));
root_windows[1]->bounds().Contains(
ToEnclosingRect(GetTransformedBounds(window4.get())));
+
+ root_windows[0]->bounds().Contains(
+ ToEnclosingRect(GetTransformedBounds(panel1.get())));
+ root_windows[0]->bounds().Contains(
+ ToEnclosingRect(GetTransformedBounds(panel2.get())));
+ root_windows[1]->bounds().Contains(
+ ToEnclosingRect(GetTransformedBounds(panel3.get())));
+ root_windows[1]->bounds().Contains(
+ ToEnclosingRect(GetTransformedBounds(panel4.get())));
+ EXPECT_TRUE(WindowsOverlapping(panel1.get(), panel2.get()));
+ EXPECT_TRUE(WindowsOverlapping(panel3.get(), panel4.get()));
+ EXPECT_FALSE(WindowsOverlapping(panel1.get(), panel3.get()));
}
} // namespace internal

Powered by Google App Engine
This is Rietveld 408576698