aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/test-compositor.c22
-rw-r--r--tests/test-compositor.h2
2 files changed, 21 insertions, 3 deletions
diff --git a/tests/test-compositor.c b/tests/test-compositor.c
index 587bc2b..49d76d6 100644
--- a/tests/test-compositor.c
+++ b/tests/test-compositor.c
@@ -114,7 +114,7 @@ handle_client_destroy(void *data)
case CLD_DUMPED:
fprintf(stderr, "Client '%s' was killed by signal %d\n",
ci->name, status.si_status);
- ci->exit_code = status.si_status;
+ ci->kill_code = status.si_status;
break;
case CLD_EXITED:
if (status.si_status != EXIT_SUCCESS)
@@ -425,8 +425,10 @@ display_resume(struct display *d)
wl_display_run(d->wl_display);
}
+/* If signum is 0, expect a successful client exit, otherwise
+ * expect the client to have been killed by that signal. */
void
-display_destroy(struct display *d)
+display_destroy_expect_signal(struct display *d, int signum)
{
struct client_info *cl, *next;
int failed = 0;
@@ -437,7 +439,15 @@ display_destroy(struct display *d)
wl_list_for_each_safe(cl, next, &d->clients, link) {
assert(cl->wl_client == NULL);
- if (cl->exit_code != 0) {
+ if (signum != 0 && cl->kill_code != signum) {
+ ++failed;
+ fprintf(stderr,
+ "Client '%s' failed, expecting signal %d, "
+ "got %d\n",
+ cl->name, signum, cl->kill_code);
+ }
+ else if (signum == 0 &&
+ (cl->kill_code != 0 || cl->exit_code != 0)) {
++failed;
fprintf(stderr, "Client '%s' failed\n", cl->name);
}
@@ -457,6 +467,12 @@ display_destroy(struct display *d)
}
}
+void
+display_destroy(struct display *d)
+{
+ display_destroy_expect_signal(d, 0);
+}
+
/*
* --- Client helper functions ---
*/
diff --git a/tests/test-compositor.h b/tests/test-compositor.h
index b681b09..3fb390c 100644
--- a/tests/test-compositor.h
+++ b/tests/test-compositor.h
@@ -40,6 +40,7 @@ struct client_info {
int pipe;
pid_t pid;
int exit_code;
+ int kill_code;
struct wl_list link;
void *data; /* for arbitrary use */
@@ -91,6 +92,7 @@ void noop_request(struct client *);
*/
struct display *display_create(void);
void display_destroy(struct display *d);
+void display_destroy_expect_signal(struct display *d, int signum);
void display_run(struct display *d);
/* This function posts the display_resumed event to all waiting clients,