Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> --- .../SynPS2_Synaptics_TouchPad/device.prop | 33 ++++++++ test/integration/xorg-conf-input-tests.cpp | 82 ++++++++++++++++++-- 2 files changed, 107 insertions(+), 8 deletions(-) create mode 100644 test/integration/recordings/SynPS2_Synaptics_TouchPad/device.prop
diff --git a/test/integration/recordings/SynPS2_Synaptics_TouchPad/device.prop b/test/integration/recordings/SynPS2_Synaptics_TouchPad/device.prop new file mode 100644 index 0000000..3f4982b --- /dev/null +++ b/test/integration/recordings/SynPS2_Synaptics_TouchPad/device.prop @@ -0,0 +1,33 @@ +N: SynPS/2 Synaptics TouchPad +I: 0011 0002 0007 01b1 +P: 05 00 00 00 00 00 00 00 +B: 00 0b 00 00 00 00 00 00 00 +B: 01 00 00 00 00 00 00 00 00 +B: 01 00 00 00 00 00 00 00 00 +B: 01 00 00 00 00 00 00 00 00 +B: 01 00 00 00 00 00 00 00 00 +B: 01 00 00 01 00 00 00 00 00 +B: 01 20 e5 00 00 00 00 00 00 +B: 01 00 00 00 00 00 00 00 00 +B: 01 00 00 00 00 00 00 00 00 +B: 01 00 00 00 00 00 00 00 00 +B: 01 00 00 00 00 00 00 00 00 +B: 01 00 00 00 00 00 00 00 00 +B: 01 00 00 00 00 00 00 00 00 +B: 02 00 00 00 00 00 00 00 00 +B: 03 03 00 00 11 00 80 60 06 +B: 04 00 00 00 00 00 00 00 00 +B: 05 00 00 00 00 00 00 00 00 +B: 11 00 00 00 00 00 00 00 00 +B: 12 00 00 00 00 00 00 00 00 +B: 15 00 00 00 00 00 00 00 00 +B: 15 00 00 00 00 00 00 00 00 +A: 00 1472 5472 8 0 +A: 01 1408 4448 8 0 +A: 18 0 255 0 0 +A: 1c 0 15 0 0 +A: 2f 0 1 0 0 +A: 35 1472 5472 8 0 +A: 36 1408 4448 8 0 +A: 39 0 65535 0 0 +A: 3a 0 255 0 0 diff --git a/test/integration/xorg-conf-input-tests.cpp b/test/integration/xorg-conf-input-tests.cpp index 76512ca..401a981 100644 --- a/test/integration/xorg-conf-input-tests.cpp +++ b/test/integration/xorg-conf-input-tests.cpp @@ -113,7 +113,8 @@ TEST_F(XOrgConfigInputTest, DefaultDevices) class XOrgConfigInputDriverTest : public XOrgConfigInputTest, public ::testing::WithParamInterface<const char*> { - void AddDriverSection(const char *param) { +public: + void AddDriverSection(const char *param, const char *options = "") { std::ofstream conffile(config_file.c_str(), std::ios_base::app); conffile.exceptions(std::ofstream::failbit | std::ofstream::badbit); @@ -123,6 +124,7 @@ class XOrgConfigInputDriverTest : public XOrgConfigInputTest, " Section \"InputDevice\"" " Identifier \"--device--\"" " Driver \"" << driver << "\"" + << options << " EndSection"; server.SetOption("-config", config_file); } @@ -166,13 +168,6 @@ TEST_P(XOrgConfigInputDriverTest, DriverDevice) XIFreeDeviceInfo(info); } -int main(int argc, char **argv) { - - testing::InitGoogleTest(&argc, argv); - - return RUN_ALL_TESTS(); -} - /* mouse, keyboard, void, evdev, synaptics and vmmouse have special status, they are picked as core devices if AAD is off and any section is found in the xorg.conf. @@ -180,3 +175,74 @@ int main(int argc, char **argv) { */ INSTANTIATE_TEST_CASE_P(, XOrgConfigInputDriverTest, ::testing::Values("mouse", "keyboard", "void")); + + +#ifdef __linux__ /* we need evemu for these */ +class XOrgConfigInputDriverTestDevice : public XOrgConfigInputDriverTest { + private: + std::auto_ptr<xorg::testing::evemu::Device> device; + + virtual void SetUp() + { + const char *param = GetParam(); + + try { + device = std::auto_ptr<xorg::testing::evemu::Device>( + new xorg::testing::evemu::Device(TEST_ROOT_DIR "recordings/SynPS2_Synaptics_TouchPad/device.prop") + ); + } catch (std::runtime_error &error) { + std::cerr << "Failed to create evemu device, skipping test.\n"; + return; + } + + std::stringstream s; + s << "Option \"Device\" \"" << device->GetDeviceNode() << "\""; + std::string device_option = s.str(); + + WriteConfig(param); + AddDriverSection(param, device_option.c_str()); + StartServer(); + } +}; + +/** + * AutoAddDevices is off, InputDevice sections are present but unreferenced, + * with those drivers that are elevated to core device status if found. + */ +TEST_P(XOrgConfigInputDriverTestDevice, DriverDevice) +{ + const char *param; + int ndevices; + XIDeviceInfo *info; + + param = GetParam(); + info = XIQueryDevice(Display(), XIAllDevices, &ndevices); + /* VCP, VCK, 2 test devices, forced mouse/keyboard */ + ASSERT_EQ(ndevices, 6) << "Drivers required for this test: " + "keyboard, " << param; + + bool found = false; + while(ndevices--) { + if (strcmp(info[ndevices].name, "--device--") == 0) { + ASSERT_EQ(found, false) << "Duplicate device" << std::endl; + found = true; + } + } + + ASSERT_EQ(found, true); + + XIFreeDeviceInfo(info); +} + + +INSTANTIATE_TEST_CASE_P(, XOrgConfigInputDriverTestDevice, + ::testing::Values("evdev", "synaptics")); +#endif /* __linux__ */ + +int main(int argc, char **argv) { + + testing::InitGoogleTest(&argc, argv); + + return RUN_ALL_TESTS(); +} + -- 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