diff --git a/src/libei-region.c b/src/libei-region.c index 1c9d240..42b81b6 100644 --- a/src/libei-region.c +++ b/src/libei-region.c @@ -98,3 +98,48 @@ ei_region_convert_point(struct ei_region *r, double *x, double *y) return false; } + +#ifdef _enable_tests_ +#include "util-munit.h" +MUNIT_TEST(test_region_setters) +{ + struct ei_region r = {0}; + + ei_region_set_size(&r, 1, 2); + ei_region_set_offset(&r, 3, 4); + ei_region_set_physical_scale(&r, 5.6); + + munit_assert_int(ei_region_get_width(&r), ==, 1); + munit_assert_int(ei_region_get_height(&r), ==, 2); + munit_assert_int(ei_region_get_x(&r), ==, 3); + munit_assert_int(ei_region_get_y(&r), ==, 4); + munit_assert_double(ei_region_get_physical_scale(&r), ==, 5.6); + + return MUNIT_OK; +} + +MUNIT_TEST(test_region_contains) +{ + struct ei_region r = {0}; + + ei_region_set_size(&r, 100, 200); + ei_region_set_offset(&r, 300, 400); + + munit_assert_true(ei_region_contains(&r, 300, 400)); + munit_assert_true(ei_region_contains(&r, 399.9, 599.9)); + + munit_assert_false(ei_region_contains(&r, 299.9, 400)); + munit_assert_false(ei_region_contains(&r, 300, 399.9)); + + munit_assert_false(ei_region_contains(&r, 400.1, 400)); + munit_assert_false(ei_region_contains(&r, 400, 399.9)); + + munit_assert_false(ei_region_contains(&r, 299.9, 599.9)); + munit_assert_false(ei_region_contains(&r, 300, 600.1)); + + munit_assert_false(ei_region_contains(&r, 400, 599.9)); + munit_assert_false(ei_region_contains(&r, 399, 600)); + + return MUNIT_OK; +} +#endif diff --git a/src/libeis-region.c b/src/libeis-region.c index 1d8bf81..3f7eb46 100644 --- a/src/libeis-region.c +++ b/src/libeis-region.c @@ -138,3 +138,48 @@ eis_region_contains(struct eis_region *r, double x, double y) return (x >= r->x && x < r->x + r->width && y >= r->y && y < r->y + r->height); } + +#ifdef _enable_tests_ +#include "util-munit.h" +MUNIT_TEST(test_region_setters) +{ + struct eis_region r = {0}; + + eis_region_set_size(&r, 1, 2); + eis_region_set_offset(&r, 3, 4); + eis_region_set_physical_scale(&r, 5.6); + + munit_assert_int(eis_region_get_width(&r), ==, 1); + munit_assert_int(eis_region_get_height(&r), ==, 2); + munit_assert_int(eis_region_get_x(&r), ==, 3); + munit_assert_int(eis_region_get_y(&r), ==, 4); + munit_assert_double(eis_region_get_physical_scale(&r), ==, 5.6); + + return MUNIT_OK; +} + +MUNIT_TEST(test_region_contains) +{ + struct eis_region r = {0}; + + eis_region_set_size(&r, 100, 200); + eis_region_set_offset(&r, 300, 400); + + munit_assert_true(eis_region_contains(&r, 300, 400)); + munit_assert_true(eis_region_contains(&r, 399.9, 599.9)); + + munit_assert_false(eis_region_contains(&r, 299.9, 400)); + munit_assert_false(eis_region_contains(&r, 300, 399.9)); + + munit_assert_false(eis_region_contains(&r, 400.1, 400)); + munit_assert_false(eis_region_contains(&r, 400, 399.9)); + + munit_assert_false(eis_region_contains(&r, 299.9, 599.9)); + munit_assert_false(eis_region_contains(&r, 300, 600.1)); + + munit_assert_false(eis_region_contains(&r, 400, 599.9)); + munit_assert_false(eis_region_contains(&r, 399, 600)); + + return MUNIT_OK; +} +#endif diff --git a/test/test-eis.c b/test/test-eis.c index aa2f8aa..5c872b6 100644 --- a/test/test-eis.c +++ b/test/test-eis.c @@ -287,3 +287,61 @@ MUNIT_TEST(eistest_device_ignore_paused_device) return MUNIT_OK; } + +MUNIT_TEST(eistest_regions) +{ + _unref_(peck) *peck = peck_new(); + + peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_CLIENT); + peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_DEFAULT_SEAT); + peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_BIND_SEAT); + + peck_dispatch_until_stable(peck); + + with_server(peck) { + struct eis_seat *seat = peck_eis_get_default_seat(peck); + _unref_(eis_device) *ptr = eis_seat_new_device(seat); + eis_device_configure_capability(ptr, EIS_DEVICE_CAP_POINTER_ABSOLUTE); + eis_device_configure_capability(ptr, EIS_DEVICE_CAP_BUTTON); + eis_device_configure_capability(ptr, EIS_DEVICE_CAP_SCROLL); + eis_device_configure_name(ptr, "region device"); + _unref_(eis_region) *region = eis_device_new_region(ptr); + eis_region_set_size(region, 100, 200); + eis_region_set_offset(region, 300, 400); + eis_region_set_physical_scale(region, 5.6); + eis_region_add(region); + eis_device_add(ptr); + eis_device_resume(ptr); + } + + peck_dispatch_until_stable(peck); + + with_client(peck) { + _unref_(ei_event) *added = + peck_ei_next_event(ei, EI_EVENT_DEVICE_ADDED); + _unref_(ei_event) *resumed = + peck_ei_next_event(ei, EI_EVENT_DEVICE_RESUMED); + struct ei_device *device = ei_event_get_device(resumed); + ei_device_start_emulating(device, 1); + } + + peck_dispatch_until_stable(peck); + + with_server(peck) { + _unref_(eis_event) *start = + peck_eis_next_event(eis, EIS_EVENT_DEVICE_START_EMULATING); + struct eis_device *device = eis_event_get_device(start); + + struct eis_region *r = eis_device_get_region(device, 0); + munit_assert_int(eis_region_get_width(r), ==, 100); + munit_assert_int(eis_region_get_height(r), ==, 200); + munit_assert_int(eis_region_get_x(r), ==, 300); + munit_assert_int(eis_region_get_y(r), ==, 400); + munit_assert_double(eis_region_get_physical_scale(r), ==, 5.6); + + r = eis_device_get_region(device, 1); + munit_assert_null(r); + } + + return MUNIT_OK; +}