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

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

Powered by Google App Engine
This is Rietveld 408576698