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

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

Issue 2796303006: Add gesture support in views::ResizeArea (Closed)
Patch Set: skip OSX 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 {
18 // Constants used by the ResizeAreaTest.SuccessfulGestureDrag test to simulate
19 // a gesture drag by |kGestureScrollDistance| resulting from
20 // |kGestureScrollSteps| ui::ET_GESTURE_SCROLL_UPDATE events being delivered.
21 const int kGestureScrollDistance = 100;
22 const int kGestureScrollSteps = 4;
23 const int kDistancePerGestureScrollUpdate =
24 kGestureScrollDistance / kGestureScrollSteps;
25 }
26
27 namespace views {
28
29 // Testing delegate used by ResizeAreaTest.
30 class TestResizeAreaDelegate : public ResizeAreaDelegate {
31 public:
32 TestResizeAreaDelegate();
33 ~TestResizeAreaDelegate() override;
34
35 // ResizeAreaDelegate:
36 void OnResize(int resize_amount, bool done_resizing) override;
37
38 int resize_amount() { return resize_amount_; }
39 bool done_resizing() { return done_resizing_; }
40 bool on_resize_called() { return on_resize_called_; }
41
42 private:
43 int resize_amount_;
44 bool done_resizing_;
45 bool on_resize_called_;
46
47 DISALLOW_COPY_AND_ASSIGN(TestResizeAreaDelegate);
48 };
49
50 TestResizeAreaDelegate::TestResizeAreaDelegate()
51 : resize_amount_(0), done_resizing_(false), on_resize_called_(false) {}
52
53 TestResizeAreaDelegate::~TestResizeAreaDelegate() {}
54
55 void TestResizeAreaDelegate::OnResize(int resize_amount, bool done_resizing) {
56 resize_amount_ = resize_amount;
57 done_resizing_ = done_resizing;
58 on_resize_called_ = true;
59 }
60
61 // Test fixture for testing the ResizeArea class.
62 class ResizeAreaTest : public ViewsTestBase {
63 public:
64 ResizeAreaTest();
65 ~ResizeAreaTest() override;
66
67 // Callback used by the SuccessfulGestureDrag test.
68 void ProcessGesture(ui::EventType type, const gfx::Vector2dF& delta);
69
70 protected:
71 // testing::Test:
72 void SetUp() override;
73 void TearDown() override;
74
75 ui::test::EventGenerator* event_generator() { return event_generator_.get(); }
76
77 int resize_amount() { return delegate_->resize_amount(); }
78 bool done_resizing() { return delegate_->done_resizing(); }
79 bool on_resize_called() { return delegate_->on_resize_called(); }
80 views::Widget* widget() { return widget_; }
81
82 private:
83 TestResizeAreaDelegate* delegate_ = nullptr;
84 ResizeArea* resize_area_ = nullptr;
85 views::Widget* widget_ = nullptr;
86 std::unique_ptr<ui::test::EventGenerator> event_generator_;
87
88 // The number of ui::ET_GESTURE_SCROLL_UPDATE events seen by
89 // ProcessGesture().
90 int gesture_scroll_updates_seen_ = 0;
91
92 DISALLOW_COPY_AND_ASSIGN(ResizeAreaTest);
93 };
94
95 ResizeAreaTest::ResizeAreaTest() {}
96
97 ResizeAreaTest::~ResizeAreaTest() {}
98
99 void ResizeAreaTest::ProcessGesture(ui::EventType type,
100 const gfx::Vector2dF& delta) {
101 if (type == ui::ET_GESTURE_SCROLL_BEGIN) {
102 EXPECT_FALSE(done_resizing());
103 EXPECT_FALSE(on_resize_called());
104 } else if (type == ui::ET_GESTURE_SCROLL_UPDATE) {
105 gesture_scroll_updates_seen_++;
106 EXPECT_EQ(kDistancePerGestureScrollUpdate * gesture_scroll_updates_seen_,
107 resize_amount());
108 EXPECT_FALSE(done_resizing());
109 EXPECT_TRUE(on_resize_called());
110 } else if (type == ui::ET_GESTURE_SCROLL_END) {
111 EXPECT_TRUE(done_resizing());
112 }
113 }
114
115 void ResizeAreaTest::SetUp() {
116 views::ViewsTestBase::SetUp();
117
118 delegate_ = new TestResizeAreaDelegate;
119 resize_area_ = new ResizeArea(delegate_);
120
121 gfx::Size size(10, 10);
122 resize_area_->SetBounds(0, 0, size.width(), size.height());
123
124 views::Widget::InitParams init_params(
125 CreateParams(views::Widget::InitParams::TYPE_WINDOW_FRAMELESS));
126 init_params.bounds = gfx::Rect(size);
127
128 widget_ = new views::Widget();
129 widget_->Init(init_params);
130 widget_->SetContentsView(resize_area_);
131 widget_->Show();
132
133 event_generator_.reset(
134 new ui::test::EventGenerator(widget_->GetNativeWindow()));
135 }
136
137 void ResizeAreaTest::TearDown() {
138 if (widget_ && !widget_->IsClosed())
139 widget_->Close();
140
141 views::ViewsTestBase::TearDown();
142 }
143
144 // TODO(tdanderson): Enable these tests on OSX. See crbug.com/710475.
145 #if !defined(OS_MACOSX)
146 // Verifies the correct calls have been made to
147 // TestResizeAreaDelegate::OnResize() for a sequence of mouse events
148 // corresponding to a successful resize operation.
149 TEST_F(ResizeAreaTest, SuccessfulMouseDrag) {
150 event_generator()->MoveMouseToCenterOf(widget()->GetNativeView());
151 event_generator()->PressLeftButton();
152
153 const int kFirstDragAmount = -5;
154 event_generator()->MoveMouseBy(kFirstDragAmount, 0);
155 EXPECT_EQ(kFirstDragAmount, resize_amount());
156 EXPECT_FALSE(done_resizing());
157 EXPECT_TRUE(on_resize_called());
158
159 const int kSecondDragAmount = 17;
160 event_generator()->MoveMouseBy(kSecondDragAmount, 0);
161 EXPECT_EQ(kFirstDragAmount + kSecondDragAmount, resize_amount());
162 EXPECT_FALSE(done_resizing());
163
164 event_generator()->ReleaseLeftButton();
165 EXPECT_EQ(kFirstDragAmount + kSecondDragAmount, resize_amount());
166 EXPECT_TRUE(done_resizing());
167 }
168
169 // Verifies that no resize is performed when attempting to resize using the
170 // right mouse button.
171 TEST_F(ResizeAreaTest, FailedMouseDrag) {
172 event_generator()->MoveMouseToCenterOf(widget()->GetNativeView());
173 event_generator()->PressRightButton();
174
175 const int kDragAmount = 18;
176 event_generator()->MoveMouseBy(kDragAmount, 0);
177 EXPECT_EQ(0, resize_amount());
178 }
179
180 // Verifies the correct calls have been made to
181 // TestResizeAreaDelegate::OnResize() for a sequence of gesture events
182 // corresponding to a successful resize operation.
183 TEST_F(ResizeAreaTest, SuccessfulGestureDrag) {
184 gfx::Point start = widget()->GetNativeView()->bounds().CenterPoint();
185 event_generator()->GestureScrollSequenceWithCallback(
186 start, gfx::Point(start.x() + kGestureScrollDistance, start.y()),
187 base::TimeDelta::FromMilliseconds(200), kGestureScrollSteps,
188 base::Bind(&ResizeAreaTest::ProcessGesture, base::Unretained(this)));
189 }
190
191 // Verifies that no resize is performed on a gesture tap.
192 TEST_F(ResizeAreaTest, NoDragOnGestureTap) {
193 event_generator()->GestureTapAt(
194 widget()->GetNativeView()->bounds().CenterPoint());
195
196 EXPECT_EQ(0, resize_amount());
197 }
198 #endif // !defined(OS_MACOSX)
199
200 } // 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