Index: ash/wm/workspace/workspace_layout_manager2_unittest.cc |
diff --git a/ash/wm/workspace/workspace_layout_manager2_unittest.cc b/ash/wm/workspace/workspace_layout_manager2_unittest.cc |
index 59cab50ed8e5550ac3c77b824963fad06af2ab6a..17aa0859520ef810da156cfa4c91d47b6a10bbfb 100644 |
--- a/ash/wm/workspace/workspace_layout_manager2_unittest.cc |
+++ b/ash/wm/workspace/workspace_layout_manager2_unittest.cc |
@@ -9,6 +9,7 @@ |
#include "ash/wm/property_util.h" |
#include "ash/wm/shelf_layout_manager.h" |
#include "ash/wm/window_util.h" |
+#include "base/string_number_conversions.h" |
#include "ui/aura/root_window.h" |
#include "ui/aura/test/test_windows.h" |
#include "ui/aura/window.h" |
@@ -134,6 +135,212 @@ TEST_F(WorkspaceLayoutManager2Test, WindowShouldBeOnScreenWhenAdded) { |
EXPECT_TRUE(out_window->bounds().Intersects(root_window_bounds)); |
} |
-} // namespace |
+// Test the basic auto placement of one and or two window. |
+TEST_F(WorkspaceLayoutManager2Test, BasicAutoPlacing) { |
+ // Test 1: In case there is no manageable window, no window should shift. |
+ |
+ scoped_ptr<aura::Window> window1( |
+ aura::test::CreateTestWindowWithId(0, NULL)); |
+ window1->SetBounds(gfx::Rect(16, 32, 640, 320)); |
+ gfx::Rect desktop_area = window1->parent()->bounds(); |
+ |
+ scoped_ptr<aura::Window> window2( |
+ aura::test::CreateTestWindowWithId(1, NULL)); |
+ // Note: we need to perform an activation change to trigger the update. |
+ // As such we initially hide the window and then showing it again. |
+ window2->Hide(); |
+ window2->SetBounds(gfx::Rect(32, 48, 256, 512)); |
+ window2->Show(); |
+ |
+ // Check the initial position of the windows is unchanged. |
+ EXPECT_EQ("16,32 640x320", window1->bounds().ToString()); |
+ EXPECT_EQ("32,48 256x512", window2->bounds().ToString()); |
+ |
+ // Remove the second window and make sure that the first window |
+ // does NOT get centered. |
+ window2.reset(); |
+ EXPECT_EQ("16,32 640x320", window1->bounds().ToString()); |
+ |
+ // Test 2: Set up two managed windows and check their auto positioning. |
+ ash::wm::SetWindowPositionManaged(window1.get(), true); |
+ scoped_ptr<aura::Window> window3( |
+ aura::test::CreateTestWindowWithId(2, NULL)); |
+ ash::wm::SetWindowPositionManaged(window3.get(), true); |
+ // Note: we need to perform an activation change to trigger the update. |
+ // As such we initially hide the window and then showing it again. |
+ window3->Hide(); |
+ window3->SetBounds(gfx::Rect(32, 48, 256, 512)); |
+ window3->Show(); |
+ // |window1| should be flush right and |window3| flush left. |
+ EXPECT_EQ(base::IntToString( |
+ desktop_area.width() - window1->bounds().width()) + |
+ ",32 640x320", window1->bounds().ToString()); |
+ EXPECT_EQ("0,48 256x512", window3->bounds().ToString()); |
+ |
+ // After removing |window3|, |window1| should be centered again. |
+ window3.reset(); |
+ EXPECT_EQ( |
+ base::IntToString( |
+ (desktop_area.width() - window1->bounds().width()) / 2) + |
+ ",32 640x320", window1->bounds().ToString()); |
+ |
+ // Test 3: Set up a manageable and a non manageable window and check |
+ // positioning. |
+ scoped_ptr<aura::Window> window4( |
+ aura::test::CreateTestWindowWithId(3, NULL)); |
+ // Note: we need to perform an activation change to trigger the update. |
+ // As such we initially hide the window and then showing it again. |
+ window1->Hide(); |
+ window1->SetBounds(gfx::Rect(16, 32, 640, 320)); |
+ window4->SetBounds(gfx::Rect(32, 48, 256, 512)); |
+ window1->Show(); |
+ // |window1| should be centered and |window4| untouched. |
+ EXPECT_EQ( |
+ base::IntToString( |
+ (desktop_area.width() - window1->bounds().width()) / 2) + |
+ ",32 640x320", window1->bounds().ToString()); |
+ EXPECT_EQ("32,48 256x512", window4->bounds().ToString()); |
+ |
+ // Test 4: Once a window gets moved by a user it does not get repositioned. |
+ ash::wm::SetUserHasChangedWindowPositionOrSize(window1.get(), true); |
+ window1->SetBounds(gfx::Rect(52, 32, 640, 320)); |
+ // Note: we need to perform an activation change to trigger the update. |
+ // As such we initially hide the window and then showing it again. |
+ window4->Hide(); |
+ window4->Show(); |
+ EXPECT_EQ("52,32 640x320", window1->bounds().ToString()); |
+ EXPECT_EQ("32,48 256x512", window4->bounds().ToString()); |
+ |
+ // Test5: A single manageable window should get centered. |
+ window4.reset(); |
+ ash::wm::SetUserHasChangedWindowPositionOrSize(window1.get(), false); |
+ window1->Hide(); |
+ window1->Show(); |
+ // |window1| should be centered. |
+ EXPECT_EQ( |
+ base::IntToString( |
+ (desktop_area.width() - window1->bounds().width()) / 2) + |
+ ",32 640x320", window1->bounds().ToString()); |
+} |
+ |
+// Test that a window from normal to minimize will repos the remaining. |
+TEST_F(WorkspaceLayoutManager2Test, ToMinimizeRepositionsRemaining) { |
+ scoped_ptr<aura::Window> window1( |
+ aura::test::CreateTestWindowWithId(0, NULL)); |
+ ash::wm::SetWindowPositionManaged(window1.get(), true); |
+ window1->SetBounds(gfx::Rect(16, 32, 640, 320)); |
+ gfx::Rect desktop_area = window1->parent()->bounds(); |
+ |
+ scoped_ptr<aura::Window> window2( |
+ aura::test::CreateTestWindowWithId(1, NULL)); |
+ ash::wm::SetWindowPositionManaged(window2.get(), true); |
+ window2->SetBounds(gfx::Rect(32, 48, 256, 512)); |
+ |
+ ash::wm::MinimizeWindow(window1.get()); |
+ |
+ // |window2| should be centered now. |
+ EXPECT_TRUE(window2->IsVisible()); |
+ EXPECT_TRUE(ash::wm::IsWindowNormal(window2.get())); |
+ EXPECT_EQ(base::IntToString( |
+ (desktop_area.width() - window2->bounds().width()) / 2) + |
+ ",48 256x512", window2->bounds().ToString()); |
+ |
+ ash::wm::RestoreWindow(window1.get()); |
+ // |window1| should be flush right and |window3| flush left. |
+ EXPECT_EQ(base::IntToString( |
+ desktop_area.width() - window1->bounds().width()) + |
+ ",32 640x320", window1->bounds().ToString()); |
+ EXPECT_EQ("0,48 256x512", window2->bounds().ToString()); |
+} |
+ |
+// Test that minimizing an initially maximized window will repos the remaining. |
+TEST_F(WorkspaceLayoutManager2Test, MaxToMinRepositionsRemaining) { |
+ scoped_ptr<aura::Window> window1( |
+ aura::test::CreateTestWindowWithId(0, NULL)); |
+ ash::wm::SetWindowPositionManaged(window1.get(), true); |
+ gfx::Rect desktop_area = window1->parent()->bounds(); |
+ |
+ scoped_ptr<aura::Window> window2( |
+ aura::test::CreateTestWindowWithId(1, NULL)); |
+ ash::wm::SetWindowPositionManaged(window2.get(), true); |
+ window2->SetBounds(gfx::Rect(32, 48, 256, 512)); |
+ ash::wm::MaximizeWindow(window1.get()); |
+ ash::wm::MinimizeWindow(window1.get()); |
+ |
+ // |window2| should be centered now. |
+ EXPECT_TRUE(window2->IsVisible()); |
+ EXPECT_TRUE(ash::wm::IsWindowNormal(window2.get())); |
+ EXPECT_EQ(base::IntToString( |
+ (desktop_area.width() - window2->bounds().width()) / 2) + |
+ ",48 256x512", window2->bounds().ToString()); |
+} |
+ |
+// Test that nomral, maximize, minimizing will repos the remaining. |
+TEST_F(WorkspaceLayoutManager2Test, NormToMaxToMinRepositionsRemaining) { |
+ scoped_ptr<aura::Window> window1( |
+ aura::test::CreateTestWindowWithId(0, NULL)); |
+ window1->SetBounds(gfx::Rect(16, 32, 640, 320)); |
+ ash::wm::SetWindowPositionManaged(window1.get(), true); |
+ gfx::Rect desktop_area = window1->parent()->bounds(); |
+ |
+ scoped_ptr<aura::Window> window2( |
+ aura::test::CreateTestWindowWithId(1, NULL)); |
+ ash::wm::SetWindowPositionManaged(window2.get(), true); |
+ window2->SetBounds(gfx::Rect(32, 48, 256, 512)); |
+ |
+ window1->Hide(); |
+ window1->Show(); |
+ |
+ // |window1| should be flush right and |window3| flush left. |
+ EXPECT_EQ(base::IntToString( |
+ desktop_area.width() - window1->bounds().width()) + |
+ ",32 640x320", window1->bounds().ToString()); |
+ EXPECT_EQ("0,48 256x512", window2->bounds().ToString()); |
+ |
+ ash::wm::MaximizeWindow(window1.get()); |
+ ash::wm::MinimizeWindow(window1.get()); |
+ |
+ // |window2| should be centered now. |
+ EXPECT_TRUE(window2->IsVisible()); |
+ EXPECT_TRUE(ash::wm::IsWindowNormal(window2.get())); |
+ EXPECT_EQ(base::IntToString( |
+ (desktop_area.width() - window2->bounds().width()) / 2) + |
+ ",48 256x512", window2->bounds().ToString()); |
+} |
+ |
+// Test that nomral, maximize, normal will repos the remaining. |
+TEST_F(WorkspaceLayoutManager2Test, NormToMaxToNormRepositionsRemaining) { |
+ scoped_ptr<aura::Window> window1( |
+ aura::test::CreateTestWindowWithId(0, NULL)); |
+ window1->SetBounds(gfx::Rect(16, 32, 640, 320)); |
+ ash::wm::SetWindowPositionManaged(window1.get(), true); |
+ gfx::Rect desktop_area = window1->parent()->bounds(); |
+ |
+ scoped_ptr<aura::Window> window2( |
+ aura::test::CreateTestWindowWithId(1, NULL)); |
+ ash::wm::SetWindowPositionManaged(window2.get(), true); |
+ window2->SetBounds(gfx::Rect(32, 48, 256, 512)); |
+ |
+ window1->Hide(); |
+ window1->Show(); |
+ |
+ // |window1| should be flush right and |window3| flush left. |
+ EXPECT_EQ(base::IntToString( |
+ desktop_area.width() - window1->bounds().width()) + |
+ ",32 640x320", window1->bounds().ToString()); |
+ EXPECT_EQ("0,48 256x512", window2->bounds().ToString()); |
+ |
+ ash::wm::MaximizeWindow(window1.get()); |
+ ash::wm::RestoreWindow(window1.get()); |
+ |
+ // |window1| should be flush right and |window2| flush left. |
+ EXPECT_EQ(base::IntToString( |
+ desktop_area.width() - window1->bounds().width()) + |
+ ",32 640x320", window1->bounds().ToString()); |
+ EXPECT_EQ("0,48 256x512", window2->bounds().ToString()); |
+} |
+ |
+ |
+} // namespace |
} // namespace ash |