Changeset 59768c7 in mainline for uspace/lib/ui/test


Ignore:
Timestamp:
2022-01-10T19:29:00Z (4 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
5de852c
Parents:
9754ed2
git-author:
Jiri Svoboda <jiri@…> (2022-01-10 19:27:55)
git-committer:
Jiri Svoboda <jiri@…> (2022-01-10 19:29:00)
Message:

Menu control using F10, cursor keys, Enter, Escape

Location:
uspace/lib/ui/test
Files:
3 edited

Legend:

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

    r9754ed2 r59768c7  
    3636#include <ui/menu.h>
    3737#include <ui/menubar.h>
     38#include <ui/menuentry.h>
    3839#include <ui/ui.h>
    3940#include <ui/window.h>
     
    122123}
    123124
     125/** ui_menu_last() / ui_menu_prev() iterate over menus in reverse */
     126PCUT_TEST(last_prev)
     127{
     128        ui_t *ui = NULL;
     129        ui_window_t *window = NULL;
     130        ui_wnd_params_t params;
     131        ui_menu_bar_t *mbar = NULL;
     132        ui_menu_t *menu1 = NULL;
     133        ui_menu_t *menu2 = NULL;
     134        ui_menu_t *m;
     135        errno_t rc;
     136
     137        rc = ui_create_disp(NULL, &ui);
     138        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     139
     140        ui_wnd_params_init(&params);
     141        params.caption = "Hello";
     142
     143        rc = ui_window_create(ui, &params, &window);
     144        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     145        PCUT_ASSERT_NOT_NULL(window);
     146
     147        rc = ui_menu_bar_create(ui, window, &mbar);
     148        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     149        PCUT_ASSERT_NOT_NULL(mbar);
     150
     151        rc = ui_menu_create(mbar, "Test 1", &menu1);
     152        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     153        PCUT_ASSERT_NOT_NULL(menu1);
     154
     155        rc = ui_menu_create(mbar, "Test 1", &menu2);
     156        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     157        PCUT_ASSERT_NOT_NULL(menu2);
     158
     159        m = ui_menu_last(mbar);
     160        PCUT_ASSERT_EQUALS(menu2, m);
     161
     162        m = ui_menu_prev(m);
     163        PCUT_ASSERT_EQUALS(menu1, m);
     164
     165        m = ui_menu_prev(m);
     166        PCUT_ASSERT_NULL(m);
     167
     168        ui_menu_bar_destroy(mbar);
     169        ui_window_destroy(window);
     170        ui_destroy(ui);
     171}
     172
    124173/** ui_menu_caption() returns the menu's caption */
    125174PCUT_TEST(caption)
     
    209258}
    210259
    211 /** Paint background in graphics mode */
    212 PCUT_TEST(paint_bg_gfx)
     260/** Open and close menu with ui_menu_open() / ui_menu_close() */
     261PCUT_TEST(open_close)
    213262{
    214263        ui_t *ui = NULL;
     
    218267        ui_menu_t *menu = NULL;
    219268        gfx_rect_t prect;
    220         gfx_coord2_t pos;
    221269        errno_t rc;
    222270
     
    244292        prect.p1.y = 0;
    245293
    246         /* Menu needs to be open to be able to paint it */
     294        /* Open and close */
    247295        rc = ui_menu_open(menu, &prect);
    248296        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    249297
    250         pos.x = 0;
    251         pos.y = 0;
    252         rc = ui_menu_paint_bg_gfx(menu, &pos);
    253         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    254 
    255         ui_menu_bar_destroy(mbar);
    256         ui_window_destroy(window);
    257         ui_destroy(ui);
    258 }
    259 
    260 /** Paint background in text mode */
    261 PCUT_TEST(paint_bg_text)
     298        ui_menu_close(menu);
     299
     300        ui_menu_bar_destroy(mbar);
     301        ui_window_destroy(window);
     302        ui_destroy(ui);
     303}
     304
     305/** ui_menu_is_open() correctly returns menu state */
     306PCUT_TEST(is_open)
    262307{
    263308        ui_t *ui = NULL;
     
    267312        ui_menu_t *menu = NULL;
    268313        gfx_rect_t prect;
    269         gfx_coord2_t pos;
     314        bool open;
    270315        errno_t rc;
    271316
     
    293338        prect.p1.y = 0;
    294339
    295         /* Menu needs to be open to be able to paint it */
     340        open = ui_menu_is_open(menu);
     341        PCUT_ASSERT_FALSE(open);
     342
    296343        rc = ui_menu_open(menu, &prect);
    297344        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    298345
    299         pos.x = 0;
    300         pos.y = 0;
    301         rc = ui_menu_paint_bg_text(menu, &pos);
    302         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    303 
    304         ui_menu_bar_destroy(mbar);
    305         ui_window_destroy(window);
    306         ui_destroy(ui);
    307 }
    308 
    309 /** Paint menu */
    310 PCUT_TEST(paint)
     346        open = ui_menu_is_open(menu);
     347        PCUT_ASSERT_TRUE(open);
     348
     349        ui_menu_close(menu);
     350
     351        open = ui_menu_is_open(menu);
     352        PCUT_ASSERT_FALSE(open);
     353
     354        ui_menu_bar_destroy(mbar);
     355        ui_window_destroy(window);
     356        ui_destroy(ui);
     357}
     358
     359/** Paint background in graphics mode */
     360PCUT_TEST(paint_bg_gfx)
    311361{
    312362        ui_t *ui = NULL;
     
    348398        pos.x = 0;
    349399        pos.y = 0;
     400        rc = ui_menu_paint_bg_gfx(menu, &pos);
     401        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     402
     403        ui_menu_bar_destroy(mbar);
     404        ui_window_destroy(window);
     405        ui_destroy(ui);
     406}
     407
     408/** Paint background in text mode */
     409PCUT_TEST(paint_bg_text)
     410{
     411        ui_t *ui = NULL;
     412        ui_window_t *window = NULL;
     413        ui_wnd_params_t params;
     414        ui_menu_bar_t *mbar = NULL;
     415        ui_menu_t *menu = NULL;
     416        gfx_rect_t prect;
     417        gfx_coord2_t pos;
     418        errno_t rc;
     419
     420        rc = ui_create_disp(NULL, &ui);
     421        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     422
     423        ui_wnd_params_init(&params);
     424        params.caption = "Hello";
     425
     426        rc = ui_window_create(ui, &params, &window);
     427        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     428        PCUT_ASSERT_NOT_NULL(window);
     429
     430        rc = ui_menu_bar_create(ui, window, &mbar);
     431        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     432        PCUT_ASSERT_NOT_NULL(mbar);
     433
     434        rc = ui_menu_create(mbar, "Test", &menu);
     435        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     436        PCUT_ASSERT_NOT_NULL(menu);
     437
     438        prect.p0.x = 0;
     439        prect.p0.y = 0;
     440        prect.p1.x = 0;
     441        prect.p1.y = 0;
     442
     443        /* Menu needs to be open to be able to paint it */
     444        rc = ui_menu_open(menu, &prect);
     445        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     446
     447        pos.x = 0;
     448        pos.y = 0;
     449        rc = ui_menu_paint_bg_text(menu, &pos);
     450        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     451
     452        ui_menu_bar_destroy(mbar);
     453        ui_window_destroy(window);
     454        ui_destroy(ui);
     455}
     456
     457/** Paint menu */
     458PCUT_TEST(paint)
     459{
     460        ui_t *ui = NULL;
     461        ui_window_t *window = NULL;
     462        ui_wnd_params_t params;
     463        ui_menu_bar_t *mbar = NULL;
     464        ui_menu_t *menu = NULL;
     465        gfx_rect_t prect;
     466        gfx_coord2_t pos;
     467        errno_t rc;
     468
     469        rc = ui_create_disp(NULL, &ui);
     470        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     471
     472        ui_wnd_params_init(&params);
     473        params.caption = "Hello";
     474
     475        rc = ui_window_create(ui, &params, &window);
     476        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     477        PCUT_ASSERT_NOT_NULL(window);
     478
     479        rc = ui_menu_bar_create(ui, window, &mbar);
     480        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     481        PCUT_ASSERT_NOT_NULL(mbar);
     482
     483        rc = ui_menu_create(mbar, "Test", &menu);
     484        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     485        PCUT_ASSERT_NOT_NULL(menu);
     486
     487        prect.p0.x = 0;
     488        prect.p0.y = 0;
     489        prect.p1.x = 0;
     490        prect.p1.y = 0;
     491
     492        /* Menu needs to be open to be able to paint it */
     493        rc = ui_menu_open(menu, &prect);
     494        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     495
     496        pos.x = 0;
     497        pos.y = 0;
    350498        rc = ui_menu_paint(menu, &pos);
    351499        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     500
     501        ui_menu_bar_destroy(mbar);
     502        ui_window_destroy(window);
     503        ui_destroy(ui);
     504}
     505
     506/** ui_menu_up() with empty menu does nothing */
     507PCUT_TEST(up_empty)
     508{
     509        ui_t *ui = NULL;
     510        ui_window_t *window = NULL;
     511        ui_wnd_params_t params;
     512        ui_menu_bar_t *mbar = NULL;
     513        ui_menu_t *menu = NULL;
     514        gfx_rect_t prect;
     515        errno_t rc;
     516
     517        rc = ui_create_disp(NULL, &ui);
     518        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     519
     520        ui_wnd_params_init(&params);
     521        params.caption = "Hello";
     522
     523        rc = ui_window_create(ui, &params, &window);
     524        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     525        PCUT_ASSERT_NOT_NULL(window);
     526
     527        rc = ui_menu_bar_create(ui, window, &mbar);
     528        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     529        PCUT_ASSERT_NOT_NULL(mbar);
     530
     531        rc = ui_menu_create(mbar, "Test", &menu);
     532        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     533        PCUT_ASSERT_NOT_NULL(menu);
     534
     535        prect.p0.x = 0;
     536        prect.p0.y = 0;
     537        prect.p1.x = 0;
     538        prect.p1.y = 0;
     539
     540        /* Menu needs to be open to be able to move around it */
     541        rc = ui_menu_open(menu, &prect);
     542        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     543
     544        ui_menu_up(menu);
     545
     546        ui_menu_bar_destroy(mbar);
     547        ui_window_destroy(window);
     548        ui_destroy(ui);
     549}
     550
     551/** ui_menu_up() moves one entry up, skips separators, wraps around */
     552PCUT_TEST(up)
     553{
     554        ui_t *ui = NULL;
     555        ui_window_t *window = NULL;
     556        ui_wnd_params_t params;
     557        ui_menu_bar_t *mbar = NULL;
     558        ui_menu_t *menu = NULL;
     559        ui_menu_entry_t *mentry1 = NULL;
     560        ui_menu_entry_t *mentry2 = NULL;
     561        ui_menu_entry_t *mentry3 = NULL;
     562        gfx_rect_t prect;
     563        errno_t rc;
     564
     565        rc = ui_create_disp(NULL, &ui);
     566        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     567
     568        ui_wnd_params_init(&params);
     569        params.caption = "Hello";
     570
     571        rc = ui_window_create(ui, &params, &window);
     572        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     573        PCUT_ASSERT_NOT_NULL(window);
     574
     575        rc = ui_menu_bar_create(ui, window, &mbar);
     576        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     577        PCUT_ASSERT_NOT_NULL(mbar);
     578
     579        rc = ui_menu_create(mbar, "Test", &menu);
     580        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     581        PCUT_ASSERT_NOT_NULL(menu);
     582
     583        rc = ui_menu_entry_create(menu, "Foo", "F1", &mentry1);
     584        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     585        PCUT_ASSERT_NOT_NULL(mentry1);
     586
     587        rc = ui_menu_entry_sep_create(menu, &mentry2);
     588        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     589        PCUT_ASSERT_NOT_NULL(mentry2);
     590
     591        rc = ui_menu_entry_create(menu, "Bar", "F2", &mentry3);
     592        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     593        PCUT_ASSERT_NOT_NULL(mentry3);
     594
     595        prect.p0.x = 0;
     596        prect.p0.y = 0;
     597        prect.p1.x = 0;
     598        prect.p1.y = 0;
     599
     600        /* Menu needs to be open to be able to move around it */
     601        rc = ui_menu_open(menu, &prect);
     602        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     603
     604        /* When menu is open, the first entry is selected */
     605        PCUT_ASSERT_EQUALS(mentry1, menu->selected);
     606
     607        ui_menu_up(menu);
     608
     609        /* Now we've wrapped around to the last entry */
     610        PCUT_ASSERT_EQUALS(mentry3, menu->selected);
     611
     612        ui_menu_up(menu);
     613
     614        /* mentry2 is a separator and was skipped */
     615        PCUT_ASSERT_EQUALS(mentry1, menu->selected);
     616
     617        ui_menu_bar_destroy(mbar);
     618        ui_window_destroy(window);
     619        ui_destroy(ui);
     620}
     621
     622/** ui_menu_down() with empty menu does nothing */
     623PCUT_TEST(down_empty)
     624{
     625        ui_t *ui = NULL;
     626        ui_window_t *window = NULL;
     627        ui_wnd_params_t params;
     628        ui_menu_bar_t *mbar = NULL;
     629        ui_menu_t *menu = NULL;
     630        gfx_rect_t prect;
     631        errno_t rc;
     632
     633        rc = ui_create_disp(NULL, &ui);
     634        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     635
     636        ui_wnd_params_init(&params);
     637        params.caption = "Hello";
     638
     639        rc = ui_window_create(ui, &params, &window);
     640        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     641        PCUT_ASSERT_NOT_NULL(window);
     642
     643        rc = ui_menu_bar_create(ui, window, &mbar);
     644        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     645        PCUT_ASSERT_NOT_NULL(mbar);
     646
     647        rc = ui_menu_create(mbar, "Test", &menu);
     648        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     649        PCUT_ASSERT_NOT_NULL(menu);
     650
     651        prect.p0.x = 0;
     652        prect.p0.y = 0;
     653        prect.p1.x = 0;
     654        prect.p1.y = 0;
     655
     656        /* Menu needs to be open to be able to move around it */
     657        rc = ui_menu_open(menu, &prect);
     658        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     659
     660        ui_menu_down(menu);
     661
     662        ui_menu_bar_destroy(mbar);
     663        ui_window_destroy(window);
     664        ui_destroy(ui);
     665}
     666
     667/** ui_menu_down() moves one entry down, skips separators, wraps around */
     668PCUT_TEST(down)
     669{
     670        ui_t *ui = NULL;
     671        ui_window_t *window = NULL;
     672        ui_wnd_params_t params;
     673        ui_menu_bar_t *mbar = NULL;
     674        ui_menu_t *menu = NULL;
     675        ui_menu_entry_t *mentry1 = NULL;
     676        ui_menu_entry_t *mentry2 = NULL;
     677        ui_menu_entry_t *mentry3 = NULL;
     678        gfx_rect_t prect;
     679        errno_t rc;
     680
     681        rc = ui_create_disp(NULL, &ui);
     682        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     683
     684        ui_wnd_params_init(&params);
     685        params.caption = "Hello";
     686
     687        rc = ui_window_create(ui, &params, &window);
     688        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     689        PCUT_ASSERT_NOT_NULL(window);
     690
     691        rc = ui_menu_bar_create(ui, window, &mbar);
     692        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     693        PCUT_ASSERT_NOT_NULL(mbar);
     694
     695        rc = ui_menu_create(mbar, "Test", &menu);
     696        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     697        PCUT_ASSERT_NOT_NULL(menu);
     698
     699        rc = ui_menu_entry_create(menu, "Foo", "F1", &mentry1);
     700        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     701        PCUT_ASSERT_NOT_NULL(mentry1);
     702
     703        rc = ui_menu_entry_sep_create(menu, &mentry2);
     704        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     705        PCUT_ASSERT_NOT_NULL(mentry2);
     706
     707        rc = ui_menu_entry_create(menu, "Bar", "F2", &mentry3);
     708        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     709        PCUT_ASSERT_NOT_NULL(mentry3);
     710
     711        prect.p0.x = 0;
     712        prect.p0.y = 0;
     713        prect.p1.x = 0;
     714        prect.p1.y = 0;
     715
     716        /* Menu needs to be open to be able to move around it */
     717        rc = ui_menu_open(menu, &prect);
     718        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     719
     720        /* When menu is open, the first entry is selected */
     721        PCUT_ASSERT_EQUALS(mentry1, menu->selected);
     722
     723        ui_menu_down(menu);
     724
     725        /* mentry2 is a separator and was skipped */
     726        PCUT_ASSERT_EQUALS(mentry3, menu->selected);
     727
     728        ui_menu_up(menu);
     729
     730        /* Now we've wrapped around to the first entry */
     731        PCUT_ASSERT_EQUALS(mentry1, menu->selected);
    352732
    353733        ui_menu_bar_destroy(mbar);
  • uspace/lib/ui/test/menubar.c

    r9754ed2 r59768c7  
    11/*
    2  * Copyright (c) 2021 Jiri Svoboda
     2 * Copyright (c) 2022 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    149149}
    150150
    151 /** Press event on menu bar entry selects menu */
    152 PCUT_TEST(pos_event_select)
     151/** Deliver menu bar keyboard event */
     152PCUT_TEST(kbd_event)
    153153{
    154154        ui_t *ui = NULL;
     
    158158        ui_menu_t *menu = NULL;
    159159        ui_evclaim_t claimed;
    160         pos_event_t event;
     160        kbd_event_t event;
    161161        gfx_rect_t rect;
    162162        errno_t rc;
     
    186186        PCUT_ASSERT_NOT_NULL(menu);
    187187
     188        event.type = KEY_PRESS;
     189        event.key = KC_ESCAPE;
     190        claimed = ui_menu_kbd_pos_event(mbar, &event);
     191        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     192        PCUT_ASSERT_EQUALS(ui_claimed, claimed);
     193
     194        ui_menu_bar_destroy(mbar);
     195        ui_window_destroy(window);
     196        ui_destroy(ui);
     197}
     198
     199/** Press event on menu bar entry selects menu */
     200PCUT_TEST(pos_event_select)
     201{
     202        ui_t *ui = NULL;
     203        ui_window_t *window = NULL;
     204        ui_wnd_params_t params;
     205        ui_menu_bar_t *mbar = NULL;
     206        ui_menu_t *menu = NULL;
     207        ui_evclaim_t claimed;
     208        pos_event_t event;
     209        gfx_rect_t rect;
     210        errno_t rc;
     211
     212        rc = ui_create_disp(NULL, &ui);
     213        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     214
     215        ui_wnd_params_init(&params);
     216        params.caption = "Hello";
     217
     218        rc = ui_window_create(ui, &params, &window);
     219        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     220        PCUT_ASSERT_NOT_NULL(window);
     221
     222        rc = ui_menu_bar_create(ui, window, &mbar);
     223        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     224        PCUT_ASSERT_NOT_NULL(mbar);
     225
     226        rect.p0.x = 0;
     227        rect.p0.y = 0;
     228        rect.p1.x = 50;
     229        rect.p1.y = 25;
     230        ui_menu_bar_set_rect(mbar, &rect);
     231
     232        rc = ui_menu_create(mbar, "Test", &menu);
     233        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     234        PCUT_ASSERT_NOT_NULL(menu);
     235
    188236        event.type = POS_PRESS;
    189237        event.hpos = 4;
     
    209257        ui_menu_bar_t *mbar = NULL;
    210258        ui_menu_t *menu = NULL;
    211         gfx_rect_t rect;
    212259        errno_t rc;
    213260
     
    230277        PCUT_ASSERT_NOT_NULL(menu);
    231278
    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);
     279        ui_menu_bar_select(mbar, menu, true);
    237280        PCUT_ASSERT_EQUALS(menu, mbar->selected);
    238281
    239282        /* Selecting again should unselect the menu */
    240         ui_menu_bar_select(mbar, &rect, menu);
     283        ui_menu_bar_select(mbar, menu, true);
    241284        PCUT_ASSERT_NULL(mbar->selected);
    242285
     
    255298        ui_menu_t *menu1 = NULL;
    256299        ui_menu_t *menu2 = NULL;
    257         gfx_rect_t rect;
    258300        errno_t rc;
    259301
     
    280322        PCUT_ASSERT_NOT_NULL(menu2);
    281323
    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);
     324        ui_menu_bar_select(mbar, menu1, true);
    287325        PCUT_ASSERT_EQUALS(menu1, mbar->selected);
    288326
    289327        /* Selecting different menu should select it */
    290         ui_menu_bar_select(mbar, &rect, menu2);
     328        ui_menu_bar_select(mbar, menu2, true);
    291329        PCUT_ASSERT_EQUALS(menu2, mbar->selected);
    292330
     
    296334}
    297335
     336/** ui_menu_bar_activate() activates/deactivates menu bar */
     337PCUT_TEST(activate_deactivate)
     338{
     339        ui_t *ui = NULL;
     340        ui_window_t *window = NULL;
     341        ui_wnd_params_t params;
     342        ui_menu_bar_t *mbar = NULL;
     343        ui_menu_t *menu = NULL;
     344        errno_t rc;
     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        rc = ui_menu_bar_create(ui, window, &mbar);
     357        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     358        PCUT_ASSERT_NOT_NULL(mbar);
     359
     360        rc = ui_menu_create(mbar, "Test", &menu);
     361        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     362        PCUT_ASSERT_NOT_NULL(menu);
     363
     364        ui_menu_bar_activate(mbar);
     365        PCUT_ASSERT_EQUALS(menu, mbar->selected);
     366
     367        ui_menu_bar_deactivate(mbar);
     368        PCUT_ASSERT_NULL(mbar->selected);
     369
     370        ui_menu_bar_destroy(mbar);
     371        ui_window_destroy(window);
     372        ui_destroy(ui);
     373}
     374
    298375PCUT_EXPORT(menubar);
  • uspace/lib/ui/test/menuentry.c

    r9754ed2 r59768c7  
    236236}
    237237
     238/** ui_menu_entry_last() / ui_menu_entry_prev() iterate over entries in reverse */
     239PCUT_TEST(last_prev)
     240{
     241        ui_t *ui = NULL;
     242        ui_window_t *window = NULL;
     243        ui_wnd_params_t params;
     244        ui_menu_bar_t *mbar = NULL;
     245        ui_menu_t *menu = NULL;
     246        ui_menu_entry_t *entry1 = NULL;
     247        ui_menu_entry_t *entry2 = NULL;
     248        ui_menu_entry_t *e;
     249        errno_t rc;
     250
     251        rc = ui_create_disp(NULL, &ui);
     252        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     253
     254        ui_wnd_params_init(&params);
     255        params.caption = "Hello";
     256
     257        rc = ui_window_create(ui, &params, &window);
     258        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     259        PCUT_ASSERT_NOT_NULL(window);
     260
     261        rc = ui_menu_bar_create(ui, window, &mbar);
     262        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     263        PCUT_ASSERT_NOT_NULL(mbar);
     264
     265        rc = ui_menu_create(mbar, "Test", &menu);
     266        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     267        PCUT_ASSERT_NOT_NULL(menu);
     268
     269        rc = ui_menu_entry_create(menu, "Foo", "F1", &entry1);
     270        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     271        PCUT_ASSERT_NOT_NULL(entry1);
     272
     273        rc = ui_menu_entry_create(menu, "Bar", "F2", &entry2);
     274        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     275        PCUT_ASSERT_NOT_NULL(entry2);
     276
     277        e = ui_menu_entry_last(menu);
     278        PCUT_ASSERT_EQUALS(entry2, e);
     279
     280        e = ui_menu_entry_prev(e);
     281        PCUT_ASSERT_EQUALS(entry1, e);
     282
     283        e = ui_menu_entry_prev(e);
     284        PCUT_ASSERT_NULL(e);
     285
     286        ui_menu_bar_destroy(mbar);
     287        ui_window_destroy(window);
     288        ui_destroy(ui);
     289}
     290
    238291/** ui_menu_entry_column_widths() / ui_menu_entry_height() */
    239292PCUT_TEST(widths_height)
     
    335388        rc = ui_menu_entry_paint(mentry, &pos);
    336389        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     390
     391        ui_menu_bar_destroy(mbar);
     392        ui_window_destroy(window);
     393        ui_destroy(ui);
     394}
     395
     396/** ui_menu_entry_selectable() returns correct value based on entry type */
     397PCUT_TEST(selectable)
     398{
     399        ui_t *ui = NULL;
     400        ui_window_t *window = NULL;
     401        ui_wnd_params_t params;
     402        ui_menu_bar_t *mbar = NULL;
     403        ui_menu_t *menu = NULL;
     404        ui_menu_entry_t *mentry = NULL;
     405        errno_t rc;
     406
     407        rc = ui_create_disp(NULL, &ui);
     408        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     409
     410        ui_wnd_params_init(&params);
     411        params.caption = "Hello";
     412
     413        rc = ui_window_create(ui, &params, &window);
     414        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     415        PCUT_ASSERT_NOT_NULL(window);
     416
     417        rc = ui_menu_bar_create(ui, window, &mbar);
     418        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     419        PCUT_ASSERT_NOT_NULL(mbar);
     420
     421        rc = ui_menu_create(mbar, "Test", &menu);
     422        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     423        PCUT_ASSERT_NOT_NULL(menu);
     424
     425        /* Selectable entry */
     426
     427        rc = ui_menu_entry_create(menu, "Foo", "F1", &mentry);
     428        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     429        PCUT_ASSERT_NOT_NULL(mentry);
     430
     431        PCUT_ASSERT_TRUE(ui_menu_entry_selectable(mentry));
     432
     433        ui_menu_entry_destroy(mentry);
     434
     435        /* Non-selectable separator entry */
     436
     437        rc = ui_menu_entry_sep_create(menu, &mentry);
     438        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     439        PCUT_ASSERT_NOT_NULL(mentry);
     440
     441        PCUT_ASSERT_FALSE(ui_menu_entry_selectable(mentry));
     442
     443        ui_menu_entry_destroy(mentry);
    337444
    338445        ui_menu_bar_destroy(mbar);
     
    545652}
    546653
     654/** ui_menu_entry_activate() activates menu entry */
     655PCUT_TEST(activate)
     656{
     657        ui_t *ui = NULL;
     658        ui_window_t *window = NULL;
     659        ui_wnd_params_t params;
     660        ui_menu_bar_t *mbar = NULL;
     661        ui_menu_t *menu = NULL;
     662        ui_menu_entry_t *mentry = NULL;
     663        gfx_rect_t prect;
     664        test_resp_t resp;
     665        errno_t rc;
     666
     667        rc = ui_create_disp(NULL, &ui);
     668        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     669
     670        ui_wnd_params_init(&params);
     671        params.caption = "Hello";
     672
     673        rc = ui_window_create(ui, &params, &window);
     674        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     675        PCUT_ASSERT_NOT_NULL(window);
     676
     677        rc = ui_menu_bar_create(ui, window, &mbar);
     678        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     679        PCUT_ASSERT_NOT_NULL(mbar);
     680
     681        rc = ui_menu_create(mbar, "Test", &menu);
     682        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     683        PCUT_ASSERT_NOT_NULL(menu);
     684
     685        rc = ui_menu_entry_create(menu, "X", "Y", &mentry);
     686        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     687        PCUT_ASSERT_NOT_NULL(mentry);
     688
     689        ui_menu_entry_set_cb(mentry, test_entry_cb, &resp);
     690        resp.activated = false;
     691
     692        prect.p0.x = 0;
     693        prect.p0.y = 0;
     694        prect.p1.x = 0;
     695        prect.p1.y = 0;
     696
     697        rc = ui_menu_open(menu, &prect);
     698        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     699
     700        PCUT_ASSERT_FALSE(resp.activated);
     701        ui_menu_entry_activate(mentry);
     702
     703        ui_menu_entry_release(mentry);
     704        PCUT_ASSERT_TRUE(resp.activated);
     705
     706        ui_menu_bar_destroy(mbar);
     707        ui_window_destroy(window);
     708        ui_destroy(ui);
     709}
     710
    547711/** Press event inside menu entry */
    548712PCUT_TEST(pos_press_inside)
Note: See TracChangeset for help on using the changeset viewer.