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