Ignore:
File:
1 edited

Legend:

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

    r0576df9 rcde067e  
    11/*
    2  * Copyright (c) 2020 Jiri Svoboda
     2 * Copyright (c) 2024 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4545PCUT_TEST_SUITE(window);
    4646
     47static void test_window_sysmenu(ui_window_t *, void *, sysarg_t);
     48static void test_window_minimize(ui_window_t *, void *);
     49static void test_window_maximize(ui_window_t *, void *);
     50static void test_window_unmaximize(ui_window_t *, void *);
    4751static void test_window_close(ui_window_t *, void *);
    48 static void test_window_focus(ui_window_t *, void *);
     52static void test_window_focus(ui_window_t *, void *, unsigned);
    4953static void test_window_kbd(ui_window_t *, void *, kbd_event_t *);
    5054static errno_t test_window_paint(ui_window_t *, void *);
    5155static void test_window_pos(ui_window_t *, void *, pos_event_t *);
    52 static void test_window_unfocus(ui_window_t *, void *);
     56static void test_window_unfocus(ui_window_t *, void *, unsigned);
     57static void test_window_resize(ui_window_t *, void *);
    5358
    5459static 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,
    5564        .close = test_window_close,
    5665        .focus = test_window_focus,
     
    5867        .paint = test_window_paint,
    5968        .pos = test_window_pos,
    60         .unfocus = test_window_unfocus
     69        .unfocus = test_window_unfocus,
     70        .resize = test_window_resize
    6171};
    6272
     
    6676static errno_t test_ctl_paint(void *);
    6777static ui_evclaim_t test_ctl_pos_event(void *, pos_event_t *);
     78static void test_ctl_unfocus(void *, unsigned);
    6879
    6980static ui_control_ops_t test_ctl_ops = {
    7081        .paint = test_ctl_paint,
    71         .pos_event = test_ctl_pos_event
     82        .pos_event = test_ctl_pos_event,
     83        .unfocus = test_ctl_unfocus
    7284};
    7385
    7486typedef struct {
    7587        errno_t rc;
     88        bool sysmenu;
     89        sysarg_t sysmenu_idev_id;
     90        bool minimize;
     91        bool maximize;
     92        bool unmaximize;
    7693        bool close;
    7794        bool focus;
     95        unsigned focus_nfocus;
    7896        bool kbd;
    7997        kbd_event_t kbd_event;
     
    82100        pos_event_t pos_event;
    83101        bool unfocus;
     102        unsigned unfocus_nfocus;
     103        bool resize;
    84104} test_cb_resp_t;
    85105
     
    90110        bool pos;
    91111        pos_event_t pos_event;
     112        bool unfocus;
     113        unsigned unfocus_nfocus;
    92114} test_ctl_resp_t;
    93115
     
    175197}
    176198
     199/** ui_window_get_active */
     200PCUT_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
    177245/** ui_window_resize */
    178246PCUT_TEST(resize)
     
    209277}
    210278
     279/** ui_window_get_ui() returns containing UI */
     280PCUT_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
    211305/** ui_window_get_res/gc/rect() return valid objects */
    212306PCUT_TEST(get_res_gc_rect)
     
    242336}
    243337
     338/** ui_window_set_ctl_cursor() */
     339PCUT_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
    244362/** ui_window_get_app_gc() return valid GC */
    245363PCUT_TEST(get_app_gc)
     
    258376        params.rect.p0.x = 0;
    259377        params.rect.p0.y = 0;
    260         params.rect.p0.x = 10;
    261         params.rect.p0.y = 10;
     378        params.rect.p0.x = 100;
     379        params.rect.p0.y = 100;
    262380
    263381        rc = ui_window_create(ui, &params, &window);
     
    396514}
    397515
     516/** ui_window_def_unfocus() delivers unfocus event to control in window */
     517PCUT_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() */
     554PCUT_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() */
     592PCUT_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() */
     628PCUT_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() */
     664PCUT_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
    398699/** ui_window_send_close() calls close callback set via ui_window_set_cb() */
    399700PCUT_TEST(send_close)
     
    452753
    453754        /* Focus callback with no callbacks set */
    454         ui_window_send_focus(window);
     755        ui_window_send_focus(window, 42);
    455756
    456757        /* Focus callback with focus callback not implemented */
    457758        ui_window_set_cb(window, &dummy_window_cb, NULL);
    458         ui_window_send_focus(window);
     759        ui_window_send_focus(window, 42);
    459760
    460761        /* Focus callback with real callback set */
    461762        resp.focus = false;
    462763        ui_window_set_cb(window, &test_window_cb, &resp);
    463         ui_window_send_focus(window);
     764        ui_window_send_focus(window, 42);
    464765        PCUT_ASSERT_TRUE(resp.focus);
     766        PCUT_ASSERT_INT_EQUALS(42, resp.focus_nfocus);
    465767
    466768        ui_window_destroy(window);
     
    488790        PCUT_ASSERT_NOT_NULL(window);
    489791
    490         kbd_event.type = POS_PRESS;
     792        kbd_event.type = KEY_PRESS;
    491793        kbd_event.key = KC_X;
    492794        kbd_event.mods = 0;
     
    620922
    621923        /* Unfocus callback with no callbacks set */
    622         ui_window_send_unfocus(window);
     924        ui_window_send_unfocus(window, 42);
    623925
    624926        /* Unfocus callback with unfocus callback not implemented */
    625927        ui_window_set_cb(window, &dummy_window_cb, NULL);
    626         ui_window_send_unfocus(window);
     928        ui_window_send_unfocus(window, 42);
    627929
    628930        /* Unfocus callback with real callback set */
    629931        resp.close = false;
    630932        ui_window_set_cb(window, &test_window_cb, &resp);
    631         ui_window_send_unfocus(window);
     933        ui_window_send_unfocus(window, 42);
    632934        PCUT_ASSERT_TRUE(resp.unfocus);
    633 
    634         ui_window_destroy(window);
    635         ui_destroy(ui);
     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() */
     942PCUT_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
     977static void test_window_sysmenu(ui_window_t *window, void *arg, sysarg_t idev_id)
     978{
     979        test_cb_resp_t *resp = (test_cb_resp_t *) arg;
     980
     981        resp->sysmenu = true;
     982        resp->sysmenu_idev_id = idev_id;
     983}
     984
     985static void test_window_minimize(ui_window_t *window, void *arg)
     986{
     987        test_cb_resp_t *resp = (test_cb_resp_t *) arg;
     988
     989        resp->minimize = true;
     990}
     991
     992static 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
     999static 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;
    6361004}
    6371005
     
    6431011}
    6441012
    645 static void test_window_focus(ui_window_t *window, void *arg)
     1013static void test_window_focus(ui_window_t *window, void *arg, unsigned nfocus)
    6461014{
    6471015        test_cb_resp_t *resp = (test_cb_resp_t *) arg;
    6481016
    6491017        resp->focus = true;
     1018        resp->focus_nfocus = nfocus;
    6501019}
    6511020
     
    6761045}
    6771046
    678 static void test_window_unfocus(ui_window_t *window, void *arg)
     1047static void test_window_unfocus(ui_window_t *window, void *arg, unsigned nfocus)
    6791048{
    6801049        test_cb_resp_t *resp = (test_cb_resp_t *) arg;
    6811050
    6821051        resp->unfocus = true;
     1052        resp->unfocus_nfocus = nfocus;
     1053}
     1054
     1055static 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;
    6831060}
    6841061
     
    7011078}
    7021079
     1080static 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
    7031088PCUT_EXPORT(window);
Note: See TracChangeset for help on using the changeset viewer.