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

Unified Diff: ash/wm/panel_layout_manager_unittest.cc

Issue 10174037: Implement a callout widget for the active panel. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase? Created 8 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/wm/panel_layout_manager.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/wm/panel_layout_manager_unittest.cc
diff --git a/ash/wm/panel_layout_manager_unittest.cc b/ash/wm/panel_layout_manager_unittest.cc
index 9e1f8c40c8412870ced37053be19817c9af288c1..a7d0ce3fdec1410bcf59edf7e598b3b4c42e2a84 100644
--- a/ash/wm/panel_layout_manager_unittest.cc
+++ b/ash/wm/panel_layout_manager_unittest.cc
@@ -16,16 +16,13 @@
#include "base/compiler_specific.h"
#include "ui/aura/window.h"
#include "ui/aura/test/test_windows.h"
-#include "ui/aura/test/test_window_delegate.h"
+#include "ui/views/widget/widget.h"
namespace ash {
-namespace {
+namespace internal {
-aura::Window* GetPanelContainer() {
- return Shell::GetInstance()->GetContainer(
- ash::internal::kShellWindowId_PanelContainer);
-}
+using aura::test::WindowIsAbove;
class PanelLayoutManagerTest : public ash::test::AshTestBase {
public:
@@ -38,9 +35,13 @@ class PanelLayoutManagerTest : public ash::test::AshTestBase {
ASSERT_TRUE(ash::test::TestLauncherDelegate::instance());
}
+ aura::Window* CreateNormalWindow() {
+ return aura::test::CreateTestWindowWithBounds(gfx::Rect(), NULL);
+ }
+
aura::Window* CreatePanelWindow(const gfx::Rect& bounds) {
- aura::Window* window = CreateTestWindowWithDelegateAndType(
- &window_delegate_,
+ aura::Window* window = aura::test::CreateTestWindowWithDelegateAndType(
+ NULL,
aura::client::WINDOW_TYPE_PANEL,
0,
bounds,
@@ -51,30 +52,60 @@ class PanelLayoutManagerTest : public ash::test::AshTestBase {
return window;
}
- private:
- aura::test::TestWindowDelegate window_delegate_;
+ aura::Window* GetPanelContainer() {
+ return Shell::GetInstance()->GetContainer(
+ ash::internal::kShellWindowId_PanelContainer);
+ }
- DISALLOW_COPY_AND_ASSIGN(PanelLayoutManagerTest);
-};
+ void GetCalloutWidget(views::Widget** widget) {
+ PanelLayoutManager* manager =
+ static_cast<PanelLayoutManager*>(GetPanelContainer()->layout_manager());
+ ASSERT_TRUE(manager);
+ ASSERT_TRUE(manager->callout_widget());
+ *widget = manager->callout_widget();
+ }
-// TODO(dcheng): This should be const, but GetScreenBoundsOfItemIconForWindow
-// takes a non-const Window. We can probably fix that.
-void IsPanelAboveLauncherIcon(aura::Window* panel) {
- Launcher* launcher = Shell::GetInstance()->launcher();
- gfx::Rect icon_bounds = launcher->GetScreenBoundsOfItemIconForWindow(panel);
- ASSERT_FALSE(icon_bounds.IsEmpty());
-
- gfx::Rect window_bounds = panel->GetBoundsInRootWindow();
-
- // 1-pixel tolerance--since we center panels over their icons, panels with odd
- // pixel widths won't be perfectly lined up with even pixel width launcher
- // icons.
- EXPECT_NEAR(
- window_bounds.CenterPoint().x(), icon_bounds.CenterPoint().x(), 1);
- EXPECT_EQ(window_bounds.bottom(), icon_bounds.y());
-}
+ // TODO(dcheng): This should be const, but GetScreenBoundsOfItemIconForWindow
+ // takes a non-const Window. We can probably fix that.
+ void IsPanelAboveLauncherIcon(aura::Window* panel) {
+ Launcher* launcher = Shell::GetInstance()->launcher();
+ gfx::Rect icon_bounds = launcher->GetScreenBoundsOfItemIconForWindow(panel);
+ ASSERT_FALSE(icon_bounds.IsEmpty());
+
+ gfx::Rect window_bounds = panel->GetBoundsInRootWindow();
+
+ // 1-pixel tolerance--since we center panels over their icons, panels with
+ // odd pixel widths won't be perfectly lined up with even pixel width
+ // launcher icons.
+ EXPECT_NEAR(icon_bounds.CenterPoint().x(),
+ window_bounds.CenterPoint().x(),
+ 1);
+ EXPECT_EQ(launcher->widget()->GetWindowScreenBounds().y(),
+ window_bounds.bottom());
+ }
-} // namespace
+ void IsCalloutAbovePanel(aura::Window* panel) {
+ // Flush the message loop, since callout updates use a delayed task.
+ MessageLoop::current()->RunAllPending();
+ views::Widget* widget = NULL;
+ GetCalloutWidget(&widget);
+ EXPECT_TRUE(widget->IsVisible());
+ EXPECT_EQ(panel->GetBoundsInRootWindow().bottom(),
+ widget->GetWindowScreenBounds().y());
+ EXPECT_NEAR(panel->GetBoundsInRootWindow().CenterPoint().x(),
+ widget->GetWindowScreenBounds().CenterPoint().x(),
+ 1);
+ }
+
+ bool IsCalloutVisible() {
+ views::Widget* widget = NULL;
+ GetCalloutWidget(&widget);
+ return widget->IsVisible();
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(PanelLayoutManagerTest);
+};
// Tests that a created panel window is successfully added to the panel
// layout manager.
@@ -110,29 +141,44 @@ TEST_F(PanelLayoutManagerTest, MultiplePanelStacking) {
scoped_ptr<aura::Window> w3(CreatePanelWindow(bounds));
// Default stacking order.
- ASSERT_EQ(3u, GetPanelContainer()->children().size());
- EXPECT_EQ(w1.get(), GetPanelContainer()->children()[0]);
- EXPECT_EQ(w2.get(), GetPanelContainer()->children()[1]);
- EXPECT_EQ(w3.get(), GetPanelContainer()->children()[2]);
+ EXPECT_TRUE(WindowIsAbove(w3.get(), w2.get()));
+ EXPECT_TRUE(WindowIsAbove(w2.get(), w1.get()));
// Changing the active window should update the stacking order.
wm::ActivateWindow(w1.get());
- ASSERT_EQ(3u, GetPanelContainer()->children().size());
- EXPECT_EQ(w3.get(), GetPanelContainer()->children()[0]);
- EXPECT_EQ(w2.get(), GetPanelContainer()->children()[1]);
- EXPECT_EQ(w1.get(), GetPanelContainer()->children()[2]);
+ EXPECT_TRUE(WindowIsAbove(w1.get(), w2.get()));
+ EXPECT_TRUE(WindowIsAbove(w2.get(), w3.get()));
wm::ActivateWindow(w2.get());
- ASSERT_EQ(3u, GetPanelContainer()->children().size());
- EXPECT_EQ(w3.get(), GetPanelContainer()->children()[0]);
- EXPECT_EQ(w1.get(), GetPanelContainer()->children()[1]);
- EXPECT_EQ(w2.get(), GetPanelContainer()->children()[2]);
+ EXPECT_TRUE(WindowIsAbove(w1.get(), w3.get()));
+ EXPECT_TRUE(WindowIsAbove(w2.get(), w3.get()));
+ EXPECT_TRUE(WindowIsAbove(w2.get(), w1.get()));
wm::ActivateWindow(w3.get());
- ASSERT_EQ(3u, GetPanelContainer()->children().size());
- EXPECT_EQ(w1.get(), GetPanelContainer()->children()[0]);
- EXPECT_EQ(w2.get(), GetPanelContainer()->children()[1]);
- EXPECT_EQ(w3.get(), GetPanelContainer()->children()[2]);
+ EXPECT_TRUE(WindowIsAbove(w3.get(), w2.get()));
+ EXPECT_TRUE(WindowIsAbove(w2.get(), w1.get()));
+}
+
+TEST_F(PanelLayoutManagerTest, MultiplePanelCallout) {
+ gfx::Rect bounds(0, 0, 200, 200);
+ scoped_ptr<aura::Window> w1(CreatePanelWindow(bounds));
+ scoped_ptr<aura::Window> w2(CreatePanelWindow(bounds));
+ scoped_ptr<aura::Window> w3(CreatePanelWindow(bounds));
+ scoped_ptr<aura::Window> w4(CreateNormalWindow());
+ EXPECT_FALSE(IsCalloutVisible());
+ wm::ActivateWindow(w1.get());
+ EXPECT_NO_FATAL_FAILURE(IsCalloutAbovePanel(w1.get()));
+ wm::ActivateWindow(w2.get());
+ EXPECT_NO_FATAL_FAILURE(IsCalloutAbovePanel(w2.get()));
+ wm::ActivateWindow(w3.get());
+ EXPECT_NO_FATAL_FAILURE(IsCalloutAbovePanel(w3.get()));
+ wm::ActivateWindow(w4.get());
+ EXPECT_FALSE(IsCalloutVisible());
+ wm::ActivateWindow(w3.get());
+ EXPECT_NO_FATAL_FAILURE(IsCalloutAbovePanel(w3.get()));
+ w3.reset();
+ EXPECT_FALSE(IsCalloutVisible());
+
}
// Tests removing panels.
@@ -142,13 +188,13 @@ TEST_F(PanelLayoutManagerTest, RemoveLeftPanel) {
scoped_ptr<aura::Window> w2(CreatePanelWindow(bounds));
scoped_ptr<aura::Window> w3(CreatePanelWindow(bounds));
+ // At this point, windows should be stacked with 1 < 2 < 3
wm::ActivateWindow(w1.get());
+ // Now, windows should be stacked 1 > 2 > 3
w1.reset();
EXPECT_NO_FATAL_FAILURE(IsPanelAboveLauncherIcon(w2.get()));
EXPECT_NO_FATAL_FAILURE(IsPanelAboveLauncherIcon(w3.get()));
- ASSERT_EQ(2u, GetPanelContainer()->children().size());
- EXPECT_EQ(w3.get(), GetPanelContainer()->children()[0]);
- EXPECT_EQ(w2.get(), GetPanelContainer()->children()[1]);
+ EXPECT_TRUE(WindowIsAbove(w2.get(), w3.get()));
}
TEST_F(PanelLayoutManagerTest, RemoveMiddlePanel) {
@@ -157,13 +203,13 @@ TEST_F(PanelLayoutManagerTest, RemoveMiddlePanel) {
scoped_ptr<aura::Window> w2(CreatePanelWindow(bounds));
scoped_ptr<aura::Window> w3(CreatePanelWindow(bounds));
+ // At this point, windows should be stacked with 1 < 2 < 3
wm::ActivateWindow(w2.get());
+ // Windows should be stacked 1 < 2 > 3
w2.reset();
EXPECT_NO_FATAL_FAILURE(IsPanelAboveLauncherIcon(w1.get()));
EXPECT_NO_FATAL_FAILURE(IsPanelAboveLauncherIcon(w3.get()));
- ASSERT_EQ(2u, GetPanelContainer()->children().size());
- EXPECT_EQ(w1.get(), GetPanelContainer()->children()[0]);
- EXPECT_EQ(w3.get(), GetPanelContainer()->children()[1]);
+ EXPECT_TRUE(WindowIsAbove(w3.get(), w1.get()));
}
TEST_F(PanelLayoutManagerTest, RemoveRightPanel) {
@@ -172,13 +218,13 @@ TEST_F(PanelLayoutManagerTest, RemoveRightPanel) {
scoped_ptr<aura::Window> w2(CreatePanelWindow(bounds));
scoped_ptr<aura::Window> w3(CreatePanelWindow(bounds));
+ // At this point, windows should be stacked with 1 < 2 < 3
wm::ActivateWindow(w3.get());
+ // Order shouldn't change.
w3.reset();
EXPECT_NO_FATAL_FAILURE(IsPanelAboveLauncherIcon(w1.get()));
EXPECT_NO_FATAL_FAILURE(IsPanelAboveLauncherIcon(w2.get()));
- ASSERT_EQ(2u, GetPanelContainer()->children().size());
- EXPECT_EQ(w1.get(), GetPanelContainer()->children()[0]);
- EXPECT_EQ(w2.get(), GetPanelContainer()->children()[1]);
+ EXPECT_TRUE(WindowIsAbove(w2.get(), w1.get()));
}
TEST_F(PanelLayoutManagerTest, RemoveNonActivePanel) {
@@ -187,13 +233,15 @@ TEST_F(PanelLayoutManagerTest, RemoveNonActivePanel) {
scoped_ptr<aura::Window> w2(CreatePanelWindow(bounds));
scoped_ptr<aura::Window> w3(CreatePanelWindow(bounds));
+ // At this point, windows should be stacked with 1 < 2 < 3
wm::ActivateWindow(w2.get());
+ // Windows should be stacked 1 < 2 > 3
w1.reset();
EXPECT_NO_FATAL_FAILURE(IsPanelAboveLauncherIcon(w2.get()));
EXPECT_NO_FATAL_FAILURE(IsPanelAboveLauncherIcon(w3.get()));
- ASSERT_EQ(2u, GetPanelContainer()->children().size());
- EXPECT_EQ(w3.get(), GetPanelContainer()->children()[0]);
- EXPECT_EQ(w2.get(), GetPanelContainer()->children()[1]);
+ EXPECT_TRUE(WindowIsAbove(w2.get(), w3.get()));
}
+} // namespace internal
+
} // namespace ash
« no previous file with comments | « ash/wm/panel_layout_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698