Chromium Code Reviews| Index: ui/events/x/events_x_unittest.cc |
| diff --git a/ui/events/x/events_x_unittest.cc b/ui/events/x/events_x_unittest.cc |
| index 7517e408e17206e59b444b4fa7b2bfea6ca77f40..4032015a3d1b4a56fae4af1dbb71ebe8cbacd33d 100644 |
| --- a/ui/events/x/events_x_unittest.cc |
| +++ b/ui/events/x/events_x_unittest.cc |
| @@ -289,6 +289,66 @@ TEST_F(EventsXTest, TouchEventBasic) { |
| EXPECT_FLOAT_EQ(GetTouchAngle(scoped_xevent), 0.45f); |
| EXPECT_FLOAT_EQ(GetTouchForce(scoped_xevent), 0.5f); |
| } |
| + |
| +int GetTouchIdForTrackingId(uint32 tracking_id) { |
| + int slot = 0; |
| + bool success = |
| + TouchFactory::GetInstance()->QuerySlotForTrackingID(tracking_id, &slot); |
| + if (success) |
| + return slot; |
| + return -1; |
| +} |
| + |
| +TEST_F(EventsXTest, TouchEventIdRefcounting) { |
| + std::vector<unsigned int> devices; |
| + devices.push_back(0); |
| + ui::SetUpTouchDevicesForTest(devices); |
| + std::vector<Valuator> valuators; |
| + |
| + ui::ScopedXI2Event scoped_xevent0; |
| + ui::ScopedXI2Event scoped_xevent1; |
| + ui::ScopedXI2Event scoped_xevent2; |
| + |
| + const int kTrackingId0 = 5; |
| + const int kTrackingId1 = 7; |
| + |
| + // Increment ref count once for first touch. |
| + scoped_xevent0.InitTouchEvent( |
| + 0, XI_TouchBegin, kTrackingId0, gfx::Point(10, 10), valuators); |
| + GetTouchId(scoped_xevent0); |
| + IncrementTouchIdRefCount(scoped_xevent0); |
|
sadrul
2014/07/22 21:23:20
Instead of calling GetTouchId()/IncrementTouchIdRe
tdresser
2014/07/23 15:15:50
Done.
|
| + EXPECT_EQ(0, GetTouchIdForTrackingId(kTrackingId0)); |
| + |
| + // Increment ref count 4 times for second touch. |
| + scoped_xevent1.InitTouchEvent( |
| + 0, XI_TouchBegin, kTrackingId1, gfx::Point(10, 10), valuators); |
| + |
| + for (int i = 0; i < 4; ++i) { |
| + GetTouchId(scoped_xevent1); |
| + IncrementTouchIdRefCount(scoped_xevent1); |
| + EXPECT_EQ(1, GetTouchIdForTrackingId(kTrackingId1)); |
| + } |
| + |
| + // Decrement ref count 3 times for second touch. |
| + scoped_xevent1.InitTouchEvent( |
| + 0, XI_TouchEnd, kTrackingId1, gfx::Point(10, 10), valuators); |
| + |
| + for (int i = 0; i < 3; ++i) { |
| + ClearTouchIdIfReleased(scoped_xevent1); |
| + EXPECT_EQ(1, GetTouchIdForTrackingId(kTrackingId1)); |
| + } |
| + |
| + // This should clear the touch id of the second touch. |
| + ClearTouchIdIfReleased(scoped_xevent1); |
| + EXPECT_EQ(-1, GetTouchIdForTrackingId(kTrackingId1)); |
| + |
| + // This should clear the touch id of the first touch. |
| + scoped_xevent0.InitTouchEvent( |
| + 0, XI_TouchEnd, kTrackingId0, gfx::Point(10, 10), valuators); |
| + |
| + ClearTouchIdIfReleased(scoped_xevent0); |
| + EXPECT_EQ(-1, GetTouchIdForTrackingId(kTrackingId0)); |
| +} |
| #endif |
| TEST_F(EventsXTest, NumpadKeyEvents) { |