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

Side by Side Diff: chrome/browser/ui/views/toolbar/toolbar_actions_bar_bubble_views_unittest.cc

Issue 1881773002: [Extensions UI] Convert ExtensionMessageBubbles to ToolbarActionsBarBubbles (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 years, 8 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "base/memory/scoped_ptr.h" 5 #include "base/memory/scoped_ptr.h"
6 #include "base/run_loop.h" 6 #include "base/run_loop.h"
7 #include "base/strings/utf_string_conversions.h" 7 #include "base/strings/utf_string_conversions.h"
8 #include "chrome/browser/ui/toolbar/test_toolbar_actions_bar_bubble_delegate.h" 8 #include "chrome/browser/ui/toolbar/test_toolbar_actions_bar_bubble_delegate.h"
9 #include "chrome/browser/ui/views/toolbar/toolbar_actions_bar_bubble_views.h" 9 #include "chrome/browser/ui/views/toolbar/toolbar_actions_bar_bubble_views.h"
10 #include "ui/events/event_utils.h" 10 #include "ui/events/event_utils.h"
11 #include "ui/events/test/event_generator.h" 11 #include "ui/events/test/event_generator.h"
12 #include "ui/views/bubble/bubble_delegate.h" 12 #include "ui/views/bubble/bubble_delegate.h"
13 #include "ui/views/controls/button/label_button.h" 13 #include "ui/views/controls/button/label_button.h"
14 #include "ui/views/controls/link.h"
14 #include "ui/views/test/test_widget_observer.h" 15 #include "ui/views/test/test_widget_observer.h"
15 #include "ui/views/test/views_test_base.h" 16 #include "ui/views/test/views_test_base.h"
16 #include "ui/views/widget/widget.h" 17 #include "ui/views/widget/widget.h"
17 18
18 namespace { 19 namespace {
19 20
20 gfx::Point GetCenterInScreenCoordinates(const views::View* view) { 21 gfx::Point GetCenterInScreenCoordinates(const views::View* view) {
21 gfx::Point center(view->width() / 2, view->height() / 2); 22 gfx::Point center(view->width() / 2, view->height() / 2);
22 views::View::ConvertPointToScreen(view, &center); 23 views::View::ConvertPointToScreen(view, &center);
23 return center; 24 return center;
24 } 25 }
25 26
26 } // namespace 27 } // namespace
27 28
28 class ToolbarActionsBarBubbleViewsTest : public views::ViewsTestBase { 29 class ToolbarActionsBarBubbleViewsTest : public views::ViewsTestBase {
29 protected: 30 protected:
31 ToolbarActionsBarBubbleViewsTest() {}
32 ~ToolbarActionsBarBubbleViewsTest() override {}
33
34 void TearDown() override {
35 anchor_widget_.reset();
36 views::ViewsTestBase::TearDown();
37 }
38
30 std::unique_ptr<views::Widget> CreateAnchorWidget() { 39 std::unique_ptr<views::Widget> CreateAnchorWidget() {
31 std::unique_ptr<views::Widget> anchor_widget(new views::Widget()); 40 std::unique_ptr<views::Widget> anchor_widget(new views::Widget());
32 views::Widget::InitParams params = 41 views::Widget::InitParams params =
33 CreateParams(views::Widget::InitParams::TYPE_WINDOW); 42 CreateParams(views::Widget::InitParams::TYPE_WINDOW);
34 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; 43 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
35 anchor_widget->Init(params); 44 anchor_widget->Init(params);
36 return anchor_widget; 45 return anchor_widget;
37 } 46 }
38 47
48 void ShowBubble(TestToolbarActionsBarBubbleDelegate* delegate) {
49 ASSERT_TRUE(delegate);
50 ASSERT_FALSE(bubble_widget_);
51 ASSERT_FALSE(bubble_);
52 anchor_widget_ = CreateAnchorWidget();
53 bubble_ = new ToolbarActionsBarBubbleViews(
54 anchor_widget_->GetContentsView(), delegate->GetDelegate());
55 bubble_widget_ =
56 views::BubbleDelegateView::CreateBubble(bubble_);
57 bubble_->Show();
58 }
59
60 void CloseBubble() {
61 ASSERT_TRUE(bubble_);
62 bubble_->GetWidget()->Close();
63 base::RunLoop().RunUntilIdle();
64 bubble_ = nullptr;
65 bubble_widget_ = nullptr;
66 }
67
68 void ClickView(const views::View* view) {
69 ASSERT_TRUE(view);
70 ui::test::EventGenerator generator(GetContext(),
71 anchor_widget_->GetNativeWindow());
72 generator.MoveMouseTo(GetCenterInScreenCoordinates(view));
73 generator.ClickLeftButton();
74 base::RunLoop().RunUntilIdle();
75 }
76
39 base::string16 HeadingString() { return base::ASCIIToUTF16("Heading"); } 77 base::string16 HeadingString() { return base::ASCIIToUTF16("Heading"); }
40 base::string16 BodyString() { return base::ASCIIToUTF16("Body"); } 78 base::string16 BodyString() { return base::ASCIIToUTF16("Body"); }
41 base::string16 ActionString() { return base::ASCIIToUTF16("Action"); } 79 base::string16 ActionString() { return base::ASCIIToUTF16("Action"); }
42 base::string16 DismissString() { return base::ASCIIToUTF16("Dismiss"); } 80 base::string16 DismissString() { return base::ASCIIToUTF16("Dismiss"); }
81 base::string16 LearnMoreString() { return base::ASCIIToUTF16("Learn"); }
82 base::string16 ItemListString() {
83 return base::ASCIIToUTF16("Item 1\nItem2");
84 }
85
86 views::Widget* anchor_widget() { return anchor_widget_.get(); }
87 views::Widget* bubble_widget() { return bubble_widget_; }
88 ToolbarActionsBarBubbleViews* bubble() { return bubble_; }
89
90 private:
91 std::unique_ptr<views::Widget> anchor_widget_;
92 views::Widget* bubble_widget_ = nullptr;
93 ToolbarActionsBarBubbleViews* bubble_ = nullptr;
94
95 DISALLOW_COPY_AND_ASSIGN(ToolbarActionsBarBubbleViewsTest);
43 }; 96 };
44 97
45 TEST_F(ToolbarActionsBarBubbleViewsTest, TestBubbleLayoutActionButton) { 98 TEST_F(ToolbarActionsBarBubbleViewsTest, TestBubbleLayoutActionButton) {
46 std::unique_ptr<views::Widget> anchor_widget = CreateAnchorWidget();
47 TestToolbarActionsBarBubbleDelegate delegate(HeadingString(), BodyString(), 99 TestToolbarActionsBarBubbleDelegate delegate(HeadingString(), BodyString(),
48 ActionString()); 100 ActionString());
49 ToolbarActionsBarBubbleViews* bubble = new ToolbarActionsBarBubbleViews( 101 ShowBubble(&delegate);
50 anchor_widget->GetContentsView(), delegate.GetDelegate());
51 views::BubbleDelegateView::CreateBubble(bubble);
52 bubble->Show();
53 102
54 EXPECT_TRUE(bubble->heading_label()); 103 EXPECT_TRUE(bubble()->heading_label());
55 EXPECT_EQ(HeadingString(), bubble->heading_label()->text()); 104 EXPECT_EQ(HeadingString(), bubble()->heading_label()->text());
56 EXPECT_TRUE(bubble->content_label()); 105 EXPECT_TRUE(bubble()->content_label());
57 EXPECT_EQ(BodyString(), bubble->content_label()->text()); 106 EXPECT_EQ(BodyString(), bubble()->content_label()->text());
58 EXPECT_TRUE(bubble->action_button()); 107 EXPECT_TRUE(bubble()->action_button());
59 EXPECT_EQ(ActionString(), bubble->action_button()->GetText()); 108 EXPECT_EQ(ActionString(), bubble()->action_button()->GetText());
60 EXPECT_FALSE(bubble->dismiss_button()); 109 EXPECT_FALSE(bubble()->dismiss_button());
110 EXPECT_FALSE(bubble()->learn_more_button());
111 EXPECT_FALSE(bubble()->item_list());
61 112
62 bubble->GetWidget()->Close(); 113 CloseBubble();
63 base::RunLoop().RunUntilIdle();
64 } 114 }
65 115
66 TEST_F(ToolbarActionsBarBubbleViewsTest, 116 TEST_F(ToolbarActionsBarBubbleViewsTest,
67 TestBubbleLayoutActionAndDismissButton) { 117 TestBubbleLayoutActionAndDismissButton) {
68 std::unique_ptr<views::Widget> anchor_widget = CreateAnchorWidget();
69 TestToolbarActionsBarBubbleDelegate delegate(HeadingString(), BodyString(), 118 TestToolbarActionsBarBubbleDelegate delegate(HeadingString(), BodyString(),
70 ActionString()); 119 ActionString());
71 delegate.set_dismiss_button_text(DismissString()); 120 delegate.set_dismiss_button_text(DismissString());
72 ToolbarActionsBarBubbleViews* bubble = new ToolbarActionsBarBubbleViews( 121 ShowBubble(&delegate);
73 anchor_widget->GetContentsView(), delegate.GetDelegate());
74 views::BubbleDelegateView::CreateBubble(bubble);
75 bubble->Show();
76 122
77 EXPECT_TRUE(bubble->heading_label()); 123 EXPECT_TRUE(bubble()->heading_label());
78 EXPECT_EQ(HeadingString(), bubble->heading_label()->text()); 124 EXPECT_EQ(HeadingString(), bubble()->heading_label()->text());
79 EXPECT_TRUE(bubble->content_label()); 125 EXPECT_TRUE(bubble()->content_label());
80 EXPECT_EQ(BodyString(), bubble->content_label()->text()); 126 EXPECT_EQ(BodyString(), bubble()->content_label()->text());
81 EXPECT_TRUE(bubble->action_button()); 127 EXPECT_TRUE(bubble()->action_button());
82 EXPECT_EQ(ActionString(), bubble->action_button()->GetText()); 128 EXPECT_EQ(ActionString(), bubble()->action_button()->GetText());
83 EXPECT_TRUE(bubble->dismiss_button()); 129 EXPECT_TRUE(bubble()->dismiss_button());
84 EXPECT_EQ(DismissString(), bubble->dismiss_button()->GetText()); 130 EXPECT_EQ(DismissString(), bubble()->dismiss_button()->GetText());
131 EXPECT_FALSE(bubble()->learn_more_button());
132 EXPECT_FALSE(bubble()->item_list());
85 133
86 bubble->GetWidget()->Close(); 134 CloseBubble();
87 base::RunLoop().RunUntilIdle(); 135 }
136
137 TEST_F(ToolbarActionsBarBubbleViewsTest,
138 TestBubbleLayoutActionDismissAndLearnMoreButton) {
139 TestToolbarActionsBarBubbleDelegate delegate(HeadingString(), BodyString(),
140 ActionString());
141 delegate.set_dismiss_button_text(DismissString());
142 delegate.set_learn_more_button_text(LearnMoreString());
143 ShowBubble(&delegate);
144
145 EXPECT_TRUE(bubble()->heading_label());
146 EXPECT_EQ(HeadingString(), bubble()->heading_label()->text());
147 EXPECT_TRUE(bubble()->content_label());
148 EXPECT_EQ(BodyString(), bubble()->content_label()->text());
149 EXPECT_TRUE(bubble()->action_button());
150 EXPECT_EQ(ActionString(), bubble()->action_button()->GetText());
151 EXPECT_TRUE(bubble()->dismiss_button());
152 EXPECT_EQ(DismissString(), bubble()->dismiss_button()->GetText());
153 EXPECT_TRUE(bubble()->learn_more_button());
154 EXPECT_EQ(LearnMoreString(), bubble()->learn_more_button()->text());
155 EXPECT_FALSE(bubble()->item_list());
156
157 CloseBubble();
158 }
159
160 TEST_F(ToolbarActionsBarBubbleViewsTest, TestBubbleLayoutListView) {
161 TestToolbarActionsBarBubbleDelegate delegate(HeadingString(), BodyString(),
162 ActionString());
163 delegate.set_item_list_text(ItemListString());
164 ShowBubble(&delegate);
165
166 EXPECT_TRUE(bubble()->heading_label());
167 EXPECT_EQ(HeadingString(), bubble()->heading_label()->text());
168 EXPECT_TRUE(bubble()->content_label());
169 EXPECT_EQ(BodyString(), bubble()->content_label()->text());
170 EXPECT_TRUE(bubble()->action_button());
171 EXPECT_EQ(ActionString(), bubble()->action_button()->GetText());
172 EXPECT_FALSE(bubble()->dismiss_button());
173 EXPECT_FALSE(bubble()->learn_more_button());
174 EXPECT_TRUE(bubble()->item_list());
175 EXPECT_EQ(ItemListString(), bubble()->item_list()->text());
176
177 CloseBubble();
88 } 178 }
89 179
90 TEST_F(ToolbarActionsBarBubbleViewsTest, TestShowAndCloseBubble) { 180 TEST_F(ToolbarActionsBarBubbleViewsTest, TestShowAndCloseBubble) {
91 std::unique_ptr<views::Widget> anchor_widget = CreateAnchorWidget(); 181 std::unique_ptr<views::Widget> anchor_widget = CreateAnchorWidget();
92 TestToolbarActionsBarBubbleDelegate delegate(HeadingString(), BodyString(), 182 TestToolbarActionsBarBubbleDelegate delegate(HeadingString(), BodyString(),
93 ActionString()); 183 ActionString());
94 delegate.set_dismiss_button_text(DismissString()); 184 delegate.set_dismiss_button_text(DismissString());
95 ToolbarActionsBarBubbleViews* bubble = new ToolbarActionsBarBubbleViews( 185 ToolbarActionsBarBubbleViews* bubble = new ToolbarActionsBarBubbleViews(
96 anchor_widget->GetContentsView(), delegate.GetDelegate()); 186 anchor_widget->GetContentsView(), delegate.GetDelegate());
97 187
98 EXPECT_FALSE(delegate.shown()); 188 EXPECT_FALSE(delegate.shown());
99 EXPECT_FALSE(delegate.close_action()); 189 EXPECT_FALSE(delegate.close_action());
100 views::Widget* bubble_widget = 190 views::Widget* bubble_widget =
101 views::BubbleDelegateView::CreateBubble(bubble); 191 views::BubbleDelegateView::CreateBubble(bubble);
102 views::test::TestWidgetObserver bubble_observer(bubble_widget); 192 views::test::TestWidgetObserver bubble_observer(bubble_widget);
103 bubble->Show(); 193 bubble->Show();
104 EXPECT_TRUE(delegate.shown()); 194 EXPECT_TRUE(delegate.shown());
105 EXPECT_FALSE(delegate.close_action()); 195 EXPECT_FALSE(delegate.close_action());
106 196
107 bubble_widget->Close(); 197 bubble_widget->Close();
108 base::RunLoop().RunUntilIdle(); 198 base::RunLoop().RunUntilIdle();
109 ASSERT_TRUE(delegate.close_action()); 199 ASSERT_TRUE(delegate.close_action());
110 EXPECT_EQ(ToolbarActionsBarBubbleDelegate::CLOSE_DISMISS_USER_ACTION, 200 EXPECT_EQ(ToolbarActionsBarBubbleDelegate::CLOSE_DISMISS_USER_ACTION,
111 *delegate.close_action()); 201 *delegate.close_action());
112 EXPECT_TRUE(bubble_observer.widget_closed()); 202 EXPECT_TRUE(bubble_observer.widget_closed());
113 } 203 }
114 204
115 TEST_F(ToolbarActionsBarBubbleViewsTest, TestClickActionButton) { 205 TEST_F(ToolbarActionsBarBubbleViewsTest, TestClickActionButton) {
116 std::unique_ptr<views::Widget> anchor_widget = CreateAnchorWidget();
117 TestToolbarActionsBarBubbleDelegate delegate(HeadingString(), BodyString(), 206 TestToolbarActionsBarBubbleDelegate delegate(HeadingString(), BodyString(),
118 ActionString()); 207 ActionString());
119 delegate.set_dismiss_button_text(DismissString()); 208 delegate.set_dismiss_button_text(DismissString());
120 ToolbarActionsBarBubbleViews* bubble = new ToolbarActionsBarBubbleViews( 209 delegate.set_learn_more_button_text(LearnMoreString());
121 anchor_widget->GetContentsView(), delegate.GetDelegate()); 210 ShowBubble(&delegate);
122 views::Widget* bubble_widget = 211 views::test::TestWidgetObserver bubble_observer(bubble_widget());
123 views::BubbleDelegateView::CreateBubble(bubble);
124 views::test::TestWidgetObserver bubble_observer(bubble_widget);
125 bubble->Show();
126 212
127 EXPECT_FALSE(delegate.close_action()); 213 EXPECT_FALSE(delegate.close_action());
128 ui::test::EventGenerator generator(GetContext(), 214 ClickView(bubble()->action_button());
129 anchor_widget->GetNativeWindow());
130 generator.MoveMouseTo(GetCenterInScreenCoordinates(bubble->action_button()));
131 generator.ClickLeftButton();
132 base::RunLoop().RunUntilIdle();
133 ASSERT_TRUE(delegate.close_action()); 215 ASSERT_TRUE(delegate.close_action());
134 EXPECT_EQ(ToolbarActionsBarBubbleDelegate::CLOSE_EXECUTE, 216 EXPECT_EQ(ToolbarActionsBarBubbleDelegate::CLOSE_EXECUTE,
135 *delegate.close_action()); 217 *delegate.close_action());
136 EXPECT_TRUE(bubble_observer.widget_closed()); 218 EXPECT_TRUE(bubble_observer.widget_closed());
137 } 219 }
138 220
139 TEST_F(ToolbarActionsBarBubbleViewsTest, TestCloseOnDeactivation) { 221 TEST_F(ToolbarActionsBarBubbleViewsTest, TestClickDismissButton) {
140 std::unique_ptr<views::Widget> anchor_widget = CreateAnchorWidget();
141 TestToolbarActionsBarBubbleDelegate delegate(HeadingString(), BodyString(), 222 TestToolbarActionsBarBubbleDelegate delegate(HeadingString(), BodyString(),
142 ActionString()); 223 ActionString());
143 delegate.set_dismiss_button_text(DismissString()); 224 delegate.set_dismiss_button_text(DismissString());
144 ToolbarActionsBarBubbleViews* bubble = new ToolbarActionsBarBubbleViews( 225 delegate.set_learn_more_button_text(LearnMoreString());
145 anchor_widget->GetContentsView(), delegate.GetDelegate()); 226 ShowBubble(&delegate);
146 views::Widget* bubble_widget = 227 views::test::TestWidgetObserver bubble_observer(bubble_widget());
147 views::BubbleDelegateView::CreateBubble(bubble); 228
148 views::test::TestWidgetObserver bubble_observer(bubble_widget); 229 EXPECT_FALSE(delegate.close_action());
149 bubble->Show(); 230 ClickView(bubble()->dismiss_button());
231 ASSERT_TRUE(delegate.close_action());
232 EXPECT_EQ(ToolbarActionsBarBubbleDelegate::CLOSE_DISMISS_USER_ACTION,
233 *delegate.close_action());
234 }
235
236 TEST_F(ToolbarActionsBarBubbleViewsTest, TestClickLearnMoreLink) {
237 TestToolbarActionsBarBubbleDelegate delegate(HeadingString(), BodyString(),
238 ActionString());
239 delegate.set_dismiss_button_text(DismissString());
240 delegate.set_learn_more_button_text(LearnMoreString());
241 ShowBubble(&delegate);
242 views::test::TestWidgetObserver bubble_observer(bubble_widget());
243
244 EXPECT_FALSE(delegate.close_action());
245 ClickView(bubble()->learn_more_button());
246 ASSERT_TRUE(delegate.close_action());
247 EXPECT_EQ(ToolbarActionsBarBubbleDelegate::CLOSE_LEARN_MORE,
248 *delegate.close_action());
249 }
250
251 TEST_F(ToolbarActionsBarBubbleViewsTest, TestCloseOnDeactivation) {
252 TestToolbarActionsBarBubbleDelegate delegate(HeadingString(), BodyString(),
253 ActionString());
254 ShowBubble(&delegate);
255 views::test::TestWidgetObserver bubble_observer(bubble_widget());
150 256
151 EXPECT_FALSE(delegate.close_action()); 257 EXPECT_FALSE(delegate.close_action());
152 // Close the bubble by activating another widget. The delegate should be 258 // Close the bubble by activating another widget. The delegate should be
153 // told it was dismissed. 259 // told it was dismissed.
154 anchor_widget->Activate(); 260 anchor_widget()->Activate();
155 base::RunLoop().RunUntilIdle(); 261 base::RunLoop().RunUntilIdle();
156 ASSERT_TRUE(delegate.close_action()); 262 ASSERT_TRUE(delegate.close_action());
157 EXPECT_EQ(ToolbarActionsBarBubbleDelegate::CLOSE_DISMISS_DEACTIVATION, 263 EXPECT_EQ(ToolbarActionsBarBubbleDelegate::CLOSE_DISMISS_DEACTIVATION,
158 *delegate.close_action()); 264 *delegate.close_action());
159 EXPECT_TRUE(bubble_observer.widget_closed()); 265 EXPECT_TRUE(bubble_observer.widget_closed());
160 } 266 }
161 267
162 TEST_F(ToolbarActionsBarBubbleViewsTest, TestDontCloseOnDeactivation) { 268 TEST_F(ToolbarActionsBarBubbleViewsTest, TestDontCloseOnDeactivation) {
163 scoped_ptr<views::Widget> anchor_widget = CreateAnchorWidget();
164 TestToolbarActionsBarBubbleDelegate delegate(HeadingString(), BodyString(), 269 TestToolbarActionsBarBubbleDelegate delegate(HeadingString(), BodyString(),
165 ActionString()); 270 ActionString());
166 delegate.set_dismiss_button_text(DismissString());
167 delegate.set_close_on_deactivate(false); 271 delegate.set_close_on_deactivate(false);
168 ToolbarActionsBarBubbleViews* bubble = new ToolbarActionsBarBubbleViews( 272 ShowBubble(&delegate);
169 anchor_widget->GetContentsView(), delegate.GetDelegate()); 273 views::test::TestWidgetObserver bubble_observer(bubble_widget());
170 views::Widget* bubble_widget =
171 views::BubbleDelegateView::CreateBubble(bubble);
172 views::test::TestWidgetObserver bubble_observer(bubble_widget);
173 bubble->Show();
174 274
175 EXPECT_FALSE(delegate.close_action()); 275 EXPECT_FALSE(delegate.close_action());
176 // Activate another widget. The bubble shouldn't close. 276 // Activate another widget. The bubble shouldn't close.
177 anchor_widget->Activate(); 277 anchor_widget()->Activate();
178 base::RunLoop().RunUntilIdle(); 278 base::RunLoop().RunUntilIdle();
179 EXPECT_FALSE(delegate.close_action()); 279 EXPECT_FALSE(delegate.close_action());
180 bubble_widget->Close(); 280 CloseBubble();
181 base::RunLoop().RunUntilIdle();
182 } 281 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/toolbar/toolbar_actions_bar_bubble_views.cc ('k') | chrome/chrome_browser_ui.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698