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

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

Issue 2907983002: Allow dialogs to use a custom View as their title. (Closed)
Patch Set: pass strings by reference Created 3 years, 6 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 "ui/views/bubble/bubble_dialog_delegate.h" 5 #include "ui/views/bubble/bubble_dialog_delegate.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/i18n/rtl.h" 9 #include "base/i18n/rtl.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
11 #include "base/strings/utf_string_conversions.h"
11 #include "ui/base/hit_test.h" 12 #include "ui/base/hit_test.h"
12 #include "ui/events/event_utils.h" 13 #include "ui/events/event_utils.h"
13 #include "ui/views/bubble/bubble_frame_view.h" 14 #include "ui/views/bubble/bubble_frame_view.h"
14 #include "ui/views/controls/button/label_button.h" 15 #include "ui/views/controls/button/label_button.h"
16 #include "ui/views/test/test_views.h"
15 #include "ui/views/test/test_widget_observer.h" 17 #include "ui/views/test/test_widget_observer.h"
16 #include "ui/views/test/views_test_base.h" 18 #include "ui/views/test/views_test_base.h"
17 #include "ui/views/widget/widget.h" 19 #include "ui/views/widget/widget.h"
18 #include "ui/views/widget/widget_observer.h" 20 #include "ui/views/widget/widget_observer.h"
19 21
20 namespace views { 22 namespace views {
21 23
22 namespace { 24 namespace {
23 25
24 class TestBubbleDialogDelegateView : public BubbleDialogDelegateView { 26 class TestBubbleDialogDelegateView : public BubbleDialogDelegateView {
25 public: 27 public:
26 TestBubbleDialogDelegateView(View* anchor_view) 28 TestBubbleDialogDelegateView(View* anchor_view)
27 : BubbleDialogDelegateView(anchor_view, BubbleBorder::TOP_LEFT), 29 : BubbleDialogDelegateView(anchor_view, BubbleBorder::TOP_LEFT),
28 view_(new View()) { 30 view_(new View()),
31 title_view_(nullptr) {
29 view_->SetFocusBehavior(FocusBehavior::ALWAYS); 32 view_->SetFocusBehavior(FocusBehavior::ALWAYS);
30 AddChildView(view_); 33 AddChildView(view_);
31 } 34 }
32 ~TestBubbleDialogDelegateView() override {} 35 ~TestBubbleDialogDelegateView() override {}
33 36
34 // BubbleDialogDelegateView overrides: 37 // BubbleDialogDelegateView overrides:
35 View* GetInitiallyFocusedView() override { return view_; } 38 View* GetInitiallyFocusedView() override { return view_; }
36 gfx::Size CalculatePreferredSize() const override { 39 gfx::Size CalculatePreferredSize() const override {
37 return gfx::Size(200, 200); 40 return gfx::Size(200, 200);
38 } 41 }
39 42
43 base::string16 GetWindowTitle() const override {
44 return base::ASCIIToUTF16("TITLE TITLE TITLE");
45 }
46
47 View* CreateTitleView(base::string16 title_text) override {
48 EXPECT_EQ(title_text, GetWindowTitle());
49 return title_view_;
50 }
51
52 void set_title_view(View* title_view) { title_view_ = title_view; }
53 View* title_view() { return title_view_; }
54
40 using BubbleDialogDelegateView::SetAnchorRect; 55 using BubbleDialogDelegateView::SetAnchorRect;
41 using BubbleDialogDelegateView::GetBubbleFrameView; 56 using BubbleDialogDelegateView::GetBubbleFrameView;
42 57
43 private: 58 private:
44 View* view_; 59 View* view_;
60 View* title_view_;
45 61
46 DISALLOW_COPY_AND_ASSIGN(TestBubbleDialogDelegateView); 62 DISALLOW_COPY_AND_ASSIGN(TestBubbleDialogDelegateView);
47 }; 63 };
48 64
49 class BubbleDialogDelegateTest : public ViewsTestBase { 65 class BubbleDialogDelegateTest : public ViewsTestBase {
50 public: 66 public:
51 BubbleDialogDelegateTest() {} 67 BubbleDialogDelegateTest() {}
52 ~BubbleDialogDelegateTest() override {} 68 ~BubbleDialogDelegateTest() override {}
53 69
54 // Creates and shows a test widget that owns its native widget. 70 // Creates and shows a test widget that owns its native widget.
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 TestBubbleDialogDelegateView* bubble_delegate = 260 TestBubbleDialogDelegateView* bubble_delegate =
245 new TestBubbleDialogDelegateView(anchor_widget->GetContentsView()); 261 new TestBubbleDialogDelegateView(anchor_widget->GetContentsView());
246 BubbleDialogDelegateView::CreateBubble(bubble_delegate); 262 BubbleDialogDelegateView::CreateBubble(bubble_delegate);
247 BubbleFrameView* frame = bubble_delegate->GetBubbleFrameView(); 263 BubbleFrameView* frame = bubble_delegate->GetBubbleFrameView();
248 const int border = frame->bubble_border()->GetBorderThickness(); 264 const int border = frame->bubble_border()->GetBorderThickness();
249 265
250 struct { 266 struct {
251 const int point; 267 const int point;
252 const int hit; 268 const int hit;
253 } cases[] = { 269 } cases[] = {
254 {border, HTNOWHERE}, {border + 50, HTCLIENT}, {1000, HTNOWHERE}, 270 {border, HTNOWHERE}, {border + 60, HTCLIENT}, {1000, HTNOWHERE},
255 }; 271 };
256 272
257 for (size_t i = 0; i < arraysize(cases); ++i) { 273 for (size_t i = 0; i < arraysize(cases); ++i) {
258 gfx::Point point(cases[i].point, cases[i].point); 274 gfx::Point point(cases[i].point, cases[i].point);
259 EXPECT_EQ(cases[i].hit, frame->NonClientHitTest(point)) 275 EXPECT_EQ(cases[i].hit, frame->NonClientHitTest(point))
260 << " with border: " << border << ", at point " << cases[i].point; 276 << " with border: " << border << ", at point " << cases[i].point;
261 } 277 }
262 } 278 }
263 279
264 TEST_F(BubbleDialogDelegateTest, VisibleWhenAnchorWidgetBoundsChanged) { 280 TEST_F(BubbleDialogDelegateTest, VisibleWhenAnchorWidgetBoundsChanged) {
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 Button* close_button = frame_view->close_; 342 Button* close_button = frame_view->close_;
327 ASSERT_TRUE(close_button); 343 ASSERT_TRUE(close_button);
328 frame_view->ButtonPressed( 344 frame_view->ButtonPressed(
329 close_button, 345 close_button,
330 ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), 346 ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(),
331 ui::EventTimeForNow(), ui::EF_NONE, ui::EF_NONE)); 347 ui::EventTimeForNow(), ui::EF_NONE, ui::EF_NONE));
332 EXPECT_TRUE(bubble_widget->IsClosed()); 348 EXPECT_TRUE(bubble_widget->IsClosed());
333 } 349 }
334 } 350 }
335 351
352 TEST_F(BubbleDialogDelegateTest, CustomTitle) {
353 std::unique_ptr<Widget> anchor_widget(CreateTestWidget());
354 TestBubbleDialogDelegateView* bubble_delegate =
355 new TestBubbleDialogDelegateView(anchor_widget->GetContentsView());
356 constexpr int title_preferred_height = 20;
Peter Kasting 2017/06/17 01:16:20 Nit: Use kNamingStyle
Bret 2017/06/21 22:37:54 Done.
357 View* title_view = new StaticSizedView(gfx::Size(10, title_preferred_height));
358 bubble_delegate->set_title_view(title_view);
359 Widget* bubble_widget =
360 BubbleDialogDelegateView::CreateBubble(bubble_delegate);
361 bubble_widget->Show();
362 // Title takes up the whole bubble width when there's no icon or close button.
Peter Kasting 2017/06/17 01:16:20 Nit: Maybe this means the below statement should b
Bret 2017/06/21 22:37:54 I split this into two EXPECTs for the width and he
363 EXPECT_EQ(gfx::Size(bubble_delegate->width(), title_preferred_height),
364 title_view->size());
365 }
366
336 } // namespace views 367 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698