OLD | NEW |
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 "remoting/host/touch_injector_win.h" | 5 #include "remoting/host/touch_injector_win.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <map> | 10 #include <map> |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
81 MOCK_METHOD2(InitializeTouchInjection, BOOL(UINT32 max_count, DWORD dw_mode)); | 81 MOCK_METHOD2(InitializeTouchInjection, BOOL(UINT32 max_count, DWORD dw_mode)); |
82 MOCK_METHOD2(InjectTouchInput, | 82 MOCK_METHOD2(InjectTouchInput, |
83 DWORD(UINT32 count, const POINTER_TOUCH_INFO* contacts)); | 83 DWORD(UINT32 count, const POINTER_TOUCH_INFO* contacts)); |
84 }; | 84 }; |
85 | 85 |
86 } // namespace | 86 } // namespace |
87 | 87 |
88 // A test to make sure that the touch event is converted correctly to | 88 // A test to make sure that the touch event is converted correctly to |
89 // POINTER_TOUCH_INFO. | 89 // POINTER_TOUCH_INFO. |
90 TEST(TouchInjectorWinTest, CheckConversionWithPressure) { | 90 TEST(TouchInjectorWinTest, CheckConversionWithPressure) { |
91 scoped_ptr<TouchInjectorWinDelegateMock> delegate_mock( | 91 std::unique_ptr<TouchInjectorWinDelegateMock> delegate_mock( |
92 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); | 92 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); |
93 | 93 |
94 TouchEvent event; | 94 TouchEvent event; |
95 event.set_event_type(TouchEvent::TOUCH_POINT_START); | 95 event.set_event_type(TouchEvent::TOUCH_POINT_START); |
96 TouchEventPoint* point = event.add_touch_points(); | 96 TouchEventPoint* point = event.add_touch_points(); |
97 point->set_id(1234u); | 97 point->set_id(1234u); |
98 point->set_x(321.0f); | 98 point->set_x(321.0f); |
99 point->set_y(123.0f); | 99 point->set_y(123.0f); |
100 point->set_radius_x(10.0f); | 100 point->set_radius_x(10.0f); |
101 point->set_radius_y(20.0f); | 101 point->set_radius_y(20.0f); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
149 point->set_pressure(2.0f); | 149 point->set_pressure(2.0f); |
150 injector.InjectTouchEvent(event); | 150 injector.InjectTouchEvent(event); |
151 | 151 |
152 point->set_pressure(-3.0f); | 152 point->set_pressure(-3.0f); |
153 injector.InjectTouchEvent(event); | 153 injector.InjectTouchEvent(event); |
154 } | 154 } |
155 | 155 |
156 // Some devices don't detect pressure. This test is a conversion check for | 156 // Some devices don't detect pressure. This test is a conversion check for |
157 // such devices. | 157 // such devices. |
158 TEST(TouchInjectorWinTest, CheckConversionNoPressure) { | 158 TEST(TouchInjectorWinTest, CheckConversionNoPressure) { |
159 scoped_ptr<TouchInjectorWinDelegateMock> delegate_mock( | 159 std::unique_ptr<TouchInjectorWinDelegateMock> delegate_mock( |
160 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); | 160 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); |
161 | 161 |
162 TouchEvent event; | 162 TouchEvent event; |
163 event.set_event_type(TouchEvent::TOUCH_POINT_START); | 163 event.set_event_type(TouchEvent::TOUCH_POINT_START); |
164 TouchEventPoint* point = event.add_touch_points(); | 164 TouchEventPoint* point = event.add_touch_points(); |
165 point->set_id(1234u); | 165 point->set_id(1234u); |
166 point->set_x(321.0f); | 166 point->set_x(321.0f); |
167 point->set_y(123.0f); | 167 point->set_y(123.0f); |
168 point->set_radius_x(10.0f); | 168 point->set_radius_x(10.0f); |
169 point->set_radius_y(20.0f); | 169 point->set_radius_y(20.0f); |
(...skipping 24 matching lines...) Expand all Loading... |
194 .WillOnce(Return(1)); | 194 .WillOnce(Return(1)); |
195 | 195 |
196 TouchInjectorWin injector; | 196 TouchInjectorWin injector; |
197 injector.SetInjectorDelegateForTest(std::move(delegate_mock)); | 197 injector.SetInjectorDelegateForTest(std::move(delegate_mock)); |
198 EXPECT_TRUE(injector.Init()); | 198 EXPECT_TRUE(injector.Init()); |
199 injector.InjectTouchEvent(event); | 199 injector.InjectTouchEvent(event); |
200 } | 200 } |
201 | 201 |
202 // If initialization fails, it should not call any touch injection functions. | 202 // If initialization fails, it should not call any touch injection functions. |
203 TEST(TouchInjectorWinTest, InitFailed) { | 203 TEST(TouchInjectorWinTest, InitFailed) { |
204 scoped_ptr<TouchInjectorWinDelegateMock> delegate_mock( | 204 std::unique_ptr<TouchInjectorWinDelegateMock> delegate_mock( |
205 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); | 205 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); |
206 | 206 |
207 TouchEvent event; | 207 TouchEvent event; |
208 event.set_event_type(TouchEvent::TOUCH_POINT_START); | 208 event.set_event_type(TouchEvent::TOUCH_POINT_START); |
209 | 209 |
210 InSequence s; | 210 InSequence s; |
211 EXPECT_CALL(*delegate_mock, InitializeTouchInjection(_, _)) | 211 EXPECT_CALL(*delegate_mock, InitializeTouchInjection(_, _)) |
212 .WillOnce(Return(0)); | 212 .WillOnce(Return(0)); |
213 EXPECT_CALL(*delegate_mock, InjectTouchInput(_, _)).Times(0); | 213 EXPECT_CALL(*delegate_mock, InjectTouchInput(_, _)).Times(0); |
214 | 214 |
215 TouchInjectorWin injector; | 215 TouchInjectorWin injector; |
216 injector.SetInjectorDelegateForTest(std::move(delegate_mock)); | 216 injector.SetInjectorDelegateForTest(std::move(delegate_mock)); |
217 EXPECT_FALSE(injector.Init()); | 217 EXPECT_FALSE(injector.Init()); |
218 injector.InjectTouchEvent(event); | 218 injector.InjectTouchEvent(event); |
219 } | 219 } |
220 | 220 |
221 // Deinitialize and initialize should clean the state. | 221 // Deinitialize and initialize should clean the state. |
222 TEST(TouchInjectorWinTest, Reinitialize) { | 222 TEST(TouchInjectorWinTest, Reinitialize) { |
223 scoped_ptr<TouchInjectorWinDelegateMock> delegate_mock_before_deinitialize( | 223 std::unique_ptr<TouchInjectorWinDelegateMock> |
224 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); | 224 delegate_mock_before_deinitialize( |
225 scoped_ptr<TouchInjectorWinDelegateMock> delegate_mock_after_deinitialize( | 225 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); |
226 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); | 226 std::unique_ptr<TouchInjectorWinDelegateMock> |
| 227 delegate_mock_after_deinitialize( |
| 228 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); |
227 | 229 |
228 TouchEvent first_event; | 230 TouchEvent first_event; |
229 first_event.set_event_type(TouchEvent::TOUCH_POINT_START); | 231 first_event.set_event_type(TouchEvent::TOUCH_POINT_START); |
230 TouchEventPoint* point0 = first_event.add_touch_points(); | 232 TouchEventPoint* point0 = first_event.add_touch_points(); |
231 point0->set_id(0u); | 233 point0->set_id(0u); |
232 | 234 |
233 TouchEvent second_event; | 235 TouchEvent second_event; |
234 second_event.set_event_type(TouchEvent::TOUCH_POINT_START); | 236 second_event.set_event_type(TouchEvent::TOUCH_POINT_START); |
235 TouchEventPoint* point1 = second_event.add_touch_points(); | 237 TouchEventPoint* point1 = second_event.add_touch_points(); |
236 point1->set_id(1u); | 238 point1->set_id(1u); |
(...skipping 30 matching lines...) Expand all Loading... |
267 injector.Deinitialize(); | 269 injector.Deinitialize(); |
268 | 270 |
269 injector.SetInjectorDelegateForTest( | 271 injector.SetInjectorDelegateForTest( |
270 std::move(delegate_mock_after_deinitialize)); | 272 std::move(delegate_mock_after_deinitialize)); |
271 EXPECT_TRUE(injector.Init()); | 273 EXPECT_TRUE(injector.Init()); |
272 injector.InjectTouchEvent(second_event); | 274 injector.InjectTouchEvent(second_event); |
273 } | 275 } |
274 | 276 |
275 // Make sure that the flag is set to kStartFlag. | 277 // Make sure that the flag is set to kStartFlag. |
276 TEST(TouchInjectorWinTest, StartTouchPoint) { | 278 TEST(TouchInjectorWinTest, StartTouchPoint) { |
277 scoped_ptr<TouchInjectorWinDelegateMock> delegate_mock( | 279 std::unique_ptr<TouchInjectorWinDelegateMock> delegate_mock( |
278 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); | 280 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); |
279 | 281 |
280 TouchEvent event; | 282 TouchEvent event; |
281 event.set_event_type(TouchEvent::TOUCH_POINT_START); | 283 event.set_event_type(TouchEvent::TOUCH_POINT_START); |
282 TouchEventPoint* point = event.add_touch_points(); | 284 TouchEventPoint* point = event.add_touch_points(); |
283 point->set_id(0u); | 285 point->set_id(0u); |
284 | 286 |
285 InSequence s; | 287 InSequence s; |
286 EXPECT_CALL(*delegate_mock, InitializeTouchInjection(_, _)) | 288 EXPECT_CALL(*delegate_mock, InitializeTouchInjection(_, _)) |
287 .WillOnce(Return(1)); | 289 .WillOnce(Return(1)); |
288 | 290 |
289 IdFlagMap id_to_flags; | 291 IdFlagMap id_to_flags; |
290 id_to_flags[0u] = kStartFlag; | 292 id_to_flags[0u] = kStartFlag; |
291 EXPECT_CALL( | 293 EXPECT_CALL( |
292 *delegate_mock, | 294 *delegate_mock, |
293 InjectTouchInput(1, EqualsPointerTouchInfoFlag(id_to_flags))) | 295 InjectTouchInput(1, EqualsPointerTouchInfoFlag(id_to_flags))) |
294 .WillOnce(Return(1)); | 296 .WillOnce(Return(1)); |
295 | 297 |
296 TouchInjectorWin injector; | 298 TouchInjectorWin injector; |
297 injector.SetInjectorDelegateForTest(std::move(delegate_mock)); | 299 injector.SetInjectorDelegateForTest(std::move(delegate_mock)); |
298 EXPECT_TRUE(injector.Init()); | 300 EXPECT_TRUE(injector.Init()); |
299 injector.InjectTouchEvent(event); | 301 injector.InjectTouchEvent(event); |
300 } | 302 } |
301 | 303 |
302 // Start a point and then move, make sure the flag is set to kMoveFlag. | 304 // Start a point and then move, make sure the flag is set to kMoveFlag. |
303 TEST(TouchInjectorWinTest, MoveTouchPoint) { | 305 TEST(TouchInjectorWinTest, MoveTouchPoint) { |
304 scoped_ptr<TouchInjectorWinDelegateMock> delegate_mock( | 306 std::unique_ptr<TouchInjectorWinDelegateMock> delegate_mock( |
305 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); | 307 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); |
306 | 308 |
307 TouchEvent event; | 309 TouchEvent event; |
308 event.set_event_type(TouchEvent::TOUCH_POINT_START); | 310 event.set_event_type(TouchEvent::TOUCH_POINT_START); |
309 TouchEventPoint* point = event.add_touch_points(); | 311 TouchEventPoint* point = event.add_touch_points(); |
310 point->set_id(0u); | 312 point->set_id(0u); |
311 | 313 |
312 | 314 |
313 InSequence s; | 315 InSequence s; |
314 EXPECT_CALL(*delegate_mock, InitializeTouchInjection(_, _)) | 316 EXPECT_CALL(*delegate_mock, InitializeTouchInjection(_, _)) |
(...skipping 15 matching lines...) Expand all Loading... |
330 TouchInjectorWin injector; | 332 TouchInjectorWin injector; |
331 injector.SetInjectorDelegateForTest(std::move(delegate_mock)); | 333 injector.SetInjectorDelegateForTest(std::move(delegate_mock)); |
332 EXPECT_TRUE(injector.Init()); | 334 EXPECT_TRUE(injector.Init()); |
333 injector.InjectTouchEvent(event); | 335 injector.InjectTouchEvent(event); |
334 event.set_event_type(TouchEvent::TOUCH_POINT_MOVE); | 336 event.set_event_type(TouchEvent::TOUCH_POINT_MOVE); |
335 injector.InjectTouchEvent(event); | 337 injector.InjectTouchEvent(event); |
336 } | 338 } |
337 | 339 |
338 // Start a point and then move, make sure the flag is set to kEndFlag. | 340 // Start a point and then move, make sure the flag is set to kEndFlag. |
339 TEST(TouchInjectorWinTest, EndTouchPoint) { | 341 TEST(TouchInjectorWinTest, EndTouchPoint) { |
340 scoped_ptr<TouchInjectorWinDelegateMock> delegate_mock( | 342 std::unique_ptr<TouchInjectorWinDelegateMock> delegate_mock( |
341 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); | 343 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); |
342 | 344 |
343 TouchEvent event; | 345 TouchEvent event; |
344 event.set_event_type(TouchEvent::TOUCH_POINT_START); | 346 event.set_event_type(TouchEvent::TOUCH_POINT_START); |
345 TouchEventPoint* point = event.add_touch_points(); | 347 TouchEventPoint* point = event.add_touch_points(); |
346 point->set_id(0u); | 348 point->set_id(0u); |
347 | 349 |
348 InSequence s; | 350 InSequence s; |
349 EXPECT_CALL(*delegate_mock, InitializeTouchInjection(_, _)) | 351 EXPECT_CALL(*delegate_mock, InitializeTouchInjection(_, _)) |
350 .WillOnce(Return(1)); | 352 .WillOnce(Return(1)); |
(...skipping 14 matching lines...) Expand all Loading... |
365 TouchInjectorWin injector; | 367 TouchInjectorWin injector; |
366 injector.SetInjectorDelegateForTest(std::move(delegate_mock)); | 368 injector.SetInjectorDelegateForTest(std::move(delegate_mock)); |
367 EXPECT_TRUE(injector.Init()); | 369 EXPECT_TRUE(injector.Init()); |
368 injector.InjectTouchEvent(event); | 370 injector.InjectTouchEvent(event); |
369 event.set_event_type(TouchEvent::TOUCH_POINT_END); | 371 event.set_event_type(TouchEvent::TOUCH_POINT_END); |
370 injector.InjectTouchEvent(event); | 372 injector.InjectTouchEvent(event); |
371 } | 373 } |
372 | 374 |
373 // Start a point and then move, make sure the flag is set to kCancelFlag. | 375 // Start a point and then move, make sure the flag is set to kCancelFlag. |
374 TEST(TouchInjectorWinTest, CancelTouchPoint) { | 376 TEST(TouchInjectorWinTest, CancelTouchPoint) { |
375 scoped_ptr<TouchInjectorWinDelegateMock> delegate_mock( | 377 std::unique_ptr<TouchInjectorWinDelegateMock> delegate_mock( |
376 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); | 378 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); |
377 | 379 |
378 TouchEvent event; | 380 TouchEvent event; |
379 event.set_event_type(TouchEvent::TOUCH_POINT_START); | 381 event.set_event_type(TouchEvent::TOUCH_POINT_START); |
380 TouchEventPoint* point = event.add_touch_points(); | 382 TouchEventPoint* point = event.add_touch_points(); |
381 point->set_id(0u); | 383 point->set_id(0u); |
382 | 384 |
383 InSequence s; | 385 InSequence s; |
384 EXPECT_CALL(*delegate_mock, InitializeTouchInjection(_, _)) | 386 EXPECT_CALL(*delegate_mock, InitializeTouchInjection(_, _)) |
385 .WillOnce(Return(1)); | 387 .WillOnce(Return(1)); |
(...skipping 21 matching lines...) Expand all Loading... |
407 | 409 |
408 // Note that points that haven't changed should be injected as MOVE. | 410 // Note that points that haven't changed should be injected as MOVE. |
409 // This tests: | 411 // This tests: |
410 // 1. Start first touch point. | 412 // 1. Start first touch point. |
411 // 2. Start second touch point. | 413 // 2. Start second touch point. |
412 // 3. Move both touch points. | 414 // 3. Move both touch points. |
413 // 4. Start third touch point. | 415 // 4. Start third touch point. |
414 // 5. End second touch point. | 416 // 5. End second touch point. |
415 // 6. Cancel remaining (first and third) touch points. | 417 // 6. Cancel remaining (first and third) touch points. |
416 TEST(TouchInjectorWinTest, MultiTouch) { | 418 TEST(TouchInjectorWinTest, MultiTouch) { |
417 scoped_ptr<TouchInjectorWinDelegateMock> delegate_mock( | 419 std::unique_ptr<TouchInjectorWinDelegateMock> delegate_mock( |
418 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); | 420 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); |
419 | 421 |
420 InSequence s; | 422 InSequence s; |
421 EXPECT_CALL(*delegate_mock, InitializeTouchInjection(_, _)) | 423 EXPECT_CALL(*delegate_mock, InitializeTouchInjection(_, _)) |
422 .WillOnce(Return(1)); | 424 .WillOnce(Return(1)); |
423 | 425 |
424 IdFlagMap id_to_flags; | 426 IdFlagMap id_to_flags; |
425 id_to_flags[0u] = kStartFlag; | 427 id_to_flags[0u] = kStartFlag; |
426 EXPECT_CALL( | 428 EXPECT_CALL( |
427 *delegate_mock, | 429 *delegate_mock, |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
511 TouchEvent cancel_rest; | 513 TouchEvent cancel_rest; |
512 cancel_rest.set_event_type(TouchEvent::TOUCH_POINT_CANCEL); | 514 cancel_rest.set_event_type(TouchEvent::TOUCH_POINT_CANCEL); |
513 point0 = cancel_rest.add_touch_points(); | 515 point0 = cancel_rest.add_touch_points(); |
514 point0->set_id(0u); | 516 point0->set_id(0u); |
515 point2 = cancel_rest.add_touch_points(); | 517 point2 = cancel_rest.add_touch_points(); |
516 point2->set_id(2u); | 518 point2->set_id(2u); |
517 injector.InjectTouchEvent(cancel_rest); | 519 injector.InjectTouchEvent(cancel_rest); |
518 } | 520 } |
519 | 521 |
520 } // namespace remoting | 522 } // namespace remoting |
OLD | NEW |