summaryrefslogtreecommitdiff
path: root/tests/test_lifecycle.c
blob: c54abd0840015755e151e03f3a3d631c852199d1 (plain)
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;
}