Chromium Code Reviews| Index: ash/wm/workspace/phantom_window_controller_unittest.cc |
| diff --git a/ash/wm/workspace/phantom_window_controller_unittest.cc b/ash/wm/workspace/phantom_window_controller_unittest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..fe76cd551836c948f864f8619b5591da9835ccf7 |
| --- /dev/null |
| +++ b/ash/wm/workspace/phantom_window_controller_unittest.cc |
| @@ -0,0 +1,181 @@ |
| +// 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 "ash/wm/workspace/phantom_window_controller.h" |
| + |
| +#include "ash/ash_switches.h" |
| +#include "ash/shell.h" |
| +#include "ash/test/ash_test_base.h" |
| +#include "ui/aura/root_window.h" |
| +#include "ui/aura/window.h" |
| +#include "ui/views/widget/widget.h" |
| + |
| +namespace ash { |
| +namespace internal { |
| + |
| +// Returns true if |widget| is non-NULL and is visible. |
| +bool IsVisible(views::Widget* widget) { |
| + return widget && widget->IsVisible(); |
| +} |
| + |
| +class PhantomWindowControllerTest : public ash::test::AshTestBase { |
| + public: |
| + PhantomWindowControllerTest() { |
| + } |
| + virtual ~PhantomWindowControllerTest() { |
| + } |
| + |
| + // ash::test::AshTestBase: |
| + virtual void SetUp() OVERRIDE { |
| + ash::test::AshTestBase::SetUp(); |
| + |
| + UpdateDisplay("500x400,500x400"); |
| + window_ = CreateTestWindowInShellWithBounds(gfx::Rect(0, 0, 50, 60)); |
| + controller_.reset(new PhantomWindowController(window_)); |
| + } |
| + |
| + PhantomWindowController* controller() { |
| + return controller_.get(); |
| + } |
| + |
| + aura::Window* window() { return window_; } |
| + |
| + views::Widget* target_widget() { |
| + return controller_->target_phantom_widget_.get(); |
| + } |
| + |
| + views::Widget* start_widget() { |
| + return controller_->start_phantom_widget_.get(); |
| + } |
| + |
| + private: |
| + aura::Window* window_; |
| + scoped_ptr<PhantomWindowController> controller_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(PhantomWindowControllerTest); |
| +}; |
| + |
| +// Test that two phantom widgets are used when animating to bounds at least |
| +// partially in another display. |
| +TEST_F(PhantomWindowControllerTest, PhantomWindowShow) { |
| + if (!SupportsMultipleDisplays()) |
| + return; |
| + |
| + aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
| + EXPECT_EQ(root_windows[0], window()->GetRootWindow()); |
| + |
| + // phantom widget only in the left screen. |
| + controller()->Show(gfx::Rect(100, 100, 50, 60)); |
| + EXPECT_TRUE(IsVisible(target_widget())); |
| + EXPECT_FALSE(IsVisible(start_widget())); |
| + EXPECT_EQ(root_windows[0], |
| + target_widget()->GetNativeWindow()->GetRootWindow()); |
| + |
|
Mr4D (OOO till 08-26)
2013/12/19 17:56:55
Just wondering: Why did you get rid of the animati
pkotwicz
2013/12/19 18:18:22
I got rid of the animation completion because I am
|
| + // Move phantom widget into the right screen. Test that 2 widgets got created. |
| + controller()->Show(gfx::Rect(600, 100, 50, 60)); |
| + EXPECT_TRUE(IsVisible(target_widget())); |
| + EXPECT_TRUE(IsVisible(start_widget())); |
| + EXPECT_EQ(root_windows[1], |
| + target_widget()->GetNativeWindow()->GetRootWindow()); |
| + EXPECT_EQ(root_windows[0], |
| + start_widget()->GetNativeWindow()->GetRootWindow()); |
| + |
| + // Move phantom widget only in the right screen. Start widget should close. |
| + controller()->Show(gfx::Rect(700, 100, 50, 60)); |
| + EXPECT_TRUE(IsVisible(target_widget())); |
| + EXPECT_FALSE(IsVisible(start_widget())); |
| + EXPECT_EQ(root_windows[1], |
| + target_widget()->GetNativeWindow()->GetRootWindow()); |
| + |
| + // Move phantom widget into the left screen. Start widget should open. |
| + controller()->Show(gfx::Rect(100, 100, 50, 60)); |
| + EXPECT_TRUE(IsVisible(target_widget())); |
| + EXPECT_TRUE(IsVisible(start_widget())); |
| + EXPECT_EQ(root_windows[0], |
| + target_widget()->GetNativeWindow()->GetRootWindow()); |
| + EXPECT_EQ(root_windows[1], |
| + start_widget()->GetNativeWindow()->GetRootWindow()); |
| + |
| + // Move phantom widget while in the left screen. Start widget should close. |
| + controller()->Show(gfx::Rect(200, 100, 50, 60)); |
| + EXPECT_TRUE(IsVisible(target_widget())); |
| + EXPECT_FALSE(IsVisible(start_widget())); |
| + EXPECT_EQ(root_windows[0], |
| + target_widget()->GetNativeWindow()->GetRootWindow()); |
| + |
| + // Move phantom widget spanning both screens with most of the window in the |
| + // right screen. Two widgets are created. |
| + controller()->Show(gfx::Rect(495, 100, 50, 60)); |
| + EXPECT_TRUE(IsVisible(target_widget())); |
| + EXPECT_TRUE(IsVisible(start_widget())); |
| + EXPECT_EQ(root_windows[1], |
| + target_widget()->GetNativeWindow()->GetRootWindow()); |
| + EXPECT_EQ(root_windows[0], |
| + start_widget()->GetNativeWindow()->GetRootWindow()); |
| + |
| + // Move phantom widget back into the left screen. Phantom widgets should swap. |
| + controller()->Show(gfx::Rect(200, 100, 50, 60)); |
| + EXPECT_TRUE(IsVisible(target_widget())); |
| + EXPECT_TRUE(IsVisible(start_widget())); |
| + EXPECT_EQ(root_windows[0], |
| + target_widget()->GetNativeWindow()->GetRootWindow()); |
| + EXPECT_EQ(root_windows[1], |
| + start_widget()->GetNativeWindow()->GetRootWindow()); |
| + |
| + // Hide phantom controller. Both widgets should close. |
| + controller()->Hide(); |
| + EXPECT_FALSE(IsVisible(target_widget())); |
| + EXPECT_FALSE(IsVisible(start_widget())); |
| +} |
| + |
| +// Test that after the phantom window is hidden that it starts animating from |
| +// the bounds of the window it is showing a preview for instead of the phantom |
| +// window's previous bounds. |
| +TEST_F(PhantomWindowControllerTest, PhantomWindowShowAfterHide) { |
| + if (!SupportsMultipleDisplays()) |
| + return; |
| + |
| + aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
| + EXPECT_EQ(root_windows[0], window()->GetRootWindow()); |
| + |
| + // Show phantom window in the right display. There should be two phantom |
| + // widgets created because the phantom animation should start at window()'s |
| + // bounds in the left display. |
| + controller()->Show(gfx::Rect(600, 100, 50, 60)); |
| + EXPECT_TRUE(IsVisible(target_widget())); |
| + EXPECT_TRUE(IsVisible(start_widget())); |
| + EXPECT_EQ(root_windows[1], |
| + target_widget()->GetNativeWindow()->GetRootWindow()); |
| + EXPECT_EQ(root_windows[0], |
| + start_widget()->GetNativeWindow()->GetRootWindow()); |
| + |
| + // Show the phantom window in the left display. There should be one phantom |
| + // widget visible because the phantom animation should start at window()'s |
| + // bounds. |
| + controller()->Hide(); |
| + controller()->Show(gfx::Rect(100, 100, 50, 60)); |
| + EXPECT_TRUE(IsVisible(target_widget())); |
| + EXPECT_FALSE(IsVisible(start_widget())); |
| + EXPECT_EQ(root_windows[0], |
| + target_widget()->GetNativeWindow()->GetRootWindow()); |
| + |
| + // Repeat test but using StartFade() because the code path is different. |
| + controller()->Show(gfx::Rect(600, 100, 50, 60)); |
| + EXPECT_TRUE(IsVisible(target_widget())); |
| + EXPECT_TRUE(IsVisible(start_widget())); |
| + EXPECT_EQ(root_windows[1], |
| + target_widget()->GetNativeWindow()->GetRootWindow()); |
| + EXPECT_EQ(root_windows[0], |
| + start_widget()->GetNativeWindow()->GetRootWindow()); |
| + |
| + controller()->StartFadeOut(); |
| + controller()->Show(gfx::Rect(100, 100, 50, 60)); |
| + EXPECT_TRUE(IsVisible(target_widget())); |
| + EXPECT_FALSE(IsVisible(start_widget())); |
| + EXPECT_EQ(root_windows[0], |
| + target_widget()->GetNativeWindow()->GetRootWindow()); |
| +} |
| + |
| +} // namespace internal |
| +} // namespace ash |