1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
#include "yasl/loop.h"
#include "yasl/timing.h"
#include "yasl/yasl.h"
#include <assert.h>
#include <poll.h>
#include <stdio.h>
#include <unistd.h>
static void test_scaling(void)
{
assert(yasl_scale_to_device(10.0, 120) == 10);
assert(yasl_scale_to_device(10.0, 240) == 20);
assert(yasl_scale_to_logical(20, 240) == 10);
}
static int dummy_cb(int fd, short revents, void *ud)
{
(void)fd; (void)revents; (void)ud;
return 0;
}
static void test_loop(void)
{
struct yasl_loop *loop = yasl_loop_create();
assert(loop != NULL);
int p[2];
assert(pipe(p) == 0);
int watch = yasl_loop_add_fd(loop, p[0], POLLIN, dummy_cb, NULL);
assert(watch > 0);
assert(yasl_loop_set_fd_events(loop, watch, POLLIN | POLLOUT) == 0);
yasl_loop_kick(loop);
int n = yasl_loop_step(loop, 10);
assert(n >= 1);
assert(yasl_loop_del_fd(loop, watch) == 0);
close(p[0]);
close(p[1]);
yasl_loop_destroy(loop);
}
static void test_display_lifecycle_standalone(void)
{
struct yasl_display_spec spec = { .app_id = "org.yasl.test" };
struct yasl_display *d = yasl_display_open(NULL, &spec);
if (!d) return; /* Headless CI without Wayland */
struct yasl_window_spec sspec = {
.title = "Test Window",
.size = { .x = 320, .y = 240 },
};
struct yasl_surface *s = yasl_surface_create_toplevel(d, &sspec);
assert(s != NULL);
assert(yasl_surface_display(s) == d);
struct yasl_vector2i sz = yasl_surface_geometry(s).size;
assert(sz.x > 0 && sz.y > 0);
yasl_surface_schedule_redraw(s);
yasl_display_flush(d);
yasl_display_dispatch(d, 0);
yasl_surface_destroy(s);
yasl_display_close(d);
}
int main(void)
{
test_scaling();
test_loop();
test_display_lifecycle_standalone();
printf("All YASL basic tests passed.\n");
return 0;
}
|