native_widget_unittest.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "testing/gtest/include/gtest/gtest.h" 6#include "ui/views/controls/native/native_view_host.h" 7#include "ui/views/test/views_test_base.h" 8#include "ui/views/view.h" 9#include "ui/views/widget/native_widget_private.h" 10#include "ui/views/widget/native_widget_test_utils.h" 11#include "ui/views/widget/widget.h" 12 13namespace views { 14 15class ScopedTestWidget { 16 public: 17 explicit ScopedTestWidget(internal::NativeWidgetPrivate* native_widget) 18 : native_widget_(native_widget) { 19 } 20 ~ScopedTestWidget() { 21 // |CloseNow| deletes both |native_widget_| and its associated 22 // |Widget|. 23 native_widget_->GetWidget()->CloseNow(); 24 } 25 26 internal::NativeWidgetPrivate* operator->() const { 27 return native_widget_; 28 } 29 internal::NativeWidgetPrivate* get() const { return native_widget_; } 30 31 private: 32 internal::NativeWidgetPrivate* native_widget_; 33 DISALLOW_COPY_AND_ASSIGN(ScopedTestWidget); 34}; 35 36class NativeWidgetTest : public ViewsTestBase { 37 public: 38 NativeWidgetTest() {} 39 virtual ~NativeWidgetTest() {} 40 41 private: 42 DISALLOW_COPY_AND_ASSIGN(NativeWidgetTest); 43}; 44 45TEST_F(NativeWidgetTest, CreateNativeWidget) { 46 ScopedTestWidget widget(internal::CreateNativeWidget()); 47 EXPECT_TRUE(widget->GetWidget()->GetNativeView() != NULL); 48} 49 50TEST_F(NativeWidgetTest, GetNativeWidgetForNativeView) { 51 ScopedTestWidget widget(internal::CreateNativeWidget()); 52 EXPECT_EQ(widget.get(), 53 internal::NativeWidgetPrivate::GetNativeWidgetForNativeView( 54 widget->GetWidget()->GetNativeView())); 55} 56 57// |widget| has the toplevel NativeWidget. 58TEST_F(NativeWidgetTest, GetTopLevelNativeWidget1) { 59 ScopedTestWidget widget(internal::CreateNativeWidget()); 60 EXPECT_EQ(widget.get(), 61 internal::NativeWidgetPrivate::GetTopLevelNativeWidget( 62 widget->GetWidget()->GetNativeView())); 63} 64 65// |toplevel_widget| has the toplevel NativeWidget. 66TEST_F(NativeWidgetTest, GetTopLevelNativeWidget2) { 67 ScopedTestWidget toplevel_widget(internal::CreateNativeWidget()); 68 69 // |toplevel_widget| owns |child_host|. 70 NativeViewHost* child_host = new NativeViewHost; 71 toplevel_widget->GetWidget()->SetContentsView(child_host); 72 73 // |child_host| owns |child_widget|. 74 internal::NativeWidgetPrivate* child_widget = 75 internal::CreateNativeSubWidget(); 76 child_host->Attach(child_widget->GetWidget()->GetNativeView()); 77 78 EXPECT_EQ(toplevel_widget.get(), 79 internal::NativeWidgetPrivate::GetTopLevelNativeWidget( 80 child_widget->GetWidget()->GetNativeView())); 81} 82 83} // namespace views 84