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

Side by Side Diff: components/exo/touch_unittest.cc

Issue 2562803002: exo: Replace pointer based stylus and replace with touch based stylus (Closed)
Patch Set: rebase Created 4 years 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "ash/aura/wm_window_aura.h" 5 #include "ash/aura/wm_window_aura.h"
6 #include "ash/common/wm/window_positioner.h" 6 #include "ash/common/wm/window_positioner.h"
7 #include "ash/common/wm/window_positioning_utils.h" 7 #include "ash/common/wm/window_positioning_utils.h"
8 #include "ash/common/wm_shell.h" 8 #include "ash/common/wm_shell.h"
9 #include "ash/public/cpp/shell_window_ids.h" 9 #include "ash/public/cpp/shell_window_ids.h"
10 #include "ash/shell.h" 10 #include "ash/shell.h"
11 #include "components/exo/buffer.h" 11 #include "components/exo/buffer.h"
12 #include "components/exo/shell_surface.h" 12 #include "components/exo/shell_surface.h"
13 #include "components/exo/surface.h" 13 #include "components/exo/surface.h"
14 #include "components/exo/test/exo_test_base.h" 14 #include "components/exo/test/exo_test_base.h"
15 #include "components/exo/test/exo_test_helper.h" 15 #include "components/exo/test/exo_test_helper.h"
16 #include "components/exo/touch.h" 16 #include "components/exo/touch.h"
17 #include "components/exo/touch_delegate.h" 17 #include "components/exo/touch_delegate.h"
18 #include "components/exo/touch_stylus_delegate.h"
18 #include "testing/gmock/include/gmock/gmock.h" 19 #include "testing/gmock/include/gmock/gmock.h"
19 #include "ui/events/base_event_utils.h" 20 #include "ui/events/base_event_utils.h"
20 #include "ui/events/test/event_generator.h" 21 #include "ui/events/test/event_generator.h"
21 #include "ui/views/widget/widget.h" 22 #include "ui/views/widget/widget.h"
22 23
23 namespace exo { 24 namespace exo {
24 namespace { 25 namespace {
25 26
26 using TouchTest = test::ExoTestBase; 27 class TouchTest : public test::ExoTestBase {};
reveman 2016/12/08 23:17:14 why is this changing?
denniskempin 2016/12/15 21:16:49 Done.
27 28
28 class MockTouchDelegate : public TouchDelegate { 29 class MockTouchDelegate : public TouchDelegate {
29 public: 30 public:
30 MockTouchDelegate() {} 31 MockTouchDelegate() {}
31 32
32 // Overridden from TouchDelegate: 33 // Overridden from TouchDelegate:
33 MOCK_METHOD1(OnTouchDestroying, void(Touch*)); 34 MOCK_METHOD1(OnTouchDestroying, void(Touch*));
34 MOCK_CONST_METHOD1(CanAcceptTouchEventsForSurface, bool(Surface*)); 35 MOCK_CONST_METHOD1(CanAcceptTouchEventsForSurface, bool(Surface*));
35 MOCK_METHOD4(OnTouchDown, 36 MOCK_METHOD4(OnTouchDown,
36 void(Surface*, base::TimeTicks, int, const gfx::Point&)); 37 void(Surface*, base::TimeTicks, int, const gfx::Point&));
37 MOCK_METHOD2(OnTouchUp, void(base::TimeTicks, int)); 38 MOCK_METHOD2(OnTouchUp, void(base::TimeTicks, int));
38 MOCK_METHOD3(OnTouchMotion, void(base::TimeTicks, int, const gfx::Point&)); 39 MOCK_METHOD3(OnTouchMotion, void(base::TimeTicks, int, const gfx::Point&));
39 MOCK_METHOD3(OnTouchShape, void(int, float, float)); 40 MOCK_METHOD3(OnTouchShape, void(int, float, float));
40 MOCK_METHOD0(OnTouchFrame, void()); 41 MOCK_METHOD0(OnTouchFrame, void());
41 MOCK_METHOD0(OnTouchCancel, void()); 42 MOCK_METHOD0(OnTouchCancel, void());
42 }; 43 };
43 44
45 class MockTouchStylusDelegate : public TouchStylusDelegate {
46 public:
47 MockTouchStylusDelegate() {}
48
49 // Overridden from TouchStylusDelegate:
50 MOCK_METHOD1(OnTouchDestroying, void(Touch*));
51 MOCK_METHOD2(OnTouchTool, void(int, ui::EventPointerType));
52 MOCK_METHOD3(OnTouchForce, void(base::TimeTicks, int, float));
53 MOCK_METHOD3(OnTouchTilt, void(base::TimeTicks, int, gfx::Vector2dF));
54 };
55
44 TEST_F(TouchTest, OnTouchDown) { 56 TEST_F(TouchTest, OnTouchDown) {
45 ash::WindowPositioner::DisableAutoPositioning(true);
46
47 std::unique_ptr<Surface> bottom_surface(new Surface);
48 std::unique_ptr<ShellSurface> bottom_shell_surface(
49 new ShellSurface(bottom_surface.get()));
50 gfx::Size bottom_buffer_size(10, 10);
51 std::unique_ptr<Buffer> bottom_buffer(
52 new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(bottom_buffer_size)));
53 bottom_surface->Attach(bottom_buffer.get());
54 bottom_surface->Commit();
55 ash::wm::CenterWindow(ash::WmWindowAura::Get(
56 bottom_shell_surface->GetWidget()->GetNativeWindow()));
57
58 std::unique_ptr<Surface> top_surface(new Surface);
59 std::unique_ptr<ShellSurface> top_shell_surface(
60 new ShellSurface(top_surface.get()));
61 gfx::Size top_buffer_size(8, 8);
62 std::unique_ptr<Buffer> top_buffer(
63 new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(top_buffer_size)));
64 top_surface->Attach(top_buffer.get());
65 top_surface->Commit();
66 ash::wm::CenterWindow(ash::WmWindowAura::Get(
67 top_shell_surface->GetWidget()->GetNativeWindow()));
68
69 MockTouchDelegate delegate; 57 MockTouchDelegate delegate;
70 std::unique_ptr<Touch> touch(new Touch(&delegate)); 58 std::unique_ptr<Touch> touch(new Touch(&delegate));
71 ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow()); 59 ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
72 60
61 auto bottom_window = exo_test_helper()->CreateWindow(10, 10, false);
62 auto top_window = exo_test_helper()->CreateWindow(8, 8, false);
63
73 EXPECT_CALL(delegate, OnTouchShape(testing::_, testing::_, testing::_)) 64 EXPECT_CALL(delegate, OnTouchShape(testing::_, testing::_, testing::_))
74 .Times(testing::AnyNumber()); 65 .Times(testing::AnyNumber());
75 EXPECT_CALL(delegate, CanAcceptTouchEventsForSurface(top_surface.get())) 66 EXPECT_CALL(delegate, CanAcceptTouchEventsForSurface(top_window.surface()))
76 .WillRepeatedly(testing::Return(true)); 67 .WillRepeatedly(testing::Return(true));
77 EXPECT_CALL(delegate, 68 EXPECT_CALL(delegate,
78 OnTouchDown(top_surface.get(), testing::_, 1, gfx::Point())); 69 OnTouchDown(top_window.surface(), testing::_, 1, gfx::Point()));
79 EXPECT_CALL(delegate, OnTouchFrame()); 70 EXPECT_CALL(delegate, OnTouchFrame());
80 generator.set_current_location( 71 generator.set_current_location(top_window.origin());
81 top_surface->window()->GetBoundsInScreen().origin());
82 generator.PressTouchId(1); 72 generator.PressTouchId(1);
83 73
84 EXPECT_CALL(delegate, CanAcceptTouchEventsForSurface(bottom_surface.get())) 74 EXPECT_CALL(delegate, CanAcceptTouchEventsForSurface(bottom_window.surface()))
85 .WillRepeatedly(testing::Return(true)); 75 .WillRepeatedly(testing::Return(true));
86 76
87 // Second touch point should be relative to the focus surface. 77 // Second touch point should be relative to the focus surface.
88 EXPECT_CALL(delegate, OnTouchDown(top_surface.get(), testing::_, 2, 78 EXPECT_CALL(delegate, OnTouchDown(top_window.surface(), testing::_, 2,
89 gfx::Point(-1, -1))); 79 gfx::Point(-1, -1)));
90 EXPECT_CALL(delegate, OnTouchFrame()); 80 EXPECT_CALL(delegate, OnTouchFrame());
91 81
92 generator.set_current_location( 82 generator.set_current_location(bottom_window.origin());
93 bottom_surface->window()->GetBoundsInScreen().origin());
94 generator.PressTouchId(2); 83 generator.PressTouchId(2);
95 84
96 EXPECT_CALL(delegate, OnTouchDestroying(touch.get())); 85 EXPECT_CALL(delegate, OnTouchDestroying(touch.get()));
97 touch.reset(); 86 touch.reset();
98 } 87 }
99 88
100 TEST_F(TouchTest, OnTouchUp) { 89 TEST_F(TouchTest, OnTouchUp) {
101 std::unique_ptr<Surface> surface(new Surface); 90 auto window = exo_test_helper()->CreateWindow(10, 10, false);
102 std::unique_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get()));
103 gfx::Size buffer_size(10, 10);
104 std::unique_ptr<Buffer> buffer(
105 new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size)));
106 surface->Attach(buffer.get());
107 surface->Commit();
108 91
109 MockTouchDelegate delegate; 92 MockTouchDelegate delegate;
110 std::unique_ptr<Touch> touch(new Touch(&delegate)); 93 std::unique_ptr<Touch> touch(new Touch(&delegate));
111 ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow()); 94 ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
112 95
113 EXPECT_CALL(delegate, OnTouchShape(testing::_, testing::_, testing::_)) 96 EXPECT_CALL(delegate, OnTouchShape(testing::_, testing::_, testing::_))
114 .Times(testing::AnyNumber()); 97 .Times(testing::AnyNumber());
115 EXPECT_CALL(delegate, CanAcceptTouchEventsForSurface(surface.get())) 98 EXPECT_CALL(delegate, CanAcceptTouchEventsForSurface(window.surface()))
116 .WillRepeatedly(testing::Return(true)); 99 .WillRepeatedly(testing::Return(true));
117 EXPECT_CALL(delegate, 100 EXPECT_CALL(delegate, OnTouchDown(window.surface(), testing::_, testing::_,
118 OnTouchDown(surface.get(), testing::_, testing::_, gfx::Point())) 101 gfx::Point()))
119 .Times(2); 102 .Times(2);
120 EXPECT_CALL(delegate, OnTouchFrame()).Times(2); 103 EXPECT_CALL(delegate, OnTouchFrame()).Times(2);
121 generator.set_current_location( 104 generator.set_current_location(window.origin());
122 surface->window()->GetBoundsInScreen().origin());
123 generator.PressTouchId(1); 105 generator.PressTouchId(1);
124 generator.PressTouchId(2); 106 generator.PressTouchId(2);
125 107
126 EXPECT_CALL(delegate, OnTouchUp(testing::_, 1)); 108 EXPECT_CALL(delegate, OnTouchUp(testing::_, 1));
127 EXPECT_CALL(delegate, OnTouchFrame()); 109 EXPECT_CALL(delegate, OnTouchFrame());
128 generator.ReleaseTouchId(1); 110 generator.ReleaseTouchId(1);
129 EXPECT_CALL(delegate, OnTouchUp(testing::_, 2)); 111 EXPECT_CALL(delegate, OnTouchUp(testing::_, 2));
130 EXPECT_CALL(delegate, OnTouchFrame()); 112 EXPECT_CALL(delegate, OnTouchFrame());
131 generator.ReleaseTouchId(2); 113 generator.ReleaseTouchId(2);
132 114
133 EXPECT_CALL(delegate, OnTouchDestroying(touch.get())); 115 EXPECT_CALL(delegate, OnTouchDestroying(touch.get()));
134 touch.reset(); 116 touch.reset();
135 } 117 }
136 118
137 TEST_F(TouchTest, OnTouchMotion) { 119 TEST_F(TouchTest, OnTouchMotion) {
138 std::unique_ptr<Surface> surface(new Surface); 120 auto window = exo_test_helper()->CreateWindow(10, 10, false);
139 std::unique_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get()));
140 gfx::Size buffer_size(10, 10);
141 std::unique_ptr<Buffer> buffer(
142 new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size)));
143 surface->Attach(buffer.get());
144 surface->Commit();
145 121
146 MockTouchDelegate delegate; 122 MockTouchDelegate delegate;
147 std::unique_ptr<Touch> touch(new Touch(&delegate)); 123 std::unique_ptr<Touch> touch(new Touch(&delegate));
148 ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow()); 124 ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
149 125
150 EXPECT_CALL(delegate, OnTouchShape(testing::_, testing::_, testing::_)) 126 EXPECT_CALL(delegate, OnTouchShape(testing::_, testing::_, testing::_))
151 .Times(testing::AnyNumber()); 127 .Times(testing::AnyNumber());
152 EXPECT_CALL(delegate, CanAcceptTouchEventsForSurface(surface.get())) 128 EXPECT_CALL(delegate, CanAcceptTouchEventsForSurface(window.surface()))
153 .WillRepeatedly(testing::Return(true)); 129 .WillRepeatedly(testing::Return(true));
154 EXPECT_CALL(delegate, 130 EXPECT_CALL(delegate, OnTouchDown(window.surface(), testing::_, testing::_,
155 OnTouchDown(surface.get(), testing::_, testing::_, gfx::Point())); 131 gfx::Point()));
156 EXPECT_CALL(delegate, 132 EXPECT_CALL(delegate,
157 OnTouchMotion(testing::_, testing::_, gfx::Point(5, 5))); 133 OnTouchMotion(testing::_, testing::_, gfx::Point(5, 5)));
158 EXPECT_CALL(delegate, OnTouchUp(testing::_, testing::_)); 134 EXPECT_CALL(delegate, OnTouchUp(testing::_, testing::_));
159 EXPECT_CALL(delegate, OnTouchFrame()).Times(3); 135 EXPECT_CALL(delegate, OnTouchFrame()).Times(3);
160 generator.set_current_location( 136 generator.set_current_location(window.origin());
161 surface->window()->GetBoundsInScreen().origin());
162 generator.PressMoveAndReleaseTouchBy(5, 5); 137 generator.PressMoveAndReleaseTouchBy(5, 5);
163 138
164 // Check if touch point motion outside focus surface is reported properly to 139 // Check if touch point motion outside focus surface is reported properly to
165 // the focus surface. 140 // the focus surface.
166 EXPECT_CALL(delegate, 141 EXPECT_CALL(delegate, OnTouchDown(window.surface(), testing::_, testing::_,
167 OnTouchDown(surface.get(), testing::_, testing::_, gfx::Point())); 142 gfx::Point()));
168 EXPECT_CALL(delegate, 143 EXPECT_CALL(delegate,
169 OnTouchMotion(testing::_, testing::_, gfx::Point(100, 100))); 144 OnTouchMotion(testing::_, testing::_, gfx::Point(100, 100)));
170 EXPECT_CALL(delegate, OnTouchUp(testing::_, testing::_)); 145 EXPECT_CALL(delegate, OnTouchUp(testing::_, testing::_));
171 EXPECT_CALL(delegate, OnTouchFrame()).Times(3); 146 EXPECT_CALL(delegate, OnTouchFrame()).Times(3);
172 generator.set_current_location( 147 generator.set_current_location(window.origin());
173 surface->window()->GetBoundsInScreen().origin());
174 generator.PressMoveAndReleaseTouchBy(100, 100); 148 generator.PressMoveAndReleaseTouchBy(100, 100);
175 149
176 EXPECT_CALL(delegate, OnTouchDestroying(touch.get())); 150 EXPECT_CALL(delegate, OnTouchDestroying(touch.get()));
177 touch.reset(); 151 touch.reset();
178 } 152 }
179 153
180 TEST_F(TouchTest, OnTouchShape) { 154 TEST_F(TouchTest, OnTouchShape) {
181 std::unique_ptr<Surface> surface(new Surface); 155 auto window = exo_test_helper()->CreateWindow(10, 10, false);
182 std::unique_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get()));
183 gfx::Size buffer_size(10, 10);
184 std::unique_ptr<Buffer> buffer(
185 new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size)));
186 surface->Attach(buffer.get());
187 surface->Commit();
188 156
189 MockTouchDelegate delegate; 157 MockTouchDelegate delegate;
190 std::unique_ptr<Touch> touch(new Touch(&delegate)); 158 std::unique_ptr<Touch> touch(new Touch(&delegate));
191 ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow()); 159 ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
192 160
193 EXPECT_CALL(delegate, CanAcceptTouchEventsForSurface(surface.get())) 161 EXPECT_CALL(delegate, CanAcceptTouchEventsForSurface(window.surface()))
194 .WillRepeatedly(testing::Return(true)); 162 .WillRepeatedly(testing::Return(true));
195 { 163 {
196 testing::InSequence sequence; 164 testing::InSequence sequence;
197 EXPECT_CALL(delegate, OnTouchDown(surface.get(), testing::_, testing::_, 165 EXPECT_CALL(delegate, OnTouchDown(window.surface(), testing::_, testing::_,
198 gfx::Point())); 166 gfx::Point()));
199 EXPECT_CALL(delegate, OnTouchShape(testing::_, 1, 1)); 167 EXPECT_CALL(delegate, OnTouchShape(testing::_, 1, 1));
200 EXPECT_CALL(delegate, OnTouchFrame()); 168 EXPECT_CALL(delegate, OnTouchFrame());
201 EXPECT_CALL(delegate, 169 EXPECT_CALL(delegate,
202 OnTouchMotion(testing::_, testing::_, gfx::Point(5, 5))); 170 OnTouchMotion(testing::_, testing::_, gfx::Point(5, 5)));
203 EXPECT_CALL(delegate, OnTouchShape(testing::_, 1, 1)); 171 EXPECT_CALL(delegate, OnTouchShape(testing::_, 1, 1));
204 EXPECT_CALL(delegate, OnTouchFrame()); 172 EXPECT_CALL(delegate, OnTouchFrame());
205 EXPECT_CALL(delegate, 173 EXPECT_CALL(delegate,
206 OnTouchMotion(testing::_, testing::_, gfx::Point(10, 10))); 174 OnTouchMotion(testing::_, testing::_, gfx::Point(10, 10)));
207 EXPECT_CALL(delegate, OnTouchShape(testing::_, 20, 10)); 175 EXPECT_CALL(delegate, OnTouchShape(testing::_, 20, 10));
208 EXPECT_CALL(delegate, OnTouchFrame()); 176 EXPECT_CALL(delegate, OnTouchFrame());
209 EXPECT_CALL(delegate, OnTouchUp(testing::_, testing::_)); 177 EXPECT_CALL(delegate, OnTouchUp(testing::_, testing::_));
210 EXPECT_CALL(delegate, OnTouchFrame()); 178 EXPECT_CALL(delegate, OnTouchFrame());
211 } 179 }
212 generator.set_current_location( 180 generator.set_current_location(window.origin());
213 surface->window()->GetBoundsInScreen().origin());
214 generator.PressTouch(); 181 generator.PressTouch();
215 generator.MoveTouchBy(5, 5); 182 generator.MoveTouchBy(5, 5);
216 generator.SetTouchRadius(20, 10); 183 generator.SetTouchRadius(20, 10);
217 generator.MoveTouchBy(5, 5); 184 generator.MoveTouchBy(5, 5);
218 generator.ReleaseTouch(); 185 generator.ReleaseTouch();
219 EXPECT_CALL(delegate, OnTouchDestroying(touch.get())); 186 EXPECT_CALL(delegate, OnTouchDestroying(touch.get()));
220 touch.reset(); 187 touch.reset();
221 } 188 }
222 189
223 TEST_F(TouchTest, OnTouchCancel) { 190 TEST_F(TouchTest, OnTouchCancel) {
224 std::unique_ptr<Surface> surface(new Surface); 191 auto window = exo_test_helper()->CreateWindow(10, 10, false);
225 std::unique_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get()));
226 gfx::Size buffer_size(10, 10);
227 std::unique_ptr<Buffer> buffer(
228 new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size)));
229 surface->Attach(buffer.get());
230 surface->Commit();
231 192
232 MockTouchDelegate delegate; 193 MockTouchDelegate delegate;
233 std::unique_ptr<Touch> touch(new Touch(&delegate)); 194 std::unique_ptr<Touch> touch(new Touch(&delegate));
234 ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow()); 195 ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
235 196
236 EXPECT_CALL(delegate, OnTouchShape(testing::_, testing::_, testing::_)) 197 EXPECT_CALL(delegate, OnTouchShape(testing::_, testing::_, testing::_))
237 .Times(testing::AnyNumber()); 198 .Times(testing::AnyNumber());
238 EXPECT_CALL(delegate, CanAcceptTouchEventsForSurface(surface.get())) 199 EXPECT_CALL(delegate, CanAcceptTouchEventsForSurface(window.surface()))
239 .WillRepeatedly(testing::Return(true)); 200 .WillRepeatedly(testing::Return(true));
240 EXPECT_CALL(delegate, 201 EXPECT_CALL(delegate, OnTouchDown(window.surface(), testing::_, testing::_,
241 OnTouchDown(surface.get(), testing::_, testing::_, gfx::Point())) 202 gfx::Point()))
242 .Times(2); 203 .Times(2);
243 EXPECT_CALL(delegate, OnTouchFrame()).Times(2); 204 EXPECT_CALL(delegate, OnTouchFrame()).Times(2);
244 generator.set_current_location( 205 generator.set_current_location(window.origin());
245 surface->window()->GetBoundsInScreen().origin());
246 generator.PressTouchId(1); 206 generator.PressTouchId(1);
247 generator.PressTouchId(2); 207 generator.PressTouchId(2);
248 208
249 // One touch point being canceled is enough for OnTouchCancel to be called. 209 // One touch point being canceled is enough for OnTouchCancel to be called.
250 EXPECT_CALL(delegate, OnTouchCancel()); 210 EXPECT_CALL(delegate, OnTouchCancel());
251 EXPECT_CALL(delegate, OnTouchFrame()); 211 EXPECT_CALL(delegate, OnTouchFrame());
252 ui::TouchEvent cancel_event(ui::ET_TOUCH_CANCELLED, gfx::Point(), 1, 212 ui::TouchEvent cancel_event(ui::ET_TOUCH_CANCELLED, gfx::Point(), 1,
253 ui::EventTimeForNow()); 213 ui::EventTimeForNow());
254 generator.Dispatch(&cancel_event); 214 generator.Dispatch(&cancel_event);
255 215
256 EXPECT_CALL(delegate, OnTouchDestroying(touch.get())); 216 EXPECT_CALL(delegate, OnTouchDestroying(touch.get()));
257 touch.reset(); 217 touch.reset();
258 } 218 }
259 219
260 TEST_F(TouchTest, IgnoreTouchEventDuringModal) { 220 TEST_F(TouchTest, IgnoreTouchEventDuringModal) {
261 std::unique_ptr<Surface> surface(new Surface); 221 auto window = exo_test_helper()->CreateWindow(10, 10, false);
262 std::unique_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); 222 auto modal = exo_test_helper()->CreateWindow(5, 5, true);
263 std::unique_ptr<Buffer> buffer(
264 new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(gfx::Size(10, 10))));
265 surface->Attach(buffer.get());
266 surface->Commit();
267 gfx::Point location = surface->window()->GetBoundsInScreen().origin();
268 223
269 MockTouchDelegate delegate; 224 MockTouchDelegate delegate;
270 std::unique_ptr<Touch> touch(new Touch(&delegate)); 225 std::unique_ptr<Touch> touch(new Touch(&delegate));
271 ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow()); 226 ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
272 227
273 // Create surface for modal window. 228 // Make the window modal.
274 std::unique_ptr<Surface> surface2(new Surface); 229 modal.shell_surface()->SetSystemModal(true);
275 std::unique_ptr<ShellSurface> shell_surface2(
276 new ShellSurface(surface2.get(), nullptr, gfx::Rect(0, 0, 5, 5), true,
277 ash::kShellWindowId_SystemModalContainer));
278 std::unique_ptr<Buffer> buffer2(
279 new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(gfx::Size(5, 5))));
280 surface2->Attach(buffer2.get());
281 surface2->Commit();
282 ash::wm::CenterWindow(ash::WmWindowAura::Get(surface2->window()));
283 gfx::Point location2 = surface2->window()->GetBoundsInScreen().origin();
284 230
285 // Make the window modal.
286 shell_surface2->SetSystemModal(true);
287 EXPECT_TRUE(ash::WmShell::Get()->IsSystemModalWindowOpen()); 231 EXPECT_TRUE(ash::WmShell::Get()->IsSystemModalWindowOpen());
288
289 EXPECT_CALL(delegate, OnTouchShape(testing::_, testing::_, testing::_)) 232 EXPECT_CALL(delegate, OnTouchShape(testing::_, testing::_, testing::_))
290 .Times(testing::AnyNumber()); 233 .Times(testing::AnyNumber());
291 EXPECT_CALL(delegate, CanAcceptTouchEventsForSurface(surface.get())) 234 EXPECT_CALL(delegate, CanAcceptTouchEventsForSurface(window.surface()))
292 .WillRepeatedly(testing::Return(true)); 235 .WillRepeatedly(testing::Return(true));
293 EXPECT_CALL(delegate, CanAcceptTouchEventsForSurface(surface2.get())) 236 EXPECT_CALL(delegate, CanAcceptTouchEventsForSurface(modal.surface()))
294 .WillRepeatedly(testing::Return(true)); 237 .WillRepeatedly(testing::Return(true));
295 238
296 // Check if touch events on modal window are registered. 239 // Check if touch events on modal window are registered.
297 { 240 {
298 testing::InSequence sequence; 241 testing::InSequence sequence;
299 EXPECT_CALL(delegate, OnTouchDown(surface2.get(), testing::_, testing::_, 242 EXPECT_CALL(delegate, OnTouchDown(modal.surface(), testing::_, testing::_,
300 gfx::Point())); 243 gfx::Point()));
301 EXPECT_CALL(delegate, OnTouchFrame()); 244 EXPECT_CALL(delegate, OnTouchFrame());
302 EXPECT_CALL(delegate, 245 EXPECT_CALL(delegate,
303 OnTouchMotion(testing::_, testing::_, gfx::Point(1, 1))); 246 OnTouchMotion(testing::_, testing::_, gfx::Point(1, 1)));
304 EXPECT_CALL(delegate, OnTouchFrame()); 247 EXPECT_CALL(delegate, OnTouchFrame());
305 EXPECT_CALL(delegate, OnTouchUp(testing::_, testing::_)); 248 EXPECT_CALL(delegate, OnTouchUp(testing::_, testing::_));
306 EXPECT_CALL(delegate, OnTouchFrame()); 249 EXPECT_CALL(delegate, OnTouchFrame());
307 } 250 }
308 generator.set_current_location(location2); 251 generator.set_current_location(modal.origin());
309 generator.PressMoveAndReleaseTouchBy(1, 1); 252 generator.PressMoveAndReleaseTouchBy(1, 1);
310 253
311 // Check if touch events on non-modal window are ignored. 254 // Check if touch events on non-modal window are ignored.
312 { 255 {
313 testing::InSequence sequence; 256 testing::InSequence sequence;
314 EXPECT_CALL(delegate, OnTouchDown(surface.get(), testing::_, testing::_, 257 EXPECT_CALL(delegate, OnTouchDown(window.surface(), testing::_, testing::_,
315 gfx::Point())) 258 gfx::Point()))
316 .Times(0); 259 .Times(0);
317 EXPECT_CALL(delegate, 260 EXPECT_CALL(delegate,
318 OnTouchMotion(testing::_, testing::_, gfx::Point(1, 1))) 261 OnTouchMotion(testing::_, testing::_, gfx::Point(1, 1)))
319 .Times(0); 262 .Times(0);
320 EXPECT_CALL(delegate, OnTouchUp(testing::_, testing::_)).Times(0); 263 EXPECT_CALL(delegate, OnTouchUp(testing::_, testing::_)).Times(0);
321 EXPECT_CALL(delegate, OnTouchFrame()).Times(0); 264 EXPECT_CALL(delegate, OnTouchFrame()).Times(0);
322 } 265 }
323 generator.set_current_location(location); 266 generator.set_current_location(window.origin());
324 generator.PressMoveAndReleaseTouchBy(1, 1); 267 generator.PressMoveAndReleaseTouchBy(1, 1);
325 268
326 // Make the window non-modal. 269 // Make the window non-modal.
327 shell_surface2->SetSystemModal(false); 270 modal.shell_surface()->SetSystemModal(false);
328 EXPECT_FALSE(ash::WmShell::Get()->IsSystemModalWindowOpen()); 271 EXPECT_FALSE(ash::WmShell::Get()->IsSystemModalWindowOpen());
329 272
330 // Check if touch events on non-modal window are registered. 273 // Check if touch events on non-modal window are registered.
331 { 274 {
332 testing::InSequence sequence; 275 testing::InSequence sequence;
333 EXPECT_CALL(delegate, OnTouchDown(surface.get(), testing::_, testing::_, 276 EXPECT_CALL(delegate, OnTouchDown(window.surface(), testing::_, testing::_,
334 gfx::Point())); 277 gfx::Point()));
335 EXPECT_CALL(delegate, OnTouchFrame()); 278 EXPECT_CALL(delegate, OnTouchFrame());
336 EXPECT_CALL(delegate, 279 EXPECT_CALL(delegate,
337 OnTouchMotion(testing::_, testing::_, gfx::Point(1, 1))); 280 OnTouchMotion(testing::_, testing::_, gfx::Point(1, 1)));
338 EXPECT_CALL(delegate, OnTouchFrame()); 281 EXPECT_CALL(delegate, OnTouchFrame());
339 EXPECT_CALL(delegate, OnTouchUp(testing::_, testing::_)); 282 EXPECT_CALL(delegate, OnTouchUp(testing::_, testing::_));
340 EXPECT_CALL(delegate, OnTouchFrame()); 283 EXPECT_CALL(delegate, OnTouchFrame());
341 } 284 }
342 generator.set_current_location(location); 285 generator.set_current_location(window.origin());
343 generator.PressMoveAndReleaseTouchBy(1, 1); 286 generator.PressMoveAndReleaseTouchBy(1, 1);
344 287
345 EXPECT_CALL(delegate, OnTouchDestroying(touch.get())); 288 EXPECT_CALL(delegate, OnTouchDestroying(touch.get()));
346 touch.reset(); 289 touch.reset();
347 } 290 }
348 291
292 TEST_F(TouchTest, OnTouchTool) {
293 auto window = exo_test_helper()->CreateWindow(10, 10, false);
294
295 MockTouchDelegate delegate;
296 MockTouchStylusDelegate stylus_delegate;
297 std::unique_ptr<Touch> touch(new Touch(&delegate));
298 ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
299 touch->SetStylusDelegate(&stylus_delegate);
300
301 EXPECT_CALL(delegate, OnTouchShape(testing::_, testing::_, testing::_))
302 .Times(testing::AnyNumber());
303 EXPECT_CALL(delegate, CanAcceptTouchEventsForSurface(window.surface()))
304 .WillRepeatedly(testing::Return(true));
305
306 // Expect tool change to happen before frame of down event.
307 {
308 testing::InSequence sequence;
309 EXPECT_CALL(delegate, OnTouchDown(window.surface(), testing::_, testing::_,
310 gfx::Point()));
311 EXPECT_CALL(stylus_delegate,
312 OnTouchTool(0, ui::EventPointerType::POINTER_TYPE_PEN));
313 EXPECT_CALL(delegate, OnTouchFrame());
314 EXPECT_CALL(delegate, OnTouchUp(testing::_, testing::_));
315 EXPECT_CALL(delegate, OnTouchFrame());
316 }
317 generator.set_current_location(window.origin());
318 generator.SetTouchPointerType(ui::EventPointerType::POINTER_TYPE_PEN);
319 generator.PressTouch();
320 generator.ReleaseTouch();
321
322 EXPECT_CALL(delegate, OnTouchDestroying(touch.get()));
323 touch.reset();
324 }
325
326 TEST_F(TouchTest, OnTouchForce) {
327 auto window = exo_test_helper()->CreateWindow(10, 10, false);
328
329 MockTouchDelegate delegate;
330 MockTouchStylusDelegate stylus_delegate;
331 std::unique_ptr<Touch> touch(new Touch(&delegate));
332 ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
333 touch->SetStylusDelegate(&stylus_delegate);
334
335 EXPECT_CALL(delegate, OnTouchShape(testing::_, testing::_, testing::_))
336 .Times(testing::AnyNumber());
337 EXPECT_CALL(delegate, CanAcceptTouchEventsForSurface(window.surface()))
338 .WillRepeatedly(testing::Return(true));
339
340 // Expect tool change to happen before frame of down event.
341 {
342 testing::InSequence sequence;
343 EXPECT_CALL(delegate, OnTouchDown(window.surface(), testing::_, testing::_,
344 gfx::Point()));
345 EXPECT_CALL(stylus_delegate,
346 OnTouchTool(0, ui::EventPointerType::POINTER_TYPE_PEN));
347 EXPECT_CALL(stylus_delegate, OnTouchForce(testing::_, 0, 1.0));
348 EXPECT_CALL(delegate, OnTouchFrame());
349 EXPECT_CALL(delegate, OnTouchUp(testing::_, testing::_));
350 EXPECT_CALL(delegate, OnTouchFrame());
351 }
352 generator.set_current_location(window.origin());
353 generator.SetTouchPointerType(ui::EventPointerType::POINTER_TYPE_PEN);
354 generator.SetTouchForce(1.0);
355 generator.PressTouch();
356 generator.ReleaseTouch();
357
358 EXPECT_CALL(delegate, OnTouchDestroying(touch.get()));
359 touch.reset();
360 }
361
362 TEST_F(TouchTest, OnTouchTilt) {
363 auto window = exo_test_helper()->CreateWindow(10, 10, false);
364
365 MockTouchDelegate delegate;
366 MockTouchStylusDelegate stylus_delegate;
367 std::unique_ptr<Touch> touch(new Touch(&delegate));
368 ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
369 touch->SetStylusDelegate(&stylus_delegate);
370
371 EXPECT_CALL(delegate, OnTouchShape(testing::_, testing::_, testing::_))
372 .Times(testing::AnyNumber());
373 EXPECT_CALL(delegate, CanAcceptTouchEventsForSurface(window.surface()))
374 .WillRepeatedly(testing::Return(true));
375
376 // Expect tool change to happen before frame of down event.
377 {
378 testing::InSequence sequence;
379 EXPECT_CALL(delegate, OnTouchDown(window.surface(), testing::_, testing::_,
380 gfx::Point()));
381 EXPECT_CALL(stylus_delegate,
382 OnTouchTool(0, ui::EventPointerType::POINTER_TYPE_PEN));
383 EXPECT_CALL(stylus_delegate,
384 OnTouchTilt(testing::_, 0, gfx::Vector2dF(1.0, 2.0)));
385 EXPECT_CALL(delegate, OnTouchFrame());
386 EXPECT_CALL(delegate, OnTouchUp(testing::_, testing::_));
387 EXPECT_CALL(delegate, OnTouchFrame());
388 }
389 generator.set_current_location(window.origin());
390 generator.SetTouchPointerType(ui::EventPointerType::POINTER_TYPE_PEN);
391 generator.SetTouchTilt(1.0, 2.0);
392 generator.PressTouch();
393 generator.ReleaseTouch();
394
395 EXPECT_CALL(delegate, OnTouchDestroying(touch.get()));
396 touch.reset();
397 }
398
349 } // namespace 399 } // namespace
350 } // namespace exo 400 } // namespace exo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698