| 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 |