summaryrefslogtreecommitdiff
path: root/tests/wayland/test_clipboard.c
diff options
context:
space:
mode:
authorBerke Güzel <wenekar1@gmail.com>2026-10-12 22:12:02 +0300
committerBerke Güzel <wenekar1@gmail.com>2026-10-12 22:12:02 +0300
commit94c5e361fbb229b0cd6853e2102a7d95f1f358b3 (patch)
tree3c0f11af9dcb84dac8067a31a6979acd6dd56fbf /tests/wayland/test_clipboard.c
parent08dc9047098d6d96791024ac7d8f5837633673ef (diff)
better public interface and doxygen
Diffstat (limited to 'tests/wayland/test_clipboard.c')
-rw-r--r--tests/wayland/test_clipboard.c47
1 files changed, 47 insertions, 0 deletions
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 <assert.h>
+
+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;
+}