From 94c5e361fbb229b0cd6853e2102a7d95f1f358b3 Mon Sep 17 00:00:00 2001 From: Berke Güzel Date: Mon, 12 Oct 2026 22:12:02 +0300 Subject: better public interface and doxygen --- tests/wayland/test_clipboard.c | 47 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 tests/wayland/test_clipboard.c (limited to 'tests/wayland/test_clipboard.c') diff --git a/tests/wayland/test_clipboard.c b/tests/wayland/test_clipboard.c new file mode 100644 index 0000000..553e84d --- /dev/null +++ b/tests/wayland/test_clipboard.c @@ -0,0 +1,47 @@ +#include "../../src/wayland/clipboard.c" +#include + +struct received { int count; size_t len; char text[32]; }; + +static void receive(const char *text, size_t len, bool uri_list, + struct wl_surface *surface, void *ud) +{ + (void)surface; + struct received *r = ud; + assert(!uri_list && len < sizeof(r->text)); + memcpy(r->text, text, len); + r->text[len] = '\0'; + r->len = len; + r->count++; +} + +int main(void) +{ + struct received received = {0}; + struct clipboard c = {.loop = yasl_loop_create(), .receive = receive, .ud = &received}; + assert(c.loop); + const struct { const char *bytes; size_t len; bool valid; } cases[] = { + {"é字😀", sizeof("é字😀") - 1, true}, + {"", 0, true}, + {"\xff", 1, false}, + {"\xf0\x9f\x98", 3, false}, /* Incomplete non-BMP character. */ + }; + for (size_t i = 0; i < sizeof(cases) / sizeof(cases[0]); i++) { + received = (struct received){0}; + int fds[2]; + assert(pipe(fds) == 0); + assert(start_transfer(&c, fds[0], false, false)); + assert(write(fds[1], cases[i].bytes, cases[i].len) == (ssize_t)cases[i].len); + close(fds[1]); + for (int steps = 0; c.transfers && steps < 10; steps++) + assert(yasl_loop_step(c.loop, 0) >= 0); + assert(!c.transfers); + assert(received.count == (int)cases[i].valid); + if (cases[i].valid) { + assert(received.len == cases[i].len); + assert(memcmp(received.text, cases[i].bytes, received.len) == 0); + } + } + yasl_loop_destroy(c.loop); + return 0; +} -- cgit v1.2.3