OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <linux/input.h> | 5 #include <linux/input.h> |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/memory/scoped_vector.h" | 9 #include "base/memory/scoped_vector.h" |
10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
120 DCHECK(ev->IsKeyEvent()); | 120 DCHECK(ev->IsKeyEvent()); |
121 return static_cast<ui::KeyEvent*>(ev); | 121 return static_cast<ui::KeyEvent*>(ev); |
122 } | 122 } |
123 ui::MouseEvent* dispatched_mouse_event(unsigned index) { | 123 ui::MouseEvent* dispatched_mouse_event(unsigned index) { |
124 DCHECK_GT(dispatched_events_.size(), index); | 124 DCHECK_GT(dispatched_events_.size(), index); |
125 ui::Event* ev = dispatched_events_[index]; | 125 ui::Event* ev = dispatched_events_[index]; |
126 DCHECK(ev->IsMouseEvent()); | 126 DCHECK(ev->IsMouseEvent()); |
127 return static_cast<ui::MouseEvent*>(ev); | 127 return static_cast<ui::MouseEvent*>(ev); |
128 } | 128 } |
129 | 129 |
| 130 void DestroyDevice() { device_.reset(); } |
| 131 |
130 private: | 132 private: |
131 void DispatchEventForTest(ui::Event* event) { | 133 void DispatchEventForTest(ui::Event* event) { |
132 scoped_ptr<ui::Event> cloned_event = ui::Event::Clone(*event); | 134 scoped_ptr<ui::Event> cloned_event = ui::Event::Clone(*event); |
133 dispatched_events_.push_back(cloned_event.release()); | 135 dispatched_events_.push_back(cloned_event.release()); |
134 } | 136 } |
135 | 137 |
136 base::MessageLoopForUI ui_loop_; | 138 base::MessageLoopForUI ui_loop_; |
137 | 139 |
138 scoped_ptr<ui::MockCursorEvdev> cursor_; | 140 scoped_ptr<ui::MockCursorEvdev> cursor_; |
139 scoped_ptr<ui::DeviceManager> device_manager_; | 141 scoped_ptr<ui::DeviceManager> device_manager_; |
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
413 {{0, 0}, EV_KEY, BTN_TOUCH, 1}, | 415 {{0, 0}, EV_KEY, BTN_TOUCH, 1}, |
414 {{0, 0}, EV_SYN, SYN_REPORT, 0}, | 416 {{0, 0}, EV_SYN, SYN_REPORT, 0}, |
415 | 417 |
416 {{0, 0}, EV_KEY, BTN_TOUCH, 0}, | 418 {{0, 0}, EV_KEY, BTN_TOUCH, 0}, |
417 {{0, 0}, EV_SYN, SYN_REPORT, 0}, | 419 {{0, 0}, EV_SYN, SYN_REPORT, 0}, |
418 }; | 420 }; |
419 | 421 |
420 dev->ProcessEvents(mock_kernel_queue, arraysize(mock_kernel_queue)); | 422 dev->ProcessEvents(mock_kernel_queue, arraysize(mock_kernel_queue)); |
421 EXPECT_EQ(0u, size()); | 423 EXPECT_EQ(0u, size()); |
422 } | 424 } |
| 425 |
| 426 TEST_F(EventConverterEvdevImplTest, ShouldReleaseKeysOnUnplug) { |
| 427 ui::MockEventConverterEvdevImpl* dev = device(); |
| 428 |
| 429 struct input_event mock_kernel_queue[] = { |
| 430 {{0, 0}, EV_KEY, KEY_A, 1}, |
| 431 {{0, 0}, EV_SYN, SYN_REPORT, 0}, |
| 432 }; |
| 433 |
| 434 dev->ProcessEvents(mock_kernel_queue, arraysize(mock_kernel_queue)); |
| 435 EXPECT_EQ(1u, size()); |
| 436 |
| 437 DestroyDevice(); |
| 438 EXPECT_EQ(2u, size()); |
| 439 |
| 440 ui::KeyEvent* event = dispatched_event(0); |
| 441 EXPECT_EQ(ui::ET_KEY_PRESSED, event->type()); |
| 442 EXPECT_EQ(ui::VKEY_A, event->key_code()); |
| 443 |
| 444 event = dispatched_event(1); |
| 445 EXPECT_EQ(ui::ET_KEY_RELEASED, event->type()); |
| 446 EXPECT_EQ(ui::VKEY_A, event->key_code()); |
| 447 } |
| 448 |
| 449 TEST_F(EventConverterEvdevImplTest, ShouldReleaseKeysOnSynDropped) { |
| 450 ui::MockEventConverterEvdevImpl* dev = device(); |
| 451 |
| 452 struct input_event mock_kernel_queue[] = { |
| 453 {{0, 0}, EV_KEY, KEY_A, 1}, |
| 454 {{0, 0}, EV_SYN, SYN_REPORT, 0}, |
| 455 |
| 456 {{0, 0}, EV_SYN, SYN_DROPPED, 0}, |
| 457 }; |
| 458 |
| 459 dev->ProcessEvents(mock_kernel_queue, arraysize(mock_kernel_queue)); |
| 460 EXPECT_EQ(2u, size()); |
| 461 |
| 462 ui::KeyEvent* event = dispatched_event(0); |
| 463 EXPECT_EQ(ui::ET_KEY_PRESSED, event->type()); |
| 464 EXPECT_EQ(ui::VKEY_A, event->key_code()); |
| 465 |
| 466 event = dispatched_event(1); |
| 467 EXPECT_EQ(ui::ET_KEY_RELEASED, event->type()); |
| 468 EXPECT_EQ(ui::VKEY_A, event->key_code()); |
| 469 } |
OLD | NEW |