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

Unified Diff: ui/views/bubble/bubble_frame_view_unittest.cc

Issue 2750063002: views: implement dialog width snapping (Closed)
Patch Set: width -> min_width and improve tests Created 3 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 side-by-side diff with in-line comments
Download patch
Index: ui/views/bubble/bubble_frame_view_unittest.cc
diff --git a/ui/views/bubble/bubble_frame_view_unittest.cc b/ui/views/bubble/bubble_frame_view_unittest.cc
index bf955dd451c640273688efb5f36fae2e0198a691..b40a6565faeec230bf7f6c7be61ca056743150d0 100644
--- a/ui/views/bubble/bubble_frame_view_unittest.cc
+++ b/ui/views/bubble/bubble_frame_view_unittest.cc
@@ -8,19 +8,55 @@
#include "base/macros.h"
#include "build/build_config.h"
+#include "ui/base/test/material_design_controller_test_api.h"
#include "ui/gfx/geometry/insets.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/geometry/size.h"
#include "ui/views/bubble/bubble_border.h"
+#include "ui/views/bubble/bubble_dialog_delegate.h"
#include "ui/views/controls/button/label_button.h"
#include "ui/views/test/test_views.h"
+#include "ui/views/test/test_views_delegate.h"
#include "ui/views/test/views_test_base.h"
#include "ui/views/widget/widget.h"
#include "ui/views/widget/widget_delegate.h"
+#include "ui/views/window/dialog_delegate.h"
namespace views {
-typedef ViewsTestBase BubbleFrameViewTest;
+class BubbleFrameViewTestViewsDelegate : public TestViewsDelegate {
+ public:
+ BubbleFrameViewTestViewsDelegate() {}
+ ~BubbleFrameViewTestViewsDelegate() override {}
+
+ // TestViewsDelegate:
+ int GetSnappedDialogWidth(int min_width) const override {
+ return snapped_width_ ? snapped_width_ : min_width;
+ }
+
+ void set_snapped_width(int width) { snapped_width_ = width; }
+
+ private:
+ int snapped_width_ = 0;
+
+ DISALLOW_COPY_AND_ASSIGN(BubbleFrameViewTestViewsDelegate);
+};
+
+class BubbleFrameViewTest : public ViewsTestBase {
+ public:
+ BubbleFrameViewTest() {
+ views_delegate_ = new BubbleFrameViewTestViewsDelegate;
+ set_views_delegate(base::WrapUnique(views_delegate_));
+ }
+ ~BubbleFrameViewTest() override {}
+
+ BubbleFrameViewTestViewsDelegate* views_delegate() { return views_delegate_; }
+
+ private:
+ BubbleFrameViewTestViewsDelegate* views_delegate_;
+
+ DISALLOW_COPY_AND_ASSIGN(BubbleFrameViewTest);
+};
namespace {
@@ -73,6 +109,35 @@ class TestBubbleFrameViewWidgetDelegate : public WidgetDelegate {
bool should_show_close_ = false;
};
+// A subclass of TestBubbleFrameViewWidgetDelegate that is also a
+// DialogDelegate, used to test creation of Bubbles end-to-end, since the width
+// snapping logic for bubbles only applies to bubbles whose widget delegate is a
+// DialogDelegate.
+//
+// Having a multiple-implementation inherited class is perilous, but there does
+// not seem to be an easy way to avoid it.
+class TestBubbleFrameViewDialogDelegate
+ : public DialogDelegate,
+ public TestBubbleFrameViewWidgetDelegate {
tapted 2017/04/06 00:24:44 I don't think we need this - we're not really inte
Peter Kasting 2017/04/06 06:32:16 +1
+ public:
+ TestBubbleFrameViewDialogDelegate(Widget* widget)
+ : TestBubbleFrameViewWidgetDelegate(widget) {}
+ ~TestBubbleFrameViewDialogDelegate() override {}
+
+ // These are defined on both parent classes, so they need to be disambiguated
+ // thus:
+ Widget* GetWidget() override {
+ return TestBubbleFrameViewWidgetDelegate::GetWidget();
+ }
+ const Widget* GetWidget() const override {
+ return TestBubbleFrameViewWidgetDelegate::GetWidget();
+ }
+ DialogDelegate* AsDialogDelegate() override { return this; }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(TestBubbleFrameViewDialogDelegate);
+};
+
class TestBubbleFrameView : public BubbleFrameView {
public:
TestBubbleFrameView(ViewsTestBase* test_base)
@@ -88,8 +153,7 @@ class TestBubbleFrameView : public BubbleFrameView {
const Widget* GetWidget() const override {
if (!widget_) {
widget_.reset(new Widget);
- widget_delegate_.reset(
- new TestBubbleFrameViewWidgetDelegate(widget_.get()));
+ widget_delegate_ = MakeWidgetDelegate(widget_.get());
Widget::InitParams params =
test_base_->CreateParams(Widget::InitParams::TYPE_BUBBLE);
params.delegate = widget_delegate_.get();
@@ -109,6 +173,12 @@ class TestBubbleFrameView : public BubbleFrameView {
return widget_delegate_.get();
}
+ protected:
+ virtual std::unique_ptr<TestBubbleFrameViewWidgetDelegate> MakeWidgetDelegate(
+ Widget* widget) const {
+ return base::WrapUnique(new TestBubbleFrameViewWidgetDelegate(widget));
Peter Kasting 2017/04/06 06:32:16 Nit: WrapUnique(new -> MakeUnique (2 places)
+ }
+
private:
ViewsTestBase* test_base_;
@@ -121,6 +191,18 @@ class TestBubbleFrameView : public BubbleFrameView {
DISALLOW_COPY_AND_ASSIGN(TestBubbleFrameView);
};
+class TestBubbleFrameDialogView : public TestBubbleFrameView {
+ public:
+ TestBubbleFrameDialogView(ViewsTestBase* test_base)
+ : TestBubbleFrameView(test_base) {}
+
+ protected:
+ std::unique_ptr<TestBubbleFrameViewWidgetDelegate> MakeWidgetDelegate(
+ Widget* widget) const override {
+ return base::WrapUnique(new TestBubbleFrameViewDialogDelegate(widget));
+ }
+};
+
} // namespace
TEST_F(BubbleFrameViewTest, GetBoundsForClientView) {
@@ -488,4 +570,22 @@ TEST_F(BubbleFrameViewTest, GetMaximumSize) {
#endif
}
+// This test ensures that BubbleFrameViews are snapped to the width specified by
+// ViewsDelegate::GetSnappedDialogWidth().
+TEST_F(BubbleFrameViewTest, WidthSnapsToUnit) {
+ TestBubbleFrameDialogView frame(this);
+
+ // The "border width" here is primarily for the bubble shadow, but also for
+ // the edge stroke of the bubble. This width is *not* included in the width
+ // snapping, so it needs to be subtracted out.
+ int border_width = 10;
Peter Kasting 2017/04/06 06:32:16 Nit: This looks like you're matching a shadow/stro
+
+ // Check that changing the snapping unit changes the computed width to be a
+ // multiple of the snapping unit.
Peter Kasting 2017/04/06 06:32:16 Nit: Technically, the code below tests only that y
+ const int kTestWidth = 500;
+ EXPECT_NE(kTestWidth, frame.GetPreferredSize().width() - border_width);
Peter Kasting 2017/04/06 06:32:16 Nit: EXPECT_LT?
+ views_delegate()->set_snapped_width(kTestWidth);
+ EXPECT_EQ(kTestWidth, frame.GetPreferredSize().width() - border_width);
+}
+
} // namespace views

Powered by Google App Engine
This is Rietveld 408576698