mirror of
https://gitlab.freedesktop.org/libinput/libei.git
synced 2026-05-03 21:58:08 +02:00
test: use drop caps, not reject caps as terminology
And add a test that tests for dropped caps Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
7ae661a029
commit
7d75b3eb8c
3 changed files with 91 additions and 42 deletions
|
|
@ -115,22 +115,27 @@ peck_enable_eis_behavior(struct peck *peck, enum peck_eis_behavior behavior)
|
|||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_TOUCH);
|
||||
break;
|
||||
case PECK_EIS_BEHAVIOR_REJECT_DEVICE:
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_REJECT_POINTER);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_REJECT_KEYBOARD);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_REJECT_TOUCH);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_DROP_POINTER);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_DROP_KEYBOARD);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_DROP_TOUCH);
|
||||
break;
|
||||
case PECK_EIS_BEHAVIOR_REJECT_CLIENT:
|
||||
case PECK_EIS_BEHAVIOR_REJECT_POINTER:
|
||||
case PECK_EIS_BEHAVIOR_REJECT_KEYBOARD:
|
||||
case PECK_EIS_BEHAVIOR_REJECT_TOUCH:
|
||||
case PECK_EIS_BEHAVIOR_DROP_POINTER:
|
||||
case PECK_EIS_BEHAVIOR_DROP_KEYBOARD:
|
||||
case PECK_EIS_BEHAVIOR_DROP_TOUCH:
|
||||
flag_clear(peck->eis_behavior, behavior - 1);
|
||||
flag_set(peck->eis_behavior, behavior);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_DEVICE);
|
||||
break;
|
||||
case PECK_EIS_BEHAVIOR_ACCEPT_CLIENT:
|
||||
case PECK_EIS_BEHAVIOR_ACCEPT_POINTER:
|
||||
case PECK_EIS_BEHAVIOR_ACCEPT_KEYBOARD:
|
||||
case PECK_EIS_BEHAVIOR_ACCEPT_TOUCH:
|
||||
flag_clear(peck->eis_behavior, behavior + 1);
|
||||
flag_set(peck->eis_behavior, behavior);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_DEVICE);
|
||||
break;
|
||||
case PECK_EIS_BEHAVIOR_HANDLE_DEVICE:
|
||||
flag_set(peck->eis_behavior, behavior);
|
||||
break;
|
||||
}
|
||||
|
|
@ -172,34 +177,40 @@ peck_handle_eis_connect(struct peck *peck, struct eis_event *e)
|
|||
}
|
||||
}
|
||||
|
||||
static inline tristate
|
||||
peck_check_eis_added(struct peck *peck, struct eis_event *e)
|
||||
static inline void
|
||||
peck_handle_eis_added(struct peck *peck, struct eis_event *e)
|
||||
{
|
||||
struct eis_device *device = eis_event_get_device(e);
|
||||
tristate accept = tristate_unset;
|
||||
uint32_t mask = 0;
|
||||
struct map {
|
||||
enum eis_device_capability cap;
|
||||
enum peck_eis_behavior behavior;
|
||||
} map[] = {
|
||||
{ EIS_DEVICE_CAP_POINTER, PECK_EIS_BEHAVIOR_ACCEPT_POINTER },
|
||||
// { EIS_DEVICE_CAP_POINTER_ABSOLUTE, PECK_EIS_BEHAVIOR_ACCEPT_POINTER_ABSOLUTE },
|
||||
{ EIS_DEVICE_CAP_KEYBOARD, PECK_EIS_BEHAVIOR_ACCEPT_KEYBOARD },
|
||||
{ EIS_DEVICE_CAP_TOUCH, PECK_EIS_BEHAVIOR_ACCEPT_TOUCH },
|
||||
};
|
||||
struct map *m;
|
||||
|
||||
if (eis_device_has_capability(device, EIS_DEVICE_CAP_POINTER)) {
|
||||
if (flag_is_set(peck->eis_behavior, PECK_EIS_BEHAVIOR_ACCEPT_POINTER))
|
||||
accept = tristate_yes;
|
||||
else if (flag_is_set(peck->eis_behavior, PECK_EIS_BEHAVIOR_REJECT_POINTER))
|
||||
accept = tristate_no;
|
||||
ARRAY_FOR_EACH(map, m) {
|
||||
if (eis_device_has_capability(device, m->cap)) {
|
||||
if (flag_is_set(peck->eis_behavior, m->behavior)) {
|
||||
mask |= bit(m->cap);
|
||||
} else {
|
||||
log_debug(peck, "Dropping cap %d\n", m->cap);
|
||||
eis_device_disable_capability(device, m->cap);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (eis_device_has_capability(device, EIS_DEVICE_CAP_KEYBOARD)) {
|
||||
if (flag_is_set(peck->eis_behavior, PECK_EIS_BEHAVIOR_ACCEPT_KEYBOARD))
|
||||
accept = tristate_yes;
|
||||
else if (flag_is_set(peck->eis_behavior, PECK_EIS_BEHAVIOR_REJECT_KEYBOARD))
|
||||
accept = tristate_no;
|
||||
if (!mask) {
|
||||
log_debug(peck, "EIS refusing device\n");
|
||||
eis_device_disconnect(eis_event_get_device(e));
|
||||
} else {
|
||||
log_debug(peck, "EIS adding device\n");
|
||||
eis_device_connect(eis_event_get_device(e));
|
||||
}
|
||||
|
||||
if (eis_device_has_capability(device, EIS_DEVICE_CAP_TOUCH)) {
|
||||
if (flag_is_set(peck->eis_behavior, PECK_EIS_BEHAVIOR_ACCEPT_TOUCH))
|
||||
accept = tristate_yes;
|
||||
else if (flag_is_set(peck->eis_behavior, PECK_EIS_BEHAVIOR_REJECT_TOUCH))
|
||||
accept = tristate_no;
|
||||
}
|
||||
|
||||
return accept;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -230,10 +241,10 @@ peck_dispatch_eis(struct peck *peck)
|
|||
break;
|
||||
case EIS_EVENT_DEVICE_ADDED:
|
||||
case EIS_EVENT_DEVICE_REMOVED:
|
||||
if (tristate_is_unset(peck_check_eis_added(peck, e)))
|
||||
process_event = tristate_no;
|
||||
else
|
||||
if (flag_is_set(peck->eis_behavior, PECK_EIS_BEHAVIOR_HANDLE_DEVICE))
|
||||
process_event = tristate_yes;
|
||||
else
|
||||
process_event = tristate_no;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
@ -261,13 +272,7 @@ peck_dispatch_eis(struct peck *peck)
|
|||
eis_client_disconnect(eis_event_get_client(e));
|
||||
break;
|
||||
case EIS_EVENT_DEVICE_ADDED:
|
||||
if (tristate_is_yes(peck_check_eis_added(peck, e))) {
|
||||
log_debug(peck, "EIS adding device\n");
|
||||
eis_device_connect(eis_event_get_device(e));
|
||||
} else {
|
||||
log_debug(peck, "EIS refusing device\n");
|
||||
eis_device_disconnect(eis_event_get_device(e));
|
||||
}
|
||||
peck_handle_eis_added(peck, e);
|
||||
break;
|
||||
case EIS_EVENT_DEVICE_REMOVED:
|
||||
log_debug(peck, "EIS removing device\n");
|
||||
|
|
|
|||
|
|
@ -61,17 +61,18 @@ enum peck_eis_behavior {
|
|||
/**
|
||||
* Process add/remove requests from the client.
|
||||
*/
|
||||
PECK_EIS_BEHAVIOR_HANDLE_DEVICE, /* Implied by the various ones below */
|
||||
PECK_EIS_BEHAVIOR_ACCEPT_DEVICE,
|
||||
PECK_EIS_BEHAVIOR_REJECT_DEVICE,
|
||||
|
||||
PECK_EIS_BEHAVIOR_ACCEPT_POINTER,
|
||||
PECK_EIS_BEHAVIOR_REJECT_POINTER,
|
||||
PECK_EIS_BEHAVIOR_DROP_POINTER,
|
||||
|
||||
PECK_EIS_BEHAVIOR_ACCEPT_KEYBOARD,
|
||||
PECK_EIS_BEHAVIOR_REJECT_KEYBOARD,
|
||||
PECK_EIS_BEHAVIOR_DROP_KEYBOARD,
|
||||
|
||||
PECK_EIS_BEHAVIOR_ACCEPT_TOUCH,
|
||||
PECK_EIS_BEHAVIOR_REJECT_TOUCH,
|
||||
PECK_EIS_BEHAVIOR_DROP_TOUCH,
|
||||
};
|
||||
|
||||
enum peck_ei_behavior {
|
||||
|
|
|
|||
|
|
@ -177,6 +177,48 @@ test_ei_device_add(const MunitParameter params[], void *user_data)
|
|||
return MUNIT_OK;
|
||||
}
|
||||
|
||||
static MunitResult
|
||||
test_ei_device_add_drop_caps(const MunitParameter params[], void *user_data)
|
||||
{
|
||||
_cleanup_peck_ struct peck *peck = peck_new();
|
||||
|
||||
/* Device with pointer and keyboard caps but pointer is dropped */
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_ALL);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_DROP_POINTER);
|
||||
|
||||
peck_dispatch_eis(peck);
|
||||
peck_dispatch_ei(peck);
|
||||
peck_dispatch_eis(peck);
|
||||
peck_dispatch_ei(peck);
|
||||
|
||||
_cleanup_ei_device_ struct ei_device *device = NULL;
|
||||
|
||||
with_client(peck) {
|
||||
device = ei_device_new(ei);
|
||||
ei_device_configure_name(device, __func__);
|
||||
ei_device_configure_capability(device, EI_DEVICE_CAP_POINTER);
|
||||
ei_device_configure_capability(device, EI_DEVICE_CAP_KEYBOARD);
|
||||
ei_device_add(device);
|
||||
}
|
||||
|
||||
peck_dispatch_eis(peck);
|
||||
|
||||
with_client(peck) {
|
||||
ei_dispatch(ei);
|
||||
|
||||
_cleanup_ei_event_ struct ei_event *event = ei_get_event(ei);
|
||||
munit_assert_ptr_not_null(event);
|
||||
munit_assert_int(ei_event_get_type(event), ==, EI_EVENT_DEVICE_ADDED);
|
||||
|
||||
struct ei_device *d = ei_event_get_device(event);
|
||||
munit_assert_ptr_equal(d, device);
|
||||
munit_assert(ei_device_has_capability(d, EI_DEVICE_CAP_KEYBOARD));
|
||||
munit_assert(!ei_device_has_capability(d, EI_DEVICE_CAP_POINTER));
|
||||
}
|
||||
|
||||
return MUNIT_OK;
|
||||
}
|
||||
|
||||
static MunitResult
|
||||
test_ei_device_add_zero_caps(const MunitParameter params[], void *user_data)
|
||||
{
|
||||
|
|
@ -185,7 +227,7 @@ test_ei_device_add_zero_caps(const MunitParameter params[], void *user_data)
|
|||
/* Device with pointer caps but those caps are rejected -> device
|
||||
immediately removed by EIS */
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_ALL);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_REJECT_POINTER);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_DROP_POINTER);
|
||||
|
||||
peck_dispatch_eis(peck);
|
||||
peck_dispatch_ei(peck);
|
||||
|
|
@ -220,6 +262,7 @@ static MunitTest ei_tests[] = {
|
|||
{ .name = "/ei/reject_after_connect", .test = test_ei_reject_after_connect },
|
||||
{ .name = "/device/basics", .test = test_ei_device_basics },
|
||||
{ .name = "/device/add", .test = test_ei_device_add },
|
||||
{ .name = "/device/add_drop_caps", .test = test_ei_device_add_drop_caps },
|
||||
{ .name = "/device/add_zero_caps", .test = test_ei_device_add_zero_caps },
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue