Ignore:
File:
1 edited

Legend:

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

    r4034954c rc68c18b9  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2021 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    3232#include <stdbool.h>
    3333#include <ui/control.h>
     34#include <ui/menu.h>
    3435#include <ui/menubar.h>
    35 #include <ui/menudd.h>
    3636#include <ui/ui.h>
    3737#include <ui/window.h>
    3838#include "../private/menubar.h"
    39 #include "../private/wdecor.h"
    40 #include "../private/window.h"
    4139
    4240PCUT_INIT;
     
    4745PCUT_TEST(create_destroy)
    4846{
    49         ui_t *ui = NULL;
    50         ui_window_t *window = NULL;
    51         ui_wnd_params_t params;
    52         ui_menu_bar_t *mbar = NULL;
    53         errno_t rc;
    54 
    55         rc = ui_create_disp(NULL, &ui);
    56         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    57 
    58         ui_wnd_params_init(&params);
    59         params.caption = "Hello";
    60 
    61         rc = ui_window_create(ui, &params, &window);
    62         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    63         PCUT_ASSERT_NOT_NULL(window);
    64 
    65         rc = ui_menu_bar_create(ui, window, &mbar);
    66         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    67         PCUT_ASSERT_NOT_NULL(mbar);
    68 
    69         ui_menu_bar_destroy(mbar);
    70         ui_window_destroy(window);
    71         ui_destroy(ui);
     47        ui_menu_bar_t *mbar = NULL;
     48        errno_t rc;
     49
     50        rc = ui_menu_bar_create(NULL, NULL, &mbar);
     51        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     52        PCUT_ASSERT_NOT_NULL(mbar);
     53
     54        ui_menu_bar_destroy(mbar);
    7255}
    7356
     
    8164PCUT_TEST(ctl)
    8265{
    83         ui_t *ui = NULL;
    84         ui_window_t *window = NULL;
    85         ui_wnd_params_t params;
    8666        ui_menu_bar_t *mbar = NULL;
    8767        ui_control_t *control;
    8868        errno_t rc;
    8969
    90         rc = ui_create_disp(NULL, &ui);
    91         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    92 
    93         ui_wnd_params_init(&params);
    94         params.caption = "Hello";
    95 
    96         rc = ui_window_create(ui, &params, &window);
    97         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    98         PCUT_ASSERT_NOT_NULL(window);
    99 
    100         rc = ui_menu_bar_create(ui, window, &mbar);
     70        rc = ui_menu_bar_create(NULL, NULL, &mbar);
    10171        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    10272        PCUT_ASSERT_NOT_NULL(mbar);
     
    10676
    10777        ui_control_destroy(control);
    108         ui_window_destroy(window);
    109         ui_destroy(ui);
    11078}
    11179
     
    181149}
    182150
    183 /** Deliver menu bar keyboard event */
    184 PCUT_TEST(kbd_event)
     151/** Press event on menu bar entry selects menu */
     152PCUT_TEST(pos_event_select)
    185153{
    186154        ui_t *ui = NULL;
     
    190158        ui_menu_t *menu = NULL;
    191159        ui_evclaim_t claimed;
    192         kbd_event_t event;
     160        pos_event_t event;
    193161        gfx_rect_t rect;
    194162        errno_t rc;
     
    214182        ui_menu_bar_set_rect(mbar, &rect);
    215183
    216         rc = ui_menu_dd_create(mbar, "Test", NULL, &menu);
    217         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    218         PCUT_ASSERT_NOT_NULL(menu);
    219 
    220         event.type = KEY_PRESS;
    221         event.key = KC_F10;
    222         event.mods = 0;
    223         claimed = ui_menu_bar_kbd_event(mbar, &event);
    224         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    225         PCUT_ASSERT_EQUALS(ui_claimed, claimed);
    226 
    227         ui_menu_bar_destroy(mbar);
    228         ui_window_destroy(window);
    229         ui_destroy(ui);
    230 }
    231 
    232 /** ui_menu_bar_press_accel() opens the corresponding menu */
    233 PCUT_TEST(press_accel)
    234 {
    235         ui_t *ui = NULL;
    236         ui_window_t *window = NULL;
    237         ui_wnd_params_t params;
    238         ui_menu_bar_t *mbar = NULL;
    239         ui_menu_t *menu = NULL;
    240         ui_menu_dd_t *mdd = NULL;
    241         gfx_rect_t rect;
    242         errno_t rc;
    243 
    244         rc = ui_create_disp(NULL, &ui);
    245         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    246 
    247         ui_wnd_params_init(&params);
    248         params.caption = "Hello";
    249 
    250         rc = ui_window_create(ui, &params, &window);
    251         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    252         PCUT_ASSERT_NOT_NULL(window);
    253 
    254         rc = ui_menu_bar_create(ui, window, &mbar);
    255         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    256         PCUT_ASSERT_NOT_NULL(mbar);
    257 
    258         rect.p0.x = 0;
    259         rect.p0.y = 0;
    260         rect.p1.x = 50;
    261         rect.p1.y = 25;
    262         ui_menu_bar_set_rect(mbar, &rect);
    263 
    264         rc = ui_menu_dd_create(mbar, "~T~est", &mdd, &menu);
    265         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    266         PCUT_ASSERT_NOT_NULL(mdd);
    267         PCUT_ASSERT_NOT_NULL(menu);
    268 
    269         PCUT_ASSERT_FALSE(ui_menu_dd_is_open(mdd));
    270 
    271         ui_menu_bar_press_accel(mbar, 't', 0);
    272 
    273         PCUT_ASSERT_TRUE(ui_menu_dd_is_open(mdd));
    274 
    275         ui_menu_bar_destroy(mbar);
    276         ui_window_destroy(window);
    277         ui_destroy(ui);
    278 }
    279 
    280 /** Press event on menu bar entry selects menu */
    281 PCUT_TEST(pos_event_select)
    282 {
    283         ui_t *ui = NULL;
    284         ui_window_t *window = NULL;
    285         ui_wnd_params_t params;
    286         ui_menu_bar_t *mbar = NULL;
    287         ui_menu_t *menu = NULL;
    288         ui_menu_dd_t *mdd = NULL;
    289         ui_evclaim_t claimed;
    290         pos_event_t event;
    291         gfx_rect_t rect;
    292         errno_t rc;
    293 
    294         rc = ui_create_disp(NULL, &ui);
    295         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    296 
    297         ui_wnd_params_init(&params);
    298         params.caption = "Hello";
    299 
    300         rc = ui_window_create(ui, &params, &window);
    301         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    302         PCUT_ASSERT_NOT_NULL(window);
    303 
    304         rc = ui_menu_bar_create(ui, window, &mbar);
    305         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    306         PCUT_ASSERT_NOT_NULL(mbar);
    307 
    308         rect.p0.x = 0;
    309         rect.p0.y = 0;
    310         rect.p1.x = 50;
    311         rect.p1.y = 25;
    312         ui_menu_bar_set_rect(mbar, &rect);
    313 
    314         rc = ui_menu_dd_create(mbar, "Test", &mdd, &menu);
     184        rc = ui_menu_create(mbar, "Test", &menu);
    315185        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    316186        PCUT_ASSERT_NOT_NULL(menu);
     
    323193        PCUT_ASSERT_EQUALS(ui_claimed, claimed);
    324194
    325         /* Clicking the menu bar entry should select menu drop-down */
    326         PCUT_ASSERT_EQUALS(mdd, mbar->selected);
     195        /* Clicking the menu bar entry should select menu */
     196        PCUT_ASSERT_EQUALS(menu, mbar->selected);
     197
     198        ui_menu_bar_destroy(mbar);
     199        ui_window_destroy(window);
     200        ui_destroy(ui);
     201}
     202
     203/** Calling ui_menu_bar_select() with the same menu twice deselects it */
     204PCUT_TEST(select_same)
     205{
     206        ui_t *ui = NULL;
     207        ui_window_t *window = NULL;
     208        ui_wnd_params_t params;
     209        ui_menu_bar_t *mbar = NULL;
     210        ui_menu_t *menu = NULL;
     211        gfx_rect_t rect;
     212        errno_t rc;
     213
     214        rc = ui_create_disp(NULL, &ui);
     215        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     216
     217        ui_wnd_params_init(&params);
     218        params.caption = "Hello";
     219
     220        rc = ui_window_create(ui, &params, &window);
     221        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     222        PCUT_ASSERT_NOT_NULL(window);
     223
     224        rc = ui_menu_bar_create(ui, window, &mbar);
     225        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     226        PCUT_ASSERT_NOT_NULL(mbar);
     227
     228        rc = ui_menu_create(mbar, "Test", &menu);
     229        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     230        PCUT_ASSERT_NOT_NULL(menu);
     231
     232        rect.p0.x = 0;
     233        rect.p0.y = 0;
     234        rect.p1.x = 0;
     235        rect.p1.y = 0;
     236        ui_menu_bar_select(mbar, &rect, menu);
     237        PCUT_ASSERT_EQUALS(menu, mbar->selected);
     238
     239        /* Selecting again should unselect the menu */
     240        ui_menu_bar_select(mbar, &rect, menu);
     241        PCUT_ASSERT_NULL(mbar->selected);
    327242
    328243        ui_menu_bar_destroy(mbar);
     
    338253        ui_wnd_params_t params;
    339254        ui_menu_bar_t *mbar = NULL;
    340         ui_menu_dd_t *mdd1 = NULL;
    341         ui_menu_dd_t *mdd2 = NULL;
    342         errno_t rc;
    343 
    344         rc = ui_create_disp(NULL, &ui);
    345         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    346 
    347         ui_wnd_params_init(&params);
    348         params.caption = "Hello";
    349 
    350         rc = ui_window_create(ui, &params, &window);
    351         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    352         PCUT_ASSERT_NOT_NULL(window);
    353 
    354         rc = ui_menu_bar_create(ui, window, &mbar);
    355         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    356         PCUT_ASSERT_NOT_NULL(mbar);
    357 
    358         rc = ui_menu_dd_create(mbar, "Test 1", &mdd1, NULL);
    359         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    360         PCUT_ASSERT_NOT_NULL(mdd1);
    361 
    362         rc = ui_menu_dd_create(mbar, "Test 2", &mdd2, NULL);
    363         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    364         PCUT_ASSERT_NOT_NULL(mdd2);
    365 
    366         ui_menu_bar_select(mbar, mdd1, true, 0);
    367         PCUT_ASSERT_EQUALS(mdd1, mbar->selected);
     255        ui_menu_t *menu1 = NULL;
     256        ui_menu_t *menu2 = NULL;
     257        gfx_rect_t rect;
     258        errno_t rc;
     259
     260        rc = ui_create_disp(NULL, &ui);
     261        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     262
     263        ui_wnd_params_init(&params);
     264        params.caption = "Hello";
     265
     266        rc = ui_window_create(ui, &params, &window);
     267        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     268        PCUT_ASSERT_NOT_NULL(window);
     269
     270        rc = ui_menu_bar_create(ui, window, &mbar);
     271        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     272        PCUT_ASSERT_NOT_NULL(mbar);
     273
     274        rc = ui_menu_create(mbar, "Test 1", &menu1);
     275        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     276        PCUT_ASSERT_NOT_NULL(menu1);
     277
     278        rc = ui_menu_create(mbar, "Test 2", &menu2);
     279        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     280        PCUT_ASSERT_NOT_NULL(menu2);
     281
     282        rect.p0.x = 0;
     283        rect.p0.y = 0;
     284        rect.p1.x = 0;
     285        rect.p1.y = 0;
     286        ui_menu_bar_select(mbar, &rect, menu1);
     287        PCUT_ASSERT_EQUALS(menu1, mbar->selected);
    368288
    369289        /* Selecting different menu should select it */
    370         ui_menu_bar_select(mbar, mdd2, true, 0);
    371         PCUT_ASSERT_EQUALS(mdd2, mbar->selected);
    372 
    373         ui_menu_bar_destroy(mbar);
    374         ui_window_destroy(window);
    375         ui_destroy(ui);
    376 }
    377 
    378 /** ui_menu_bar_select_first/last() selects first/last drop-down */
    379 PCUT_TEST(select_first_last)
    380 {
    381         ui_t *ui = NULL;
    382         ui_window_t *window = NULL;
    383         ui_wnd_params_t params;
    384         ui_menu_bar_t *mbar = NULL;
    385         ui_menu_dd_t *mdd1 = NULL;
    386         ui_menu_dd_t *mdd2 = NULL;
    387         errno_t rc;
    388 
    389         rc = ui_create_disp(NULL, &ui);
    390         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    391 
    392         ui_wnd_params_init(&params);
    393         params.caption = "Hello";
    394 
    395         rc = ui_window_create(ui, &params, &window);
    396         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    397         PCUT_ASSERT_NOT_NULL(window);
    398 
    399         rc = ui_menu_bar_create(ui, window, &mbar);
    400         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    401         PCUT_ASSERT_NOT_NULL(mbar);
    402 
    403         rc = ui_menu_dd_create(mbar, "Test 1", &mdd1, NULL);
    404         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    405         PCUT_ASSERT_NOT_NULL(mdd1);
    406 
    407         rc = ui_menu_dd_create(mbar, "Test 2", &mdd2, NULL);
    408         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    409         PCUT_ASSERT_NOT_NULL(mdd2);
    410 
    411         ui_menu_bar_select_first(mbar, true, 0);
    412         PCUT_ASSERT_EQUALS(mdd1, mbar->selected);
    413 
    414         ui_menu_bar_select_last(mbar, true, 0);
    415         PCUT_ASSERT_EQUALS(mdd2, mbar->selected);
    416 
    417         ui_menu_bar_destroy(mbar);
    418         ui_window_destroy(window);
    419         ui_destroy(ui);
    420 }
    421 
    422 /** ui_menu_bar_select_sysmenu() activates system menu */
    423 PCUT_TEST(select_sysmenu)
    424 {
    425         ui_t *ui = NULL;
    426         ui_window_t *window = NULL;
    427         ui_wnd_params_t params;
    428         ui_menu_bar_t *mbar = NULL;
    429         ui_menu_dd_t *mdd1 = NULL;
    430         ui_menu_dd_t *mdd2 = NULL;
    431         errno_t rc;
    432 
    433         rc = ui_create_disp(NULL, &ui);
    434         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    435 
    436         ui_wnd_params_init(&params);
    437         params.caption = "Hello";
    438 
    439         rc = ui_window_create(ui, &params, &window);
    440         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    441         PCUT_ASSERT_NOT_NULL(window);
    442 
    443         rc = ui_menu_bar_create(ui, window, &mbar);
    444         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    445         PCUT_ASSERT_NOT_NULL(mbar);
    446 
    447         rc = ui_menu_dd_create(mbar, "Test 1", &mdd1, NULL);
    448         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    449         PCUT_ASSERT_NOT_NULL(mdd1);
    450 
    451         rc = ui_menu_dd_create(mbar, "Test 2", &mdd2, NULL);
    452         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    453         PCUT_ASSERT_NOT_NULL(mdd2);
    454 
    455         ui_menu_bar_select_sysmenu(mbar, false, 0);
    456         PCUT_ASSERT_TRUE(window->wdecor->sysmenu_hdl_active);
    457 
    458         ui_menu_bar_destroy(mbar);
    459         ui_window_destroy(window);
    460         ui_destroy(ui);
    461 }
    462 
    463 /** ui_menu_bar_activate() activates/deactivates menu bar */
    464 PCUT_TEST(activate_deactivate)
    465 {
    466         ui_t *ui = NULL;
    467         ui_window_t *window = NULL;
    468         ui_wnd_params_t params;
    469         ui_menu_bar_t *mbar = NULL;
    470         ui_menu_dd_t *mdd = NULL;
    471         errno_t rc;
    472 
    473         rc = ui_create_disp(NULL, &ui);
    474         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    475 
    476         ui_wnd_params_init(&params);
    477         params.caption = "Hello";
    478 
    479         rc = ui_window_create(ui, &params, &window);
    480         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    481         PCUT_ASSERT_NOT_NULL(window);
    482 
    483         rc = ui_menu_bar_create(ui, window, &mbar);
    484         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    485         PCUT_ASSERT_NOT_NULL(mbar);
    486 
    487         rc = ui_menu_dd_create(mbar, "Test", &mdd, NULL);
    488         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    489         PCUT_ASSERT_NOT_NULL(mdd);
    490 
    491         ui_menu_bar_activate(mbar);
    492         PCUT_ASSERT_EQUALS(mdd, mbar->selected);
    493 
    494         ui_menu_bar_deactivate(mbar);
    495         PCUT_ASSERT_NULL(mbar->selected);
     290        ui_menu_bar_select(mbar, &rect, menu2);
     291        PCUT_ASSERT_EQUALS(menu2, mbar->selected);
    496292
    497293        ui_menu_bar_destroy(mbar);
Note: See TracChangeset for help on using the changeset viewer.