summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2013-07-09 10:41:26 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2013-07-09 12:25:50 +1000
commit0b856fbfc6cae5fdb2f9eadb3ae225a67fc29f93 (patch)
tree9b7bc581862a3af319f2b90bb0a3effb25779152
parent90abb766e2b3f8c85c084be36046664b45413a3d (diff)
server/grab: add test for a legacy client grab test
This test currently succeeds, but since it was written might as well leave it in. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r--tests/server/grab.cpp70
1 files changed, 70 insertions, 0 deletions
diff --git a/tests/server/grab.cpp b/tests/server/grab.cpp
index eed61de..95a759e 100644
--- a/tests/server/grab.cpp
+++ b/tests/server/grab.cpp
@@ -1005,6 +1005,76 @@ TEST_F(TouchGrabTest, TouchGrabPassedToTouchEarlyAccept)
ASSERT_TRUE(NoEventPending(dpy3));
}
+class TouchGrabTestOnLegacyClient : public TouchGrabTest {
+ virtual void SetUp() {
+ SetDevice("tablets/N-Trig-MultiTouch.desc");
+
+ xi2_major_minimum = 2;
+ xi2_minor_minimum = 0;
+
+ XITServerInputTest::SetUp();
+ }
+};
+
+TEST_F(TouchGrabTestOnLegacyClient, ActivePointerGrabOverPointerSelection)
+{
+ XORG_TESTCASE("Create window\n"
+ "Select for button press on slave device and XIAllMasterDevices.\n"
+ "Async active grab on the window\n"
+ "Touch begin/end over the window.\n"
+ "Expect button events on slave\n"
+ "Expect button events on master\n");
+
+ ::Display *dpy = Display(); /* XI 2.0 client */
+
+ int deviceid;
+ FindInputDeviceByName(dpy, "--device--", &deviceid);
+
+ Window win = CreateWindow(dpy, DefaultRootWindow(dpy));
+
+ XIEventMask mask[2];
+ mask[0].deviceid = deviceid;
+ mask[0].mask_len = XIMaskLen(XI_TouchOwnership);
+ mask[0].mask = new unsigned char[mask[0].mask_len]();
+
+ XISetMask(mask[0].mask, XI_ButtonPress);
+ XISetMask(mask[0].mask, XI_ButtonRelease);
+ XISetMask(mask[0].mask, XI_Enter);
+ XISetMask(mask[0].mask, XI_Leave);
+ XISetMask(mask[0].mask, XI_Motion);
+
+ mask[1].deviceid = XIAllMasterDevices;
+ mask[1].mask_len = XIMaskLen(XI_TouchOwnership);
+ mask[1].mask = new unsigned char[mask[1].mask_len]();
+
+ XISetMask(mask[1].mask, XI_ButtonPress);
+ XISetMask(mask[1].mask, XI_ButtonRelease);
+ XISetMask(mask[1].mask, XI_Enter);
+ XISetMask(mask[1].mask, XI_Leave);
+ XISetMask(mask[1].mask, XI_Motion);
+
+ XISelectEvents(dpy, win, mask, 2);
+ GrabPointer(dpy, VIRTUAL_CORE_POINTER_ID, win);
+
+ TouchBegin(200, 200);
+ TouchUpdate(202, 202);
+ TouchEnd();
+
+ EXPECT_EVENT(XIDeviceEvent, press_dev_1, dpy, GenericEvent, xi2_opcode, XI_ButtonPress);
+ EXPECT_EQ(press_dev_1->deviceid, deviceid);
+ EXPECT_EVENT(XIDeviceEvent, motion, dpy, GenericEvent, xi2_opcode, XI_Motion);
+ EXPECT_EQ(motion->deviceid, VIRTUAL_CORE_POINTER_ID);
+
+ EXPECT_EVENT(XIDeviceEvent, press, dpy, GenericEvent, xi2_opcode, XI_ButtonPress);
+ EXPECT_EQ(press->deviceid, VIRTUAL_CORE_POINTER_ID);
+ EXPECT_EVENT(XIDeviceEvent, release_dev_1, dpy, GenericEvent, xi2_opcode, XI_ButtonRelease);
+ EXPECT_EQ(release_dev_1->deviceid, deviceid);
+ EXPECT_EVENT(XIDeviceEvent, release, dpy, GenericEvent, xi2_opcode, XI_ButtonRelease);
+ EXPECT_EQ(release->deviceid, VIRTUAL_CORE_POINTER_ID);
+
+ ASSERT_TRUE(NoEventPending(dpy));
+}
+
class TouchUngrabTest : public TouchGrabTest,
public ::testing::WithParamInterface<enum GrabType>