test: auto-generate the udev rules
authorPeter Hutterer <peter.hutterer@who-t.net>
Mon, 10 Jun 2019 12:00:40 +0000 (22:00 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Thu, 13 Jun 2019 22:52:58 +0000 (08:52 +1000)
We only ever set properties in the devices, so let's make that more explicit
and auto-generate the udev rule. This way we're hopefully better protected
from the various typos that hid in those rules over the years, but also be
prepared for passing the udev property key/value pairs elsewhere.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
36 files changed:
src/libinput-util.h
test/litest-device-acer-hawaii-touchpad.c
test/litest-device-apple-magicmouse.c
test/litest-device-calibrated-touchscreen.c
test/litest-device-dell-canvas-totem-touch.c
test/litest-device-dell-canvas-totem.c
test/litest-device-gpio-keys.c
test/litest-device-hp-wmi-hotkeys.c
test/litest-device-ignored-mouse.c
test/litest-device-lid-switch-surface3.c
test/litest-device-lid-switch.c
test/litest-device-magic-trackpad.c
test/litest-device-mouse-low-dpi.c
test/litest-device-mouse-wheel-click-angle.c
test/litest-device-mouse-wheel-click-count.c
test/litest-device-mouse-wheel-tilt.c
test/litest-device-thinkpad-extrabuttons.c
test/litest-device-wacom-bamboo-2fg-finger.c
test/litest-device-wacom-bamboo-2fg-pad.c
test/litest-device-wacom-bamboo-2fg-pen.c
test/litest-device-wacom-cintiq-13hdt-finger.c
test/litest-device-wacom-cintiq-13hdt-pad.c
test/litest-device-wacom-cintiq-13hdt-pen.c
test/litest-device-wacom-cintiq-24hdt-pad.c
test/litest-device-wacom-cintiq-pro-16-finger.c
test/litest-device-wacom-cintiq-pro-16-pad.c
test/litest-device-wacom-cintiq-pro-16-pen.c
test/litest-device-wacom-ekr.c
test/litest-device-wacom-intuos3-pad.c
test/litest-device-wacom-intuos5-finger.c
test/litest-device-wacom-intuos5-pad.c
test/litest-device-wacom-intuos5-pen.c
test/litest-device-wacom-mobilestudio-pro-pad.c
test/litest-device-wheel-only.c
test/litest-int.h
test/litest.c

index c267abc..680e724 100644 (file)
@@ -633,6 +633,11 @@ strv_free(char **strv) {
        free (strv);
 }
 
+struct key_value_str{
+       char *key;
+       char *value;
+};
+
 struct key_value_double {
        double key;
        double value;
index 8ededb3..366c381 100644 (file)
@@ -81,16 +81,6 @@ static struct input_absinfo absinfo[] = {
        { .value = -1 }
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"touchpad_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"touchpad_end\"\n"
-"ENV{ID_INPUT_TOUCHPAD}==\"\", GOTO=\"touchpad_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Chicony ACER Hawaii Keyboard Touchpad\","
-"    ENV{ID_INPUT_TOUCHPAD_INTEGRATION}=\"external\"\n"
-"\n"
-"LABEL=\"touchpad_end\"";
-
 TEST_DEVICE("hawaii-touchpad",
        .type = LITEST_ACER_HAWAII_TOUCHPAD,
        .features = LITEST_TOUCHPAD | LITEST_CLICKPAD | LITEST_BUTTON,
@@ -100,5 +90,8 @@ TEST_DEVICE("hawaii-touchpad",
        .id = &input_id,
        .events = events,
        .absinfo = absinfo,
-       .udev_rule = udev_rule,
+       .udev_properties = {
+               { "ID_INPUT_TOUCHPAD_INTEGRATION", "external" },
+               { NULL },
+       }
 )
index 10852e9..fa8e3f2 100644 (file)
@@ -82,24 +82,6 @@ static struct input_absinfo absinfo[] = {
        { .value = -1 }
 };
 
-/* Force MOUSE_DPI to the empty string. As of systemd commit f013e99e160f
- * ID_BUS=bluetooth now triggers the hwdb entry for this device. This causes
- * test case failures because deltas change. Detecting old vs new systemd is
- * hard, and because our rules are 99-prefixed we can't set ID_BUS ourselves
- * on older systemd.
- * So let's go the easy way and unset MOUSE_DPI so we can continue to use
- * the current tests.
- */
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"mouse_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"mouse_end\"\n"
-"ENV{ID_INPUT_MOUSE}==\"\", GOTO=\"mouse_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Apple Magic Mouse\","
-"    ENV{MOUSE_DPI}=\"\""
-"\n"
-"LABEL=\"mouse_end\"";
-
 TEST_DEVICE("magicmouse",
        .type = LITEST_MAGICMOUSE,
        .features = LITEST_RELATIVE | LITEST_BUTTON | LITEST_WHEEL,
@@ -109,5 +91,17 @@ TEST_DEVICE("magicmouse",
        .id = &input_id,
        .events = events,
        .absinfo = absinfo,
-       .udev_rule = udev_rule,
+
+       /* Force MOUSE_DPI to the empty string. As of systemd commit f013e99e160f
+        * ID_BUS=bluetooth now triggers the hwdb entry for this device. This causes
+        * test case failures because deltas change. Detecting old vs new systemd is
+        * hard, and because our rules are 99-prefixed we can't set ID_BUS ourselves
+        * on older systemd.
+        * So let's go the easy way and unset MOUSE_DPI so we can continue to use
+        * the current tests.
+        */
+       .udev_properties = {
+               { "MOUSE_DPI", "" },
+               { NULL },
+       },
 )
index e243921..1684648 100644 (file)
@@ -70,16 +70,6 @@ static int events[] = {
        -1, -1
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"calibrated_touchscreen_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"calibrated_touchscreen_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Calibrated Touchscreen*\",\\\n"
-"    ENV{LIBINPUT_CALIBRATION_MATRIX}=\"1.2 3.4 5.6 7.8 9.10 11.12\",\\\n"
-"    ENV{WL_OUTPUT}=\"myOutput\"\n"
-"\n"
-"LABEL=\"calibrated_touchscreen_end\"";
-
 TEST_DEVICE("calibrated-touchscreen",
        .type = LITEST_CALIBRATED_TOUCHSCREEN,
        .features = LITEST_TOUCH,
@@ -89,5 +79,9 @@ TEST_DEVICE("calibrated-touchscreen",
        .id = &input_id,
        .events = events,
        .absinfo = absinfo,
-       .udev_rule = udev_rule,
+       .udev_properties = {
+       { "LIBINPUT_CALIBRATION_MATRIX", "1.2 3.4 5.6 7.8 9.10 11.12" },
+       { "WL_OUTPUT", "myOutput" },
+       { NULL }
+       },
 )
index 6ffbf0d..ba5009f 100644 (file)
@@ -76,15 +76,6 @@ static int events[] = {
        -1, -1,
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"totem_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"totem_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Advanced Silicon S.A. CoolTouch® System*\",\\\n"
-"    ENV{LIBINPUT_DEVICE_GROUP}=\"dell-canvas-totem-group\"\n"
-"\n"
-"LABEL=\"totem_end\"";
-
 TEST_DEVICE("dell-canvas-totem-touch",
        .type = LITEST_DELL_CANVAS_TOTEM_TOUCH,
        .features = LITEST_TOUCH,
@@ -94,5 +85,8 @@ TEST_DEVICE("dell-canvas-totem-touch",
        .id = &input_id,
        .events = events,
        .absinfo = absinfo,
-       .udev_rule = udev_rule,
+       .udev_properties = {
+        { "LIBINPUT_DEVICE_GROUP", "dell-canvas-totem-group" },
+        { NULL },
+       },
 )
index 19f00c5..74cb73d 100644 (file)
@@ -107,15 +107,6 @@ static int events[] = {
        -1, -1,
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"totem_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"totem_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Advanced Silicon S.A. CoolTouch® System System Multi Axis*\",\\\n"
-"    ENV{LIBINPUT_DEVICE_GROUP}=\"dell-canvas-totem-group\"\n"
-"\n"
-"LABEL=\"totem_end\"";
-
 TEST_DEVICE("dell-canvas-totem",
        .type = LITEST_DELL_CANVAS_TOTEM,
        .features = LITEST_TOTEM | LITEST_TABLET,
@@ -125,5 +116,8 @@ TEST_DEVICE("dell-canvas-totem",
        .id = &input_id,
        .events = events,
        .absinfo = absinfo,
-       .udev_rule = udev_rule,
+       .udev_properties = {
+        { "LIBINPUT_DEVICE_GROUP", "dell-canvas-totem-group" },
+        { NULL },
+       },
 )
index ee226de..92145e9 100644 (file)
@@ -42,15 +42,6 @@ static int events[] = {
        -1, -1,
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"switch_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"switch_end\"\n"
-"\n"
-"ATTRS{name}==\"litest gpio-keys*\",\\\n"
-"    ENV{ID_INPUT_SWITCH}=\"1\"\n"
-"\n"
-"LABEL=\"switch_end\"";
-
 static const char quirk_file[] =
 "[litest gpio quirk]\n"
 "MatchName=litest gpio-keys\n"
@@ -66,6 +57,9 @@ TEST_DEVICE("gpio-keys",
        .events = events,
        .absinfo = NULL,
 
-       .udev_rule = udev_rule,
        .quirk_file = quirk_file,
+       .udev_properties = {
+               { "ID_INPUT_SWITCH", "1" },
+               { NULL },
+       }
 )
index a2b1832..025fda7 100644 (file)
@@ -47,15 +47,6 @@ static int events[] = {
        -1, -1,
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"switch_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"switch_end\"\n"
-"\n"
-"ATTRS{name}==\"litest HP WMI hotkeys*\",\\\n"
-"    ENV{ID_INPUT_SWITCH}=\"1\"\n"
-"\n"
-"LABEL=\"switch_end\"";
-
 TEST_DEVICE("wmi-hotkeys",
        .type = LITEST_HP_WMI_HOTKEYS,
        .features = LITEST_SWITCH,
@@ -66,5 +57,8 @@ TEST_DEVICE("wmi-hotkeys",
        .events = events,
        .absinfo = NULL,
 
-       .udev_rule = udev_rule,
+       .udev_properties = {
+               { "ID_INPUT_SWITCH", "1" },
+               { NULL },
+       }
 )
index 08f7538..b384616 100644 (file)
@@ -42,16 +42,6 @@ static int events[] = {
        -1 , -1,
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"mouse_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"mouse_end\"\n"
-"ENV{ID_INPUT_MOUSE}==\"\", GOTO=\"mouse_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Ignored Mouse*\",\\\n"
-"    ENV{LIBINPUT_IGNORE_DEVICE}=\"1\"\n"
-"\n"
-"LABEL=\"mouse_end\"";
-
 TEST_DEVICE("ignored-mouse",
        .type = LITEST_IGNORED_MOUSE,
        .features = LITEST_IGNORED | LITEST_BUTTON | LITEST_RELATIVE,
@@ -61,5 +51,8 @@ TEST_DEVICE("ignored-mouse",
        .id = &input_id,
        .absinfo = NULL,
        .events = events,
-       .udev_rule = udev_rule,
+       .udev_properties = {
+         { "LIBINPUT_IGNORE_DEVICE", "1" },
+         { NULL },
+       },
 )
index 8d72b67..5e913d9 100644 (file)
@@ -38,15 +38,6 @@ static int events[] = {
        -1, -1,
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"switch_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"switch_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Lid Switch Surface3*\",\\\n"
-"    ENV{ID_INPUT_SWITCH}=\"1\"\n"
-"\n"
-"LABEL=\"switch_end\"";
-
 static const char quirk_file[] =
 "[litest Surface Lid]\n"
 "MatchName=litest Lid Switch Surface3\n"
@@ -62,6 +53,9 @@ TEST_DEVICE("lid-switch-surface3",
        .events = events,
        .absinfo = NULL,
 
-       .udev_rule = udev_rule,
        .quirk_file = quirk_file,
+       .udev_properties = {
+               { "ID_INPUT_SWITCH", "1" },
+               { NULL },
+       },
 )
index e7b4e7c..9f3a869 100644 (file)
@@ -37,15 +37,6 @@ static int events[] = {
        -1, -1,
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"switch_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"switch_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Lid Switch\",\\\n"
-"    ENV{ID_INPUT_SWITCH}=\"1\"\n"
-"\n"
-"LABEL=\"switch_end\"";
-
 static const char quirk_file[] =
 "[litest Lid Switch]\n"
 "MatchName=litest Lid Switch\n"
@@ -61,6 +52,9 @@ TEST_DEVICE("lid-switch",
        .events = events,
        .absinfo = NULL,
 
-       .udev_rule = udev_rule,
        .quirk_file = quirk_file,
+       .udev_properties = {
+               { "ID_INPUT_SWITCH", "1" },
+               { NULL },
+       },
 )
index e569f4d..8dfde8b 100644 (file)
@@ -105,16 +105,6 @@ static int events[] = {
        -1, -1
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"touchpad_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"touchpad_end\"\n"
-"ENV{ID_INPUT_TOUCHPAD}==\"\", GOTO=\"touchpad_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Apple Wireless Trackpad\","
-"    ENV{ID_INPUT_TOUCHPAD_INTEGRATION}=\"external\"\n"
-"\n"
-"LABEL=\"touchpad_end\"";
-
 TEST_DEVICE("magic-trackpad",
        .type = LITEST_MAGIC_TRACKPAD,
        .features = LITEST_TOUCHPAD | LITEST_CLICKPAD |
@@ -125,5 +115,9 @@ TEST_DEVICE("magic-trackpad",
        .id = &input_id,
        .events = events,
        .absinfo = absinfo,
-       .udev_rule = udev_rule,
+
+       .udev_properties = {
+               { "ID_INPUT_TOUCHPAD_INTEGRATION", "external" },
+               { NULL },
+       },
 )
index e40ec0c..9525058 100644 (file)
@@ -42,15 +42,6 @@ static int events[] = {
        -1 , -1,
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"touchpad_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"touchpad_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Low DPI Mouse*\",\\\n"
-"    ENV{MOUSE_DPI}=\"400@125\"\n"
-"\n"
-"LABEL=\"touchpad_end\"";
-
 TEST_DEVICE("low-dpi-mouse",
        .type = LITEST_MOUSE_LOW_DPI,
        .features = LITEST_RELATIVE | LITEST_BUTTON | LITEST_WHEEL,
@@ -60,5 +51,8 @@ TEST_DEVICE("low-dpi-mouse",
        .id = &input_id,
        .absinfo = NULL,
        .events = events,
-       .udev_rule = udev_rule,
+       .udev_properties = {
+               { "MOUSE_DPI", "400@125" },
+               { NULL },
+       },
 )
index 2de3f2a..0f6f51a 100644 (file)
@@ -42,16 +42,6 @@ static int events[] = {
        -1 , -1,
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"wheel_click_angle_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"wheel_click_angle_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wheel Click Angle Mouse*\",\\\n"
-"    ENV{MOUSE_WHEEL_CLICK_ANGLE}=\"-7\",\\\n"
-"    ENV{MOUSE_WHEEL_CLICK_ANGLE_HORIZONTAL}=\"13\"\n"
-"\n"
-"LABEL=\"wheel_click_angle_end\"";
-
 TEST_DEVICE("mouse-wheelclickangle",
        .type = LITEST_MOUSE_WHEEL_CLICK_ANGLE,
        .features = LITEST_RELATIVE | LITEST_BUTTON | LITEST_WHEEL,
@@ -61,5 +51,10 @@ TEST_DEVICE("mouse-wheelclickangle",
        .id = &input_id,
        .absinfo = NULL,
        .events = events,
-       .udev_rule = udev_rule,
+
+       .udev_properties = {
+               { "MOUSE_WHEEL_CLICK_ANGLE", "-7" },
+               { "MOUSE_WHEEL_CLICK_ANGLE_HORIZONTAL", "13" },
+               { NULL },
+       }
 )
index dcd5d16..f9a0931 100644 (file)
@@ -42,18 +42,6 @@ static int events[] = {
        -1 , -1,
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"wheel_click_count_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"wheel_click_count_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wheel Click Count Mouse*\",\\\n"
-"    ENV{MOUSE_WHEEL_CLICK_ANGLE}=\"-15\",\\\n"
-"    ENV{MOUSE_WHEEL_CLICK_ANGLE_HORIZONTAL}=\"13\",\\\n"
-"    ENV{MOUSE_WHEEL_CLICK_COUNT}=\"-14\",\\\n"
-"    ENV{MOUSE_WHEEL_CLICK_COUNT_HORIZONTAL}=\"27\"\\\n"
-"\n"
-"LABEL=\"wheel_click_count_end\"";
-
 TEST_DEVICE("mouse-wheelclickcount",
        .type = LITEST_MOUSE_WHEEL_CLICK_COUNT,
        .features = LITEST_RELATIVE | LITEST_BUTTON | LITEST_WHEEL,
@@ -63,5 +51,11 @@ TEST_DEVICE("mouse-wheelclickcount",
        .id = &input_id,
        .absinfo = NULL,
        .events = events,
-       .udev_rule = udev_rule,
+       .udev_properties = {
+               { "MOUSE_WHEEL_CLICK_ANGLE", "-15" },
+               { "MOUSE_WHEEL_CLICK_ANGLE_HORIZONTAL", "13" },
+               { "MOUSE_WHEEL_CLICK_COUNT", "-14" },
+               { "MOUSE_WHEEL_CLICK_COUNT_HORIZONTAL", "27" },
+               { NULL },
+       }
 )
index 4d8ec55..38a6c48 100644 (file)
@@ -43,16 +43,6 @@ static int events[] = {
        -1 , -1,
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"wheel_wheel_tilt_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"wheel_wheel_tilt_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wheel Tilt Mouse*\",\\\n"
-"    ENV{MOUSE_WHEEL_TILT_HORIZONTAL}=\"1\",\\\n"
-"    ENV{MOUSE_WHEEL_TILT_VERTICAL}=\"1\"\n"
-"\n"
-"LABEL=\"wheel_wheel_tilt_end\"";
-
 TEST_DEVICE("mouse-wheel-tilt",
        .type = LITEST_MOUSE_WHEEL_TILT,
        .features = LITEST_RELATIVE | LITEST_BUTTON | LITEST_WHEEL,
@@ -62,5 +52,9 @@ TEST_DEVICE("mouse-wheel-tilt",
        .id = &input_id,
        .absinfo = NULL,
        .events = events,
-       .udev_rule = udev_rule,
+       .udev_properties = {
+               { "MOUSE_WHEEL_TILT_HORIZONTAL", "1" },
+               { "MOUSE_WHEEL_TILT_VERTICAL", "1" },
+               { NULL },
+       }
 )
index e9929e6..9643127 100644 (file)
@@ -70,15 +70,6 @@ static int events[] = {
        -1, -1,
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"switch_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"switch_end\"\n"
-"\n"
-"ATTRS{name}==\"litest ThinkPad Extra Buttons*\",\\\n"
-"    ENV{ID_INPUT_SWITCH}=\"1\"\n"
-"\n"
-"LABEL=\"switch_end\"";
-
 TEST_DEVICE("thinkpad-extrabuttons",
        .type = LITEST_THINKPAD_EXTRABUTTONS,
        .features = LITEST_KEYS | LITEST_SWITCH,
@@ -88,5 +79,8 @@ TEST_DEVICE("thinkpad-extrabuttons",
        .id = &input_id,
        .events = events,
        .absinfo = NULL,
-       .udev_rule = udev_rule,
+       .udev_properties = {
+               { "ID_INPUT_SWITCH", "1" },
+               { NULL },
+       },
 )
index fb16805..08ba28c 100644 (file)
@@ -78,17 +78,6 @@ static int events[] = {
        -1, -1,
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"rule_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"rule_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom Bamboo 2FG 4x5 Finger*\",\\\n"
-"    ENV{LIBINPUT_DEVICE_GROUP}=\"wacom-bamboo-2fg-group\",\\\n"
-"    ENV{ID_INPUT_TABLET}=\"1\",\\\n"
-"    ENV{ID_INPUT_TOUCHPAD}=\"1\"\n"
-"\n"
-"LABEL=\"rule_end\"";
-
 TEST_DEVICE("wacom-bamboo-2fg-finger",
        .type = LITEST_WACOM_BAMBOO_2FG_FINGER,
        .features = LITEST_TOUCHPAD,
@@ -98,5 +87,9 @@ TEST_DEVICE("wacom-bamboo-2fg-finger",
        .id = &input_id,
        .events = events,
        .absinfo = absinfo,
-       .udev_rule = udev_rule,
+       .udev_properties = {
+               { "LIBINPUT_DEVICE_GROUP", "wacom-bamboo-2fg-group" },
+               { "ID_INPUT_TABLET", "1" },
+               { "ID_INPUT_TOUCHPAD", "1" },
+       }
 )
index 1ef5d99..05f71ef 100644 (file)
@@ -61,16 +61,6 @@ static int events[] = {
        -1, -1,
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"pad_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"pad_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom Bamboo 2FG 4x5 Pad*\",\\\n"
-"    ENV{ID_INPUT_TABLET_PAD}=\"1\",\\\n"
-"    ENV{LIBINPUT_DEVICE_GROUP}=\"wacom-bamboo-2fg-group\"\n"
-"\n"
-"LABEL=\"pad_end\"";
-
 TEST_DEVICE("wacom-bamboo-2fg-pad",
        .type = LITEST_WACOM_BAMBOO_2FG_PAD,
        .features = LITEST_TABLET_PAD,
@@ -80,5 +70,9 @@ TEST_DEVICE("wacom-bamboo-2fg-pad",
        .id = &input_id,
        .events = events,
        .absinfo = absinfo,
-       .udev_rule = udev_rule,
+       .udev_properties = {
+               { .key = "ID_INPUT_TABLET_PAD", .value = "1" },
+               { .key = "LIBINPUT_DEVICE_GROUP", .value = "1" },
+               { NULL }
+       }
 )
index 54bf942..aa1e3c2 100644 (file)
@@ -101,15 +101,6 @@ static int events[] = {
        -1, -1,
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"pad_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"pad_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom Bamboo 2FG 4x5 Pen*\",\\\n"
-"    ENV{LIBINPUT_DEVICE_GROUP}=\"wacom-bamboo-2fg-group\"\n"
-"\n"
-"LABEL=\"pad_end\"";
-
 TEST_DEVICE("wacom-bamboo-2fg-pen",
        .type = LITEST_WACOM_BAMBOO_2FG_PEN,
        .features = LITEST_TABLET | LITEST_DISTANCE | LITEST_HOVER,
@@ -119,5 +110,8 @@ TEST_DEVICE("wacom-bamboo-2fg-pen",
        .id = &input_id,
        .events = events,
        .absinfo = absinfo,
-       .udev_rule = udev_rule,
+       .udev_properties = {
+               { "LIBINPUT_DEVICE_GROUP", "wacom-bamboo-2fg-group" },
+               { NULL },
+       },
 )
index c1c7737..7988f04 100644 (file)
@@ -81,15 +81,6 @@ static int events[] = {
        -1, -1,
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"rule_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"rule_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom Cintiq 13 HD touch Finger*\",\\\n"
-"    ENV{LIBINPUT_DEVICE_GROUP}=\"wacom-13hdt-group\"\n"
-"\n"
-"LABEL=\"rule_end\"";
-
 TEST_DEVICE("wacom-cintiq-13hdt-finger",
        .type = LITEST_WACOM_CINTIQ_13HDT_FINGER,
        .features = LITEST_TOUCH,
@@ -99,5 +90,8 @@ TEST_DEVICE("wacom-cintiq-13hdt-finger",
        .id = &input_id,
        .events = events,
        .absinfo = absinfo,
-       .udev_rule = udev_rule,
+       .udev_properties = {
+               { "LIBINPUT_DEVICE_GROUP", "wacom-13hdt-group" },
+               { NULL },
+       },
 )
index bfba5d8..307eaa7 100644 (file)
@@ -90,16 +90,6 @@ static int events[] = {
        -1, -1,
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"pad_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"pad_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom Cintiq 13 HD touch Pad*\",\\\n"
-"    ENV{ID_INPUT_TABLET_PAD}=\"1\",\\\n"
-"    ENV{LIBINPUT_DEVICE_GROUP}=\"wacom-13hdt-group\"\n"
-"\n"
-"LABEL=\"pad_end\"";
-
 TEST_DEVICE("wacom-cintiq-13hdt-pad",
        .type = LITEST_WACOM_CINTIQ_13HDT_PAD,
        .features = LITEST_TABLET_PAD | LITEST_RING,
@@ -109,5 +99,9 @@ TEST_DEVICE("wacom-cintiq-13hdt-pad",
        .id = &input_id,
        .events = events,
        .absinfo = absinfo,
-       .udev_rule = udev_rule,
+       .udev_properties = {
+               { "ID_INPUT_TABLET_PAD", "1" },
+               { "LIBINPUT_DEVICE_GROUP", "wacom-13hdt-group" },
+               { NULL },
+       },
 )
index 09005d2..5975510 100644 (file)
@@ -126,15 +126,6 @@ static int events[] = {
        -1, -1,
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"rule_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"rule_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom Cintiq 13 HD touch Pen*\",\\\n"
-"    ENV{LIBINPUT_DEVICE_GROUP}=\"wacom-13hdt-group\"\n"
-"\n"
-"LABEL=\"rule_end\"";
-
 TEST_DEVICE("wacom-cintiq-13hdt-pen-tablet",
        .type = LITEST_WACOM_CINTIQ_13HDT_PEN,
        .features = LITEST_TABLET | LITEST_DISTANCE | LITEST_TOOL_SERIAL | LITEST_TILT | LITEST_DIRECT | LITEST_HOVER,
@@ -144,5 +135,8 @@ TEST_DEVICE("wacom-cintiq-13hdt-pen-tablet",
        .id = &input_id,
        .events = events,
        .absinfo = absinfo,
-       .udev_rule = udev_rule,
+       .udev_properties = {
+               { "LIBINPUT_DEVICE_GROUP", "wacom-13hdt-group" },
+               { NULL },
+       },
 )
index 58733d5..d3e4712 100644 (file)
@@ -113,16 +113,6 @@ static int events[] = {
        -1, -1,
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"pad_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"pad_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom Cintiq 24 HD touch Pad*\",\\\n"
-"    ENV{LIBINPUT_DEVICE_GROUP}=\"wacom-24hdt-group\",\\\n"
-"    ENV{ID_INPUT_TABLET_PAD}=\"1\"\n"
-"\n"
-"LABEL=\"pad_end\"";
-
 TEST_DEVICE("wacom-cintiq-24hdt-pad",
        .type = LITEST_WACOM_CINTIQ_24HDT_PAD,
        .features = LITEST_TABLET_PAD | LITEST_RING,
@@ -133,5 +123,9 @@ TEST_DEVICE("wacom-cintiq-24hdt-pad",
        .id = &input_id,
        .events = events,
        .absinfo = absinfo,
-       .udev_rule = udev_rule,
+       .udev_properties = {
+               { "ID_INPUT_TABLET_PAD", "1" },
+               { "LIBINPUT_DEVICE_GROUP", "wacom-24hdt-group" },
+               { NULL },
+       },
 )
index e41a511..a51a138 100644 (file)
@@ -80,15 +80,6 @@ static int events[] = {
        -1, -1,
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"rule_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"rule_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom Cintiq Pro 16 Finger*\",\\\n"
-"    ENV{LIBINPUT_DEVICE_GROUP}=\"wacom-pro16-group\"\n"
-"\n"
-"LABEL=\"rule_end\"";
-
 TEST_DEVICE("wacom-cintiq-pro16-finger",
        .type = LITEST_WACOM_CINTIQ_PRO16_FINGER,
        .features = LITEST_TOUCH,
@@ -98,5 +89,8 @@ TEST_DEVICE("wacom-cintiq-pro16-finger",
        .id = &input_id,
        .events = events,
        .absinfo = absinfo,
-       .udev_rule = udev_rule,
+       .udev_properties = {
+               { "LIBINPUT_DEVICE_GROUP", "wacom-pro16-group" },
+               { NULL },
+       },
 )
index c2283fb..c5dcfb1 100644 (file)
@@ -60,16 +60,6 @@ static int events[] = {
        -1, -1,
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"pad_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"pad_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom Cintiq Pro 16 Pad*\",\\\n"
-"    ENV{ID_INPUT_TABLET_PAD}=\"1\",\\\n"
-"    ENV{LIBINPUT_DEVICE_GROUP}=\"wacom-pro16-group\"\n"
-"\n"
-"LABEL=\"pad_end\"";
-
 TEST_DEVICE("wacom-cintiq-pro16-pad",
        .type = LITEST_WACOM_CINTIQ_PRO16_PAD,
        .features = LITEST_TABLET_PAD,
@@ -79,5 +69,9 @@ TEST_DEVICE("wacom-cintiq-pro16-pad",
        .id = &input_id,
        .events = events,
        .absinfo = absinfo,
-       .udev_rule = udev_rule,
+       .udev_properties = {
+               { "ID_INPUT_TABLET_PAD", "1" },
+               { "LIBINPUT_DEVICE_GROUP", "wacom-pro16-group" },
+               { NULL },
+       },
 )
index da302e6..35997ae 100644 (file)
@@ -133,15 +133,6 @@ static int events[] = {
        -1, -1,
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"rule_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"rule_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom Cintiq Pro 16 Pen*\",\\\n"
-"    ENV{LIBINPUT_DEVICE_GROUP}=\"wacom-pro16-group\"\n"
-"\n"
-"LABEL=\"rule_end\"";
-
 TEST_DEVICE("wacom-cintiq-pro16-pen",
        .type = LITEST_WACOM_CINTIQ_PRO16_PEN,
        .features = LITEST_TABLET | LITEST_DISTANCE | LITEST_TOOL_SERIAL | LITEST_TILT | LITEST_DIRECT | LITEST_HOVER,
@@ -151,5 +142,8 @@ TEST_DEVICE("wacom-cintiq-pro16-pen",
        .id = &input_id,
        .events = events,
        .absinfo = absinfo,
-       .udev_rule = udev_rule,
+       .udev_properties = {
+               { "LIBINPUT_DEVICE_GROUP", "wacom-pro16-group" },
+               { NULL },
+       },
 )
index 50afa85..e2fee26 100644 (file)
@@ -100,15 +100,6 @@ static int events[] = {
        -1, -1,
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"pad_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"pad_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom Express Key Remote Pad*\",\\\n"
-"    ENV{ID_INPUT_TABLET_PAD}=\"1\"\n"
-"\n"
-"LABEL=\"pad_end\"";
-
 TEST_DEVICE("wacom-ekr",
        .type = LITEST_WACOM_EKR,
        .features = LITEST_TABLET_PAD | LITEST_RING,
@@ -118,5 +109,8 @@ TEST_DEVICE("wacom-ekr",
        .id = &input_id,
        .events = events,
        .absinfo = absinfo,
-       .udev_rule = udev_rule,
+       .udev_properties = {
+               { "ID_INPUT_TABLET_PAD", "1" },
+               { NULL },
+       },
 )
index 5e3569f..7c972c8 100644 (file)
@@ -85,15 +85,6 @@ static int events[] = {
        -1, -1,
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"pad_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"pad_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom Intuos3 4x6 Pad*\",\\\n"
-"    ENV{ID_INPUT_TABLET_PAD}=\"1\"\n"
-"\n"
-"LABEL=\"pad_end\"";
-
 TEST_DEVICE("wacom-intuos3-pad",
        .type = LITEST_WACOM_INTUOS3_PAD,
        .features = LITEST_TABLET_PAD | LITEST_STRIP,
@@ -103,5 +94,8 @@ TEST_DEVICE("wacom-intuos3-pad",
        .id = &input_id,
        .events = events,
        .absinfo = absinfo,
-       .udev_rule = udev_rule,
+       .udev_properties = {
+               { "ID_INPUT_TABLET_PAD", "1" },
+               { NULL },
+       },
 )
index 7c63a97..4b5d8f6 100644 (file)
@@ -103,17 +103,6 @@ static int events[] = {
        -1, -1,
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"rule_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"rule_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom Intuos5 touch M Finger*\",\\\n"
-"    ENV{LIBINPUT_DEVICE_GROUP}=\"wacom-i5-group\",\\\n"
-"    ENV{ID_INPUT_TABLET}=\"1\",\\\n"
-"    ENV{ID_INPUT_TOUCHPAD}=\"1\"\n"
-"\n"
-"LABEL=\"rule_end\"";
-
 TEST_DEVICE("wacom-intuos5-finger",
        .type = LITEST_WACOM_FINGER,
        .features = LITEST_TOUCHPAD,
@@ -123,5 +112,10 @@ TEST_DEVICE("wacom-intuos5-finger",
        .id = &input_id,
        .events = events,
        .absinfo = absinfo,
-       .udev_rule = udev_rule,
+       .udev_properties = {
+               { "ID_INPUT_TABLET", "1" },
+               { "ID_INPUT_TOUCHPAD", "1" },
+               { "LIBINPUT_DEVICE_GROUP", "wacom-i5-group" },
+               { NULL },
+       },
 )
index b6c11ec..4091c7b 100644 (file)
@@ -90,16 +90,6 @@ static int events[] = {
        -1, -1,
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"pad_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"pad_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom Intuos5 touch M Pad*\",\\\n"
-"    ENV{LIBINPUT_DEVICE_GROUP}=\"wacom-i5-group\",\\\n"
-"    ENV{ID_INPUT_TABLET_PAD}=\"1\"\n"
-"\n"
-"LABEL=\"pad_end\"";
-
 TEST_DEVICE("wacom-intuos5-pad",
        .type = LITEST_WACOM_INTUOS5_PAD,
        .features = LITEST_TABLET_PAD | LITEST_RING,
@@ -109,5 +99,9 @@ TEST_DEVICE("wacom-intuos5-pad",
        .id = &input_id,
        .events = events,
        .absinfo = absinfo,
-       .udev_rule = udev_rule,
+       .udev_properties = {
+               { "ID_INPUT_TABLET_PAD", "1" },
+               { "LIBINPUT_DEVICE_GROUP", "wacom-i5-group" },
+               { NULL },
+       },
 )
index f82f825..ae8439c 100644 (file)
@@ -142,15 +142,6 @@ static int events[] = {
        -1, -1,
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"rule_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"rule_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom Intuos5 touch M Pen*\",\\\n"
-"    ENV{LIBINPUT_DEVICE_GROUP}=\"wacom-i5-group\"\n"
-"\n"
-"LABEL=\"rule_end\"";
-
 TEST_DEVICE("wacom-intuos5-tablet",
        .type = LITEST_WACOM_INTUOS,
        .features = LITEST_TABLET | LITEST_DISTANCE | LITEST_TOOL_SERIAL | LITEST_TILT | LITEST_TOOL_MOUSE | LITEST_HOVER,
@@ -160,5 +151,8 @@ TEST_DEVICE("wacom-intuos5-tablet",
        .id = &input_id,
        .events = events,
        .absinfo = absinfo,
-       .udev_rule = udev_rule,
+       .udev_properties = {
+               { "LIBINPUT_DEVICE_GROUP", "wacom-i5-group" },
+               { NULL },
+       },
 )
index d0c1292..b810f59 100644 (file)
@@ -96,16 +96,6 @@ static int events[] = {
        -1, -1,
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"pad_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"pad_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom MobileStudio Pro 16 Pad*\",\\\n"
-"    ENV{ID_INPUT_TABLET}=\"1\",\\\n"
-"    ENV{ID_INPUT_TABLET_PAD}=\"1\"\\\n"
-"\n"
-"LABEL=\"pad_end\"";
-
 TEST_DEVICE("wacom-mobilestudio-pro16-pad",
        .type = LITEST_WACOM_MOBILESTUDIO_PRO_16_PAD,
        .features = LITEST_TABLET_PAD | LITEST_RING,
@@ -115,5 +105,9 @@ TEST_DEVICE("wacom-mobilestudio-pro16-pad",
        .id = &input_id,
        .events = events,
        .absinfo = absinfo,
-       .udev_rule = udev_rule,
+       .udev_properties = {
+               { "ID_INPUT_TABLET", "1" },
+               { "ID_INPUT_TABLET_PAD", "1" },
+               { NULL },
+       },
 )
index 574b485..c2bbecb 100644 (file)
@@ -37,15 +37,6 @@ static int events[] = {
        -1 , -1,
 };
 
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"wheel_only_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"wheel_only_end\"\n"
-"\n"
-"ATTRS{name}==\"litest wheel only device*\",\\\n"
-"    ENV{ID_INPUT_KEY}=\"1\"\n"
-"\n"
-"LABEL=\"wheel_only_end\"";
-
 TEST_DEVICE("wheel-only",
        .type = LITEST_WHEEL_ONLY,
        .features = LITEST_WHEEL,
@@ -55,5 +46,8 @@ TEST_DEVICE("wheel-only",
        .id = &input_id,
        .absinfo = NULL,
        .events = events,
-       .udev_rule = udev_rule,
+       .udev_properties = {
+               { "ID_INPUT_KEY", "1" },
+               { NULL },
+       },
 )
index a0f9243..c433315 100644 (file)
@@ -76,6 +76,8 @@ struct litest_test_device {
 
        const char *udev_rule;
        const char *quirk_file;
+
+       const struct key_value_str udev_properties[];
 };
 
 struct litest_device_interface {
index 7cb5234..128e50b 100644 (file)
@@ -1385,9 +1385,10 @@ litest_init_device_udev_rules(struct litest_test_device *dev)
        int fd;
        FILE *f;
        char *path = NULL;
+       const struct key_value_str *kv;
        static int count;
 
-       if (!dev->udev_rule)
+       if (!dev->udev_properties)
                return NULL;
 
        rc = xasprintf(&path,
@@ -1406,7 +1407,19 @@ litest_init_device_udev_rules(struct litest_test_device *dev)
        litest_assert_int_ne(fd, -1);
        f = fdopen(fd, "w");
        litest_assert_notnull(f);
-       litest_assert_int_ge(fputs(dev->udev_rule, f), 0);
+       fprintf(f, "ACTION==\"remove\", GOTO=\"rule%d_end\"\n", count);
+       fprintf(f, "KERNEL!=\"event*\", GOTO=\"rule%d_end\"\n", count);
+
+       fprintf(f, "ATTRS{name}==\"litest %s*\"", dev->name);
+
+       kv = dev->udev_properties;
+       while (kv->key) {
+               fprintf(f, ", \\\n\tENV{%s}=\"%s\"", kv->key, kv->value);
+               kv++;
+       }
+
+       fprintf(f, "\n");
+       fprintf(f, "LABEL=\"rule%d_end\"", count);;
        fclose(f);
 
        return path;