From 0f60a33000cb2cd7ad61c58941bd8d3482db173a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Kristian=20H=C3=B8gsberg?= Date: Tue, 11 Dec 2012 23:22:16 -0500 Subject: [PATCH] tests: Convert remaining module tests to not use test-runner.c The remaining module tests don't need to fork and talk to a test client, so just convert them to regular modules and let them handle running their tests themselves. Then drop test-runner.[ch]. --- tests/Makefile.am | 6 +- tests/surface-global-test.c | 18 +++++- tests/surface-test.c | 17 ++++- tests/test-runner.c | 150 -------------------------------------------- tests/test-runner.h | 42 ------------- 5 files changed, 33 insertions(+), 200 deletions(-) delete mode 100644 tests/test-runner.c delete mode 100644 tests/test-runner.h diff --git a/tests/Makefile.am b/tests/Makefile.am index b5caae4..293633c 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -31,10 +31,8 @@ AM_CFLAGS = $(GCC_CFLAGS) AM_CPPFLAGS = -I$(top_srcdir)/src -DUNIT_TEST $(COMPOSITOR_CFLAGS) AM_LDFLAGS = -module -avoid-version -rpath $(libdir) -test_runner_src = test-runner.c test-runner.h - -surface_global_test_la_SOURCES = surface-global-test.c $(test_runner_src) -surface_test_la_SOURCES = surface-test.c $(test_runner_src) +surface_global_test_la_SOURCES = surface-global-test.c +surface_test_la_SOURCES = surface-test.c weston_test = weston-test.la weston_test_la_LIBADD = $(COMPOSITOR_LIBS) \ diff --git a/tests/surface-global-test.c b/tests/surface-global-test.c index 6e991ba..dbb8c8d 100644 --- a/tests/surface-global-test.c +++ b/tests/surface-global-test.c @@ -22,10 +22,12 @@ #include -#include "test-runner.h" +#include "../src/compositor.h" -TEST(surface_to_from_global) +static void +surface_to_from_global(void *data) { + struct weston_compositor *compositor = data; struct weston_surface *surface; float x, y; wl_fixed_t fx, fy; @@ -63,3 +65,15 @@ TEST(surface_to_from_global) wl_display_terminate(compositor->wl_display); } + +WL_EXPORT int +module_init(struct weston_compositor *compositor) +{ + struct wl_event_loop *loop; + + loop = wl_display_get_event_loop(compositor->wl_display); + + wl_event_loop_add_idle(loop, surface_to_from_global, compositor); + + return 0; +} diff --git a/tests/surface-test.c b/tests/surface-test.c index 28243b1..b41c63f 100644 --- a/tests/surface-test.c +++ b/tests/surface-test.c @@ -25,10 +25,11 @@ #include #include "../src/compositor.h" -#include "test-runner.h" -TEST(surface_transform) +static void +surface_transform(void *data) { + struct weston_compositor *compositor = data; struct weston_surface *surface; float x, y; @@ -47,3 +48,15 @@ TEST(surface_transform) wl_display_terminate(compositor->wl_display); } + +WL_EXPORT int +module_init(struct weston_compositor *compositor) +{ + struct wl_event_loop *loop; + + loop = wl_display_get_event_loop(compositor->wl_display); + + wl_event_loop_add_idle(loop, surface_transform, compositor); + + return 0; +} diff --git a/tests/test-runner.c b/tests/test-runner.c deleted file mode 100644 index 6ca087d..0000000 --- a/tests/test-runner.c +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright © 2012 Intel Corporation - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting documentation, and - * that the name of the copyright holders not be used in advertising or - * publicity pertaining to distribution of the software without specific, - * written prior permission. The copyright holders make no representations - * about the suitability of this software for any purpose. It is provided "as - * is" without express or implied warranty. - * - * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, 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 _GNU_SOURCE - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "test-runner.h" - -static void -test_client_cleanup(struct weston_process *proc, int status) -{ - struct test_client *client = - container_of(proc, struct test_client, proc); - - fprintf(stderr, "server: test client exited, status %d\n", status); - - client->status = status; - client->done = 1; - - assert(client->status == 0); - - if (client->terminate) - wl_display_terminate(client->compositor->wl_display); -} - -static int -test_client_data(int fd, uint32_t mask, void *data) -{ - struct test_client *client = data; - struct wl_event_loop *loop; - int len; - - len = read(client->fd, client->buf, sizeof client->buf); - assert(len >= 0); - fprintf(stderr, "server: got %.*s from client\n", len - 1, client->buf); - assert(client->buf[len - 1] == '\n'); - client->buf[len - 1] = '\0'; - - loop = wl_display_get_event_loop(client->compositor->wl_display); - wl_event_loop_add_idle(loop, (void *) client->handle, client); - - return 1; -} - -struct test_client * -test_client_launch(struct weston_compositor *compositor, const char *file_name) -{ - struct test_client *client; - struct wl_event_loop *loop; - int ret, sv[2], client_fd; - char buf[256]; - - client = malloc(sizeof *client); - assert(client); - ret = socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, sv); - assert(ret == 0); - - client_fd = dup(sv[0]); - assert(client_fd >= 0); - snprintf(buf, sizeof buf, "%d", client_fd); - setenv("TEST_SOCKET", buf, 1); - snprintf(buf, sizeof buf, "%s/%s", getenv("abs_builddir"), file_name); - fprintf(stderr, "server: launching %s\n", buf); - - client->terminate = 0; - client->compositor = compositor; - client->client = weston_client_launch(compositor, - &client->proc, buf, - test_client_cleanup); - assert(client->client); - close(sv[0]); - client->fd = sv[1]; - - loop = wl_display_get_event_loop(compositor->wl_display); - wl_event_loop_add_fd(loop, client->fd, WL_EVENT_READABLE, - test_client_data, client); - - return client; -} - -void -test_client_send(struct test_client *client, const char *fmt, ...) -{ - char buf[256]; - va_list ap; - int len; - - va_start(ap, fmt); - len = vsnprintf(buf, sizeof buf, fmt, ap); - va_end(ap); - - fprintf(stderr, "server: sending %s", buf); - - assert(write(client->fd, buf, len) == len); -} - -extern const struct test __start_test_section, __stop_test_section; - -static void -run_test(void *data) -{ - struct weston_compositor *compositor = data; - const struct test *t; - - for (t = &__start_test_section; t < &__stop_test_section; t++) - t->run(compositor); -} - -int -module_init(struct weston_compositor *compositor); - -WL_EXPORT int -module_init(struct weston_compositor *compositor) -{ - struct wl_event_loop *loop; - - loop = wl_display_get_event_loop(compositor->wl_display); - - wl_event_loop_add_idle(loop, run_test, compositor); - - return 0; -} diff --git a/tests/test-runner.h b/tests/test-runner.h deleted file mode 100644 index 88a08cf..0000000 --- a/tests/test-runner.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef _TEST_RUNNER_H_ -#define _TEST_RUNNER_H_ - -#ifdef NDEBUG -#error "Tests must not be built with NDEBUG defined, they rely on assert()." -#endif - -#include "../src/compositor.h" - -struct test { - const char *name; - void (*run)(struct weston_compositor *compositor); -} __attribute__ ((aligned (16))); - -#define TEST(name) \ - static void name(struct weston_compositor *compositor); \ - \ - const struct test test##name \ - __attribute__ ((section ("test_section"))) = { \ - #name, name \ - }; \ - \ - static void name(struct weston_compositor *compositor) - -struct test_client { - struct weston_compositor *compositor; - struct wl_client *client; - struct weston_process proc; - int fd; - int done; - int status; - int terminate; - - char buf[256]; - void (*handle)(struct test_client *client); - void *data; -}; - -struct test_client *test_client_launch(struct weston_compositor *compositor, const char *file_name); -void test_client_send(struct test_client *client, const char *fmt, ...); - -#endif -- 2.7.4