Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/ui/test/window.c

    rcde067e r0576df9  
    11/*
    2  * Copyright (c) 2024 Jiri Svoboda
     2 * Copyright (c) 2020 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4545PCUT_TEST_SUITE(window);
    4646
    47 static void test_window_sysmenu(ui_window_t *, void *, sysarg_t);
    48 static void test_window_minimize(ui_window_t *, void *);
    49 static void test_window_maximize(ui_window_t *, void *);
    50 static void test_window_unmaximize(ui_window_t *, void *);
    5147static void test_window_close(ui_window_t *, void *);
    52 static void test_window_focus(ui_window_t *, void *, unsigned);
     48static void test_window_focus(ui_window_t *, void *);
    5349static void test_window_kbd(ui_window_t *, void *, kbd_event_t *);
    5450static errno_t test_window_paint(ui_window_t *, void *);
    5551static void test_window_pos(ui_window_t *, void *, pos_event_t *);
    56 static void test_window_unfocus(ui_window_t *, void *, unsigned);
    57 static void test_window_resize(ui_window_t *, void *);
     52static void test_window_unfocus(ui_window_t *, void *);
    5853
    5954static ui_window_cb_t test_window_cb = {
    60         .sysmenu = test_window_sysmenu,
    61         .minimize = test_window_minimize,
    62         .maximize = test_window_maximize,
    63         .unmaximize = test_window_unmaximize,
    6455        .close = test_window_close,
    6556        .focus = test_window_focus,
     
    6758        .paint = test_window_paint,
    6859        .pos = test_window_pos,
    69         .unfocus = test_window_unfocus,
    70         .resize = test_window_resize
     60        .unfocus = test_window_unfocus
    7161};
    7262
     
    7666static errno_t test_ctl_paint(void *);
    7767static ui_evclaim_t test_ctl_pos_event(void *, pos_event_t *);
    78 static void test_ctl_unfocus(void *, unsigned);
    7968
    8069static ui_control_ops_t test_ctl_ops = {
    8170        .paint = test_ctl_paint,
    82         .pos_event = test_ctl_pos_event,
    83         .unfocus = test_ctl_unfocus
     71        .pos_event = test_ctl_pos_event
    8472};
    8573
    8674typedef struct {
    8775        errno_t rc;
    88         bool sysmenu;
    89         sysarg_t sysmenu_idev_id;
    90         bool minimize;
    91         bool maximize;
    92         bool unmaximize;
    9376        bool close;
    9477        bool focus;
    95         unsigned focus_nfocus;
    9678        bool kbd;
    9779        kbd_event_t kbd_event;
     
    10082        pos_event_t pos_event;
    10183        bool unfocus;
    102         unsigned unfocus_nfocus;
    103         bool resize;
    10484} test_cb_resp_t;
    10585
     
    11090        bool pos;
    11191        pos_event_t pos_event;
    112         bool unfocus;
    113         unsigned unfocus_nfocus;
    11492} test_ctl_resp_t;
    11593
     
    197175}
    198176
    199 /** ui_window_get_active */
    200 PCUT_TEST(get_active)
    201 {
    202         errno_t rc;
    203         ui_t *ui = NULL;
    204         ui_wnd_params_t params;
    205         ui_window_t *window1 = NULL;
    206         ui_window_t *window2 = NULL;
    207         ui_window_t *awnd;
    208 
    209         rc = ui_create_cons(NULL, &ui);
    210         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    211 
    212         awnd = ui_window_get_active(ui);
    213         PCUT_ASSERT_NULL(awnd);
    214 
    215         ui_wnd_params_init(&params);
    216         params.caption = "Hello";
    217 
    218         rc = ui_window_create(ui, &params, &window1);
    219         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    220         PCUT_ASSERT_NOT_NULL(window1);
    221 
    222         awnd = ui_window_get_active(ui);
    223         PCUT_ASSERT_EQUALS(window1, awnd);
    224 
    225         rc = ui_window_create(ui, &params, &window2);
    226         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    227         PCUT_ASSERT_NOT_NULL(window2);
    228 
    229         awnd = ui_window_get_active(ui);
    230         PCUT_ASSERT_EQUALS(window2, awnd);
    231 
    232         ui_window_destroy(window2);
    233 
    234         awnd = ui_window_get_active(ui);
    235         PCUT_ASSERT_EQUALS(window1, awnd);
    236 
    237         ui_window_destroy(window1);
    238 
    239         awnd = ui_window_get_active(ui);
    240         PCUT_ASSERT_NULL(awnd);
    241 
    242         ui_destroy(ui);
    243 }
    244 
    245177/** ui_window_resize */
    246178PCUT_TEST(resize)
     
    277209}
    278210
    279 /** ui_window_get_ui() returns containing UI */
    280 PCUT_TEST(get_ui)
    281 {
    282         errno_t rc;
    283         ui_t *ui = NULL;
    284         ui_t *rui;
    285         ui_wnd_params_t params;
    286         ui_window_t *window = NULL;
    287 
    288         rc = ui_create_disp(NULL, &ui);
    289         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    290 
    291         ui_wnd_params_init(&params);
    292         params.caption = "Hello";
    293 
    294         rc = ui_window_create(ui, &params, &window);
    295         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    296         PCUT_ASSERT_NOT_NULL(window);
    297 
    298         rui = ui_window_get_ui(window);
    299         PCUT_ASSERT_EQUALS(ui, rui);
    300 
    301         ui_window_destroy(window);
    302         ui_destroy(ui);
    303 }
    304 
    305211/** ui_window_get_res/gc/rect() return valid objects */
    306212PCUT_TEST(get_res_gc_rect)
     
    336242}
    337243
    338 /** ui_window_set_ctl_cursor() */
    339 PCUT_TEST(set_ctl_cursor)
    340 {
    341         errno_t rc;
    342         ui_t *ui = NULL;
    343         ui_wnd_params_t params;
    344         ui_window_t *window = NULL;
    345 
    346         rc = ui_create_disp(NULL, &ui);
    347         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    348 
    349         ui_wnd_params_init(&params);
    350         params.caption = "Hello";
    351 
    352         rc = ui_window_create(ui, &params, &window);
    353         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    354         PCUT_ASSERT_NOT_NULL(window);
    355 
    356         ui_window_set_ctl_cursor(window, ui_curs_ibeam);
    357 
    358         ui_window_destroy(window);
    359         ui_destroy(ui);
    360 }
    361 
    362244/** ui_window_get_app_gc() return valid GC */
    363245PCUT_TEST(get_app_gc)
     
    376258        params.rect.p0.x = 0;
    377259        params.rect.p0.y = 0;
    378         params.rect.p0.x = 100;
    379         params.rect.p0.y = 100;
     260        params.rect.p0.x = 10;
     261        params.rect.p0.y = 10;
    380262
    381263        rc = ui_window_create(ui, &params, &window);
     
    514396}
    515397
    516 /** ui_window_def_unfocus() delivers unfocus event to control in window */
    517 PCUT_TEST(def_unfocus)
    518 {
    519         errno_t rc;
    520         ui_t *ui = NULL;
    521         ui_wnd_params_t params;
    522         ui_window_t *window = NULL;
    523         ui_control_t *control = NULL;
    524         test_ctl_resp_t resp;
    525 
    526         rc = ui_create_disp(NULL, &ui);
    527         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    528 
    529         ui_wnd_params_init(&params);
    530         params.caption = "Hello";
    531 
    532         rc = ui_window_create(ui, &params, &window);
    533         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    534 
    535         rc = ui_control_new(&test_ctl_ops, &resp, &control);
    536         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    537 
    538         ui_window_add(window, control);
    539 
    540         resp.unfocus = false;
    541 
    542         ui_window_def_unfocus(window, 42);
    543         PCUT_ASSERT_TRUE(resp.unfocus);
    544         PCUT_ASSERT_INT_EQUALS(42, resp.unfocus_nfocus);
    545 
    546         /* Need to remove first because we didn't implement the destructor */
    547         ui_window_remove(window, control);
    548 
    549         ui_window_destroy(window);
    550         ui_destroy(ui);
    551 }
    552 
    553 /** ui_window_send_sysmenu() calls sysmenu callback set via ui_window_set_cb() */
    554 PCUT_TEST(send_sysmenu)
    555 {
    556         errno_t rc;
    557         ui_t *ui = NULL;
    558         ui_wnd_params_t params;
    559         ui_window_t *window = NULL;
    560         test_cb_resp_t resp;
    561 
    562         rc = ui_create_disp(NULL, &ui);
    563         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    564 
    565         ui_wnd_params_init(&params);
    566         params.caption = "Hello";
    567 
    568         rc = ui_window_create(ui, &params, &window);
    569         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    570         PCUT_ASSERT_NOT_NULL(window);
    571 
    572         /* Sysmenu callback with no callbacks set */
    573         ui_window_send_sysmenu(window, 42);
    574 
    575         /* Sysmenu callback with sysmenu callback not implemented */
    576         ui_window_set_cb(window, &dummy_window_cb, NULL);
    577         ui_window_send_sysmenu(window, 42);
    578 
    579         /* Sysmenu callback with real callback set */
    580         resp.sysmenu = false;
    581         resp.sysmenu_idev_id = 0;
    582         ui_window_set_cb(window, &test_window_cb, &resp);
    583         ui_window_send_sysmenu(window, 42);
    584         PCUT_ASSERT_TRUE(resp.sysmenu);
    585         PCUT_ASSERT_INT_EQUALS(42, resp.sysmenu_idev_id);
    586 
    587         ui_window_destroy(window);
    588         ui_destroy(ui);
    589 }
    590 
    591 /** ui_window_send_minimize() calls minimize callback set via ui_window_set_cb() */
    592 PCUT_TEST(send_minimize)
    593 {
    594         errno_t rc;
    595         ui_t *ui = NULL;
    596         ui_wnd_params_t params;
    597         ui_window_t *window = NULL;
    598         test_cb_resp_t resp;
    599 
    600         rc = ui_create_disp(NULL, &ui);
    601         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    602 
    603         ui_wnd_params_init(&params);
    604         params.caption = "Hello";
    605 
    606         rc = ui_window_create(ui, &params, &window);
    607         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    608         PCUT_ASSERT_NOT_NULL(window);
    609 
    610         /* Minimize callback with no callbacks set */
    611         ui_window_send_minimize(window);
    612 
    613         /* Minimize callback with minimize callback not implemented */
    614         ui_window_set_cb(window, &dummy_window_cb, NULL);
    615         ui_window_send_minimize(window);
    616 
    617         /* Minimize callback with real callback set */
    618         resp.minimize = false;
    619         ui_window_set_cb(window, &test_window_cb, &resp);
    620         ui_window_send_minimize(window);
    621         PCUT_ASSERT_TRUE(resp.minimize);
    622 
    623         ui_window_destroy(window);
    624         ui_destroy(ui);
    625 }
    626 
    627 /** ui_window_send_maximize() calls maximize callback set via ui_window_set_cb() */
    628 PCUT_TEST(send_maximize)
    629 {
    630         errno_t rc;
    631         ui_t *ui = NULL;
    632         ui_wnd_params_t params;
    633         ui_window_t *window = NULL;
    634         test_cb_resp_t resp;
    635 
    636         rc = ui_create_disp(NULL, &ui);
    637         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    638 
    639         ui_wnd_params_init(&params);
    640         params.caption = "Hello";
    641 
    642         rc = ui_window_create(ui, &params, &window);
    643         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    644         PCUT_ASSERT_NOT_NULL(window);
    645 
    646         /* Maximize callback with no callbacks set */
    647         ui_window_send_maximize(window);
    648 
    649         /* Maximize callback with maximize callback not implemented */
    650         ui_window_set_cb(window, &dummy_window_cb, NULL);
    651         ui_window_send_maximize(window);
    652 
    653         /* Maximize callback with real callback set */
    654         resp.maximize = false;
    655         ui_window_set_cb(window, &test_window_cb, &resp);
    656         ui_window_send_maximize(window);
    657         PCUT_ASSERT_TRUE(resp.maximize);
    658 
    659         ui_window_destroy(window);
    660         ui_destroy(ui);
    661 }
    662 
    663 /** ui_window_send_unmaximize() calls unmaximize callback set via ui_window_set_cb() */
    664 PCUT_TEST(send_unmaximize)
    665 {
    666         errno_t rc;
    667         ui_t *ui = NULL;
    668         ui_wnd_params_t params;
    669         ui_window_t *window = NULL;
    670         test_cb_resp_t resp;
    671 
    672         rc = ui_create_disp(NULL, &ui);
    673         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    674 
    675         ui_wnd_params_init(&params);
    676         params.caption = "Hello";
    677 
    678         rc = ui_window_create(ui, &params, &window);
    679         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    680         PCUT_ASSERT_NOT_NULL(window);
    681 
    682         /* Unmaximize callback with no callbacks set */
    683         ui_window_send_unmaximize(window);
    684 
    685         /* Unmaximize callback with unmaximize callback not implemented */
    686         ui_window_set_cb(window, &dummy_window_cb, NULL);
    687         ui_window_send_unmaximize(window);
    688 
    689         /* Unmaximize callback with real callback set */
    690         resp.unmaximize = false;
    691         ui_window_set_cb(window, &test_window_cb, &resp);
    692         ui_window_send_unmaximize(window);
    693         PCUT_ASSERT_TRUE(resp.unmaximize);
    694 
    695         ui_window_destroy(window);
    696         ui_destroy(ui);
    697 }
    698 
    699398/** ui_window_send_close() calls close callback set via ui_window_set_cb() */
    700399PCUT_TEST(send_close)
     
    753452
    754453        /* Focus callback with no callbacks set */
    755         ui_window_send_focus(window, 42);
     454        ui_window_send_focus(window);
    756455
    757456        /* Focus callback with focus callback not implemented */
    758457        ui_window_set_cb(window, &dummy_window_cb, NULL);
    759         ui_window_send_focus(window, 42);
     458        ui_window_send_focus(window);
    760459
    761460        /* Focus callback with real callback set */
    762461        resp.focus = false;
    763462        ui_window_set_cb(window, &test_window_cb, &resp);
    764         ui_window_send_focus(window, 42);
     463        ui_window_send_focus(window);
    765464        PCUT_ASSERT_TRUE(resp.focus);
    766         PCUT_ASSERT_INT_EQUALS(42, resp.focus_nfocus);
    767465
    768466        ui_window_destroy(window);
     
    790488        PCUT_ASSERT_NOT_NULL(window);
    791489
    792         kbd_event.type = KEY_PRESS;
     490        kbd_event.type = POS_PRESS;
    793491        kbd_event.key = KC_X;
    794492        kbd_event.mods = 0;
     
    922620
    923621        /* Unfocus callback with no callbacks set */
    924         ui_window_send_unfocus(window, 42);
     622        ui_window_send_unfocus(window);
    925623
    926624        /* Unfocus callback with unfocus callback not implemented */
    927625        ui_window_set_cb(window, &dummy_window_cb, NULL);
    928         ui_window_send_unfocus(window, 42);
     626        ui_window_send_unfocus(window);
    929627
    930628        /* Unfocus callback with real callback set */
    931629        resp.close = false;
    932630        ui_window_set_cb(window, &test_window_cb, &resp);
    933         ui_window_send_unfocus(window, 42);
     631        ui_window_send_unfocus(window);
    934632        PCUT_ASSERT_TRUE(resp.unfocus);
    935         PCUT_ASSERT_INT_EQUALS(42, resp.unfocus_nfocus);
    936 
    937         ui_window_destroy(window);
    938         ui_destroy(ui);
    939 }
    940 
    941 /** ui_window_send_resize() calls resize callback set via ui_window_set_cb() */
    942 PCUT_TEST(send_resize)
    943 {
    944         errno_t rc;
    945         ui_t *ui = NULL;
    946         ui_wnd_params_t params;
    947         ui_window_t *window = NULL;
    948         test_cb_resp_t resp;
    949 
    950         rc = ui_create_disp(NULL, &ui);
    951         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    952 
    953         ui_wnd_params_init(&params);
    954         params.caption = "Hello";
    955 
    956         rc = ui_window_create(ui, &params, &window);
    957         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    958         PCUT_ASSERT_NOT_NULL(window);
    959 
    960         /* Resize callback with no callbacks set */
    961         ui_window_send_resize(window);
    962 
    963         /* Resize callback with resize callback not implemented */
    964         ui_window_set_cb(window, &dummy_window_cb, NULL);
    965         ui_window_send_resize(window);
    966 
    967         /* Resize callback with real callback set */
    968         resp.close = false;
    969         ui_window_set_cb(window, &test_window_cb, &resp);
    970         ui_window_send_resize(window);
    971         PCUT_ASSERT_TRUE(resp.resize);
    972 
    973         ui_window_destroy(window);
    974         ui_destroy(ui);
    975 }
    976 
    977 static void test_window_sysmenu(ui_window_t *window, void *arg, sysarg_t idev_id)
     633
     634        ui_window_destroy(window);
     635        ui_destroy(ui);
     636}
     637
     638static void test_window_close(ui_window_t *window, void *arg)
    978639{
    979640        test_cb_resp_t *resp = (test_cb_resp_t *) arg;
    980641
    981         resp->sysmenu = true;
    982         resp->sysmenu_idev_id = idev_id;
    983 }
    984 
    985 static void test_window_minimize(ui_window_t *window, void *arg)
     642        resp->close = true;
     643}
     644
     645static void test_window_focus(ui_window_t *window, void *arg)
    986646{
    987647        test_cb_resp_t *resp = (test_cb_resp_t *) arg;
    988648
    989         resp->minimize = true;
    990 }
    991 
    992 static void test_window_maximize(ui_window_t *window, void *arg)
    993 {
    994         test_cb_resp_t *resp = (test_cb_resp_t *) arg;
    995 
    996         resp->maximize = true;
    997 }
    998 
    999 static void test_window_unmaximize(ui_window_t *window, void *arg)
    1000 {
    1001         test_cb_resp_t *resp = (test_cb_resp_t *) arg;
    1002 
    1003         resp->unmaximize = true;
    1004 }
    1005 
    1006 static void test_window_close(ui_window_t *window, void *arg)
    1007 {
    1008         test_cb_resp_t *resp = (test_cb_resp_t *) arg;
    1009 
    1010         resp->close = true;
    1011 }
    1012 
    1013 static void test_window_focus(ui_window_t *window, void *arg, unsigned nfocus)
    1014 {
    1015         test_cb_resp_t *resp = (test_cb_resp_t *) arg;
    1016 
    1017649        resp->focus = true;
    1018         resp->focus_nfocus = nfocus;
    1019650}
    1020651
     
    1045676}
    1046677
    1047 static void test_window_unfocus(ui_window_t *window, void *arg, unsigned nfocus)
     678static void test_window_unfocus(ui_window_t *window, void *arg)
    1048679{
    1049680        test_cb_resp_t *resp = (test_cb_resp_t *) arg;
    1050681
    1051682        resp->unfocus = true;
    1052         resp->unfocus_nfocus = nfocus;
    1053 }
    1054 
    1055 static void test_window_resize(ui_window_t *window, void *arg)
    1056 {
    1057         test_cb_resp_t *resp = (test_cb_resp_t *) arg;
    1058 
    1059         resp->resize = true;
    1060683}
    1061684
     
    1078701}
    1079702
    1080 static void test_ctl_unfocus(void *arg, unsigned nfocus)
    1081 {
    1082         test_ctl_resp_t *resp = (test_ctl_resp_t *) arg;
    1083 
    1084         resp->unfocus = true;
    1085         resp->unfocus_nfocus = nfocus;
    1086 }
    1087 
    1088703PCUT_EXPORT(window);
Note: See TracChangeset for help on using the changeset viewer.