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

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

Issue 1877143002: Convert ToolbarActionsBarBubbleViews to BubbleDialogDelegate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix test 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 "chrome/browser/ui/views/toolbar/toolbar_actions_bar_bubble_views.h"
6
5 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
6 #include "base/run_loop.h" 8 #include "base/run_loop.h"
7 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
8 #include "chrome/browser/ui/toolbar/test_toolbar_actions_bar_bubble_delegate.h" 10 #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"
10 #include "ui/events/event_utils.h" 11 #include "ui/events/event_utils.h"
11 #include "ui/events/test/event_generator.h" 12 #include "ui/events/test/event_generator.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/test/test_widget_observer.h" 14 #include "ui/views/test/test_widget_observer.h"
15 #include "ui/views/test/views_test_base.h" 15 #include "ui/views/test/views_test_base.h"
16 #include "ui/views/widget/widget.h" 16 #include "ui/views/widget/widget.h"
17 17 #include "ui/views/window/dialog_client_view.h"
18 namespace {
19
20 gfx::Point GetCenterInScreenCoordinates(const views::View* view) {
21 gfx::Point center(view->width() / 2, view->height() / 2);
22 views::View::ConvertPointToScreen(view, &center);
23 return center;
24 }
25
26 } // namespace
27 18
28 class ToolbarActionsBarBubbleViewsTest : public views::ViewsTestBase { 19 class ToolbarActionsBarBubbleViewsTest : public views::ViewsTestBase {
29 protected: 20 protected:
30 std::unique_ptr<views::Widget> CreateAnchorWidget() { 21 std::unique_ptr<views::Widget> CreateAnchorWidget() {
31 std::unique_ptr<views::Widget> anchor_widget(new views::Widget()); 22 std::unique_ptr<views::Widget> anchor_widget(new views::Widget());
32 views::Widget::InitParams params = 23 views::Widget::InitParams params =
33 CreateParams(views::Widget::InitParams::TYPE_WINDOW); 24 CreateParams(views::Widget::InitParams::TYPE_WINDOW);
34 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; 25 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
35 anchor_widget->Init(params); 26 anchor_widget->Init(params);
36 return anchor_widget; 27 return anchor_widget;
37 } 28 }
38 29
39 base::string16 HeadingString() { return base::ASCIIToUTF16("Heading"); } 30 base::string16 HeadingString() { return base::ASCIIToUTF16("Heading"); }
40 base::string16 BodyString() { return base::ASCIIToUTF16("Body"); } 31 base::string16 BodyString() { return base::ASCIIToUTF16("Body"); }
41 base::string16 ActionString() { return base::ASCIIToUTF16("Action"); } 32 base::string16 ActionString() { return base::ASCIIToUTF16("Action"); }
42 base::string16 DismissString() { return base::ASCIIToUTF16("Dismiss"); } 33 base::string16 DismissString() { return base::ASCIIToUTF16("Dismiss"); }
43 }; 34 };
44 35
45 TEST_F(ToolbarActionsBarBubbleViewsTest, TestBubbleLayoutActionButton) { 36 TEST_F(ToolbarActionsBarBubbleViewsTest, TestBubbleLayoutActionButton) {
46 std::unique_ptr<views::Widget> anchor_widget = CreateAnchorWidget(); 37 std::unique_ptr<views::Widget> anchor_widget = CreateAnchorWidget();
47 TestToolbarActionsBarBubbleDelegate delegate(HeadingString(), BodyString(), 38 TestToolbarActionsBarBubbleDelegate delegate(HeadingString(), BodyString(),
48 ActionString()); 39 ActionString());
49 ToolbarActionsBarBubbleViews* bubble = new ToolbarActionsBarBubbleViews( 40 ToolbarActionsBarBubbleViews* bubble = new ToolbarActionsBarBubbleViews(
50 anchor_widget->GetContentsView(), delegate.GetDelegate()); 41 anchor_widget->GetContentsView(), delegate.GetDelegate());
51 views::BubbleDelegateView::CreateBubble(bubble); 42 views::BubbleDialogDelegateView::CreateBubble(bubble);
52 bubble->Show(); 43 bubble->Show();
53 44
54 EXPECT_TRUE(bubble->heading_label()); 45 EXPECT_TRUE(bubble->GetDialogClientView()->ok_button());
55 EXPECT_EQ(HeadingString(), bubble->heading_label()->text()); 46 EXPECT_FALSE(bubble->GetDialogClientView()->cancel_button());
Devlin 2016/04/13 00:38:58 thinking about this, I'd prefer to keep the text c
Evan Stade 2016/04/13 15:31:03 Here is my thinking: I'm not a fan of unit tests
Devlin 2016/04/13 16:33:40 I agree with the spirit (i.e., change detector tes
Evan Stade 2016/04/13 22:10:39 OK, I restored the button text checks.
56 EXPECT_TRUE(bubble->content_label());
57 EXPECT_EQ(BodyString(), bubble->content_label()->text());
58 EXPECT_TRUE(bubble->action_button());
59 EXPECT_EQ(ActionString(), bubble->action_button()->GetText());
60 EXPECT_FALSE(bubble->dismiss_button());
61 47
62 bubble->GetWidget()->Close(); 48 bubble->GetWidget()->Close();
63 base::RunLoop().RunUntilIdle(); 49 base::RunLoop().RunUntilIdle();
64 } 50 }
65 51
66 TEST_F(ToolbarActionsBarBubbleViewsTest, 52 TEST_F(ToolbarActionsBarBubbleViewsTest,
67 TestBubbleLayoutActionAndDismissButton) { 53 TestBubbleLayoutActionAndDismissButton) {
68 std::unique_ptr<views::Widget> anchor_widget = CreateAnchorWidget(); 54 std::unique_ptr<views::Widget> anchor_widget = CreateAnchorWidget();
69 TestToolbarActionsBarBubbleDelegate delegate(HeadingString(), BodyString(), 55 TestToolbarActionsBarBubbleDelegate delegate(HeadingString(), BodyString(),
70 ActionString()); 56 ActionString());
71 delegate.set_dismiss_button_text(DismissString()); 57 delegate.set_dismiss_button_text(DismissString());
72 ToolbarActionsBarBubbleViews* bubble = new ToolbarActionsBarBubbleViews( 58 ToolbarActionsBarBubbleViews* bubble = new ToolbarActionsBarBubbleViews(
73 anchor_widget->GetContentsView(), delegate.GetDelegate()); 59 anchor_widget->GetContentsView(), delegate.GetDelegate());
74 views::BubbleDelegateView::CreateBubble(bubble); 60 views::BubbleDialogDelegateView::CreateBubble(bubble);
75 bubble->Show(); 61 bubble->Show();
76 62
77 EXPECT_TRUE(bubble->heading_label()); 63 EXPECT_TRUE(bubble->GetDialogClientView()->ok_button());
78 EXPECT_EQ(HeadingString(), bubble->heading_label()->text()); 64 EXPECT_TRUE(bubble->GetDialogClientView()->cancel_button());
79 EXPECT_TRUE(bubble->content_label());
80 EXPECT_EQ(BodyString(), bubble->content_label()->text());
81 EXPECT_TRUE(bubble->action_button());
82 EXPECT_EQ(ActionString(), bubble->action_button()->GetText());
83 EXPECT_TRUE(bubble->dismiss_button());
84 EXPECT_EQ(DismissString(), bubble->dismiss_button()->GetText());
85 65
86 bubble->GetWidget()->Close(); 66 bubble->GetWidget()->Close();
87 base::RunLoop().RunUntilIdle(); 67 base::RunLoop().RunUntilIdle();
88 } 68 }
89 69
90 TEST_F(ToolbarActionsBarBubbleViewsTest, TestShowAndCloseBubble) { 70 TEST_F(ToolbarActionsBarBubbleViewsTest, TestShowAndCloseBubble) {
91 std::unique_ptr<views::Widget> anchor_widget = CreateAnchorWidget(); 71 std::unique_ptr<views::Widget> anchor_widget = CreateAnchorWidget();
92 TestToolbarActionsBarBubbleDelegate delegate(HeadingString(), BodyString(), 72 TestToolbarActionsBarBubbleDelegate delegate(HeadingString(), BodyString(),
93 ActionString()); 73 ActionString());
94 delegate.set_dismiss_button_text(DismissString()); 74 delegate.set_dismiss_button_text(DismissString());
95 ToolbarActionsBarBubbleViews* bubble = new ToolbarActionsBarBubbleViews( 75 ToolbarActionsBarBubbleViews* bubble = new ToolbarActionsBarBubbleViews(
96 anchor_widget->GetContentsView(), delegate.GetDelegate()); 76 anchor_widget->GetContentsView(), delegate.GetDelegate());
97 77
98 EXPECT_FALSE(delegate.shown()); 78 EXPECT_FALSE(delegate.shown());
99 EXPECT_FALSE(delegate.close_action()); 79 EXPECT_FALSE(delegate.close_action());
100 views::Widget* bubble_widget = 80 views::Widget* bubble_widget =
101 views::BubbleDelegateView::CreateBubble(bubble); 81 views::BubbleDialogDelegateView::CreateBubble(bubble);
102 views::test::TestWidgetObserver bubble_observer(bubble_widget); 82 views::test::TestWidgetObserver bubble_observer(bubble_widget);
103 bubble->Show(); 83 bubble->Show();
104 EXPECT_TRUE(delegate.shown()); 84 EXPECT_TRUE(delegate.shown());
105 EXPECT_FALSE(delegate.close_action()); 85 EXPECT_FALSE(delegate.close_action());
106 86
107 bubble_widget->Close(); 87 bubble->GetDialogClientView()->CancelWindow();
108 base::RunLoop().RunUntilIdle(); 88 base::RunLoop().RunUntilIdle();
109 ASSERT_TRUE(delegate.close_action()); 89 ASSERT_TRUE(delegate.close_action());
110 EXPECT_EQ(ToolbarActionsBarBubbleDelegate::CLOSE_DISMISS_USER_ACTION, 90 EXPECT_EQ(ToolbarActionsBarBubbleDelegate::CLOSE_DISMISS_USER_ACTION,
111 *delegate.close_action()); 91 *delegate.close_action());
112 EXPECT_TRUE(bubble_observer.widget_closed()); 92 EXPECT_TRUE(bubble_observer.widget_closed());
113 } 93 }
114 94
115 TEST_F(ToolbarActionsBarBubbleViewsTest, TestClickActionButton) { 95 TEST_F(ToolbarActionsBarBubbleViewsTest, TestClickActionButton) {
116 std::unique_ptr<views::Widget> anchor_widget = CreateAnchorWidget(); 96 std::unique_ptr<views::Widget> anchor_widget = CreateAnchorWidget();
117 TestToolbarActionsBarBubbleDelegate delegate(HeadingString(), BodyString(), 97 TestToolbarActionsBarBubbleDelegate delegate(HeadingString(), BodyString(),
118 ActionString()); 98 ActionString());
119 delegate.set_dismiss_button_text(DismissString()); 99 delegate.set_dismiss_button_text(DismissString());
120 ToolbarActionsBarBubbleViews* bubble = new ToolbarActionsBarBubbleViews( 100 ToolbarActionsBarBubbleViews* bubble = new ToolbarActionsBarBubbleViews(
121 anchor_widget->GetContentsView(), delegate.GetDelegate()); 101 anchor_widget->GetContentsView(), delegate.GetDelegate());
122 views::Widget* bubble_widget = 102 views::Widget* bubble_widget =
123 views::BubbleDelegateView::CreateBubble(bubble); 103 views::BubbleDialogDelegateView::CreateBubble(bubble);
124 views::test::TestWidgetObserver bubble_observer(bubble_widget); 104 views::test::TestWidgetObserver bubble_observer(bubble_widget);
125 bubble->Show(); 105 bubble->Show();
126 106
127 EXPECT_FALSE(delegate.close_action()); 107 EXPECT_FALSE(delegate.close_action());
128 ui::test::EventGenerator generator(GetContext(), 108 ui::test::EventGenerator generator(GetContext(),
129 anchor_widget->GetNativeWindow()); 109 anchor_widget->GetNativeWindow());
130 generator.MoveMouseTo(GetCenterInScreenCoordinates(bubble->action_button())); 110 generator.MoveMouseTo(bubble->GetDialogClientView()
111 ->ok_button()
112 ->GetBoundsInScreen()
113 .CenterPoint());
131 generator.ClickLeftButton(); 114 generator.ClickLeftButton();
132 base::RunLoop().RunUntilIdle(); 115 base::RunLoop().RunUntilIdle();
133 ASSERT_TRUE(delegate.close_action()); 116 ASSERT_TRUE(delegate.close_action());
134 EXPECT_EQ(ToolbarActionsBarBubbleDelegate::CLOSE_EXECUTE, 117 EXPECT_EQ(ToolbarActionsBarBubbleDelegate::CLOSE_EXECUTE,
135 *delegate.close_action()); 118 *delegate.close_action());
136 EXPECT_TRUE(bubble_observer.widget_closed()); 119 EXPECT_TRUE(bubble_observer.widget_closed());
137 } 120 }
138 121
139 TEST_F(ToolbarActionsBarBubbleViewsTest, TestCloseOnDeactivation) { 122 TEST_F(ToolbarActionsBarBubbleViewsTest, TestCloseOnDeactivation) {
140 std::unique_ptr<views::Widget> anchor_widget = CreateAnchorWidget(); 123 std::unique_ptr<views::Widget> anchor_widget = CreateAnchorWidget();
141 TestToolbarActionsBarBubbleDelegate delegate(HeadingString(), BodyString(), 124 TestToolbarActionsBarBubbleDelegate delegate(HeadingString(), BodyString(),
142 ActionString()); 125 ActionString());
143 delegate.set_dismiss_button_text(DismissString()); 126 delegate.set_dismiss_button_text(DismissString());
144 ToolbarActionsBarBubbleViews* bubble = new ToolbarActionsBarBubbleViews( 127 ToolbarActionsBarBubbleViews* bubble = new ToolbarActionsBarBubbleViews(
145 anchor_widget->GetContentsView(), delegate.GetDelegate()); 128 anchor_widget->GetContentsView(), delegate.GetDelegate());
146 views::Widget* bubble_widget = 129 views::Widget* bubble_widget =
147 views::BubbleDelegateView::CreateBubble(bubble); 130 views::BubbleDialogDelegateView::CreateBubble(bubble);
148 views::test::TestWidgetObserver bubble_observer(bubble_widget); 131 views::test::TestWidgetObserver bubble_observer(bubble_widget);
149 bubble->Show(); 132 bubble->Show();
150 133
151 EXPECT_FALSE(delegate.close_action()); 134 EXPECT_FALSE(delegate.close_action());
152 // Close the bubble by activating another widget. The delegate should be 135 // Close the bubble by activating another widget. The delegate should be
153 // told it was dismissed. 136 // told it was dismissed.
154 anchor_widget->Activate(); 137 anchor_widget->Activate();
155 base::RunLoop().RunUntilIdle(); 138 base::RunLoop().RunUntilIdle();
156 ASSERT_TRUE(delegate.close_action()); 139 ASSERT_TRUE(delegate.close_action());
157 EXPECT_EQ(ToolbarActionsBarBubbleDelegate::CLOSE_DISMISS_DEACTIVATION, 140 EXPECT_EQ(ToolbarActionsBarBubbleDelegate::CLOSE_DISMISS_DEACTIVATION,
158 *delegate.close_action()); 141 *delegate.close_action());
159 EXPECT_TRUE(bubble_observer.widget_closed()); 142 EXPECT_TRUE(bubble_observer.widget_closed());
160 } 143 }
161 144
162 TEST_F(ToolbarActionsBarBubbleViewsTest, TestDontCloseOnDeactivation) { 145 TEST_F(ToolbarActionsBarBubbleViewsTest, TestDontCloseOnDeactivation) {
163 scoped_ptr<views::Widget> anchor_widget = CreateAnchorWidget(); 146 scoped_ptr<views::Widget> anchor_widget = CreateAnchorWidget();
164 TestToolbarActionsBarBubbleDelegate delegate(HeadingString(), BodyString(), 147 TestToolbarActionsBarBubbleDelegate delegate(HeadingString(), BodyString(),
165 ActionString()); 148 ActionString());
166 delegate.set_dismiss_button_text(DismissString()); 149 delegate.set_dismiss_button_text(DismissString());
167 delegate.set_close_on_deactivate(false); 150 delegate.set_close_on_deactivate(false);
168 ToolbarActionsBarBubbleViews* bubble = new ToolbarActionsBarBubbleViews( 151 ToolbarActionsBarBubbleViews* bubble = new ToolbarActionsBarBubbleViews(
169 anchor_widget->GetContentsView(), delegate.GetDelegate()); 152 anchor_widget->GetContentsView(), delegate.GetDelegate());
170 views::Widget* bubble_widget = 153 views::Widget* bubble_widget =
171 views::BubbleDelegateView::CreateBubble(bubble); 154 views::BubbleDialogDelegateView::CreateBubble(bubble);
172 views::test::TestWidgetObserver bubble_observer(bubble_widget); 155 views::test::TestWidgetObserver bubble_observer(bubble_widget);
173 bubble->Show(); 156 bubble->Show();
174 157
175 EXPECT_FALSE(delegate.close_action()); 158 EXPECT_FALSE(delegate.close_action());
176 // Activate another widget. The bubble shouldn't close. 159 // Activate another widget. The bubble shouldn't close.
177 anchor_widget->Activate(); 160 anchor_widget->Activate();
178 base::RunLoop().RunUntilIdle(); 161 base::RunLoop().RunUntilIdle();
179 EXPECT_FALSE(delegate.close_action()); 162 EXPECT_FALSE(delegate.close_action());
180 bubble_widget->Close(); 163 bubble_widget->Close();
181 base::RunLoop().RunUntilIdle(); 164 base::RunLoop().RunUntilIdle();
182 } 165 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698