summaryrefslogtreecommitdiffstats
path: root/chromium/ash/wm/toplevel_window_event_handler_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/ash/wm/toplevel_window_event_handler_unittest.cc')
-rw-r--r--chromium/ash/wm/toplevel_window_event_handler_unittest.cc694
1 files changed, 0 insertions, 694 deletions
diff --git a/chromium/ash/wm/toplevel_window_event_handler_unittest.cc b/chromium/ash/wm/toplevel_window_event_handler_unittest.cc
deleted file mode 100644
index 99e7418bb9d..00000000000
--- a/chromium/ash/wm/toplevel_window_event_handler_unittest.cc
+++ /dev/null
@@ -1,694 +0,0 @@
-// Copyright (c) 2012 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/toplevel_window_event_handler.h"
-
-#include "ash/root_window_controller.h"
-#include "ash/shell.h"
-#include "ash/shell_window_ids.h"
-#include "ash/test/ash_test_base.h"
-#include "ash/wm/lock_state_controller.h"
-#include "ash/wm/resize_shadow.h"
-#include "ash/wm/resize_shadow_controller.h"
-#include "ash/wm/window_state.h"
-#include "ash/wm/window_util.h"
-#include "ash/wm/workspace/snap_sizer.h"
-#include "ash/wm/workspace_controller.h"
-#include "base/basictypes.h"
-#include "base/compiler_specific.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "ui/aura/client/aura_constants.h"
-#include "ui/aura/root_window.h"
-#include "ui/aura/test/aura_test_base.h"
-#include "ui/aura/test/event_generator.h"
-#include "ui/aura/test/test_window_delegate.h"
-#include "ui/base/hit_test.h"
-#include "ui/events/event.h"
-#include "ui/gfx/screen.h"
-
-#if defined(OS_WIN)
-// Windows headers define macros for these function names which screw with us.
-#if defined(CreateWindow)
-#undef CreateWindow
-#endif
-#endif
-
-namespace ash {
-namespace test {
-
-namespace {
-
-// A simple window delegate that returns the specified hit-test code when
-// requested and applies a minimum size constraint if there is one.
-class TestWindowDelegate : public aura::test::TestWindowDelegate {
- public:
- explicit TestWindowDelegate(int hittest_code) {
- set_window_component(hittest_code);
- }
- virtual ~TestWindowDelegate() {}
-
- private:
- // Overridden from aura::Test::TestWindowDelegate:
- virtual void OnWindowDestroyed() OVERRIDE {
- delete this;
- }
-
- DISALLOW_COPY_AND_ASSIGN(TestWindowDelegate);
-};
-
-class ToplevelWindowEventHandlerTest : public AshTestBase {
- public:
- ToplevelWindowEventHandlerTest() {}
- virtual ~ToplevelWindowEventHandlerTest() {}
-
- protected:
- aura::Window* CreateWindow(int hittest_code) {
- TestWindowDelegate* d1 = new TestWindowDelegate(hittest_code);
- aura::Window* w1 = new aura::Window(d1);
- w1->SetType(aura::client::WINDOW_TYPE_NORMAL);
- w1->set_id(1);
- w1->Init(ui::LAYER_TEXTURED);
- aura::Window* parent =
- Shell::GetContainer(Shell::GetPrimaryRootWindow(),
- internal::kShellWindowId_AlwaysOnTopContainer);
- parent->AddChild(w1);
- w1->SetBounds(gfx::Rect(0, 0, 100, 100));
- w1->Show();
- return w1;
- }
-
- void DragFromCenterBy(aura::Window* window, int dx, int dy) {
- aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), window);
- generator.DragMouseBy(dx, dy);
- }
-
- void TouchDragFromCenterBy(aura::Window* window, int dx, int dy) {
- aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), window);
- generator.PressMoveAndReleaseTouchBy(dx, dy);
- }
-
- scoped_ptr<ToplevelWindowEventHandler> handler_;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(ToplevelWindowEventHandlerTest);
-};
-
-}
-
-TEST_F(ToplevelWindowEventHandlerTest, Caption) {
- scoped_ptr<aura::Window> w1(CreateWindow(HTCAPTION));
- gfx::Size size = w1->bounds().size();
- DragFromCenterBy(w1.get(), 100, 100);
- // Position should have been offset by 100,100.
- EXPECT_EQ("100,100", w1->bounds().origin().ToString());
- // Size should not have.
- EXPECT_EQ(size.ToString(), w1->bounds().size().ToString());
-
- TouchDragFromCenterBy(w1.get(), 100, 100);
- // Position should have been offset by 100,100.
- EXPECT_EQ("200,200", w1->bounds().origin().ToString());
- // Size should not have.
- EXPECT_EQ(size.ToString(), w1->bounds().size().ToString());
-}
-
-TEST_F(ToplevelWindowEventHandlerTest, BottomRight) {
- scoped_ptr<aura::Window> w1(CreateWindow(HTBOTTOMRIGHT));
- gfx::Point position = w1->bounds().origin();
- DragFromCenterBy(w1.get(), 100, 100);
- // Position should not have changed.
- EXPECT_EQ(position, w1->bounds().origin());
- // Size should have increased by 100,100.
- EXPECT_EQ(gfx::Size(200, 200), w1->bounds().size());
-}
-
-TEST_F(ToplevelWindowEventHandlerTest, GrowBox) {
- scoped_ptr<aura::Window> w1(CreateWindow(HTGROWBOX));
- TestWindowDelegate* window_delegate =
- static_cast<TestWindowDelegate*>(w1->delegate());
- window_delegate->set_minimum_size(gfx::Size(40, 40));
-
- gfx::Point position = w1->bounds().origin();
- aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow());
- generator.MoveMouseToCenterOf(w1.get());
- generator.DragMouseBy(100, 100);
- // Position should not have changed.
- EXPECT_EQ(position, w1->bounds().origin());
- // Size should have increased by 100,100.
- EXPECT_EQ(gfx::Size(200, 200), w1->bounds().size());
-
- // Shrink the wnidow by (-100, -100).
- generator.DragMouseBy(-100, -100);
- // Position should not have changed.
- EXPECT_EQ(position, w1->bounds().origin());
- // Size should have decreased by 100,100.
- EXPECT_EQ(gfx::Size(100, 100), w1->bounds().size());
-
- // Enforce minimum size.
- generator.DragMouseBy(-60, -60);
- EXPECT_EQ(position, w1->bounds().origin());
- EXPECT_EQ(gfx::Size(40, 40), w1->bounds().size());
-}
-
-TEST_F(ToplevelWindowEventHandlerTest, Right) {
- scoped_ptr<aura::Window> w1(CreateWindow(HTRIGHT));
- gfx::Point position = w1->bounds().origin();
- DragFromCenterBy(w1.get(), 100, 100);
- // Position should not have changed.
- EXPECT_EQ(position, w1->bounds().origin());
- // Size should have increased by 100,0.
- EXPECT_EQ(gfx::Size(200, 100), w1->bounds().size());
-}
-
-TEST_F(ToplevelWindowEventHandlerTest, Bottom) {
- scoped_ptr<aura::Window> w1(CreateWindow(HTBOTTOM));
- gfx::Point position = w1->bounds().origin();
- DragFromCenterBy(w1.get(), 100, 100);
- // Position should not have changed.
- EXPECT_EQ(position, w1->bounds().origin());
- // Size should have increased by 0,100.
- EXPECT_EQ(gfx::Size(100, 200), w1->bounds().size());
-}
-
-TEST_F(ToplevelWindowEventHandlerTest, TopRight) {
- scoped_ptr<aura::Window> w1(CreateWindow(HTTOPRIGHT));
- DragFromCenterBy(w1.get(), -50, 50);
- // Position should have been offset by 0,50.
- EXPECT_EQ(gfx::Point(0, 50), w1->bounds().origin());
- // Size should have decreased by 50,50.
- EXPECT_EQ(gfx::Size(50, 50), w1->bounds().size());
-}
-
-TEST_F(ToplevelWindowEventHandlerTest, Top) {
- scoped_ptr<aura::Window> w1(CreateWindow(HTTOP));
- DragFromCenterBy(w1.get(), 50, 50);
- // Position should have been offset by 0,50.
- EXPECT_EQ(gfx::Point(0, 50), w1->bounds().origin());
- // Size should have decreased by 0,50.
- EXPECT_EQ(gfx::Size(100, 50), w1->bounds().size());
-}
-
-TEST_F(ToplevelWindowEventHandlerTest, Left) {
- scoped_ptr<aura::Window> w1(CreateWindow(HTLEFT));
- DragFromCenterBy(w1.get(), 50, 50);
- // Position should have been offset by 50,0.
- EXPECT_EQ(gfx::Point(50, 0), w1->bounds().origin());
- // Size should have decreased by 50,0.
- EXPECT_EQ(gfx::Size(50, 100), w1->bounds().size());
-}
-
-TEST_F(ToplevelWindowEventHandlerTest, BottomLeft) {
- scoped_ptr<aura::Window> w1(CreateWindow(HTBOTTOMLEFT));
- DragFromCenterBy(w1.get(), 50, -50);
- // Position should have been offset by 50,0.
- EXPECT_EQ(gfx::Point(50, 0), w1->bounds().origin());
- // Size should have decreased by 50,50.
- EXPECT_EQ(gfx::Size(50, 50), w1->bounds().size());
-}
-
-TEST_F(ToplevelWindowEventHandlerTest, TopLeft) {
- scoped_ptr<aura::Window> w1(CreateWindow(HTTOPLEFT));
- DragFromCenterBy(w1.get(), 50, 50);
- // Position should have been offset by 50,50.
- EXPECT_EQ(gfx::Point(50, 50), w1->bounds().origin());
- // Size should have decreased by 50,50.
- EXPECT_EQ(gfx::Size(50, 50), w1->bounds().size());
-}
-
-TEST_F(ToplevelWindowEventHandlerTest, Client) {
- scoped_ptr<aura::Window> w1(CreateWindow(HTCLIENT));
- gfx::Rect bounds = w1->bounds();
- DragFromCenterBy(w1.get(), 100, 100);
- // Neither position nor size should have changed.
- EXPECT_EQ(bounds, w1->bounds());
-}
-
-TEST_F(ToplevelWindowEventHandlerTest, LeftPastMinimum) {
- scoped_ptr<aura::Window> w1(CreateWindow(HTLEFT));
- TestWindowDelegate* window_delegate =
- static_cast<TestWindowDelegate*>(w1->delegate());
- window_delegate->set_minimum_size(gfx::Size(40, 40));
-
- // Simulate a large left-to-right drag. Window width should be clamped to
- // minimum and position change should be limited as well.
- DragFromCenterBy(w1.get(), 333, 0);
- EXPECT_EQ(gfx::Point(60, 0), w1->bounds().origin());
- EXPECT_EQ(gfx::Size(40, 100), w1->bounds().size());
-}
-
-TEST_F(ToplevelWindowEventHandlerTest, RightPastMinimum) {
- scoped_ptr<aura::Window> w1(CreateWindow(HTRIGHT));
- TestWindowDelegate* window_delegate =
- static_cast<TestWindowDelegate*>(w1->delegate());
- window_delegate->set_minimum_size(gfx::Size(40, 40));
- gfx::Point position = w1->bounds().origin();
-
- // Simulate a large right-to-left drag. Window width should be clamped to
- // minimum and position should not change.
- DragFromCenterBy(w1.get(), -333, 0);
- EXPECT_EQ(position, w1->bounds().origin());
- EXPECT_EQ(gfx::Size(40, 100), w1->bounds().size());
-}
-
-TEST_F(ToplevelWindowEventHandlerTest, TopLeftPastMinimum) {
- scoped_ptr<aura::Window> w1(CreateWindow(HTTOPLEFT));
- TestWindowDelegate* window_delegate =
- static_cast<TestWindowDelegate*>(w1->delegate());
- window_delegate->set_minimum_size(gfx::Size(40, 40));
-
- // Simulate a large top-left to bottom-right drag. Window width should be
- // clamped to minimum and position should be limited.
- DragFromCenterBy(w1.get(), 333, 444);
- EXPECT_EQ(gfx::Point(60, 60), w1->bounds().origin());
- EXPECT_EQ(gfx::Size(40, 40), w1->bounds().size());
-}
-
-TEST_F(ToplevelWindowEventHandlerTest, TopRightPastMinimum) {
- scoped_ptr<aura::Window> w1(CreateWindow(HTTOPRIGHT));
- TestWindowDelegate* window_delegate =
- static_cast<TestWindowDelegate*>(w1->delegate());
- window_delegate->set_minimum_size(gfx::Size(40, 40));
-
- // Simulate a large top-right to bottom-left drag. Window size should be
- // clamped to minimum, x position should not change, and y position should
- // be clamped.
- DragFromCenterBy(w1.get(), -333, 444);
- EXPECT_EQ(gfx::Point(0, 60), w1->bounds().origin());
- EXPECT_EQ(gfx::Size(40, 40), w1->bounds().size());
-}
-
-TEST_F(ToplevelWindowEventHandlerTest, BottomLeftPastMinimum) {
- scoped_ptr<aura::Window> w1(CreateWindow(HTBOTTOMLEFT));
- TestWindowDelegate* window_delegate =
- static_cast<TestWindowDelegate*>(w1->delegate());
- window_delegate->set_minimum_size(gfx::Size(40, 40));
-
- // Simulate a large bottom-left to top-right drag. Window size should be
- // clamped to minimum, x position should be clamped, and y position should
- // not change.
- DragFromCenterBy(w1.get(), 333, -444);
- EXPECT_EQ(gfx::Point(60, 0), w1->bounds().origin());
- EXPECT_EQ(gfx::Size(40, 40), w1->bounds().size());
-}
-
-TEST_F(ToplevelWindowEventHandlerTest, BottomRightPastMinimum) {
- scoped_ptr<aura::Window> w1(CreateWindow(HTBOTTOMRIGHT));
- TestWindowDelegate* window_delegate =
- static_cast<TestWindowDelegate*>(w1->delegate());
- window_delegate->set_minimum_size(gfx::Size(40, 40));
- gfx::Point position = w1->bounds().origin();
-
- // Simulate a large bottom-right to top-left drag. Window size should be
- // clamped to minimum and position should not change.
- DragFromCenterBy(w1.get(), -333, -444);
- EXPECT_EQ(position, w1->bounds().origin());
- EXPECT_EQ(gfx::Size(40, 40), w1->bounds().size());
-}
-
-TEST_F(ToplevelWindowEventHandlerTest, BottomRightWorkArea) {
- scoped_ptr<aura::Window> target(CreateWindow(HTBOTTOMRIGHT));
- gfx::Rect work_area = Shell::GetScreen()->GetDisplayNearestWindow(
- target.get()).work_area();
- gfx::Point position = target->bounds().origin();
- // Drag further than work_area bottom.
- DragFromCenterBy(target.get(), 100, work_area.height());
- // Position should not have changed.
- EXPECT_EQ(position, target->bounds().origin());
- // Size should have increased by 100, work_area.height() - target->bounds.y()
- EXPECT_EQ(gfx::Size(200, work_area.height() - target->bounds().y()),
- target->bounds().size());
-}
-
-TEST_F(ToplevelWindowEventHandlerTest, BottomLeftWorkArea) {
- scoped_ptr<aura::Window> target(CreateWindow(HTBOTTOMLEFT));
- gfx::Rect work_area = Shell::GetScreen()->GetDisplayNearestWindow(
- target.get()).work_area();
- gfx::Point position = target->bounds().origin();
- // Drag further than work_area bottom.
- DragFromCenterBy(target.get(), -30, work_area.height());
- // origin is now at 70, 100.
- EXPECT_EQ(position.x() - 30, target->bounds().x());
- EXPECT_EQ(position.y(), target->bounds().y());
- // Size should have increased by 30, work_area.height() - target->bounds.y()
- EXPECT_EQ(gfx::Size(130, work_area.height() - target->bounds().y()),
- target->bounds().size());
-}
-
-TEST_F(ToplevelWindowEventHandlerTest, BottomWorkArea) {
- scoped_ptr<aura::Window> target(CreateWindow(HTBOTTOM));
- gfx::Rect work_area = Shell::GetScreen()->GetDisplayNearestWindow(
- target.get()).work_area();
- gfx::Point position = target->bounds().origin();
- // Drag further than work_area bottom.
- DragFromCenterBy(target.get(), 0, work_area.height());
- // Position should not have changed.
- EXPECT_EQ(position, target->bounds().origin());
- // Size should have increased by 0, work_area.height() - target->bounds.y()
- EXPECT_EQ(gfx::Size(100, work_area.height() - target->bounds().y()),
- target->bounds().size());
-}
-
-// Verifies we don't let windows drag to a -y location.
-TEST_F(ToplevelWindowEventHandlerTest, DontDragToNegativeY) {
- scoped_ptr<aura::Window> target(CreateWindow(HTTOP));
- aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(),
- target.get());
- generator.MoveMouseTo(0, 5);
- generator.DragMouseBy(0, -5);
- // The y location and height should not have changed.
- EXPECT_EQ(0, target->bounds().y());
- EXPECT_EQ(100, target->bounds().height());
-}
-
-// Verifies we don't let windows go bigger than the display width.
-TEST_F(ToplevelWindowEventHandlerTest, DontGotWiderThanScreen) {
- scoped_ptr<aura::Window> target(CreateWindow(HTRIGHT));
- gfx::Rect work_area = Shell::GetScreen()->GetDisplayNearestWindow(
- target.get()).bounds();
- DragFromCenterBy(target.get(), work_area.width() * 2, 0);
- // The y location and height should not have changed.
- EXPECT_EQ(work_area.width(), target->bounds().width());
-}
-
-// Verifies that touch-gestures drag the window correctly.
-TEST_F(ToplevelWindowEventHandlerTest, GestureDrag) {
- scoped_ptr<aura::Window> target(
- CreateTestWindowInShellWithDelegate(
- new TestWindowDelegate(HTCAPTION),
- 0,
- gfx::Rect(0, 0, 100, 100)));
- wm::WindowState* window_state = wm::GetWindowState(target.get());
- aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(),
- target.get());
- gfx::Rect old_bounds = target->bounds();
- gfx::Point location(5, 5);
- target->SetProperty(aura::client::kCanMaximizeKey, true);
-
- gfx::Point end = location;
-
- // Snap right;
- {
- // Get the expected snapped bounds before snapping.
- internal::SnapSizer sizer(window_state, location,
- internal::SnapSizer::RIGHT_EDGE,
- internal::SnapSizer::OTHER_INPUT);
- gfx::Rect snapped_bounds = sizer.GetSnapBounds(target->bounds());
-
- end.Offset(100, 0);
- generator.GestureScrollSequence(location, end,
- base::TimeDelta::FromMilliseconds(5),
- 10);
- RunAllPendingInMessageLoop();
-
- // Verify that the window has moved after the gesture.
- EXPECT_NE(old_bounds.ToString(), target->bounds().ToString());
- EXPECT_EQ(snapped_bounds.ToString(), target->bounds().ToString());
- }
-
- old_bounds = target->bounds();
-
- // Snap left.
- {
- // Get the expected snapped bounds before snapping.
- internal::SnapSizer sizer(window_state, location,
- internal::SnapSizer::LEFT_EDGE,
- internal::SnapSizer::OTHER_INPUT);
- gfx::Rect snapped_bounds = sizer.GetSnapBounds(target->bounds());
- end = location = target->GetBoundsInRootWindow().CenterPoint();
- end.Offset(-100, 0);
- generator.GestureScrollSequence(location, end,
- base::TimeDelta::FromMilliseconds(5),
- 10);
- RunAllPendingInMessageLoop();
-
- EXPECT_NE(old_bounds.ToString(), target->bounds().ToString());
- EXPECT_EQ(snapped_bounds.ToString(), target->bounds().ToString());
- }
-
- gfx::Rect bounds_before_maximization = target->bounds();
- bounds_before_maximization.Offset(0, 100);
- target->SetBounds(bounds_before_maximization);
- old_bounds = target->bounds();
-
- // Maximize.
- end = location = target->GetBoundsInRootWindow().CenterPoint();
- end.Offset(0, -100);
- generator.GestureScrollSequence(location, end,
- base::TimeDelta::FromMilliseconds(5),
- 10);
- RunAllPendingInMessageLoop();
-
- EXPECT_NE(old_bounds.ToString(), target->bounds().ToString());
- EXPECT_TRUE(window_state->IsMaximized());
- EXPECT_EQ(old_bounds.ToString(),
- window_state->GetRestoreBoundsInScreen().ToString());
-
- window_state->Restore();
- target->SetBounds(old_bounds);
-
- // Minimize.
- end = location = target->GetBoundsInRootWindow().CenterPoint();
- end.Offset(0, 100);
- generator.GestureScrollSequence(location, end,
- base::TimeDelta::FromMilliseconds(5),
- 10);
- RunAllPendingInMessageLoop();
- EXPECT_NE(old_bounds.ToString(), target->bounds().ToString());
- EXPECT_TRUE(window_state->IsMinimized());
- EXPECT_TRUE(window_state->always_restores_to_restore_bounds());
- EXPECT_EQ(old_bounds.ToString(),
- window_state->GetRestoreBoundsInScreen().ToString());
-}
-
-// Tests that a gesture cannot minimize a window in login/lock screen.
-TEST_F(ToplevelWindowEventHandlerTest, GestureDragMinimizeLoginScreen) {
- LockStateController* state_controller =
- Shell::GetInstance()->lock_state_controller();
- state_controller->OnLoginStateChanged(user::LOGGED_IN_NONE);
- state_controller->OnLockStateChanged(false);
- SetUserLoggedIn(false);
-
- scoped_ptr<aura::Window> target(CreateWindow(HTCAPTION));
- aura::Window* lock = internal::RootWindowController::ForWindow(target.get())->
- GetContainer(internal::kShellWindowId_LockSystemModalContainer);
- lock->AddChild(target.get());
- aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(),
- target.get());
- gfx::Rect old_bounds = target->bounds();
- gfx::Point location(5, 5);
- target->SetProperty(aura::client::kCanMaximizeKey, true);
-
- gfx::Point end = location;
- end.Offset(0, 100);
- generator.GestureScrollSequence(location, end,
- base::TimeDelta::FromMilliseconds(5),
- 10);
- RunAllPendingInMessageLoop();
- EXPECT_FALSE(wm::GetWindowState(target.get())->IsMinimized());
-}
-
-TEST_F(ToplevelWindowEventHandlerTest, GestureDragToRestore) {
- scoped_ptr<aura::Window> window(
- CreateTestWindowInShellWithDelegate(
- new TestWindowDelegate(HTCAPTION),
- 0,
- gfx::Rect(10, 20, 30, 40)));
- window->Show();
- wm::WindowState* window_state = wm::GetWindowState(window.get());
- window_state->Activate();
-
- aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(),
- window.get());
- gfx::Rect old_bounds = window->bounds();
- gfx::Point location, end;
- end = location = window->GetBoundsInRootWindow().CenterPoint();
- end.Offset(0, 100);
- generator.GestureScrollSequence(location, end,
- base::TimeDelta::FromMilliseconds(5),
- 10);
- RunAllPendingInMessageLoop();
- EXPECT_NE(old_bounds.ToString(), window->bounds().ToString());
- EXPECT_TRUE(window_state->IsMinimized());
- EXPECT_TRUE(window_state->always_restores_to_restore_bounds());
- EXPECT_EQ(old_bounds.ToString(),
- window_state->GetRestoreBoundsInScreen().ToString());
-}
-
-// Tests that an unresizable window cannot be dragged or snapped using gestures.
-TEST_F(ToplevelWindowEventHandlerTest, GestureDragForUnresizableWindow) {
- scoped_ptr<aura::Window> target(CreateWindow(HTCAPTION));
- wm::WindowState* window_state = wm::GetWindowState(target.get());
-
- aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(),
- target.get());
- gfx::Rect old_bounds = target->bounds();
- gfx::Point location(5, 5);
-
- target->SetProperty(aura::client::kCanResizeKey, false);
-
- gfx::Point end = location;
-
- // Try to snap right. The window is not resizable. So it should not snap.
- {
- // Get the expected snapped bounds before the gesture.
- internal::SnapSizer sizer(window_state, location,
- internal::SnapSizer::RIGHT_EDGE,
- internal::SnapSizer::OTHER_INPUT);
- gfx::Rect snapped_bounds = sizer.GetSnapBounds(target->bounds());
-
- end.Offset(100, 0);
- generator.GestureScrollSequence(location, end,
- base::TimeDelta::FromMilliseconds(5),
- 10);
- RunAllPendingInMessageLoop();
-
- // Verify that the window has moved after the gesture.
- gfx::Rect expected_bounds(old_bounds);
- expected_bounds.Offset(gfx::Vector2d(100, 0));
- EXPECT_EQ(expected_bounds.ToString(), target->bounds().ToString());
-
- // Verify that the window did not snap left.
- EXPECT_NE(snapped_bounds.ToString(), target->bounds().ToString());
- }
-
- old_bounds = target->bounds();
-
- // Try to snap left. It should not snap.
- {
- // Get the expected snapped bounds before the gesture.
- internal::SnapSizer sizer(window_state, location,
- internal::SnapSizer::LEFT_EDGE,
- internal::SnapSizer::OTHER_INPUT);
- gfx::Rect snapped_bounds = sizer.GetSnapBounds(target->bounds());
- end = location = target->GetBoundsInRootWindow().CenterPoint();
- end.Offset(-100, 0);
- generator.GestureScrollSequence(location, end,
- base::TimeDelta::FromMilliseconds(5),
- 10);
- RunAllPendingInMessageLoop();
-
- // Verify that the window has moved after the gesture.
- gfx::Rect expected_bounds(old_bounds);
- expected_bounds.Offset(gfx::Vector2d(-100, 0));
- EXPECT_EQ(expected_bounds.ToString(), target->bounds().ToString());
-
- // Verify that the window did not snap left.
- EXPECT_NE(snapped_bounds.ToString(), target->bounds().ToString());
- }
-}
-
-// Tests that dragging multiple windows at the same time is not allowed.
-TEST_F(ToplevelWindowEventHandlerTest, GestureDragMultipleWindows) {
- scoped_ptr<aura::Window> target(
- CreateTestWindowInShellWithDelegate(
- new TestWindowDelegate(HTCAPTION),
- 0,
- gfx::Rect(0, 0, 100, 100)));
- scoped_ptr<aura::Window> notmoved(
- CreateTestWindowInShellWithDelegate(
- new TestWindowDelegate(HTCAPTION),
- 1, gfx::Rect(100, 0, 100, 100)));
-
- aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(),
- target.get());
- gfx::Rect old_bounds = target->bounds();
- gfx::Point location(5, 5);
- target->SetProperty(aura::client::kCanMaximizeKey, true);
-
- // Send some touch events to start dragging |target|.
- generator.MoveTouch(location);
- generator.PressTouch();
- location.Offset(40, 5);
- generator.MoveTouch(location);
-
- // Try to drag |notmoved| window. This should not move the window.
- {
- gfx::Rect bounds = notmoved->bounds();
- aura::test::EventGenerator gen(Shell::GetPrimaryRootWindow(),
- notmoved.get());
- gfx::Point start = notmoved->bounds().origin() + gfx::Vector2d(10, 10);
- gfx::Point end = start + gfx::Vector2d(100, 10);
- gen.GestureScrollSequence(start, end,
- base::TimeDelta::FromMilliseconds(10),
- 10);
- EXPECT_EQ(bounds.ToString(), notmoved->bounds().ToString());
- }
-}
-
-// Verifies pressing escape resets the bounds to the original bounds.
-// Disabled crbug.com/166219.
-#if defined(OS_WIN)
-#define MAYBE_EscapeReverts DISABLED_EscapeReverts
-#else
-#define MAYBE_EscapeReverts EscapeReverts
-#endif
-TEST_F(ToplevelWindowEventHandlerTest, MAYBE_EscapeReverts) {
- scoped_ptr<aura::Window> target(CreateWindow(HTBOTTOMRIGHT));
- aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(),
- target.get());
- generator.PressLeftButton();
- generator.MoveMouseBy(10, 11);
-
- // Execute any scheduled draws so that pending mouse events are processed.
- RunAllPendingInMessageLoop();
-
- EXPECT_EQ("0,0 110x111", target->bounds().ToString());
- generator.PressKey(ui::VKEY_ESCAPE, 0);
- generator.ReleaseKey(ui::VKEY_ESCAPE, 0);
- EXPECT_EQ("0,0 100x100", target->bounds().ToString());
-}
-
-// Verifies window minimization/maximization completes drag.
-// Disabled crbug.com/166219.
-#if defined(OS_WIN)
-#define MAYBE_MinimizeMaximizeCompletes DISABLED_MinimizeMaximizeCompletes
-#else
-#define MAYBE_MinimizeMaximizeCompletes MinimizeMaximizeCompletes
-#endif
-TEST_F(ToplevelWindowEventHandlerTest, MAYBE_MinimizeMaximizeCompletes) {
- // Once window is minimized, window dragging completes.
- {
- scoped_ptr<aura::Window> target(CreateWindow(HTCAPTION));
- target->Focus();
- aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(),
- target.get());
- generator.PressLeftButton();
- generator.MoveMouseBy(10, 11);
- RunAllPendingInMessageLoop();
- EXPECT_EQ("10,11 100x100", target->bounds().ToString());
- wm::WindowState* window_state = wm::GetWindowState(target.get());
- window_state->Minimize();
- window_state->Restore();
-
- generator.PressLeftButton();
- generator.MoveMouseBy(10, 11);
- RunAllPendingInMessageLoop();
- EXPECT_EQ("10,11 100x100", target->bounds().ToString());
- }
-
- // Once window is maximized, window dragging completes.
- {
- scoped_ptr<aura::Window> target(CreateWindow(HTCAPTION));
- target->Focus();
- aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(),
- target.get());
- generator.PressLeftButton();
- generator.MoveMouseBy(10, 11);
- RunAllPendingInMessageLoop();
- EXPECT_EQ("10,11 100x100", target->bounds().ToString());
- wm::WindowState* window_state = wm::GetWindowState(target.get());
- window_state->Maximize();
- window_state->Restore();
-
- generator.PressLeftButton();
- generator.MoveMouseBy(10, 11);
- RunAllPendingInMessageLoop();
- EXPECT_EQ("10,11 100x100", target->bounds().ToString());
- }
-}
-
-// Showing the resize shadows when the mouse is over the window edges is tested
-// in resize_shadow_and_cursor_test.cc
-
-} // namespace test
-} // namespace ash