Ignore:
File:
1 edited

Legend:

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

    rc68c18b9 r4034954c  
    11/*
    2  * Copyright (c) 2021 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    3232#include <stdbool.h>
    3333#include <ui/control.h>
    34 #include <ui/menu.h>
    3534#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"
    3941
    4042PCUT_INIT;
     
    4547PCUT_TEST(create_destroy)
    4648{
    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);
     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);
    5572}
    5673
     
    6481PCUT_TEST(ctl)
    6582{
     83        ui_t *ui = NULL;
     84        ui_window_t *window = NULL;
     85        ui_wnd_params_t params;
    6686        ui_menu_bar_t *mbar = NULL;
    6787        ui_control_t *control;
    6888        errno_t rc;
    6989
    70         rc = ui_menu_bar_create(NULL, NULL, &mbar);
     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);
    71101        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    72102        PCUT_ASSERT_NOT_NULL(mbar);
     
    76106
    77107        ui_control_destroy(control);
     108        ui_window_destroy(window);
     109        ui_destroy(ui);
    78110}
    79111
     
    149181}
    150182
    151 /** Press event on menu bar entry selects menu */
    152 PCUT_TEST(pos_event_select)
     183/** Deliver menu bar keyboard event */
     184PCUT_TEST(kbd_event)
    153185{
    154186        ui_t *ui = NULL;
     
    158190        ui_menu_t *menu = NULL;
    159191        ui_evclaim_t claimed;
    160         pos_event_t event;
     192        kbd_event_t event;
    161193        gfx_rect_t rect;
    162194        errno_t rc;
     
    182214        ui_menu_bar_set_rect(mbar, &rect);
    183215
    184         rc = ui_menu_create(mbar, "Test", &menu);
     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 */
     233PCUT_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 */
     281PCUT_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);
    185315        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    186316        PCUT_ASSERT_NOT_NULL(menu);
     
    193323        PCUT_ASSERT_EQUALS(ui_claimed, claimed);
    194324
    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 */
    204 PCUT_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);
     325        /* Clicking the menu bar entry should select menu drop-down */
     326        PCUT_ASSERT_EQUALS(mdd, mbar->selected);
    242327
    243328        ui_menu_bar_destroy(mbar);
     
    253338        ui_wnd_params_t params;
    254339        ui_menu_bar_t *mbar = NULL;
    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);
     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);
    288368
    289369        /* Selecting different menu should select it */
    290         ui_menu_bar_select(mbar, &rect, menu2);
    291         PCUT_ASSERT_EQUALS(menu2, mbar->selected);
     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 */
     379PCUT_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 */
     423PCUT_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 */
     464PCUT_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);
    292496
    293497        ui_menu_bar_destroy(mbar);
Note: See TracChangeset for help on using the changeset viewer.