tests: Add test case for basic client lifecycle

Kristian Høgsberg 13 years ago
parent 306e36185c
commit 915b7f8945
  1. 6
      tests/Makefile.am
  2. 101
      tests/client-test.c
  3. 45
      tests/test-client.c

@ -1,4 +1,4 @@
TESTS = surface-test.la
TESTS = surface-test.la client-test.la
TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/weston-test
@ -9,13 +9,17 @@ AM_CPPFLAGS = -I$(top_srcdir)/src -DUNIT_TEST $(COMPOSITOR_CFLAGS)
check_LTLIBRARIES = $(TESTS)
check_PROGRAMS = test-client
AM_LDFLAGS = -module -avoid-version -rpath $(libdir)
test_runner_src = test-runner.c test-runner.h
surface_test_la_SOURCES = surface-test.c $(test_runner_src)
client_test_la_SOURCES = client-test.c $(test_runner_src)
test_client_SOURCES = test-client.c
test_client_LDADD = $(SIMPLE_CLIENT_LIBS)
noinst_PROGRAMS = setbacklight matrix-test

@ -0,0 +1,101 @@
/*
* 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.
*/
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
#include "test-runner.h"
struct context {
struct weston_process proc;
struct weston_compositor *compositor;
struct wl_listener client_destroy_listener;
struct wl_listener compositor_destroy_listener;
int status;
int got_client_destroy;
int done;
};
static void
cleanup(struct weston_process *proc, int status)
{
struct context *context = container_of(proc, struct context, proc);
fprintf(stderr, "child exited, status %d\n", status);
wl_display_terminate(context->compositor->wl_display);
context->status = status;
context->done = 1;
}
static void
client_destroy(struct wl_listener *listener, void *data)
{
struct context *context =
container_of(listener, struct context,
client_destroy_listener);
context->got_client_destroy = 1;
fprintf(stderr, "notify child destroy\n");
}
static void
compositor_destroy(struct wl_listener *listener, void *data)
{
struct context *context =
container_of(listener, struct context,
compositor_destroy_listener);
fprintf(stderr, "notify compositor destroy, status %d, done %d\n",
context->status, context->done);
assert(context->status == 0);
assert(context->got_client_destroy);
assert(context->done);
}
TEST(client_test)
{
struct context *context;
char path[256];
struct wl_client *client;
snprintf(path, sizeof path, "%s/test-client", getenv("abs_builddir"));
fprintf(stderr, "launching %s\n", path);
context = malloc(sizeof *context);
assert(context);
context->compositor = compositor;
context->done = 0;
context->got_client_destroy = 0;
client = weston_client_launch(compositor,
&context->proc, path, cleanup);
context->client_destroy_listener.notify = client_destroy;
wl_client_add_destroy_listener(client,
&context->client_destroy_listener);
context->compositor_destroy_listener.notify = compositor_destroy;
wl_signal_add(&compositor->destroy_signal,
&context->compositor_destroy_listener);
}

@ -0,0 +1,45 @@
/*
* 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.
*/
#include <stdio.h>
#include <assert.h>
#include <wayland-client.h>
static void
handle_global(struct wl_display *display, uint32_t id,
const char *interface, uint32_t version, void *data)
{
}
int main(int argc, char *argv[])
{
struct wl_display *display;
display = wl_display_connect(NULL);
assert(display);
wl_display_add_global_listener(display, handle_global, display);
wl_display_iterate(display, WL_DISPLAY_READABLE);
wl_display_roundtrip(display);
return 0;
}
Loading…
Cancel
Save