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

Side by Side Diff: ui/views/bubble/bubble_delegate_unittest.cc

Issue 11639012: Add tests to verify accelerators properly work on constrained window. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address comments Created 7 years, 11 months 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/views/bubble/bubble_delegate.h" 5 #include "ui/views/bubble/bubble_delegate.h"
6 #include "ui/views/bubble/bubble_frame_view.h" 6 #include "ui/views/bubble/bubble_frame_view.h"
7 #include "ui/views/test/test_widget_observer.h"
7 #include "ui/views/test/views_test_base.h" 8 #include "ui/views/test/views_test_base.h"
8 #include "ui/views/widget/widget.h" 9 #include "ui/views/widget/widget.h"
9 10
10 namespace views { 11 namespace views {
11 12
12 namespace { 13 namespace {
13 14
14 // A Widget observer class used in the tests below to observe bubbles closing.
15 class TestWidgetObserver : public WidgetObserver {
16 public:
17 explicit TestWidgetObserver(Widget* widget);
18 virtual ~TestWidgetObserver();
19
20 // WidgetObserver overrides:
21 virtual void OnWidgetClosing(Widget* widget) OVERRIDE;
22
23 bool widget_closed() const { return widget_ == NULL; }
24
25 private:
26 Widget* widget_;
27 };
28
29 TestWidgetObserver::TestWidgetObserver(Widget* widget)
30 : widget_(widget) {
31 widget_->AddObserver(this);
32 }
33
34 TestWidgetObserver::~TestWidgetObserver() {
35 if (widget_)
36 widget_->RemoveObserver(this);
37 }
38
39 void TestWidgetObserver::OnWidgetClosing(Widget* widget) {
40 DCHECK_EQ(widget_, widget);
41 widget_ = NULL;
42 }
43
44 class TestBubbleDelegateView : public BubbleDelegateView { 15 class TestBubbleDelegateView : public BubbleDelegateView {
45 public: 16 public:
46 TestBubbleDelegateView(View* anchor_view); 17 TestBubbleDelegateView(View* anchor_view);
47 virtual ~TestBubbleDelegateView(); 18 virtual ~TestBubbleDelegateView();
48 19
49 virtual View* GetInitiallyFocusedView() OVERRIDE; 20 virtual View* GetInitiallyFocusedView() OVERRIDE;
50 21
51 private: 22 private:
52 View* view_; 23 View* view_;
53 }; 24 };
(...skipping 24 matching lines...) Expand all
78 anchor_widget->Show(); 49 anchor_widget->Show();
79 50
80 BubbleDelegateView* bubble_delegate = 51 BubbleDelegateView* bubble_delegate =
81 new BubbleDelegateView(anchor_widget->GetContentsView(), 52 new BubbleDelegateView(anchor_widget->GetContentsView(),
82 BubbleBorder::NONE); 53 BubbleBorder::NONE);
83 bubble_delegate->set_color(SK_ColorGREEN); 54 bubble_delegate->set_color(SK_ColorGREEN);
84 Widget* bubble_widget( 55 Widget* bubble_widget(
85 BubbleDelegateView::CreateBubble(bubble_delegate)); 56 BubbleDelegateView::CreateBubble(bubble_delegate));
86 EXPECT_EQ(bubble_delegate, bubble_widget->widget_delegate()); 57 EXPECT_EQ(bubble_delegate, bubble_widget->widget_delegate());
87 EXPECT_EQ(bubble_widget, bubble_delegate->GetWidget()); 58 EXPECT_EQ(bubble_widget, bubble_delegate->GetWidget());
88 TestWidgetObserver bubble_observer(bubble_widget); 59 test::TestWidgetObserver bubble_observer(bubble_widget);
89 EXPECT_FALSE(bubble_observer.widget_closed()); 60 EXPECT_FALSE(bubble_observer.widget_closed());
90 61
91 BubbleBorder* border = 62 BubbleBorder* border =
92 bubble_delegate->GetBubbleFrameView()->bubble_border(); 63 bubble_delegate->GetBubbleFrameView()->bubble_border();
93 EXPECT_EQ(bubble_delegate->arrow_location(), border->arrow_location()); 64 EXPECT_EQ(bubble_delegate->arrow_location(), border->arrow_location());
94 EXPECT_EQ(bubble_delegate->color(), border->background_color()); 65 EXPECT_EQ(bubble_delegate->color(), border->background_color());
95 66
96 bubble_widget->CloseNow(); 67 bubble_widget->CloseNow();
97 RunPendingMessages(); 68 RunPendingMessages();
98 EXPECT_TRUE(bubble_observer.widget_closed()); 69 EXPECT_TRUE(bubble_observer.widget_closed());
99 } 70 }
100 71
101 TEST_F(BubbleDelegateTest, CloseAnchorWidget) { 72 TEST_F(BubbleDelegateTest, CloseAnchorWidget) {
102 // Create the anchor widget. 73 // Create the anchor widget.
103 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_WINDOW); 74 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_WINDOW);
104 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; 75 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
105 scoped_ptr<Widget> anchor_widget(new Widget); 76 scoped_ptr<Widget> anchor_widget(new Widget);
106 anchor_widget->Init(params); 77 anchor_widget->Init(params);
107 anchor_widget->Show(); 78 anchor_widget->Show();
108 79
109 BubbleDelegateView* bubble_delegate = new BubbleDelegateView( 80 BubbleDelegateView* bubble_delegate = new BubbleDelegateView(
110 anchor_widget->GetContentsView(), BubbleBorder::NONE); 81 anchor_widget->GetContentsView(), BubbleBorder::NONE);
111 // Preventing close on deactivate should not prevent closing with the anchor. 82 // Preventing close on deactivate should not prevent closing with the anchor.
112 bubble_delegate->set_close_on_deactivate(false); 83 bubble_delegate->set_close_on_deactivate(false);
113 Widget* bubble_widget = BubbleDelegateView::CreateBubble(bubble_delegate); 84 Widget* bubble_widget = BubbleDelegateView::CreateBubble(bubble_delegate);
114 EXPECT_EQ(bubble_delegate, bubble_widget->widget_delegate()); 85 EXPECT_EQ(bubble_delegate, bubble_widget->widget_delegate());
115 EXPECT_EQ(bubble_widget, bubble_delegate->GetWidget()); 86 EXPECT_EQ(bubble_widget, bubble_delegate->GetWidget());
116 EXPECT_EQ(anchor_widget.get(), bubble_delegate->anchor_widget()); 87 EXPECT_EQ(anchor_widget.get(), bubble_delegate->anchor_widget());
117 TestWidgetObserver bubble_observer(bubble_widget); 88 test::TestWidgetObserver bubble_observer(bubble_widget);
118 EXPECT_FALSE(bubble_observer.widget_closed()); 89 EXPECT_FALSE(bubble_observer.widget_closed());
119 90
120 bubble_widget->Show(); 91 bubble_widget->Show();
121 RunPendingMessages(); 92 RunPendingMessages();
122 EXPECT_EQ(anchor_widget.get(), bubble_delegate->anchor_widget()); 93 EXPECT_EQ(anchor_widget.get(), bubble_delegate->anchor_widget());
123 EXPECT_FALSE(bubble_observer.widget_closed()); 94 EXPECT_FALSE(bubble_observer.widget_closed());
124 95
125 #if defined(USE_AURA) 96 #if defined(USE_AURA)
126 // TODO(msw): Remove activation hack to prevent bookkeeping errors in: 97 // TODO(msw): Remove activation hack to prevent bookkeeping errors in:
127 // aura::test::TestActivationClient::OnWindowDestroyed(). 98 // aura::test::TestActivationClient::OnWindowDestroyed().
(...skipping 24 matching lines...) Expand all
152 // widget so that closing the anchor widget does not close the bubble widget. 123 // widget so that closing the anchor widget does not close the bubble widget.
153 BubbleDelegateView* bubble_delegate = new BubbleDelegateView( 124 BubbleDelegateView* bubble_delegate = new BubbleDelegateView(
154 anchor_widget->GetContentsView(), BubbleBorder::NONE); 125 anchor_widget->GetContentsView(), BubbleBorder::NONE);
155 bubble_delegate->set_parent_window(parent_widget->GetNativeView()); 126 bubble_delegate->set_parent_window(parent_widget->GetNativeView());
156 // Preventing close on deactivate should not prevent closing with the parent. 127 // Preventing close on deactivate should not prevent closing with the parent.
157 bubble_delegate->set_close_on_deactivate(false); 128 bubble_delegate->set_close_on_deactivate(false);
158 Widget* bubble_widget = BubbleDelegateView::CreateBubble(bubble_delegate); 129 Widget* bubble_widget = BubbleDelegateView::CreateBubble(bubble_delegate);
159 EXPECT_EQ(bubble_delegate, bubble_widget->widget_delegate()); 130 EXPECT_EQ(bubble_delegate, bubble_widget->widget_delegate());
160 EXPECT_EQ(bubble_widget, bubble_delegate->GetWidget()); 131 EXPECT_EQ(bubble_widget, bubble_delegate->GetWidget());
161 EXPECT_EQ(anchor_widget.get(), bubble_delegate->anchor_widget()); 132 EXPECT_EQ(anchor_widget.get(), bubble_delegate->anchor_widget());
162 TestWidgetObserver bubble_observer(bubble_widget); 133 test::TestWidgetObserver bubble_observer(bubble_widget);
163 EXPECT_FALSE(bubble_observer.widget_closed()); 134 EXPECT_FALSE(bubble_observer.widget_closed());
164 135
165 // Showing and hiding the bubble widget should have no effect on its anchor. 136 // Showing and hiding the bubble widget should have no effect on its anchor.
166 bubble_widget->Show(); 137 bubble_widget->Show();
167 RunPendingMessages(); 138 RunPendingMessages();
168 EXPECT_EQ(anchor_widget.get(), bubble_delegate->anchor_widget()); 139 EXPECT_EQ(anchor_widget.get(), bubble_delegate->anchor_widget());
169 bubble_widget->Hide(); 140 bubble_widget->Hide();
170 RunPendingMessages(); 141 RunPendingMessages();
171 EXPECT_EQ(anchor_widget.get(), bubble_delegate->anchor_widget()); 142 EXPECT_EQ(anchor_widget.get(), bubble_delegate->anchor_widget());
172 143
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 // http://crbug.com/125976 breaks this simple test by clearing proper focus. 181 // http://crbug.com/125976 breaks this simple test by clearing proper focus.
211 #if defined(OS_WIN) && !defined(USE_AURA) 182 #if defined(OS_WIN) && !defined(USE_AURA)
212 expected_view = NULL; 183 expected_view = NULL;
213 #endif 184 #endif
214 185
215 EXPECT_EQ(expected_view, bubble_widget->GetFocusManager()->GetFocusedView()); 186 EXPECT_EQ(expected_view, bubble_widget->GetFocusManager()->GetFocusedView());
216 bubble_widget->CloseNow(); 187 bubble_widget->CloseNow();
217 } 188 }
218 189
219 } // namespace views 190 } // namespace views
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/constrained_window_views_browsertest.cc ('k') | ui/views/test/test_widget_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698