static int
open_restricted(const char *path, int flags, void *userdata)
{
- int fd = open(path, flags);
- return fd < 0 ? -errno : fd;
+ const char prefix[] = "/dev/input/event";
+ struct litest_context *ctx = userdata;
+ struct path *p;
+ int fd;
+
+ litest_assert_ptr_notnull(ctx);
+
+ fd = open(path, flags);
+ if (fd < 0)
+ return -errno;
+
+ if (strneq(path, prefix, strlen(prefix))) {
+ p = zalloc(sizeof *p);
+ p->path = safe_strdup(path);
+ p->fd = fd;
+ list_append(&ctx->paths, &p->link);
+ }
+
+ return fd;
}
static void
close_restricted(int fd, void *userdata)
{
+ struct litest_context *ctx = userdata;
+ struct path *p, *tmp;
+
+ list_for_each_safe(p, tmp, &ctx->paths, link) {
+ if (p->fd != fd)
+ continue;
+ list_remove(&p->link);
+ free(p->path);
+ free(p);
+ }
+
close(fd);
}
struct libinput *
litest_create_context(void)
{
- struct libinput *libinput =
- libinput_path_create_context(&interface, NULL);
+ struct libinput *libinput;
+ struct litest_context *ctx;
+
+ ctx = zalloc(sizeof *ctx);
+ list_init(&ctx->paths);
+
+ libinput = libinput_path_create_context(&interface, ctx);
litest_assert_notnull(libinput);
libinput_log_set_handler(libinput, litest_log_handler);
void
litest_destroy_context(struct libinput *li)
{
+ struct path *p, *tmp;
+ struct litest_context *ctx;
+
+
+ ctx = libinput_get_user_data(li);
+ litest_assert_ptr_notnull(ctx);
libinput_unref(li);
+
+ list_for_each_safe(p, tmp, &ctx->paths, link) {
+ litest_abort_msg("Device paths should be removed by now");
+ }
+ free(ctx);
}
void
struct litest_device *dev = litest_current_device();
struct libinput *li = dev->libinput;
int warning_triggered = 0;
+ void *old_user_data;
litest_enable_tap(dev->libinput_device);
litest_drain_events(li);
litest_timeout_tap();
+ old_user_data = libinput_get_user_data(li);
libinput_set_user_data(li, &warning_triggered);
libinput_log_set_handler(li, timer_offset_warning);
libinput_dispatch(li);
/* triggered for touch down and touch up */
ck_assert_int_eq(warning_triggered, 2);
litest_restore_log_handler(li);
+
+ libinput_set_user_data(li, old_user_data);
}
END_TEST
struct litest_device *dev = litest_current_device();
struct libinput *li = dev->libinput;
int warning_triggered = 0;
+ void *old_user_data;
+ old_user_data = libinput_get_user_data(li);
litest_drain_events(li);
for (int i = 0; i < 10; i++) {
libinput_dispatch(li);
}
+
ck_assert_int_ge(warning_triggered, 1);
litest_restore_log_handler(li);
+ libinput_set_user_data(li, old_user_data);
}
END_TEST
};
double pressure;
int warning_triggered = 0;
+ void *old_user_data;
litest_drain_events(li);
+ old_user_data = libinput_get_user_data(li);
libinput_set_user_data(li, &warning_triggered);
libinput_log_set_handler(li, pressure_threshold_warning);
ck_assert_int_eq(warning_triggered, 1);
litest_restore_log_handler(li);
+
+ libinput_set_user_data(li, old_user_data);
}
END_TEST