Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(341)

Unified Diff: views/widget/widget_unittest.cc

Issue 8598031: views: Move widget/ directory to ui/views. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: reland for real Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « views/widget/widget_delegate.cc ('k') | views/widget/window_manager.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: views/widget/widget_unittest.cc
diff --git a/views/widget/widget_unittest.cc b/views/widget/widget_unittest.cc
deleted file mode 100644
index 580bed8524eef4cbcbef4be5f45cd28cc8078ca1..0000000000000000000000000000000000000000
--- a/views/widget/widget_unittest.cc
+++ /dev/null
@@ -1,829 +0,0 @@
-// Copyright (c) 2011 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 "base/basictypes.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/message_loop.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "ui/views/test/test_views_delegate.h"
-#include "ui/views/test/views_test_base.h"
-#include "ui/gfx/point.h"
-#include "ui/gfx/native_widget_types.h"
-#include "views/views_delegate.h"
-#include "views/widget/native_widget_delegate.h"
-
-#if defined(USE_AURA)
-#include "ui/aura/window.h"
-#include "views/widget/native_widget_aura.h"
-#elif defined(OS_WIN)
-#include "views/widget/native_widget_win.h"
-#elif defined(TOOLKIT_USES_GTK)
-#include "views/widget/native_widget_gtk.h"
-#endif
-
-namespace views {
-namespace {
-
-// A generic typedef to pick up relevant NativeWidget implementations.
-#if defined(USE_AURA)
-typedef NativeWidgetAura NativeWidgetPlatform;
-#elif defined(OS_WIN)
-typedef NativeWidgetWin NativeWidgetPlatform;
-#elif defined(TOOLKIT_USES_GTK)
-typedef NativeWidgetGtk NativeWidgetPlatform;
-#endif
-
-// A widget that assumes mouse capture always works. It won't on Gtk/Aura in
-// testing, so we mock it.
-#if defined(TOOLKIT_USES_GTK) || defined(USE_AURA)
-class NativeWidgetCapture : public NativeWidgetPlatform {
- public:
- NativeWidgetCapture(internal::NativeWidgetDelegate* delegate)
- : NativeWidgetPlatform(delegate),
- mouse_capture_(false) {}
- virtual ~NativeWidgetCapture() {}
-
- virtual void SetMouseCapture() OVERRIDE {
- mouse_capture_ = true;
- }
- virtual void ReleaseMouseCapture() OVERRIDE {
- if (mouse_capture_)
- delegate()->OnMouseCaptureLost();
- mouse_capture_ = false;
- }
- virtual bool HasMouseCapture() const OVERRIDE {
- return mouse_capture_;
- }
-
- private:
- bool mouse_capture_;
-
- DISALLOW_COPY_AND_ASSIGN(NativeWidgetCapture);
-};
-#endif
-
-// A typedef that inserts our mock-capture NativeWidget implementation for
-// relevant platforms.
-#if defined(USE_AURA)
-typedef NativeWidgetCapture NativeWidgetPlatformForTest;
-#elif defined(OS_WIN)
-typedef NativeWidgetWin NativeWidgetPlatformForTest;
-#elif defined(TOOLKIT_USES_GTK)
-typedef NativeWidgetCapture NativeWidgetPlatformForTest;
-#endif
-
-// A view that always processes all mouse events.
-class MouseView : public View {
- public:
- MouseView() : View() {
- }
- virtual ~MouseView() {}
-
- virtual bool OnMousePressed(const MouseEvent& event) OVERRIDE {
- return true;
- }
-};
-
-typedef ViewsTestBase WidgetTest;
-
-NativeWidget* CreatePlatformNativeWidget(
- internal::NativeWidgetDelegate* delegate) {
- return new NativeWidgetPlatformForTest(delegate);
-}
-
-Widget* CreateTopLevelPlatformWidget() {
- Widget* toplevel = new Widget;
- Widget::InitParams toplevel_params(Widget::InitParams::TYPE_WINDOW);
- toplevel_params.native_widget = CreatePlatformNativeWidget(toplevel);
- toplevel->Init(toplevel_params);
- return toplevel;
-}
-
-Widget* CreateChildPlatformWidget(gfx::NativeView parent_native_view) {
- Widget* child = new Widget;
- Widget::InitParams child_params(Widget::InitParams::TYPE_CONTROL);
- child_params.native_widget = CreatePlatformNativeWidget(child);
- child_params.parent = parent_native_view;
- child->Init(child_params);
- child->SetContentsView(new View);
- return child;
-}
-
-#if defined(OS_WIN) && !defined(USE_AURA)
-// On Windows, it is possible for us to have a child window that is TYPE_POPUP.
-Widget* CreateChildPopupPlatformWidget(gfx::NativeView parent_native_view) {
- Widget* child = new Widget;
- Widget::InitParams child_params(Widget::InitParams::TYPE_POPUP);
- child_params.child = true;
- child_params.native_widget = CreatePlatformNativeWidget(child);
- child_params.parent = parent_native_view;
- child->Init(child_params);
- child->SetContentsView(new View);
- return child;
-}
-#endif
-
-Widget* CreateTopLevelNativeWidget() {
- Widget* toplevel = new Widget;
- Widget::InitParams params(Widget::InitParams::TYPE_WINDOW);
- toplevel->Init(params);
- toplevel->SetContentsView(new View);
- return toplevel;
-}
-
-Widget* CreateChildNativeWidgetWithParent(Widget* parent) {
- Widget* child = new Widget;
- Widget::InitParams params(Widget::InitParams::TYPE_CONTROL);
- params.parent_widget = parent;
- child->Init(params);
- child->SetContentsView(new View);
- return child;
-}
-
-Widget* CreateChildNativeWidget() {
- return CreateChildNativeWidgetWithParent(NULL);
-}
-
-bool WidgetHasMouseCapture(const Widget* widget) {
- return static_cast<const internal::NativeWidgetPrivate*>(widget->
- native_widget())->HasMouseCapture();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Widget::GetTopLevelWidget tests.
-
-TEST_F(WidgetTest, GetTopLevelWidget_Native) {
- // Create a hierarchy of native widgets.
- Widget* toplevel = CreateTopLevelPlatformWidget();
-#if defined(TOOLKIT_USES_GTK)
- NativeWidgetGtk* native_widget =
- static_cast<NativeWidgetGtk*>(toplevel->native_widget());
- gfx::NativeView parent = native_widget->window_contents();
-#else
- gfx::NativeView parent = toplevel->GetNativeView();
-#endif
- Widget* child = CreateChildPlatformWidget(parent);
-
- EXPECT_EQ(toplevel, toplevel->GetTopLevelWidget());
- EXPECT_EQ(toplevel, child->GetTopLevelWidget());
-
- toplevel->CloseNow();
- // |child| should be automatically destroyed with |toplevel|.
-}
-
-TEST_F(WidgetTest, GetTopLevelWidget_Synthetic) {
- // Create a hierarchy consisting of a top level platform native widget and a
- // child NativeWidget.
- Widget* toplevel = CreateTopLevelPlatformWidget();
- Widget* child = CreateTopLevelNativeWidget();
-
- EXPECT_EQ(toplevel, toplevel->GetTopLevelWidget());
- EXPECT_EQ(child, child->GetTopLevelWidget());
-
- toplevel->CloseNow();
- // |child| should be automatically destroyed with |toplevel|.
-}
-
-// Creates a hierarchy consisting of a desktop platform native widget, a
-// toplevel NativeWidget, and a child of that toplevel, another NativeWidget.
-TEST_F(WidgetTest, GetTopLevelWidget_SyntheticDesktop) {
- // Create a hierarchy consisting of a desktop platform native widget,
- // a toplevel NativeWidget and a chlid NativeWidget.
- Widget* desktop = CreateTopLevelPlatformWidget();
- Widget* toplevel = CreateTopLevelNativeWidget(); // Will be parented
- // automatically to
- // |toplevel|.
-
- Widget* child = CreateChildNativeWidgetWithParent(toplevel);
-
- EXPECT_EQ(desktop, desktop->GetTopLevelWidget());
- EXPECT_EQ(toplevel, toplevel->GetTopLevelWidget());
- EXPECT_EQ(toplevel, child->GetTopLevelWidget());
-
- desktop->CloseNow();
- // |toplevel|, |child| should be automatically destroyed with |toplevel|.
-}
-
-// Tests some grab/ungrab events.
-TEST_F(WidgetTest, DISABLED_GrabUngrab) {
- Widget* toplevel = CreateTopLevelPlatformWidget();
- Widget* child1 = CreateChildNativeWidgetWithParent(toplevel);
- Widget* child2 = CreateChildNativeWidgetWithParent(toplevel);
-
- toplevel->SetBounds(gfx::Rect(0, 0, 500, 500));
-
- child1->SetBounds(gfx::Rect(10, 10, 300, 300));
- View* view = new MouseView();
- view->SetBounds(0, 0, 300, 300);
- child1->GetRootView()->AddChildView(view);
-
- child2->SetBounds(gfx::Rect(200, 10, 200, 200));
- view = new MouseView();
- view->SetBounds(0, 0, 200, 200);
- child2->GetRootView()->AddChildView(view);
-
- toplevel->Show();
- RunPendingMessages();
-
- // Click on child1
- MouseEvent pressed(ui::ET_MOUSE_PRESSED, 45, 45, ui::EF_LEFT_BUTTON_DOWN);
- toplevel->OnMouseEvent(pressed);
-
- EXPECT_TRUE(WidgetHasMouseCapture(toplevel));
- EXPECT_TRUE(WidgetHasMouseCapture(child1));
- EXPECT_FALSE(WidgetHasMouseCapture(child2));
-
- MouseEvent released(ui::ET_MOUSE_RELEASED, 45, 45, ui::EF_LEFT_BUTTON_DOWN);
- toplevel->OnMouseEvent(released);
-
- EXPECT_FALSE(WidgetHasMouseCapture(toplevel));
- EXPECT_FALSE(WidgetHasMouseCapture(child1));
- EXPECT_FALSE(WidgetHasMouseCapture(child2));
-
- RunPendingMessages();
-
- // Click on child2
- MouseEvent pressed2(ui::ET_MOUSE_PRESSED, 315, 45, ui::EF_LEFT_BUTTON_DOWN);
- EXPECT_TRUE(toplevel->OnMouseEvent(pressed2));
- EXPECT_TRUE(WidgetHasMouseCapture(toplevel));
- EXPECT_TRUE(WidgetHasMouseCapture(child2));
- EXPECT_FALSE(WidgetHasMouseCapture(child1));
-
- MouseEvent released2(ui::ET_MOUSE_RELEASED, 315, 45, ui::EF_LEFT_BUTTON_DOWN);
- toplevel->OnMouseEvent(released2);
- EXPECT_FALSE(WidgetHasMouseCapture(toplevel));
- EXPECT_FALSE(WidgetHasMouseCapture(child1));
- EXPECT_FALSE(WidgetHasMouseCapture(child2));
-
- toplevel->CloseNow();
-}
-
-// Test if a focus manager and an inputmethod work without CHECK failure
-// when window activation changes.
-TEST_F(WidgetTest, ChangeActivation) {
- Widget* top1 = CreateTopLevelPlatformWidget();
- // CreateInputMethod before activated
- top1->GetInputMethod();
- top1->Show();
- RunPendingMessages();
-
- Widget* top2 = CreateTopLevelPlatformWidget();
- top2->Show();
- RunPendingMessages();
-
- top1->Activate();
- RunPendingMessages();
-
- // Create InputMethod after deactivated.
- top2->GetInputMethod();
- top2->Activate();
- RunPendingMessages();
-
- top1->Activate();
- RunPendingMessages();
-
- top1->CloseNow();
- top2->CloseNow();
-}
-
-// Tests visibility of child widgets.
-TEST_F(WidgetTest, Visibility) {
- Widget* toplevel = CreateTopLevelPlatformWidget();
-#if defined(TOOLKIT_USES_GTK)
- NativeWidgetGtk* native_widget =
- static_cast<NativeWidgetGtk*>(toplevel->native_widget());
- gfx::NativeView parent = native_widget->window_contents();
-#else
- gfx::NativeView parent = toplevel->GetNativeView();
-#endif
- Widget* child = CreateChildPlatformWidget(parent);
-
- EXPECT_FALSE(toplevel->IsVisible());
- EXPECT_FALSE(child->IsVisible());
-
- child->Show();
-
- EXPECT_FALSE(toplevel->IsVisible());
- EXPECT_FALSE(child->IsVisible());
-
- toplevel->Show();
-
- EXPECT_TRUE(toplevel->IsVisible());
- EXPECT_TRUE(child->IsVisible());
-
- toplevel->CloseNow();
- // |child| should be automatically destroyed with |toplevel|.
-}
-
-#if defined(OS_WIN) && !defined(USE_AURA)
-// On Windows, it is possible to have child window that are TYPE_POPUP. Unlike
-// regular child windows, these should be created as hidden and must be shown
-// explicitly.
-TEST_F(WidgetTest, Visibility_ChildPopup) {
- Widget* toplevel = CreateTopLevelPlatformWidget();
- Widget* child_popup = CreateChildPopupPlatformWidget(
- toplevel->GetNativeView());
-
- EXPECT_FALSE(toplevel->IsVisible());
- EXPECT_FALSE(child_popup->IsVisible());
-
- toplevel->Show();
-
- EXPECT_TRUE(toplevel->IsVisible());
- EXPECT_FALSE(child_popup->IsVisible());
-
- child_popup->Show();
-
- EXPECT_TRUE(child_popup->IsVisible());
-
- toplevel->CloseNow();
- // |child_popup| should be automatically destroyed with |toplevel|.
-}
-#endif
-
-// Tests visibility of synthetic child widgets.
-TEST_F(WidgetTest, Visibility_Synthetic) {
- // Create a hierarchy consisting of a desktop platform native widget,
- // a toplevel NativeWidget and a chlid NativeWidget.
- Widget* desktop = CreateTopLevelPlatformWidget();
- desktop->Show();
-
- Widget* toplevel = CreateTopLevelNativeWidget(); // Will be parented
- // automatically to
- // |toplevel|.
-
- Widget* child = CreateChildNativeWidgetWithParent(toplevel);
-
- EXPECT_FALSE(toplevel->IsVisible());
- EXPECT_FALSE(child->IsVisible());
-
- child->Show();
-
- EXPECT_FALSE(toplevel->IsVisible());
- EXPECT_FALSE(child->IsVisible());
-
- toplevel->Show();
-
- EXPECT_TRUE(toplevel->IsVisible());
- EXPECT_TRUE(child->IsVisible());
-
- desktop->CloseNow();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Widget ownership tests.
-//
-// Tests various permutations of Widget ownership specified in the
-// InitParams::Ownership param.
-
-// A WidgetTest that supplies a toplevel widget for NativeWidget to parent to.
-class WidgetOwnershipTest : public WidgetTest {
- public:
- WidgetOwnershipTest() {}
- virtual ~WidgetOwnershipTest() {}
-
- virtual void SetUp() {
- WidgetTest::SetUp();
- desktop_widget_ = CreateTopLevelPlatformWidget();
- }
-
- virtual void TearDown() {
- desktop_widget_->CloseNow();
- WidgetTest::TearDown();
- }
-
- private:
- Widget* desktop_widget_;
-
- DISALLOW_COPY_AND_ASSIGN(WidgetOwnershipTest);
-};
-
-// A bag of state to monitor destructions.
-struct OwnershipTestState {
- OwnershipTestState() : widget_deleted(false), native_widget_deleted(false) {}
-
- bool widget_deleted;
- bool native_widget_deleted;
-};
-
-// A platform NativeWidget subclass that updates a bag of state when it is
-// destroyed.
-class OwnershipTestNativeWidget : public NativeWidgetPlatform {
- public:
- OwnershipTestNativeWidget(internal::NativeWidgetDelegate* delegate,
- OwnershipTestState* state)
- : NativeWidgetPlatform(delegate),
- state_(state) {
- }
- virtual ~OwnershipTestNativeWidget() {
- state_->native_widget_deleted = true;
- }
-
- private:
- OwnershipTestState* state_;
-
- DISALLOW_COPY_AND_ASSIGN(OwnershipTestNativeWidget);
-};
-
-// A views NativeWidget subclass that updates a bag of state when it is
-// destroyed.
-class OwnershipTestNativeWidgetPlatform : public NativeWidgetPlatformForTest {
- public:
- OwnershipTestNativeWidgetPlatform(internal::NativeWidgetDelegate* delegate,
- OwnershipTestState* state)
- : NativeWidgetPlatformForTest(delegate),
- state_(state) {
- }
- virtual ~OwnershipTestNativeWidgetPlatform() {
- state_->native_widget_deleted = true;
- }
-
- private:
- OwnershipTestState* state_;
-
- DISALLOW_COPY_AND_ASSIGN(OwnershipTestNativeWidgetPlatform);
-};
-
-// A Widget subclass that updates a bag of state when it is destroyed.
-class OwnershipTestWidget : public Widget {
- public:
- OwnershipTestWidget(OwnershipTestState* state) : state_(state) {}
- virtual ~OwnershipTestWidget() {
- state_->widget_deleted = true;
- }
-
- private:
- OwnershipTestState* state_;
-
- DISALLOW_COPY_AND_ASSIGN(OwnershipTestWidget);
-};
-
-// Widget owns its NativeWidget, part 1: NativeWidget is a platform-native
-// widget.
-TEST_F(WidgetOwnershipTest, Ownership_WidgetOwnsPlatformNativeWidget) {
- OwnershipTestState state;
-
- scoped_ptr<Widget> widget(new OwnershipTestWidget(&state));
- Widget::InitParams params(Widget::InitParams::TYPE_POPUP);
- params.native_widget =
- new OwnershipTestNativeWidgetPlatform(widget.get(), &state);
- params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
- widget->Init(params);
-
- // Now delete the Widget, which should delete the NativeWidget.
- widget.reset();
-
- EXPECT_TRUE(state.widget_deleted);
- EXPECT_TRUE(state.native_widget_deleted);
-
- // TODO(beng): write test for this ownership scenario and the NativeWidget
- // being deleted out from under the Widget.
-}
-
-// Widget owns its NativeWidget, part 2: NativeWidget is a NativeWidget.
-TEST_F(WidgetOwnershipTest, Ownership_WidgetOwnsViewsNativeWidget) {
- OwnershipTestState state;
-
- scoped_ptr<Widget> widget(new OwnershipTestWidget(&state));
- Widget::InitParams params(Widget::InitParams::TYPE_POPUP);
- params.native_widget =
- new OwnershipTestNativeWidgetPlatform(widget.get(), &state);
- params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
- widget->Init(params);
-
- // Now delete the Widget, which should delete the NativeWidget.
- widget.reset();
-
- EXPECT_TRUE(state.widget_deleted);
- EXPECT_TRUE(state.native_widget_deleted);
-
- // TODO(beng): write test for this ownership scenario and the NativeWidget
- // being deleted out from under the Widget.
-}
-
-// Widget owns its NativeWidget, part 3: NativeWidget is a NativeWidget,
-// destroy the parent view.
-TEST_F(WidgetOwnershipTest,
- Ownership_WidgetOwnsViewsNativeWidget_DestroyParentView) {
- OwnershipTestState state;
-
- Widget* toplevel = CreateTopLevelPlatformWidget();
-
- scoped_ptr<Widget> widget(new OwnershipTestWidget(&state));
- Widget::InitParams params(Widget::InitParams::TYPE_POPUP);
- params.native_widget =
- new OwnershipTestNativeWidgetPlatform(widget.get(), &state);
- params.parent_widget = toplevel;
- params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
- widget->Init(params);
-
- // Now close the toplevel, which deletes the view hierarchy.
- toplevel->CloseNow();
-
- RunPendingMessages();
-
- // This shouldn't delete the widget because it shouldn't be deleted
- // from the native side.
- EXPECT_FALSE(state.widget_deleted);
- EXPECT_FALSE(state.native_widget_deleted);
-
- // Now delete it explicitly.
- widget.reset();
-
- EXPECT_TRUE(state.widget_deleted);
- EXPECT_TRUE(state.native_widget_deleted);
-}
-
-// NativeWidget owns its Widget, part 1: NativeWidget is a platform-native
-// widget.
-TEST_F(WidgetOwnershipTest, Ownership_PlatformNativeWidgetOwnsWidget) {
- OwnershipTestState state;
-
- Widget* widget = new OwnershipTestWidget(&state);
- Widget::InitParams params(Widget::InitParams::TYPE_POPUP);
- params.native_widget =
- new OwnershipTestNativeWidgetPlatform(widget, &state);
- widget->Init(params);
-
- // Now destroy the native widget.
- widget->CloseNow();
-
- EXPECT_TRUE(state.widget_deleted);
- EXPECT_TRUE(state.native_widget_deleted);
-}
-
-// NativeWidget owns its Widget, part 2: NativeWidget is a NativeWidget.
-#if defined(OS_CHROMEOS) && defined(TOOLKIT_USES_GTK)
-// Temporarily disable the test (http://crbug.com/104945).
-TEST_F(WidgetOwnershipTest, DISABLED_Ownership_ViewsNativeWidgetOwnsWidget) {
-#else
-TEST_F(WidgetOwnershipTest, Ownership_ViewsNativeWidgetOwnsWidget) {
-#endif
- OwnershipTestState state;
-
- Widget* toplevel = CreateTopLevelPlatformWidget();
-
- Widget* widget = new OwnershipTestWidget(&state);
- Widget::InitParams params(Widget::InitParams::TYPE_POPUP);
- params.native_widget =
- new OwnershipTestNativeWidgetPlatform(widget, &state);
- params.parent_widget = toplevel;
- widget->Init(params);
-
- // Now destroy the native widget. This is achieved by closing the toplevel.
- toplevel->CloseNow();
-
- // The NativeWidget won't be deleted until after a return to the message loop
- // so we have to run pending messages before testing the destruction status.
- RunPendingMessages();
-
- EXPECT_TRUE(state.widget_deleted);
- EXPECT_TRUE(state.native_widget_deleted);
-}
-
-// NativeWidget owns its Widget, part 3: NativeWidget is a platform-native
-// widget, destroyed out from under it by the OS.
-TEST_F(WidgetOwnershipTest,
- Ownership_PlatformNativeWidgetOwnsWidget_NativeDestroy) {
- OwnershipTestState state;
-
- Widget* widget = new OwnershipTestWidget(&state);
- Widget::InitParams params(Widget::InitParams::TYPE_POPUP);
- params.native_widget =
- new OwnershipTestNativeWidgetPlatform(widget, &state);
- widget->Init(params);
-
- // Now simulate a destroy of the platform native widget from the OS:
-#if defined(USE_AURA)
- delete widget->GetNativeView();
-#elif defined(OS_WIN)
- DestroyWindow(widget->GetNativeView());
-#elif defined(TOOLKIT_USES_GTK)
- gtk_widget_destroy(widget->GetNativeView());
-#endif
-
- EXPECT_TRUE(state.widget_deleted);
- EXPECT_TRUE(state.native_widget_deleted);
-}
-
-// NativeWidget owns its Widget, part 4: NativeWidget is a NativeWidget,
-// destroyed by the view hierarchy that contains it.
-#if defined(OS_CHROMEOS) && defined(TOOLKIT_USES_GTK)
-// Temporarily disable the test (http://crbug.com/104945).
-TEST_F(WidgetOwnershipTest,
- DISABLED_Ownership_ViewsNativeWidgetOwnsWidget_NativeDestroy) {
-#else
-TEST_F(WidgetOwnershipTest,
- Ownership_ViewsNativeWidgetOwnsWidget_NativeDestroy) {
-#endif
- OwnershipTestState state;
-
- Widget* toplevel = CreateTopLevelPlatformWidget();
-
- Widget* widget = new OwnershipTestWidget(&state);
- Widget::InitParams params(Widget::InitParams::TYPE_POPUP);
- params.native_widget =
- new OwnershipTestNativeWidgetPlatform(widget, &state);
- params.parent_widget = toplevel;
- widget->Init(params);
-
- // Destroy the widget (achieved by closing the toplevel).
- toplevel->CloseNow();
-
- // The NativeWidget won't be deleted until after a return to the message loop
- // so we have to run pending messages before testing the destruction status.
- RunPendingMessages();
-
- EXPECT_TRUE(state.widget_deleted);
- EXPECT_TRUE(state.native_widget_deleted);
-}
-
-// NativeWidget owns its Widget, part 5: NativeWidget is a NativeWidget,
-// we close it directly.
-TEST_F(WidgetOwnershipTest,
- Ownership_ViewsNativeWidgetOwnsWidget_Close) {
- OwnershipTestState state;
-
- Widget* toplevel = CreateTopLevelPlatformWidget();
-
- Widget* widget = new OwnershipTestWidget(&state);
- Widget::InitParams params(Widget::InitParams::TYPE_POPUP);
- params.native_widget =
- new OwnershipTestNativeWidgetPlatform(widget, &state);
- params.parent_widget = toplevel;
- widget->Init(params);
-
- // Destroy the widget.
- widget->Close();
- toplevel->CloseNow();
-
- // The NativeWidget won't be deleted until after a return to the message loop
- // so we have to run pending messages before testing the destruction status.
- RunPendingMessages();
-
- EXPECT_TRUE(state.widget_deleted);
- EXPECT_TRUE(state.native_widget_deleted);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Widget observer tests.
-//
-
-class WidgetObserverTest : public WidgetTest,
- Widget::Observer {
- public:
- WidgetObserverTest()
- : active_(NULL),
- widget_closed_(NULL),
- widget_activated_(NULL),
- widget_shown_(NULL),
- widget_hidden_(NULL) {
- }
-
- virtual ~WidgetObserverTest() {}
-
- virtual void OnWidgetClosing(Widget* widget) OVERRIDE {
- if (active_ == widget)
- active_ = NULL;
- widget_closed_ = widget;
- }
-
- virtual void OnWidgetActivationChanged(Widget* widget,
- bool active) OVERRIDE {
- if (active) {
- if (widget_activated_)
- widget_activated_->Deactivate();
- widget_activated_ = widget;
- active_ = widget;
- } else {
- if (widget_activated_ == widget)
- widget_activated_ = NULL;
- widget_deactivated_ = widget;
- }
- }
-
- virtual void OnWidgetVisibilityChanged(Widget* widget,
- bool visible) OVERRIDE {
- if (visible)
- widget_shown_ = widget;
- else
- widget_hidden_ = widget;
- }
-
- void reset() {
- active_ = NULL;
- widget_closed_ = NULL;
- widget_activated_ = NULL;
- widget_deactivated_ = NULL;
- widget_shown_ = NULL;
- widget_hidden_ = NULL;
- }
-
- Widget* NewWidget() {
- Widget* widget = CreateTopLevelNativeWidget();
- widget->AddObserver(this);
- return widget;
- }
-
- const Widget* active() const { return active_; }
- const Widget* widget_closed() const { return widget_closed_; }
- const Widget* widget_activated() const { return widget_activated_; }
- const Widget* widget_deactivated() const { return widget_deactivated_; }
- const Widget* widget_shown() const { return widget_shown_; }
- const Widget* widget_hidden() const { return widget_hidden_; }
-
- private:
-
- Widget* active_;
-
- Widget* widget_closed_;
- Widget* widget_activated_;
- Widget* widget_deactivated_;
- Widget* widget_shown_;
- Widget* widget_hidden_;
-};
-
-TEST_F(WidgetObserverTest, DISABLED_ActivationChange) {
- Widget* toplevel = CreateTopLevelPlatformWidget();
-
- Widget* toplevel1 = NewWidget();
- Widget* toplevel2 = NewWidget();
-
- toplevel1->Show();
- toplevel2->Show();
-
- reset();
-
- toplevel1->Activate();
-
- RunPendingMessages();
- EXPECT_EQ(toplevel1, widget_activated());
-
- toplevel2->Activate();
- RunPendingMessages();
- EXPECT_EQ(toplevel1, widget_deactivated());
- EXPECT_EQ(toplevel2, widget_activated());
- EXPECT_EQ(toplevel2, active());
-
- toplevel->CloseNow();
-}
-
-TEST_F(WidgetObserverTest, DISABLED_VisibilityChange) {
- Widget* toplevel = CreateTopLevelPlatformWidget();
-
- Widget* child1 = NewWidget();
- Widget* child2 = NewWidget();
-
- toplevel->Show();
- child1->Show();
- child2->Show();
-
- reset();
-
- child1->Hide();
- EXPECT_EQ(child1, widget_hidden());
-
- child2->Hide();
- EXPECT_EQ(child2, widget_hidden());
-
- child1->Show();
- EXPECT_EQ(child1, widget_shown());
-
- child2->Show();
- EXPECT_EQ(child2, widget_shown());
-
- toplevel->CloseNow();
-}
-
-#if !defined(USE_AURA) && defined(OS_WIN)
-// Aura needs shell to maximize/fullscreen window.
-// NativeWidgetGtk doesn't implement GetRestoredBounds.
-TEST_F(WidgetTest, GetRestoredBounds) {
- Widget* toplevel = CreateTopLevelPlatformWidget();
- EXPECT_EQ(toplevel->GetWindowScreenBounds().ToString(),
- toplevel->GetRestoredBounds().ToString());
- toplevel->Show();
- toplevel->Maximize();
- RunPendingMessages();
- EXPECT_NE(toplevel->GetWindowScreenBounds().ToString(),
- toplevel->GetRestoredBounds().ToString());
- EXPECT_GT(toplevel->GetRestoredBounds().width(), 0);
- EXPECT_GT(toplevel->GetRestoredBounds().height(), 0);
-
- toplevel->Restore();
- RunPendingMessages();
- EXPECT_EQ(toplevel->GetWindowScreenBounds().ToString(),
- toplevel->GetRestoredBounds().ToString());
-
- toplevel->SetFullscreen(true);
- RunPendingMessages();
- EXPECT_NE(toplevel->GetWindowScreenBounds().ToString(),
- toplevel->GetRestoredBounds().ToString());
- EXPECT_GT(toplevel->GetRestoredBounds().width(), 0);
- EXPECT_GT(toplevel->GetRestoredBounds().height(), 0);
-}
-#endif
-
-} // namespace
-} // namespace views
« no previous file with comments | « views/widget/widget_delegate.cc ('k') | views/widget/window_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698