Index: ash/frame/caption_buttons/frame_maximize_button_unittest.cc |
diff --git a/ash/frame/caption_buttons/frame_maximize_button_unittest.cc b/ash/frame/caption_buttons/frame_maximize_button_unittest.cc |
deleted file mode 100644 |
index 06305d14e31551e700f1d5879b05a457126e3eb7..0000000000000000000000000000000000000000 |
--- a/ash/frame/caption_buttons/frame_maximize_button_unittest.cc |
+++ /dev/null |
@@ -1,814 +0,0 @@ |
-// 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/frame/caption_buttons/frame_maximize_button.h" |
- |
-#include "ash/ash_switches.h" |
-#include "ash/frame/caption_buttons/frame_caption_button_container_view.h" |
-#include "ash/frame/caption_buttons/maximize_bubble_controller.h" |
-#include "ash/shell.h" |
-#include "ash/test/ash_test_base.h" |
-#include "ash/wm/window_state.h" |
-#include "ash/wm/window_util.h" |
-#include "base/command_line.h" |
-#include "grit/ash_resources.h" |
-#include "ui/aura/client/focus_client.h" |
-#include "ui/aura/test/event_generator.h" |
-#include "ui/aura/window.h" |
-#include "ui/aura/window_tree_host.h" |
-#include "ui/events/event_processor.h" |
-#include "ui/events/event_utils.h" |
-#include "ui/events/gestures/gesture_configuration.h" |
-#include "ui/views/widget/widget.h" |
-#include "ui/views/widget/widget_delegate.h" |
- |
-namespace ash { |
-namespace test { |
- |
-namespace { |
- |
-class CancelCallbackHandler { |
- public: |
- CancelCallbackHandler(int update_events_before_cancel, |
- FrameMaximizeButton* maximize_button) : |
- update_events_before_cancel_(update_events_before_cancel), |
- maximize_button_(maximize_button) {} |
- virtual ~CancelCallbackHandler() {} |
- |
- void CountedCancelCallback(ui::EventType event_type, |
- const gfx::Vector2dF& pos) { |
- if (event_type == ui::ET_GESTURE_SCROLL_UPDATE && |
- !(--update_events_before_cancel_)) { |
- // Make sure that we are in the middle of a resizing operation, cancel it |
- // and then test that it is exited. |
- EXPECT_TRUE(maximize_button_->is_snap_enabled()); |
- maximize_button_->DestroyMaximizeMenu(); |
- EXPECT_FALSE(maximize_button_->is_snap_enabled()); |
- } |
- } |
- |
- private: |
- // When this counter reaches 0, the gesture maximize action gets cancelled. |
- int update_events_before_cancel_; |
- |
- // The maximize button which needs to get informed of the gesture termination. |
- FrameMaximizeButton* maximize_button_; |
- |
- DISALLOW_COPY_AND_ASSIGN(CancelCallbackHandler); |
-}; |
- |
-class TestWidgetDelegate : public views::WidgetDelegateView { |
- public: |
- TestWidgetDelegate() {} |
- virtual ~TestWidgetDelegate() {} |
- |
- // views::WidgetDelegate overrides: |
- virtual views::View* GetContentsView() OVERRIDE { |
- return this; |
- } |
- virtual bool CanResize() const OVERRIDE { |
- return true; |
- } |
- virtual bool CanMaximize() const OVERRIDE { |
- return true; |
- } |
- |
- ash::FrameCaptionButtonContainerView* caption_button_container() { |
- return caption_button_container_; |
- } |
- |
- private: |
- // Overridden from views::View: |
- virtual void Layout() OVERRIDE { |
- caption_button_container_->Layout(); |
- |
- // Right align the caption button container. |
- gfx::Size preferred_size = caption_button_container_->GetPreferredSize(); |
- caption_button_container_->SetBounds(width() - preferred_size.width(), 0, |
- preferred_size.width(), preferred_size.height()); |
- } |
- |
- virtual void ViewHierarchyChanged( |
- const ViewHierarchyChangedDetails& details) OVERRIDE { |
- if (details.is_add && details.child == this) { |
- caption_button_container_ = new FrameCaptionButtonContainerView( |
- GetWidget(), FrameCaptionButtonContainerView::MINIMIZE_ALLOWED); |
- |
- // Set arbitrary images for the container's buttons so that the buttons |
- // have non-empty sizes. |
- for (int icon = 0; icon < CAPTION_BUTTON_ICON_COUNT; ++icon) { |
- caption_button_container_->SetButtonImages( |
- static_cast<CaptionButtonIcon>(icon), |
- IDR_AURA_WINDOW_CONTROL_ICON_CLOSE, |
- IDR_AURA_WINDOW_CONTROL_ICON_CLOSE_I, |
- IDR_AURA_WINDOW_CONTROL_BACKGROUND_H, |
- IDR_AURA_WINDOW_CONTROL_BACKGROUND_P); |
- } |
- |
- AddChildView(caption_button_container_); |
- } |
- } |
- |
- // Not owned. |
- ash::FrameCaptionButtonContainerView* caption_button_container_; |
- |
- DISALLOW_COPY_AND_ASSIGN(TestWidgetDelegate); |
-}; |
- |
-} // namespace |
- |
-class FrameMaximizeButtonTest : public ash::test::AshTestBase { |
- public: |
- FrameMaximizeButtonTest() {} |
- virtual ~FrameMaximizeButtonTest() {} |
- |
- // The returned widget takes ownership of |delegate|. |
- views::Widget* CreateWidget(views::WidgetDelegate* delegate) { |
- views::Widget::InitParams params( |
- views::Widget::InitParams::TYPE_WINDOW_FRAMELESS); |
- views::Widget* widget = new views::Widget; |
- params.context = CurrentContext(); |
- params.delegate = delegate; |
- params.bounds = gfx::Rect(10, 10, 100, 100); |
- params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW; |
- widget->Init(params); |
- widget->Show(); |
- return widget; |
- } |
- |
- void CloseWidget() { |
- if (widget_) |
- widget_->CloseNow(); |
- widget_ = NULL; |
- } |
- |
- virtual void SetUp() OVERRIDE { |
- AshTestBase::SetUp(); |
- |
- CommandLine::ForCurrentProcess()->AppendSwitch( |
- switches::kAshDisableAlternateFrameCaptionButtonStyle); |
- |
- TestWidgetDelegate* delegate = new TestWidgetDelegate(); |
- widget_ = CreateWidget(delegate); |
- FrameCaptionButtonContainerView* caption_button_container = |
- delegate->caption_button_container(); |
- |
- FrameCaptionButtonContainerView::TestApi test(caption_button_container); |
- maximize_button_ = static_cast<FrameMaximizeButton*>( |
- test.size_button()); |
- } |
- |
- virtual void TearDown() OVERRIDE { |
- CloseWidget(); |
- AshTestBase::TearDown(); |
- } |
- |
- views::Widget* widget() { return widget_; } |
- |
- FrameMaximizeButton* maximize_button() { return maximize_button_; } |
- |
- private: |
- views::Widget* widget_; |
- FrameMaximizeButton* maximize_button_; |
- |
- DISALLOW_COPY_AND_ASSIGN(FrameMaximizeButtonTest); |
-}; |
- |
-// Tests that clicking on the resize-button toggles between maximize and normal |
-// state. |
-TEST_F(FrameMaximizeButtonTest, ResizeButtonToggleMaximize) { |
- wm::WindowState* window_state = |
- wm::GetWindowState(widget()->GetNativeWindow()); |
- views::View* view = maximize_button(); |
- gfx::Point center = view->GetBoundsInScreen().CenterPoint(); |
- |
- aura::test::EventGenerator generator( |
- window_state->window()->GetRootWindow(), center); |
- |
- EXPECT_FALSE(window_state->IsMaximized()); |
- |
- generator.ClickLeftButton(); |
- RunAllPendingInMessageLoop(); |
- EXPECT_TRUE(window_state->IsMaximized()); |
- |
- center = view->GetBoundsInScreen().CenterPoint(); |
- generator.MoveMouseTo(center); |
- generator.ClickLeftButton(); |
- RunAllPendingInMessageLoop(); |
- EXPECT_FALSE(window_state->IsMaximized()); |
- |
- generator.GestureTapAt(view->GetBoundsInScreen().CenterPoint()); |
- EXPECT_TRUE(window_state->IsMaximized()); |
- |
- generator.GestureTapAt(view->GetBoundsInScreen().CenterPoint()); |
- EXPECT_FALSE(window_state->IsMaximized()); |
- |
- generator.GestureTapDownAndUp(view->GetBoundsInScreen().CenterPoint()); |
- EXPECT_TRUE(window_state->IsMaximized()); |
- |
- generator.GestureTapDownAndUp(view->GetBoundsInScreen().CenterPoint()); |
- EXPECT_FALSE(window_state->IsMaximized()); |
-} |
- |
-#if defined(OS_WIN) |
-// RootWindow and Display can't resize on Windows Ash. http://crbug.com/165962 |
-#define MAYBE_ResizeButtonDrag DISABLED_ResizeButtonDrag |
-#else |
-#define MAYBE_ResizeButtonDrag ResizeButtonDrag |
-#endif |
- |
-// Tests that click+dragging on the resize-button tiles or minimizes the window. |
-TEST_F(FrameMaximizeButtonTest, MAYBE_ResizeButtonDrag) { |
- aura::Window* window = widget()->GetNativeWindow(); |
- views::View* view = maximize_button(); |
- gfx::Point center = view->GetBoundsInScreen().CenterPoint(); |
- |
- aura::test::EventGenerator generator(window->GetRootWindow(), center); |
- |
- wm::WindowState* window_state = wm::GetWindowState(window); |
- EXPECT_TRUE(window_state->IsNormalStateType()); |
- |
- // Snap right. |
- { |
- generator.PressLeftButton(); |
- generator.MoveMouseBy(10, 0); |
- generator.ReleaseLeftButton(); |
- RunAllPendingInMessageLoop(); |
- |
- EXPECT_FALSE(window_state->IsMaximized()); |
- EXPECT_FALSE(window_state->IsMinimized()); |
- EXPECT_EQ(wm::GetDefaultRightSnappedWindowBoundsInParent(window).ToString(), |
- window->bounds().ToString()); |
- } |
- |
- // Snap left. |
- { |
- center = view->GetBoundsInScreen().CenterPoint(); |
- generator.MoveMouseTo(center); |
- generator.PressLeftButton(); |
- generator.MoveMouseBy(-10, 0); |
- generator.ReleaseLeftButton(); |
- RunAllPendingInMessageLoop(); |
- |
- EXPECT_FALSE(window_state->IsMaximized()); |
- EXPECT_FALSE(window_state->IsMinimized()); |
- EXPECT_EQ(wm::GetDefaultLeftSnappedWindowBoundsInParent(window).ToString(), |
- window->bounds().ToString()); |
- } |
- |
- // Minimize. |
- { |
- center = view->GetBoundsInScreen().CenterPoint(); |
- generator.MoveMouseTo(center); |
- generator.PressLeftButton(); |
- generator.MoveMouseBy(0, 10); |
- generator.ReleaseLeftButton(); |
- RunAllPendingInMessageLoop(); |
- |
- EXPECT_TRUE(window_state->IsMinimized()); |
- } |
- |
- window_state->Restore(); |
- |
- // Now test the same behaviour for gesture events. |
- |
- // Snap right. |
- { |
- center = view->GetBoundsInScreen().CenterPoint(); |
- gfx::Point end = center; |
- end.Offset(80, 0); |
- generator.GestureScrollSequence(center, end, |
- base::TimeDelta::FromMilliseconds(100), |
- 3); |
- RunAllPendingInMessageLoop(); |
- |
- EXPECT_FALSE(window_state->IsMaximized()); |
- EXPECT_FALSE(window_state->IsMinimized()); |
- // This is a short resizing distance and different touch behavior |
- // applies which leads in half of the screen being used. |
- EXPECT_EQ("400,0 400x553", window->bounds().ToString()); |
- } |
- |
- // Snap left. |
- { |
- center = view->GetBoundsInScreen().CenterPoint(); |
- gfx::Point end = center; |
- end.Offset(-80, 0); |
- generator.GestureScrollSequence(center, end, |
- base::TimeDelta::FromMilliseconds(100), |
- 3); |
- RunAllPendingInMessageLoop(); |
- |
- EXPECT_FALSE(window_state->IsMaximized()); |
- EXPECT_FALSE(window_state->IsMinimized()); |
- EXPECT_EQ(wm::GetDefaultLeftSnappedWindowBoundsInParent(window).ToString(), |
- window->bounds().ToString()); |
- } |
- |
- // Minimize. |
- { |
- center = view->GetBoundsInScreen().CenterPoint(); |
- gfx::Point end = center; |
- end.Offset(0, 40); |
- generator.GestureScrollSequence(center, end, |
- base::TimeDelta::FromMilliseconds(100), |
- 3); |
- RunAllPendingInMessageLoop(); |
- |
- EXPECT_TRUE(window_state->IsMinimized()); |
- } |
- |
- // Test with gesture events. |
-} |
- |
-// Test that closing the (browser) window with an opened balloon does not |
-// crash the system. In other words: Make sure that shutting down the frame |
-// destroys the opened balloon in an orderly fashion. |
-TEST_F(FrameMaximizeButtonTest, MaximizeButtonExternalShutDown) { |
- aura::Window* window = widget()->GetNativeWindow(); |
- ash::FrameMaximizeButton* maximize_button = |
- FrameMaximizeButtonTest::maximize_button(); |
- maximize_button->set_bubble_appearance_delay_ms(0); |
- gfx::Point button_pos = maximize_button->GetBoundsInScreen().CenterPoint(); |
- gfx::Point off_pos(button_pos.x() + 100, button_pos.y() + 100); |
- |
- aura::test::EventGenerator generator(window->GetRootWindow(), off_pos); |
- EXPECT_FALSE(maximize_button->maximizer()); |
- EXPECT_TRUE(wm::GetWindowState(window)->IsNormalStateType()); |
- |
- // Move the mouse cursor over the button to bring up the maximizer bubble. |
- generator.MoveMouseTo(button_pos); |
- EXPECT_TRUE(maximize_button->maximizer()); |
- |
- // Even though the widget is closing the bubble menu should not crash upon |
- // its delayed destruction. |
- CloseWidget(); |
-} |
- |
-// Test that maximizing the browser after hovering in does not crash the system |
-// when the observer gets removed in the bubble destruction process. |
-TEST_F(FrameMaximizeButtonTest, MaximizeOnHoverThenClick) { |
- aura::Window* window = widget()->GetNativeWindow(); |
- ash::FrameMaximizeButton* maximize_button = |
- FrameMaximizeButtonTest::maximize_button(); |
- maximize_button->set_bubble_appearance_delay_ms(0); |
- gfx::Point button_pos = maximize_button->GetBoundsInScreen().CenterPoint(); |
- gfx::Point off_pos(button_pos.x() + 100, button_pos.y() + 100); |
- |
- aura::test::EventGenerator generator(window->GetRootWindow(), off_pos); |
- EXPECT_FALSE(maximize_button->maximizer()); |
- EXPECT_TRUE(wm::GetWindowState(window)->IsNormalStateType()); |
- |
- // Move the mouse cursor over the button to bring up the maximizer bubble. |
- generator.MoveMouseTo(button_pos); |
- EXPECT_TRUE(maximize_button->maximizer()); |
- generator.ClickLeftButton(); |
- EXPECT_TRUE(wm::GetWindowState(window)->IsMaximized()); |
-} |
- |
-// Test that hovering over a button in the balloon dialog will show the phantom |
-// window. Moving then away from the button will hide it again. Then check that |
-// pressing and dragging the button itself off the button will also release the |
-// phantom window. |
-TEST_F(FrameMaximizeButtonTest, MaximizeLeftButtonDragOut) { |
- aura::Window* window = widget()->GetNativeWindow(); |
- ash::FrameMaximizeButton* maximize_button = |
- FrameMaximizeButtonTest::maximize_button(); |
- maximize_button->set_bubble_appearance_delay_ms(0); |
- gfx::Point button_pos = maximize_button->GetBoundsInScreen().CenterPoint(); |
- gfx::Point off_pos(button_pos.x() + 100, button_pos.y() + 100); |
- |
- aura::test::EventGenerator generator(window->GetRootWindow(), off_pos); |
- EXPECT_FALSE(maximize_button->maximizer()); |
- EXPECT_TRUE(wm::GetWindowState(window)->IsNormalStateType()); |
- EXPECT_FALSE(maximize_button->phantom_window_open()); |
- |
- // Move the mouse cursor over the button to bring up the maximizer bubble. |
- generator.MoveMouseTo(button_pos); |
- EXPECT_TRUE(maximize_button->maximizer()); |
- |
- // Move the mouse over the left maximize button. |
- gfx::Point left_max_pos = maximize_button->maximizer()-> |
- GetButtonForUnitTest(SNAP_LEFT)->GetBoundsInScreen().CenterPoint(); |
- |
- generator.MoveMouseTo(left_max_pos); |
- // Expect the phantom window to be open. |
- EXPECT_TRUE(maximize_button->phantom_window_open()); |
- |
- // Move away to see the window being destroyed. |
- generator.MoveMouseTo(off_pos); |
- EXPECT_FALSE(maximize_button->phantom_window_open()); |
- |
- // Move back over the button. |
- generator.MoveMouseTo(button_pos); |
- generator.MoveMouseTo(left_max_pos); |
- EXPECT_TRUE(maximize_button->phantom_window_open()); |
- |
- // Press button and drag out of dialog. |
- generator.PressLeftButton(); |
- generator.MoveMouseTo(off_pos); |
- generator.ReleaseLeftButton(); |
- |
- // Check that the phantom window is also gone. |
- EXPECT_FALSE(maximize_button->phantom_window_open()); |
-} |
- |
-// Test that clicking a button in the maximizer bubble (in this case the |
-// maximize left button) will do the requested action. |
-TEST_F(FrameMaximizeButtonTest, MaximizeLeftByButton) { |
- aura::Window* window = widget()->GetNativeWindow(); |
- |
- ash::FrameMaximizeButton* maximize_button = |
- FrameMaximizeButtonTest::maximize_button(); |
- maximize_button->set_bubble_appearance_delay_ms(0); |
- gfx::Point button_pos = maximize_button->GetBoundsInScreen().CenterPoint(); |
- gfx::Point off_pos(button_pos.x() + 100, button_pos.y() + 100); |
- |
- aura::test::EventGenerator generator(window->GetRootWindow(), off_pos); |
- EXPECT_FALSE(maximize_button->maximizer()); |
- EXPECT_TRUE(wm::GetWindowState(window)->IsNormalStateType()); |
- EXPECT_FALSE(maximize_button->phantom_window_open()); |
- |
- // Move the mouse cursor over the button to bring up the maximizer bubble. |
- generator.MoveMouseTo(button_pos); |
- EXPECT_TRUE(maximize_button->maximizer()); |
- |
- // Move the mouse over the left maximize button. |
- gfx::Point left_max_pos = maximize_button->maximizer()-> |
- GetButtonForUnitTest(SNAP_LEFT)->GetBoundsInScreen().CenterPoint(); |
- generator.MoveMouseTo(left_max_pos); |
- EXPECT_TRUE(maximize_button->phantom_window_open()); |
- generator.ClickLeftButton(); |
- |
- EXPECT_FALSE(maximize_button->maximizer()); |
- EXPECT_FALSE(maximize_button->phantom_window_open()); |
- |
- wm::WindowState* window_state = wm::GetWindowState(window); |
- EXPECT_FALSE(window_state->IsMaximized()); |
- EXPECT_FALSE(window_state->IsMinimized()); |
- EXPECT_EQ(wm::GetDefaultLeftSnappedWindowBoundsInParent(window).ToString(), |
- window->bounds().ToString()); |
-} |
- |
-// Test that the activation focus does not change when the bubble gets shown. |
-TEST_F(FrameMaximizeButtonTest, MaximizeKeepFocus) { |
- aura::Window* window = widget()->GetNativeWindow(); |
- ash::FrameMaximizeButton* maximize_button = |
- FrameMaximizeButtonTest::maximize_button(); |
- maximize_button->set_bubble_appearance_delay_ms(0); |
- gfx::Point button_pos = maximize_button->GetBoundsInScreen().CenterPoint(); |
- gfx::Point off_pos(button_pos.x() + 100, button_pos.y() + 100); |
- |
- aura::test::EventGenerator generator(window->GetRootWindow(), off_pos); |
- EXPECT_FALSE(maximize_button->maximizer()); |
- EXPECT_TRUE(wm::GetWindowState(window)->IsNormalStateType()); |
- |
- aura::Window* active = |
- aura::client::GetFocusClient(window)->GetFocusedWindow(); |
- |
- // Move the mouse cursor over the button to bring up the maximizer bubble. |
- generator.MoveMouseTo(button_pos); |
- EXPECT_TRUE(maximize_button->maximizer()); |
- |
- // Check that the focused window is still the same. |
- EXPECT_EQ(active, aura::client::GetFocusClient(window)->GetFocusedWindow()); |
-} |
- |
-TEST_F(FrameMaximizeButtonTest, MaximizeTap) { |
- aura::Window* window = widget()->GetNativeWindow(); |
- aura::Window* root_window = window->GetRootWindow(); |
- ash::FrameMaximizeButton* maximize_button = |
- FrameMaximizeButtonTest::maximize_button(); |
- gfx::Point button_pos = maximize_button->GetBoundsInScreen().CenterPoint(); |
- |
- const int touch_default_radius = |
- ui::GestureConfiguration::default_radius(); |
- ui::GestureConfiguration::set_default_radius(0); |
- |
- ui::EventProcessor* dispatcher = root_window->GetHost()->event_processor(); |
- const int kTouchId = 2; |
- ui::TouchEvent press(ui::ET_TOUCH_PRESSED, |
- button_pos, |
- kTouchId, |
- ui::EventTimeForNow()); |
- ui::EventDispatchDetails details = dispatcher->OnEventFromSource(&press); |
- ASSERT_FALSE(details.dispatcher_destroyed); |
- |
- button_pos.Offset(9, 8); |
- ui::TouchEvent release( |
- ui::ET_TOUCH_RELEASED, |
- button_pos, |
- kTouchId, |
- press.time_stamp() + base::TimeDelta::FromMilliseconds(50)); |
- details = dispatcher->OnEventFromSource(&release); |
- ASSERT_FALSE(details.dispatcher_destroyed); |
- |
- ui::GestureConfiguration::set_default_radius(touch_default_radius); |
-} |
- |
-// Test that only the left button will activate the maximize button. |
-TEST_F(FrameMaximizeButtonTest, OnlyLeftButtonMaximizes) { |
- aura::Window* window = widget()->GetNativeWindow(); |
- ash::FrameMaximizeButton* maximize_button = |
- FrameMaximizeButtonTest::maximize_button(); |
- maximize_button->set_bubble_appearance_delay_ms(0); |
- gfx::Point button_pos = maximize_button->GetBoundsInScreen().CenterPoint(); |
- gfx::Point off_pos(button_pos.x() + 100, button_pos.y() + 100); |
- |
- aura::test::EventGenerator generator(window->GetRootWindow(), off_pos); |
- EXPECT_FALSE(maximize_button->maximizer()); |
- wm::WindowState* window_state = wm::GetWindowState(window); |
- EXPECT_TRUE(window_state->IsNormalStateType()); |
- EXPECT_FALSE(window_state->IsMaximized()); |
- |
- // Move the mouse cursor over the button. |
- generator.MoveMouseTo(button_pos); |
- EXPECT_TRUE(maximize_button->maximizer()); |
- EXPECT_FALSE(maximize_button->phantom_window_open()); |
- |
- // After pressing the left button the button should get triggered. |
- generator.PressLeftButton(); |
- RunAllPendingInMessageLoop(); |
- EXPECT_TRUE(maximize_button->is_snap_enabled()); |
- EXPECT_FALSE(window_state->IsMaximized()); |
- |
- // Pressing the right button then should cancel the operation. |
- generator.PressRightButton(); |
- RunAllPendingInMessageLoop(); |
- EXPECT_FALSE(maximize_button->maximizer()); |
- |
- // After releasing the second button the window shouldn't be maximized. |
- generator.ReleaseRightButton(); |
- generator.ReleaseLeftButton(); |
- RunAllPendingInMessageLoop(); |
- EXPECT_FALSE(window_state->IsMaximized()); |
- |
- // Second experiment: Starting with right should also not trigger. |
- generator.MoveMouseTo(off_pos); |
- generator.MoveMouseTo(button_pos); |
- EXPECT_TRUE(maximize_button->maximizer()); |
- |
- // Pressing first the right button should not activate. |
- generator.PressRightButton(); |
- RunAllPendingInMessageLoop(); |
- EXPECT_FALSE(maximize_button->is_snap_enabled()); |
- |
- // Pressing then additionally the left button shouldn't activate either. |
- generator.PressLeftButton(); |
- RunAllPendingInMessageLoop(); |
- EXPECT_FALSE(maximize_button->is_snap_enabled()); |
- generator.ReleaseRightButton(); |
- generator.ReleaseLeftButton(); |
- EXPECT_FALSE(window_state->IsMaximized()); |
-} |
- |
-// Click a button of window maximize functionality. |
-// If |snap_type| is SNAP_NONE the FrameMaximizeButton gets clicked, otherwise |
-// the associated snap button. |
-// |Window| is the window which owns the maximize button. |
-// |maximize_button| is the FrameMaximizeButton which controls the window. |
-void ClickMaxButton( |
- ash::FrameMaximizeButton* maximize_button, |
- aura::Window* window, |
- SnapType snap_type) { |
- gfx::Point button_pos = maximize_button->GetBoundsInScreen().CenterPoint(); |
- gfx::Point off_pos(button_pos.x() + 100, button_pos.y() + 100); |
- |
- aura::test::EventGenerator generator(window->GetRootWindow(), off_pos); |
- generator.MoveMouseTo(off_pos); |
- EXPECT_FALSE(maximize_button->maximizer()); |
- EXPECT_FALSE(maximize_button->phantom_window_open()); |
- |
- // Move the mouse cursor over the button. |
- generator.MoveMouseTo(button_pos); |
- EXPECT_TRUE(maximize_button->maximizer()); |
- EXPECT_FALSE(maximize_button->phantom_window_open()); |
- |
- if (snap_type != SNAP_NONE) { |
- gfx::Point left_max_pos = maximize_button->maximizer()-> |
- GetButtonForUnitTest(snap_type)->GetBoundsInScreen().CenterPoint(); |
- generator.MoveMouseTo(left_max_pos); |
- EXPECT_TRUE(maximize_button->phantom_window_open()); |
- } |
- // After pressing the left button the button should get triggered. |
- generator.ClickLeftButton(); |
- EXPECT_FALSE(maximize_button->maximizer()); |
-} |
- |
-// Test that the restore from left/right maximize is properly done. |
-TEST_F(FrameMaximizeButtonTest, MaximizeLeftRestore) { |
- aura::Window* window = widget()->GetNativeWindow(); |
- gfx::Rect initial_bounds = widget()->GetWindowBoundsInScreen(); |
- ash::FrameMaximizeButton* maximize_button = |
- FrameMaximizeButtonTest::maximize_button(); |
- maximize_button->set_bubble_appearance_delay_ms(0); |
- |
- ClickMaxButton(maximize_button, window, SNAP_LEFT); |
- wm::WindowState* window_state = wm::GetWindowState(window); |
- // The window should not be maximized. |
- EXPECT_FALSE(window_state->IsMaximized()); |
- // But the bounds should be different. |
- gfx::Rect new_bounds = widget()->GetWindowBoundsInScreen(); |
- EXPECT_EQ(0, new_bounds.x()); |
- EXPECT_EQ(0, new_bounds.y()); |
- |
- // Now click the same button again to see that it restores. |
- ClickMaxButton(maximize_button, window, SNAP_LEFT); |
- // But the bounds should be restored. |
- new_bounds = widget()->GetWindowBoundsInScreen(); |
- EXPECT_EQ(new_bounds.x(), initial_bounds.x()); |
- EXPECT_EQ(new_bounds.y(), initial_bounds.x()); |
- EXPECT_EQ(new_bounds.width(), initial_bounds.width()); |
- EXPECT_EQ(new_bounds.height(), initial_bounds.height()); |
- // Make sure that there is no restore rectangle left. |
- EXPECT_FALSE(window_state->HasRestoreBounds()); |
-} |
- |
-// Maximize, left/right maximize and then restore should works. |
-TEST_F(FrameMaximizeButtonTest, MaximizeMaximizeLeftRestore) { |
- aura::Window* window = widget()->GetNativeWindow(); |
- gfx::Rect initial_bounds = widget()->GetWindowBoundsInScreen(); |
- ash::FrameMaximizeButton* maximize_button = |
- FrameMaximizeButtonTest::maximize_button(); |
- maximize_button->set_bubble_appearance_delay_ms(0); |
- |
- ClickMaxButton(maximize_button, window, SNAP_NONE); |
- |
- wm::WindowState* window_state = wm::GetWindowState(window); |
- EXPECT_TRUE(window_state->IsMaximized()); |
- |
- ClickMaxButton(maximize_button, window, SNAP_LEFT); |
- EXPECT_FALSE(window_state->IsMaximized()); |
- gfx::Rect new_bounds = widget()->GetWindowBoundsInScreen(); |
- EXPECT_EQ(0, new_bounds.x()); |
- EXPECT_EQ(0, new_bounds.y()); |
- |
- // Now click the same button again to see that it restores. |
- ClickMaxButton(maximize_button, window, SNAP_LEFT); |
- RunAllPendingInMessageLoop(); |
- // But the bounds should be restored. |
- new_bounds = widget()->GetWindowBoundsInScreen(); |
- EXPECT_EQ(new_bounds.x(), initial_bounds.x()); |
- EXPECT_EQ(new_bounds.y(), initial_bounds.x()); |
- EXPECT_EQ(new_bounds.width(), initial_bounds.width()); |
- EXPECT_EQ(new_bounds.height(), initial_bounds.height()); |
- // Make sure that there is no restore rectangle left. |
- EXPECT_FALSE(window_state->HasRestoreBounds()); |
-} |
- |
-// Left/right maximize, maximize and then restore should work. |
-TEST_F(FrameMaximizeButtonTest, MaximizeSnapLeftRestore) { |
- aura::Window* window = widget()->GetNativeWindow(); |
- gfx::Rect initial_bounds = widget()->GetWindowBoundsInScreen(); |
- ash::FrameMaximizeButton* maximize_button = |
- FrameMaximizeButtonTest::maximize_button(); |
- maximize_button->set_bubble_appearance_delay_ms(0); |
- |
- ClickMaxButton(maximize_button, window, SNAP_LEFT); |
- |
- wm::WindowState* window_state = wm::GetWindowState(window); |
- EXPECT_FALSE(window_state->IsMaximized()); |
- |
- ClickMaxButton(maximize_button, window, SNAP_NONE); |
- EXPECT_TRUE(window_state->IsMaximized()); |
- |
- ClickMaxButton(maximize_button, window, SNAP_NONE); |
- EXPECT_FALSE(window_state->IsMaximized()); |
- gfx::Rect new_bounds = widget()->GetWindowBoundsInScreen(); |
- EXPECT_EQ(new_bounds.x(), initial_bounds.x()); |
- EXPECT_EQ(new_bounds.y(), initial_bounds.x()); |
- EXPECT_EQ(new_bounds.width(), initial_bounds.width()); |
- EXPECT_EQ(new_bounds.height(), initial_bounds.height()); |
- // Make sure that there is no restore rectangle left. |
- EXPECT_FALSE(window_state->HasRestoreBounds()); |
-} |
- |
-// Test that minimizing the window per keyboard closes the maximize bubble. |
-TEST_F(FrameMaximizeButtonTest, MinimizePerKeyClosesBubble) { |
- aura::Window* window = widget()->GetNativeWindow(); |
- ash::FrameMaximizeButton* maximize_button = |
- FrameMaximizeButtonTest::maximize_button(); |
- |
- gfx::Point button_pos = maximize_button->GetBoundsInScreen().CenterPoint(); |
- gfx::Point off_pos(button_pos.x() + 100, button_pos.y() + 100); |
- |
- aura::test::EventGenerator generator(window->GetRootWindow(), off_pos); |
- generator.MoveMouseTo(off_pos); |
- EXPECT_FALSE(maximize_button->maximizer()); |
- |
- // Move the mouse cursor over the maximize button. |
- generator.MoveMouseTo(button_pos); |
- EXPECT_TRUE(maximize_button->maximizer()); |
- |
- // We simulate the keystroke by calling minimizeWindow directly. |
- wm::WindowState* window_state = wm::GetWindowState(window); |
- window_state->Minimize(); |
- |
- EXPECT_TRUE(window_state->IsMinimized()); |
- EXPECT_FALSE(maximize_button->maximizer()); |
-} |
- |
-// Tests that dragging down on the maximize button minimizes the window. |
-TEST_F(FrameMaximizeButtonTest, MaximizeButtonDragDownMinimizes) { |
- aura::Window* window = widget()->GetNativeWindow(); |
- ash::FrameMaximizeButton* maximize_button = |
- FrameMaximizeButtonTest::maximize_button(); |
- |
- wm::WindowState* window_state = wm::GetWindowState(window); |
- // Drag down on a maximized window. |
- window_state->Maximize(); |
- EXPECT_TRUE(window_state->IsMaximized()); |
- gfx::Point button_pos = maximize_button->GetBoundsInScreen().CenterPoint(); |
- gfx::Point off_pos(button_pos.x(), button_pos.y() + 100); |
- |
- aura::test::EventGenerator generator(window->GetRootWindow()); |
- generator.GestureScrollSequence(button_pos, off_pos, |
- base::TimeDelta::FromMilliseconds(0), 1); |
- |
- EXPECT_TRUE(window_state->IsMinimized()); |
- EXPECT_FALSE(maximize_button->maximizer()); |
- |
- // Drag down on a restored window. |
- window_state->Restore(); |
- |
- button_pos = maximize_button->GetBoundsInScreen().CenterPoint(); |
- off_pos = gfx::Point(button_pos.x(), button_pos.y() + 200); |
- generator.GestureScrollSequence(button_pos, off_pos, |
- base::TimeDelta::FromMilliseconds(10), 1); |
- EXPECT_TRUE(window_state->IsMinimized()); |
- EXPECT_FALSE(maximize_button->maximizer()); |
-} |
- |
-// Tests that dragging Left and pressing ESC does properly abort. |
-TEST_F(FrameMaximizeButtonTest, MaximizeButtonDragLeftEscapeExits) { |
- aura::Window* window = widget()->GetNativeWindow(); |
- gfx::Rect initial_bounds = widget()->GetWindowBoundsInScreen(); |
- ash::FrameMaximizeButton* maximize_button = |
- FrameMaximizeButtonTest::maximize_button(); |
- |
- gfx::Point button_pos = maximize_button->GetBoundsInScreen().CenterPoint(); |
- gfx::Point off_pos(button_pos.x() - button_pos.x() / 2, button_pos.y()); |
- |
- const int kGestureSteps = 10; |
- CancelCallbackHandler cancel_handler(kGestureSteps / 2, maximize_button); |
- aura::test::EventGenerator generator(window->GetRootWindow()); |
- generator.GestureScrollSequenceWithCallback( |
- button_pos, |
- off_pos, |
- base::TimeDelta::FromMilliseconds(0), |
- kGestureSteps, |
- base::Bind(&CancelCallbackHandler::CountedCancelCallback, |
- base::Unretained(&cancel_handler))); |
- |
- // Check that there was no size change. |
- EXPECT_EQ(widget()->GetWindowBoundsInScreen().size().ToString(), |
- initial_bounds.size().ToString()); |
- // Check that there is no phantom window left open. |
- EXPECT_FALSE(maximize_button->phantom_window_open()); |
-} |
- |
-// Test that hovering over a button in the maximizer bubble and switching |
-// activation without moving the mouse properly aborts. |
-TEST_F(FrameMaximizeButtonTest, LossOfActivationWhileMaximizeBubbleOpenAborts) { |
- aura::Window* window = widget()->GetNativeWindow(); |
- ash::FrameMaximizeButton* maximize_button = |
- FrameMaximizeButtonTest::maximize_button(); |
- maximize_button->set_bubble_appearance_delay_ms(0); |
- |
- gfx::Rect initial_bounds = window->GetBoundsInScreen(); |
- EXPECT_TRUE(wm::GetWindowState(window)->IsNormalStateType()); |
- EXPECT_TRUE(widget()->IsActive()); |
- |
- // Move the mouse over the maximize button in order to bring up the maximizer |
- // bubble. |
- gfx::Point button_pos = maximize_button->GetBoundsInScreen().CenterPoint(); |
- gfx::Point off_pos(button_pos.x() + 100, button_pos.y() + 100); |
- aura::test::EventGenerator generator(window->GetRootWindow(), off_pos); |
- generator.MoveMouseTo(button_pos); |
- EXPECT_TRUE(maximize_button->maximizer()); |
- |
- // Hover the mouse over the left maximize button in the maximizer bubble to |
- // show the phantom window. |
- gfx::Point left_max_pos = maximize_button->maximizer()-> |
- GetButtonForUnitTest(SNAP_LEFT)->GetBoundsInScreen().CenterPoint(); |
- generator.MoveMouseTo(left_max_pos); |
- EXPECT_TRUE(maximize_button->phantom_window_open()); |
- |
- // Change activation by creating a new window. This could be done via an |
- // accelerator. The root window takes ownership of |just_created|. |
- views::Widget* just_created = views::Widget::CreateWindowWithContextAndBounds( |
- NULL, widget()->GetNativeWindow(), gfx::Rect(100, 100)); |
- just_created->Show(); |
- just_created->Activate(); |
- EXPECT_FALSE(widget()->IsActive()); |
- |
- // Test that we have properly reset the state of the now inactive window. |
- EXPECT_FALSE(maximize_button->maximizer()); |
- EXPECT_FALSE(maximize_button->phantom_window_open()); |
- EXPECT_TRUE(wm::GetWindowState(window)->IsNormalStateType()); |
- EXPECT_EQ(initial_bounds.ToString(), window->GetBoundsInScreen().ToString()); |
-} |
- |
-} // namespace test |
-} // namespace ash |