From 782a9a5977bd5f2101e8808b94d659fe52e2490a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Eric=20Janouch?= Date: Sun, 7 Nov 2021 15:37:21 +0100 Subject: Import libpulse poller integration, add tests --- tests/pulse.c | 127 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 tests/pulse.c (limited to 'tests') diff --git a/tests/pulse.c b/tests/pulse.c new file mode 100644 index 0000000..01805b8 --- /dev/null +++ b/tests/pulse.c @@ -0,0 +1,127 @@ +/* + * tests/pulse.c + * + * Copyright (c) 2021, Přemysl Eric Janouch + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#define PROGRAM_NAME "test" +#define PROGRAM_VERSION "0" + +#define LIBERTY_WANT_POLLER + +#include "../liberty.c" +#include "../liberty-pulse.c" + +// --- Tests ------------------------------------------------------------------- + +enum +{ + EVENT_IO = 1 << 0, + EVENT_TIME = 1 << 1, + EVENT_DEFER = 1 << 2, + EVENT_ALL = (1 << 3) - 1 +}; + +static intptr_t g_events = 0; +static intptr_t g_destroys = 0; + +static void +io_event_cb (pa_mainloop_api *a, + pa_io_event *e, int fd, pa_io_event_flags_t events, void *userdata) +{ + (void) a; (void) e; (void) fd; (void) events; + g_events |= (intptr_t) userdata; +} + +static void +io_event_destroy_cb (pa_mainloop_api *a, pa_io_event *e, void *userdata) +{ + (void) a; (void) e; + g_destroys += (intptr_t) userdata; +} + +static void +time_event_cb (pa_mainloop_api *a, + pa_time_event *e, const struct timeval *tv, void *userdata) +{ + (void) a; (void) e; (void) tv; + g_events |= (intptr_t) userdata; +} + +static void +time_event_destroy_cb (pa_mainloop_api *a, pa_time_event *e, void *userdata) +{ + (void) a; (void) e; + g_destroys += (intptr_t) userdata; +} + +static void +defer_event_cb (pa_mainloop_api *a, pa_defer_event *e, void *userdata) +{ + (void) a; (void) e; + g_events |= (intptr_t) userdata; +} + +static void +defer_event_destroy_cb (pa_mainloop_api *a, pa_defer_event *e, void *userdata) +{ + (void) a; (void) e; + g_destroys += (intptr_t) userdata; +} + +static void +test_pulse (void) +{ + struct poller poller; + poller_init (&poller); + + // Let's just get this over with, not aiming for high test coverage here + pa_mainloop_api *api = poller_pa_new (&poller); + + pa_io_event *ie = api->io_new (api, STDOUT_FILENO, PA_IO_EVENT_OUTPUT, + io_event_cb, (void *) EVENT_IO); + api->io_set_destroy (ie, io_event_destroy_cb); + + const struct timeval tv = poller_pa_get_current_time (); + pa_time_event *te = api->time_new (api, &tv, + time_event_cb, (void *) EVENT_TIME); + api->time_set_destroy (te, time_event_destroy_cb); + api->time_restart (te, &tv); + + pa_defer_event *de = api->defer_new (api, + defer_event_cb, (void *) EVENT_DEFER); + api->defer_set_destroy (de, defer_event_destroy_cb); + api->defer_enable (api->defer_new (api, + defer_event_cb, (void *) EVENT_DEFER), false); + + alarm (1); + while (g_events != EVENT_ALL) + poller_run (&poller); + + poller_pa_destroy (api); + soft_assert (g_destroys == EVENT_ALL); + poller_free (&poller); +} + +// --- Main -------------------------------------------------------------------- + +int +main (int argc, char *argv[]) +{ + struct test test; + test_init (&test, argc, argv); + test_add_simple (&test, "/pulse", NULL, test_pulse); + return test_run (&test); +} -- cgit v1.2.3