From: Peter Hutterer Date: Wed, 10 Jul 2013 23:09:14 +0000 (+1000) Subject: test: add uinput prop bits and the test for it X-Git-Tag: libevdev-0.2~6 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=76a03e53261723f6096a5bec90207c9ea304c227;p=platform%2Fupstream%2Flibevdev.git test: add uinput prop bits and the test for it Turns out I was looking at an old header file, UI_SET_PROPBIT has existed for quite a while. Signed-off-by: Peter Hutterer --- diff --git a/test/test-common-uinput.c b/test/test-common-uinput.c index 4b3a079..b99bfa8 100644 --- a/test/test-common-uinput.c +++ b/test/test-common-uinput.c @@ -185,7 +185,7 @@ inotify_setup() int uinput_device_create(struct uinput_device* d) { - int type, code; + int type, code, prop; struct uinput_user_dev dev; int rc; int fd; @@ -252,6 +252,15 @@ uinput_device_create(struct uinput_device* d) } + for (prop = 0; prop < INPUT_PROP_MAX; prop++) { + if (!bit_is_set(d->d.props, prop)) + continue; + + rc = ioctl(fd, UI_SET_PROPBIT, prop); + if (rc == -1) + goto error; + } + rc = write(fd, &dev, sizeof(dev)); if (rc < 0) goto error; @@ -335,6 +344,19 @@ uinput_device_set_bit(struct uinput_device* dev, unsigned int bit) } int +uinput_device_set_prop(struct uinput_device *dev, unsigned int prop) +{ + if (!dev) + return -EINVAL; + + if (prop > INPUT_PROP_MAX) + return -EINVAL; + + set_bit(dev->d.props, prop); + return 0; +} + +int uinput_device_set_event_bit(struct uinput_device* dev, unsigned int type, unsigned int code) { int max; diff --git a/test/test-common-uinput.h b/test/test-common-uinput.h index bf59a88..b50155c 100644 --- a/test/test-common-uinput.h +++ b/test/test-common-uinput.h @@ -35,6 +35,7 @@ int uinput_device_create(struct uinput_device* dev); int uinput_device_set_name(struct uinput_device* dev, const char *name); int uinput_device_set_ids(struct uinput_device* dev, const struct input_id *ids); int uinput_device_set_bit(struct uinput_device* dev, unsigned int bit); +int uinput_device_set_prop(struct uinput_device *dev, unsigned int prop); int uinput_device_set_event_bit(struct uinput_device* dev, unsigned int type, unsigned int code); int uinput_device_set_event_bits(struct uinput_device* dev, ...); int uinput_device_set_event_bits_v(struct uinput_device* dev, va_list args); diff --git a/test/test-libevdev-has-event.c b/test/test-libevdev-has-event.c index 2af2f3e..c2c1a2b 100644 --- a/test/test-libevdev-has-event.c +++ b/test/test-libevdev-has-event.c @@ -212,17 +212,31 @@ START_TEST(test_input_props) { struct uinput_device* uidev; struct libevdev *dev; - int rc; + int rc, i; - rc = test_create_device(&uidev, &dev, - EV_ABS, ABS_X, - -1); + uidev = uinput_device_new(TEST_DEVICE_NAME); + rc = uinput_device_set_event_bits(uidev, + EV_ABS, ABS_X, + -1); + ck_assert_int_eq(rc, 0); + uinput_device_set_prop(uidev, INPUT_PROP_DIRECT); + uinput_device_set_prop(uidev, INPUT_PROP_BUTTONPAD); + rc = uinput_device_create(uidev); + ck_assert_msg(rc == 0, "Failed to create uinput device: %s", strerror(-rc)); + + rc = libevdev_new_from_fd(uinput_device_get_fd(uidev), &dev); ck_assert_msg(rc == 0, "Failed to create device: %s", strerror(-rc)); + + for (i = 0; i < INPUT_PROP_MAX; i++) { + if (i == INPUT_PROP_DIRECT || i == INPUT_PROP_BUTTONPAD) + ck_assert_int_eq(libevdev_has_property(dev, i), 1); + else + ck_assert_int_eq(libevdev_has_property(dev, i), 0); + } + ck_assert_int_eq(libevdev_has_property(dev, INPUT_PROP_MAX + 1), 0); ck_assert_int_eq(libevdev_has_property(dev, INPUT_PROP_MAX), 0); - ck_assert_int_eq(libevdev_has_property(dev, INPUT_PROP_BUTTONPAD), 0); - /* FIXME: no idea how to set props on uinput devices */ uinput_device_free(uidev); libevdev_free(dev);