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

Side by Side Diff: ui/views/controls/resize_area_unittest.cc

Issue 2796303006: Add gesture support in views::ResizeArea (Closed)
Patch Set: 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 unified diff | Download patch
« no previous file with comments | « ui/views/controls/resize_area_delegate.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "ui/views/controls/resize_area.h"
6
7 #include <memory>
8
9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "ui/aura/window.h"
11 #include "ui/events/test/event_generator.h"
12 #include "ui/views/controls/resize_area_delegate.h"
13 #include "ui/views/test/views_test_base.h"
14 #include "ui/views/view.h"
15 #include "ui/views/widget/widget.h"
16
17 namespace views {
18
19 // Testing delegate used by ResizeAreaTest.
20 class TestResizeAreaDelegate : public ResizeAreaDelegate {
21 public:
22 TestResizeAreaDelegate();
23 ~TestResizeAreaDelegate() override;
24
25 // ResizeAreaDelegate:
26 void OnResize(int resize_amount, bool done_resizing) override;
27
28 int resize_amount() { return resize_amount_; }
29 bool done_resizing() { return done_resizing_; }
30 bool on_resize_called() { return on_resize_called_; }
31
32 private:
33 int resize_amount_;
34 bool done_resizing_;
35 bool on_resize_called_;
36
37 DISALLOW_COPY_AND_ASSIGN(TestResizeAreaDelegate);
38 };
39
40 TestResizeAreaDelegate::TestResizeAreaDelegate()
41 : resize_amount_(0), done_resizing_(false), on_resize_called_(false) {}
42
43 TestResizeAreaDelegate::~TestResizeAreaDelegate() {}
44
45 void TestResizeAreaDelegate::OnResize(int resize_amount, bool done_resizing) {
46 resize_amount_ = resize_amount;
47 done_resizing_ = done_resizing;
48 on_resize_called_ = true;
49 }
50
51 // Test fixture for testing the ResizeArea class.
52 class ResizeAreaTest : public ViewsTestBase {
53 public:
54 ResizeAreaTest();
55 ~ResizeAreaTest() override;
56
57 protected:
58 // testing::Test:
59 void SetUp() override;
60 void TearDown() override;
61
62 ui::test::EventGenerator* event_generator() { return event_generator_.get(); }
63
64 int resize_amount() { return delegate_->resize_amount(); }
65 bool done_resizing() { return delegate_->done_resizing(); }
66 bool on_resize_called() { return delegate_->on_resize_called(); }
67 views::Widget* widget() { return widget_; }
68
69 private:
70 TestResizeAreaDelegate* delegate_ = nullptr;
71 ResizeArea* resize_area_ = nullptr;
72 views::Widget* widget_ = nullptr;
73 std::unique_ptr<ui::test::EventGenerator> event_generator_;
74
75 DISALLOW_COPY_AND_ASSIGN(ResizeAreaTest);
76 };
77
78 ResizeAreaTest::ResizeAreaTest() {}
79
80 ResizeAreaTest::~ResizeAreaTest() {}
81
82 void ResizeAreaTest::SetUp() {
83 views::ViewsTestBase::SetUp();
84
85 delegate_ = new TestResizeAreaDelegate;
86 resize_area_ = new ResizeArea(delegate_);
87
88 gfx::Size size(10, 10);
89 resize_area_->SetBounds(0, 0, size.width(), size.height());
90
91 views::Widget::InitParams init_params(
92 CreateParams(views::Widget::InitParams::TYPE_WINDOW_FRAMELESS));
93 init_params.bounds = gfx::Rect(size);
94
95 widget_ = new views::Widget();
96 widget_->Init(init_params);
97 widget_->SetContentsView(resize_area_);
98 widget_->Show();
99
100 event_generator_.reset(
101 new ui::test::EventGenerator(widget_->GetNativeWindow()));
102 }
103
104 void ResizeAreaTest::TearDown() {
105 if (widget_ && !widget_->IsClosed())
106 widget_->Close();
107
108 views::ViewsTestBase::TearDown();
109 }
110
111 // Verifies the correct calls have been made to
112 // TestResizeAreaDelegate::OnResize() for a sequence of mouse events
113 // corresponding to a successful resize operation.
114 TEST_F(ResizeAreaTest, SuccessfulMouseDrag) {
115 event_generator()->MoveMouseToCenterOf(widget()->GetNativeView());
116 event_generator()->PressLeftButton();
117
118 const int kFirstDragAmount = -5;
119 event_generator()->MoveMouseBy(kFirstDragAmount, 0);
120 EXPECT_EQ(kFirstDragAmount, resize_amount());
121 EXPECT_FALSE(done_resizing());
122 EXPECT_TRUE(on_resize_called());
123
124 const int kSecondDragAmount = 17;
125 event_generator()->MoveMouseBy(kSecondDragAmount, 0);
126 EXPECT_EQ(kFirstDragAmount + kSecondDragAmount, resize_amount());
127 EXPECT_FALSE(done_resizing());
128
129 event_generator()->ReleaseLeftButton();
130 EXPECT_EQ(kFirstDragAmount + kSecondDragAmount, resize_amount());
131 EXPECT_TRUE(done_resizing());
132 }
133
134 // Verifies that no resize is performed when attempting to resize using the
135 // right mouse button.
136 TEST_F(ResizeAreaTest, FailedMouseDrag) {
137 event_generator()->MoveMouseToCenterOf(widget()->GetNativeView());
138 event_generator()->PressRightButton();
139
140 const int kDragAmount = 18;
141 event_generator()->MoveMouseBy(kDragAmount, 0);
142 EXPECT_EQ(0, resize_amount());
143 }
144
145 // Verifies the correct calls have been made to
146 // TestResizeAreaDelegate::OnResize() for a sequence of gesture events
147 // corresponding to a successful resize operation.
148 TEST_F(ResizeAreaTest, SuccessfulGestureDrag) {
149 event_generator()->set_current_location(
150 widget()->GetNativeView()->bounds().CenterPoint());
151 event_generator()->PressTouch();
152
153 const int kFirstDragAmount = 20;
154 event_generator()->MoveTouchBy(kFirstDragAmount, 0);
155 EXPECT_EQ(kFirstDragAmount, resize_amount());
156 EXPECT_FALSE(done_resizing());
157 EXPECT_TRUE(on_resize_called());
158
159 const int kSecondDragAmount = -30;
160 event_generator()->MoveTouchBy(kSecondDragAmount, 0);
161 EXPECT_EQ(kFirstDragAmount + kSecondDragAmount, resize_amount());
162 EXPECT_FALSE(done_resizing());
163
164 event_generator()->ReleaseTouch();
165 EXPECT_EQ(kFirstDragAmount + kSecondDragAmount, resize_amount());
166 EXPECT_TRUE(done_resizing());
sadrul 2017/04/10 18:02:51 Consider using EventGenerator::GestureScrollSequen
tdanderson 2017/04/11 15:34:09 Done.
167 }
168
169 // Verifies that no resize is performed on a gesture tap.
170 TEST_F(ResizeAreaTest, NoDragOnGestureTap) {
171 event_generator()->GestureTapAt(
172 widget()->GetNativeView()->bounds().CenterPoint());
173 EXPECT_EQ(0, resize_amount());
174 }
175
176 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/controls/resize_area_delegate.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698