diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2013-04-03 11:48:40 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2013-04-03 14:12:29 +1000 |
commit | 9dc5aa78776cb4a4cfcdf80015704748fac05dd6 (patch) | |
tree | dcba54001481502624de4ce470029a4adbb5d68d | |
parent | ea50a2bc4aa5668adfe8007dd86a692aee9d1852 (diff) |
synaptics: check for invalid and overlapping button areas
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r-- | tests/input/synaptics.cpp | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/tests/input/synaptics.cpp b/tests/input/synaptics.cpp index 927024c..9d7f886 100644 --- a/tests/input/synaptics.cpp +++ b/tests/input/synaptics.cpp @@ -43,6 +43,7 @@ #include <X11/extensions/XInput2.h> #include "xit-server-input-test.h" +#include "xit-property.h" #include "device-interface.h" #include "helpers.h" @@ -978,6 +979,99 @@ TEST_F(SynapticsClickpadSoftButtonsTest, RightClick) XSync(Display(), True); } +enum { + RBL = 0, + RBR = 1, + RBT = 2, + RBB = 3, + MBL = 4, + MBR = 5, + MBT = 6, + MBB = 7, +}; + +TEST_F(SynapticsClickpadSoftButtonsTest, InvalidButtonArea) +{ + XORG_TESTCASE("Update soft button area property with ranges of \n" + "left > right or top > bottom\n"); + + ::Display *dpy = Display(); + + int deviceid; + ASSERT_TRUE(FindInputDeviceByName(dpy, "--device--", &deviceid)); + + XITProperty<int> softbutton_prop(dpy, deviceid, "Synaptics Soft Button Areas"); + + softbutton_prop.data[RBL] = 3000; + softbutton_prop.data[RBR] = 2000; + + SetErrorTrap(dpy); + softbutton_prop.Update(); + ASSERT_ERROR(ReleaseErrorTrap(dpy), BadValue); + + softbutton_prop.data[RBT] = 3000; + softbutton_prop.data[RBB] = 2000; + + SetErrorTrap(dpy); + softbutton_prop.Update(); + XSync(dpy, True); + ASSERT_ERROR(ReleaseErrorTrap(dpy), BadValue); + + softbutton_prop.data[MBL] = 3000; + softbutton_prop.data[MBR] = 2000; + + SetErrorTrap(dpy); + softbutton_prop.Update(); + ASSERT_ERROR(ReleaseErrorTrap(dpy), BadValue); + + softbutton_prop.data[MBT] = 3000; + softbutton_prop.data[MBB] = 2000; + + SetErrorTrap(dpy); + softbutton_prop.Update(); + ASSERT_ERROR(ReleaseErrorTrap(dpy), BadValue); +} + +TEST_F(SynapticsClickpadSoftButtonsTest, SinglePixelOverlap) +{ + XORG_TESTCASE("Overlap of soft button areas by one 1 device unit is permitted"); + + ::Display *dpy = Display(); + + int deviceid; + ASSERT_TRUE(FindInputDeviceByName(dpy, "--device--", &deviceid)); + + XITProperty<int> softbutton_prop(dpy, deviceid, "Synaptics Soft Button Areas"); + + softbutton_prop.data[RBL] = 2000; + softbutton_prop.data[RBR] = 3000; + softbutton_prop.data[MBL] = 1000; + softbutton_prop.data[MBR] = 2000; + + softbutton_prop.data[RBT] = 2000; + softbutton_prop.data[MBT] = 2000; + softbutton_prop.data[RBB] = 3000; + softbutton_prop.data[MBB] = 3000; + + SetErrorTrap(dpy); + softbutton_prop.Update(); + ASSERT_TRUE(ReleaseErrorTrap(dpy) == NULL); + + softbutton_prop.data[RBL] = 2000; + softbutton_prop.data[RBR] = 3000; + softbutton_prop.data[MBL] = 2000; + softbutton_prop.data[MBR] = 3000; + + softbutton_prop.data[RBT] = 2000; + softbutton_prop.data[MBT] = 3000; + softbutton_prop.data[RBB] = 3000; + softbutton_prop.data[MBB] = 4000; + + SetErrorTrap(dpy); + softbutton_prop.Update(); + ASSERT_TRUE(ReleaseErrorTrap(dpy) == NULL); +} + class SynapticsClickpadSoftButtonsWithAreaTest : public SynapticsClickpadSoftButtonsTest { public: /** |