Default behaviour on linux is new devices are assigned the evdev driver and show up with the same name as the uinput device. Test for that.
Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> --- test/integration/input_drivers.cpp | 65 ++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/test/integration/input_drivers.cpp b/test/integration/input_drivers.cpp index bd0777f..54a01a8 100644 --- a/test/integration/input_drivers.cpp +++ b/test/integration/input_drivers.cpp @@ -139,6 +139,71 @@ TEST_F(InputDriverTest, NewMaster) XIFreeDeviceInfo(info); } +/* default setup on linux, we have hotplugging on and the device appears + * with its name */ +#ifdef __linux__ +TEST_F(InputDriverTest, Evdev) +{ + XIEventMask mask; + mask.deviceid = XIAllDevices; + mask.mask_len = XIMaskLen(XI_TouchEnd); + mask.mask = reinterpret_cast<unsigned char*>(calloc(mask.mask_len, 1)); + XISetMask(mask.mask, XI_HierarchyChanged); + + ASSERT_EQ(Success, + XISelectEvents(Display(), DefaultRootWindow(Display()), &mask, + 1)); + + free(mask.mask); + + XFlush(Display()); + std::auto_ptr<xorg::testing::evemu::Device> device; + try { + device = std::auto_ptr<xorg::testing::evemu::Device>( + new xorg::testing::evemu::Device( + TEST_ROOT_DIR "recordings/ntrig_dell_xt2/device.prop")); + } catch (std::runtime_error &error) { + std::cerr << "Failed to create evemu device, skipping test.\n"; + return; + } + + ASSERT_TRUE(xorg::testing::XServer::WaitForDevice(Display(), + "N-Trig MultiTouch (Virtual Test Device)")); + + + Atom evdev_prop = XInternAtom(Display(), + "Evdev Middle Button Emulation", true); + ASSERT_NE(evdev_prop, None); + + XIDeviceInfo *info; + int ndevices; + info = XIQueryDevice(Display(), XIAllDevices, &ndevices); + while(ndevices--) { + if (strcmp(info[ndevices].name, + "N-Trig MultiTouch (Virtual Test Device)") == 0) + break; + } + ASSERT_GT(ndevices, 0); + + Atom *props; + int nprops; + + props = XIListProperties(Display(), + info[ndevices].deviceid, + &nprops); + ASSERT_GT(nprops, 0); + + while(nprops--) + if (props[nprops] == evdev_prop) + break; + ASSERT_GT(nprops, 0); + + XIFreeDeviceInfo(info); + XFree(props); + +} +#endif + int main(int argc, char **argv) { testing::InitGoogleTest(&argc, argv); -- 1.7.10.4 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel