And make it init the full litest device minus the libinput device. This
enables us to add litest devices that aren't handled by libinput.

Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net>
---
 test/litest.c | 70 ++++++++++++++++++++++++++++++++---------------------------
 test/litest.h |  7 ++++++
 2 files changed, 45 insertions(+), 32 deletions(-)

diff --git a/test/litest.c b/test/litest.c
index 196fb1fa..12045c64 100644
--- a/test/litest.c
+++ b/test/litest.c
@@ -1262,7 +1262,10 @@ litest_init_device_udev_rules(struct litest_test_device 
*dev)
        return path;
 }
 
-static struct litest_device *
+/**
+ * Creates a uinput device but does not add it to a libinput context
+ */
+struct litest_device *
 litest_create(enum litest_device_type which,
              const char *name_override,
              struct input_id *id_override,
@@ -1275,6 +1278,8 @@ litest_create(enum litest_device_type which,
        const struct input_id *id;
        struct input_absinfo *abs;
        int *events, *e;
+       const char *path;
+       int fd, rc;
 
        dev = devices;
        while (*dev) {
@@ -1294,34 +1299,40 @@ litest_create(enum litest_device_type which,
                if (abs_override || events_override) {
                        litest_abort_msg("Custom create cannot be overridden");
                }
+       } else {
+               abs = merge_absinfo((*dev)->absinfo, abs_override);
+               events = merge_events((*dev)->events, events_override);
+               name = name_override ? name_override : (*dev)->name;
+               id = id_override ? id_override : (*dev)->id;
 
-               return d;
-       }
+               d->uinput = litest_create_uinput_device_from_description(name,
+                                                                        id,
+                                                                        abs,
+                                                                        
events);
+               d->interface = (*dev)->interface;
 
-       abs = merge_absinfo((*dev)->absinfo, abs_override);
-       events = merge_events((*dev)->events, events_override);
-       name = name_override ? name_override : (*dev)->name;
-       id = id_override ? id_override : (*dev)->id;
+               for (e = events; *e != -1; e += 2) {
+                       unsigned int type = *e,
+                                    code = *(e + 1);
 
-       d->uinput = litest_create_uinput_device_from_description(name,
-                                                                id,
-                                                                abs,
-                                                                events);
-       d->interface = (*dev)->interface;
-
-       for (e = events; *e != -1; e += 2) {
-               unsigned int type = *e,
-                            code = *(e + 1);
-
-               if (type == INPUT_PROP_MAX &&
-                   code == INPUT_PROP_SEMI_MT) {
-                       d->semi_mt.is_semi_mt = true;
-                       break;
+                       if (type == INPUT_PROP_MAX &&
+                           code == INPUT_PROP_SEMI_MT) {
+                               d->semi_mt.is_semi_mt = true;
+                               break;
+                       }
                }
+
+               free(abs);
+               free(events);
        }
 
-       free(abs);
-       free(events);
+       path = libevdev_uinput_get_devnode(d->uinput);
+       litest_assert(path != NULL);
+       fd = open(path, O_RDWR|O_NONBLOCK);
+       litest_assert_int_ne(fd, -1);
+
+       rc = libevdev_new_from_fd(fd, &d->evdev);
+       litest_assert_int_eq(rc, 0);
 
        return d;
 
@@ -1384,8 +1395,6 @@ litest_add_device_with_overrides(struct libinput 
*libinput,
                                 const int *events_override)
 {
        struct litest_device *d;
-       int fd;
-       int rc;
        const char *path;
 
        d = litest_create(which,
@@ -1396,11 +1405,6 @@ litest_add_device_with_overrides(struct libinput 
*libinput,
 
        path = libevdev_uinput_get_devnode(d->uinput);
        litest_assert(path != NULL);
-       fd = open(path, O_RDWR|O_NONBLOCK);
-       litest_assert_int_ne(fd, -1);
-
-       rc = libevdev_new_from_fd(fd, &d->evdev);
-       litest_assert_int_eq(rc, 0);
 
        d->libinput = libinput;
        d->libinput_device = libinput_path_add_device(d->libinput, path);
@@ -1460,8 +1464,10 @@ litest_delete_device(struct litest_device *d)
 
        litest_assert_int_eq(d->skip_ev_syn, 0);
 
-       libinput_device_unref(d->libinput_device);
-       libinput_path_remove_device(d->libinput_device);
+       if (d->libinput_device) {
+               libinput_device_unref(d->libinput_device);
+               libinput_path_remove_device(d->libinput_device);
+       }
        if (d->owns_context)
                libinput_unref(d->libinput);
        close(libevdev_get_fd(d->evdev));
diff --git a/test/litest.h b/test/litest.h
index 4416bbc2..5e0621ce 100644
--- a/test/litest.h
+++ b/test/litest.h
@@ -406,6 +406,13 @@ litest_create_uinput_device_from_description(const char 
*name,
                                             const struct input_absinfo *abs,
                                             const int *events);
 struct litest_device *
+litest_create(enum litest_device_type which,
+             const char *name_override,
+             struct input_id *id_override,
+             const struct input_absinfo *abs_override,
+             const int *events_override);
+
+struct litest_device *
 litest_create_device_with_overrides(enum litest_device_type which,
                                    const char *name_override,
                                    struct input_id *id_override,
-- 
2.13.3

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to