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