Index: ash/wm/workspace_controller_unittest.cc |
diff --git a/ash/wm/workspace_controller_unittest.cc b/ash/wm/workspace_controller_unittest.cc |
index 7dca75a08ba7f5d88e3d33977d1897f10cd568ba..0410bf01e3e100fad8a84669f519d68640eae15c 100644 |
--- a/ash/wm/workspace_controller_unittest.cc |
+++ b/ash/wm/workspace_controller_unittest.cc |
@@ -101,15 +101,18 @@ class WorkspaceControllerTest : public test::AshTestBase { |
return window; |
} |
- aura::Window* CreateAppTestWindow(aura::Window* parent) { |
- aura::Window* window = new aura::Window(NULL); |
- window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL); |
- window->SetType(aura::client::WINDOW_TYPE_POPUP); |
- window->Init(ui::LAYER_TEXTURED); |
- if (!parent) |
- SetDefaultParentByPrimaryRootWindow(window); |
- else |
- parent->AddChild(window); |
+ aura::Window* CreateBrowserLikeWindow(const gfx::Rect& bounds) { |
+ aura::Window* window = CreateTestWindow(); |
+ window->SetBounds(bounds); |
+ SetTrackedByWorkspace(window, true); |
+ wm::SetWindowPositionManaged(window, true); |
+ window->Show(); |
+ return window; |
+ } |
+ |
+ aura::Window* CreatePopupLikeWindow(const gfx::Rect& bounds) { |
+ aura::Window* window = CreateTestWindowInShellWithBounds(bounds); |
+ window->Show(); |
return window; |
} |
@@ -718,9 +721,64 @@ TEST_F(WorkspaceControllerTest, TrackedByWorkspace) { |
EXPECT_EQ(w1->parent(), w2->parent()); |
} |
+// Test the placement of newly created windows. |
+TEST_F(WorkspaceControllerTest, BasicAutoPlacingOnCreate) { |
+ if (!SupportsHostWindowResize()) |
+ return; |
+ UpdateDisplay("1600x1200"); |
+ // Creating a popup handler here to make sure it does not interfere with the |
+ // existing windows. |
+ gfx::Rect source_browser_bounds(16, 32, 640, 320); |
+ scoped_ptr<aura::Window> browser_window(CreateBrowserLikeWindow( |
+ source_browser_bounds)); |
+ |
+ // Creating a popup to make sure it does not interfere with the positioning. |
+ scoped_ptr<aura::Window> browser_popup(CreatePopupLikeWindow( |
+ gfx::Rect(16, 32, 128, 256))); |
+ |
+ browser_window->Show(); |
+ browser_popup->Show(); |
+ |
+ { // With a shown window it's size should get returned. |
+ scoped_ptr<aura::Window> new_browser_window(CreateBrowserLikeWindow( |
+ source_browser_bounds)); |
+ // The position should be right flush. |
+ EXPECT_EQ("960,32 640x320", new_browser_window->bounds().ToString()); |
+ } |
+ |
+ { // With the window shown - but more on the right side then on the left |
+ // side (and partially out of the screen), it should default to the other |
+ // side and inside the screen. |
+ gfx::Rect source_browser_bounds(gfx::Rect(1000, 600, 640, 320)); |
+ browser_window->SetBounds(source_browser_bounds); |
+ |
+ scoped_ptr<aura::Window> new_browser_window(CreateBrowserLikeWindow( |
+ source_browser_bounds)); |
+ // The position should be left & bottom flush. |
+ EXPECT_EQ("0,600 640x320", new_browser_window->bounds().ToString()); |
+ |
+ // If the other window was already beyond the point to get right flush |
+ // it will remain where it is. |
+ EXPECT_EQ("1000,600 640x320", browser_window->bounds().ToString()); |
+ } |
+ |
+ { // Make sure that popups do not get changed. |
+ scoped_ptr<aura::Window> new_popup_window(CreatePopupLikeWindow( |
+ gfx::Rect(50, 100, 300, 150))); |
+ EXPECT_EQ("50,100 300x150", new_popup_window->bounds().ToString()); |
+ } |
+ |
+ browser_window->Hide(); |
+ { // If a window is there but not shown the default should be centered. |
+ scoped_ptr<aura::Window> new_browser_window(CreateBrowserLikeWindow( |
+ gfx::Rect(50, 100, 300, 150))); |
+ EXPECT_EQ("650,100 300x150", new_browser_window->bounds().ToString()); |
+ } |
+} |
+ |
// Test the basic auto placement of one and or two windows in a "simulated |
// session" of sequential window operations. |
-TEST_F(WorkspaceControllerTest, BasicAutoPlacing) { |
+TEST_F(WorkspaceControllerTest, BasicAutoPlacingOnShowHide) { |
// Test 1: In case there is no manageable window, no window should shift. |
scoped_ptr<aura::Window> window1(CreateTestWindowInShellWithId(0)); |
@@ -821,7 +879,7 @@ TEST_F(WorkspaceControllerTest, TestUserMovedWindowRepositioning) { |
// positionable again (user movement cleared). |
window2->Show(); |
- // |window1| should be flush left and |window3| flush right. |
+ // |window1| should be flush left and |window2| flush right. |
EXPECT_EQ("0,32 640x320", window1->bounds().ToString()); |
EXPECT_EQ( |
base::IntToString(desktop_area.width() - window2->bounds().width()) + |
@@ -837,6 +895,54 @@ TEST_F(WorkspaceControllerTest, TestUserMovedWindowRepositioning) { |
EXPECT_TRUE(ash::wm::HasUserChangedWindowPositionOrSize(window1.get())); |
} |
+// Test if the single window will be restored at original position. |
+TEST_F(WorkspaceControllerTest, TestSingleWindowsRestoredBounds) { |
+ scoped_ptr<aura::Window> window1( |
+ CreateTestWindowInShellWithBounds(gfx::Rect(100, 100, 100, 100))); |
+ scoped_ptr<aura::Window> window2( |
+ CreateTestWindowInShellWithBounds(gfx::Rect(110, 110, 100, 100))); |
+ scoped_ptr<aura::Window> window3( |
+ CreateTestWindowInShellWithBounds(gfx::Rect(120, 120, 100, 100))); |
+ window1->Hide(); |
+ window2->Hide(); |
+ window3->Hide(); |
+ ash::wm::SetWindowPositionManaged(window1.get(), true); |
+ ash::wm::SetWindowPositionManaged(window2.get(), true); |
+ ash::wm::SetWindowPositionManaged(window3.get(), true); |
+ |
+ window1->Show(); |
+ wm::ActivateWindow(window1.get()); |
+ window2->Show(); |
+ wm::ActivateWindow(window2.get()); |
+ window3->Show(); |
+ wm::ActivateWindow(window3.get()); |
+ EXPECT_EQ(0, window1->bounds().x()); |
+ EXPECT_EQ(window2->GetRootWindow()->bounds().right(), |
+ window2->bounds().right()); |
+ EXPECT_EQ(0, window3->bounds().x()); |
+ |
+ window1->Hide(); |
+ EXPECT_EQ(window2->GetRootWindow()->bounds().right(), |
+ window2->bounds().right()); |
+ EXPECT_EQ(0, window3->bounds().x()); |
+ |
+ // Being a single window will retore the original location. |
+ window3->Hide(); |
+ wm::ActivateWindow(window2.get()); |
+ EXPECT_EQ("110,110 100x100", window2->bounds().ToString()); |
+ |
+ // Showing the 3rd will push the 2nd window left. |
+ window3->Show(); |
+ wm::ActivateWindow(window3.get()); |
+ EXPECT_EQ(0, window2->bounds().x()); |
+ EXPECT_EQ(window3->GetRootWindow()->bounds().right(), |
+ window3->bounds().right()); |
+ |
+ // Being a single window will retore the original location. |
+ window2->Hide(); |
+ EXPECT_EQ("120,120 100x100", window3->bounds().ToString()); |
+} |
+ |
// Test that user placed windows go back to their user placement after the user |
// closes all other windows. |
TEST_F(WorkspaceControllerTest, TestUserHandledWindowRestore) { |