Ignore:
File:
1 edited

Legend:

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

    rc68c18b9 r46bd63c9  
    11/*
    2  * Copyright (c) 2021 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    3535#include <ui/menu.h>
    3636#include <ui/menubar.h>
     37#include <ui/menudd.h>
    3738#include <ui/menuentry.h>
    3839#include <ui/ui.h>
     
    7576        PCUT_ASSERT_NOT_NULL(mbar);
    7677
    77         rc = ui_menu_create(mbar, "Test", &menu);
     78        rc = ui_menu_dd_create(mbar, "Test", NULL, &menu);
    7879        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    7980        PCUT_ASSERT_NOT_NULL(menu);
     
    116117        PCUT_ASSERT_NOT_NULL(mbar);
    117118
    118         rc = ui_menu_create(mbar, "Test", &menu);
     119        rc = ui_menu_dd_create(mbar, "Test", NULL, &menu);
    119120        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    120121        PCUT_ASSERT_NOT_NULL(menu);
     
    164165        PCUT_ASSERT_NOT_NULL(mbar);
    165166
    166         rc = ui_menu_create(mbar, "Test", &menu);
     167        rc = ui_menu_dd_create(mbar, "Test", NULL, &menu);
    167168        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    168169        PCUT_ASSERT_NOT_NULL(menu);
     
    210211        PCUT_ASSERT_NOT_NULL(mbar);
    211212
    212         rc = ui_menu_create(mbar, "Test", &menu);
     213        rc = ui_menu_dd_create(mbar, "Test", NULL, &menu);
    213214        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    214215        PCUT_ASSERT_NOT_NULL(menu);
     
    229230
    230231        e = ui_menu_entry_next(e);
     232        PCUT_ASSERT_NULL(e);
     233
     234        ui_menu_bar_destroy(mbar);
     235        ui_window_destroy(window);
     236        ui_destroy(ui);
     237}
     238
     239/** ui_menu_entry_last() / ui_menu_entry_prev() iterate over entries in reverse */
     240PCUT_TEST(last_prev)
     241{
     242        ui_t *ui = NULL;
     243        ui_window_t *window = NULL;
     244        ui_wnd_params_t params;
     245        ui_menu_bar_t *mbar = NULL;
     246        ui_menu_t *menu = NULL;
     247        ui_menu_entry_t *entry1 = NULL;
     248        ui_menu_entry_t *entry2 = NULL;
     249        ui_menu_entry_t *e;
     250        errno_t rc;
     251
     252        rc = ui_create_disp(NULL, &ui);
     253        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     254
     255        ui_wnd_params_init(&params);
     256        params.caption = "Hello";
     257
     258        rc = ui_window_create(ui, &params, &window);
     259        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     260        PCUT_ASSERT_NOT_NULL(window);
     261
     262        rc = ui_menu_bar_create(ui, window, &mbar);
     263        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     264        PCUT_ASSERT_NOT_NULL(mbar);
     265
     266        rc = ui_menu_dd_create(mbar, "Test", NULL, &menu);
     267        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     268        PCUT_ASSERT_NOT_NULL(menu);
     269
     270        rc = ui_menu_entry_create(menu, "Foo", "F1", &entry1);
     271        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     272        PCUT_ASSERT_NOT_NULL(entry1);
     273
     274        rc = ui_menu_entry_create(menu, "Bar", "F2", &entry2);
     275        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     276        PCUT_ASSERT_NOT_NULL(entry2);
     277
     278        e = ui_menu_entry_last(menu);
     279        PCUT_ASSERT_EQUALS(entry2, e);
     280
     281        e = ui_menu_entry_prev(e);
     282        PCUT_ASSERT_EQUALS(entry1, e);
     283
     284        e = ui_menu_entry_prev(e);
    231285        PCUT_ASSERT_NULL(e);
    232286
     
    265319        PCUT_ASSERT_NOT_NULL(mbar);
    266320
    267         rc = ui_menu_create(mbar, "Test", &menu);
     321        rc = ui_menu_dd_create(mbar, "Test", NULL, &menu);
    268322        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    269323        PCUT_ASSERT_NOT_NULL(menu);
     
    315369        PCUT_ASSERT_NOT_NULL(mbar);
    316370
    317         rc = ui_menu_create(mbar, "Test", &menu);
     371        rc = ui_menu_dd_create(mbar, "Test", NULL, &menu);
    318372        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    319373        PCUT_ASSERT_NOT_NULL(menu);
     
    328382        prect.p1.y = 0;
    329383
    330         rc = ui_menu_open(menu, &prect);
     384        rc = ui_menu_open(menu, &prect, 0);
    331385        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    332386
     
    341395}
    342396
     397/** ui_menu_entry_selectable() returns correct value based on entry type */
     398PCUT_TEST(selectable)
     399{
     400        ui_t *ui = NULL;
     401        ui_window_t *window = NULL;
     402        ui_wnd_params_t params;
     403        ui_menu_bar_t *mbar = NULL;
     404        ui_menu_t *menu = NULL;
     405        ui_menu_entry_t *mentry = NULL;
     406        errno_t rc;
     407
     408        rc = ui_create_disp(NULL, &ui);
     409        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     410
     411        ui_wnd_params_init(&params);
     412        params.caption = "Hello";
     413
     414        rc = ui_window_create(ui, &params, &window);
     415        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     416        PCUT_ASSERT_NOT_NULL(window);
     417
     418        rc = ui_menu_bar_create(ui, window, &mbar);
     419        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     420        PCUT_ASSERT_NOT_NULL(mbar);
     421
     422        rc = ui_menu_dd_create(mbar, "Test", NULL, &menu);
     423        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     424        PCUT_ASSERT_NOT_NULL(menu);
     425
     426        /* Selectable entry */
     427
     428        rc = ui_menu_entry_create(menu, "Foo", "F1", &mentry);
     429        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     430        PCUT_ASSERT_NOT_NULL(mentry);
     431
     432        PCUT_ASSERT_TRUE(ui_menu_entry_selectable(mentry));
     433
     434        ui_menu_entry_destroy(mentry);
     435
     436        /* Non-selectable separator entry */
     437
     438        rc = ui_menu_entry_sep_create(menu, &mentry);
     439        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     440        PCUT_ASSERT_NOT_NULL(mentry);
     441
     442        PCUT_ASSERT_FALSE(ui_menu_entry_selectable(mentry));
     443
     444        ui_menu_entry_destroy(mentry);
     445
     446        ui_menu_bar_destroy(mbar);
     447        ui_window_destroy(window);
     448        ui_destroy(ui);
     449}
     450
    343451/** Press and release activates menu entry */
    344452PCUT_TEST(press_release)
     
    369477        PCUT_ASSERT_NOT_NULL(mbar);
    370478
    371         rc = ui_menu_create(mbar, "Test", &menu);
     479        rc = ui_menu_dd_create(mbar, "Test", NULL, &menu);
    372480        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    373481        PCUT_ASSERT_NOT_NULL(menu);
     
    385493        prect.p1.y = 0;
    386494
    387         rc = ui_menu_open(menu, &prect);
     495        rc = ui_menu_open(menu, &prect, 0);
    388496        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    389497
     
    432540        PCUT_ASSERT_NOT_NULL(mbar);
    433541
    434         rc = ui_menu_create(mbar, "Test", &menu);
     542        rc = ui_menu_dd_create(mbar, "Test", NULL, &menu);
    435543        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    436544        PCUT_ASSERT_NOT_NULL(menu);
     
    448556        prect.p1.y = 0;
    449557
    450         rc = ui_menu_open(menu, &prect);
     558        rc = ui_menu_open(menu, &prect, 0);
    451559        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    452560
     
    500608        PCUT_ASSERT_NOT_NULL(mbar);
    501609
    502         rc = ui_menu_create(mbar, "Test", &menu);
     610        rc = ui_menu_dd_create(mbar, "Test", NULL, &menu);
    503611        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    504612        PCUT_ASSERT_NOT_NULL(menu);
     
    516624        prect.p1.y = 0;
    517625
    518         rc = ui_menu_open(menu, &prect);
     626        rc = ui_menu_open(menu, &prect, 0);
    519627        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    520628
     
    545653}
    546654
    547 /** Press event inside menu entry */
    548 PCUT_TEST(pos_press_inside)
    549 {
    550         ui_t *ui = NULL;
    551         ui_window_t *window = NULL;
    552         ui_wnd_params_t params;
    553         ui_menu_bar_t *mbar = NULL;
    554         ui_menu_t *menu = NULL;
    555         ui_menu_entry_t *mentry = NULL;
    556         gfx_coord2_t pos;
     655/** ui_menu_entry_activate() activates menu entry */
     656PCUT_TEST(activate)
     657{
     658        ui_t *ui = NULL;
     659        ui_window_t *window = NULL;
     660        ui_wnd_params_t params;
     661        ui_menu_bar_t *mbar = NULL;
     662        ui_menu_t *menu = NULL;
     663        ui_menu_entry_t *mentry = NULL;
    557664        gfx_rect_t prect;
    558         pos_event_t event;
    559         errno_t rc;
    560 
    561         rc = ui_create_disp(NULL, &ui);
    562         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    563 
    564         ui_wnd_params_init(&params);
    565         params.caption = "Hello";
    566 
    567         rc = ui_window_create(ui, &params, &window);
    568         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    569         PCUT_ASSERT_NOT_NULL(window);
    570 
    571         rc = ui_menu_bar_create(ui, window, &mbar);
    572         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    573         PCUT_ASSERT_NOT_NULL(mbar);
    574 
    575         rc = ui_menu_create(mbar, "Test", &menu);
     665        test_resp_t resp;
     666        errno_t rc;
     667
     668        rc = ui_create_disp(NULL, &ui);
     669        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     670
     671        ui_wnd_params_init(&params);
     672        params.caption = "Hello";
     673
     674        rc = ui_window_create(ui, &params, &window);
     675        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     676        PCUT_ASSERT_NOT_NULL(window);
     677
     678        rc = ui_menu_bar_create(ui, window, &mbar);
     679        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     680        PCUT_ASSERT_NOT_NULL(mbar);
     681
     682        rc = ui_menu_dd_create(mbar, "Test", NULL, &menu);
    576683        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    577684        PCUT_ASSERT_NOT_NULL(menu);
     
    580687        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    581688        PCUT_ASSERT_NOT_NULL(mentry);
     689
     690        ui_menu_entry_set_cb(mentry, test_entry_cb, &resp);
     691        resp.activated = false;
    582692
    583693        prect.p0.x = 0;
     
    586696        prect.p1.y = 0;
    587697
    588         rc = ui_menu_open(menu, &prect);
    589         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    590 
    591         pos.x = 0;
    592         pos.y = 0;
    593 
    594         event.type = POS_PRESS;
    595         event.hpos = 4;
    596         event.vpos = 4;
    597 
    598         ui_menu_entry_pos_event(mentry, &pos, &event);
    599         PCUT_ASSERT_TRUE(mentry->inside);
    600         PCUT_ASSERT_TRUE(mentry->held);
    601 
    602         ui_menu_bar_destroy(mbar);
    603         ui_window_destroy(window);
    604         ui_destroy(ui);
    605 }
    606 
    607 /** Press event outside menu entry */
    608 PCUT_TEST(pos_press_outside)
     698        rc = ui_menu_open(menu, &prect, 0);
     699        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     700
     701        PCUT_ASSERT_FALSE(resp.activated);
     702        ui_menu_entry_activate(mentry);
     703
     704        ui_menu_entry_release(mentry);
     705        PCUT_ASSERT_TRUE(resp.activated);
     706
     707        ui_menu_bar_destroy(mbar);
     708        ui_window_destroy(window);
     709        ui_destroy(ui);
     710}
     711
     712/** Press event inside menu entry */
     713PCUT_TEST(pos_press_inside)
    609714{
    610715        ui_t *ui = NULL;
     
    633738        PCUT_ASSERT_NOT_NULL(mbar);
    634739
    635         rc = ui_menu_create(mbar, "Test", &menu);
     740        rc = ui_menu_dd_create(mbar, "Test", NULL, &menu);
    636741        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    637742        PCUT_ASSERT_NOT_NULL(menu);
     
    646751        prect.p1.y = 0;
    647752
    648         rc = ui_menu_open(menu, &prect);
     753        rc = ui_menu_open(menu, &prect, 0);
    649754        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    650755
     
    653758
    654759        event.type = POS_PRESS;
    655         event.hpos = 40;
    656         event.vpos = 20;
     760        event.hpos = 4;
     761        event.vpos = 4;
    657762
    658763        ui_menu_entry_pos_event(mentry, &pos, &event);
    659         PCUT_ASSERT_FALSE(mentry->inside);
    660         PCUT_ASSERT_FALSE(mentry->held);
    661 
    662         ui_menu_bar_destroy(mbar);
    663         ui_window_destroy(window);
    664         ui_destroy(ui);
    665 }
    666 
    667 /** Position event moving out of menu entry */
    668 PCUT_TEST(pos_move_out)
     764        PCUT_ASSERT_TRUE(mentry->inside);
     765        PCUT_ASSERT_TRUE(mentry->held);
     766
     767        ui_menu_bar_destroy(mbar);
     768        ui_window_destroy(window);
     769        ui_destroy(ui);
     770}
     771
     772/** Press event outside menu entry */
     773PCUT_TEST(pos_press_outside)
    669774{
    670775        ui_t *ui = NULL;
     
    693798        PCUT_ASSERT_NOT_NULL(mbar);
    694799
    695         rc = ui_menu_create(mbar, "Test", &menu);
     800        rc = ui_menu_dd_create(mbar, "Test", NULL, &menu);
    696801        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    697802        PCUT_ASSERT_NOT_NULL(menu);
     
    706811        prect.p1.y = 0;
    707812
    708         rc = ui_menu_open(menu, &prect);
     813        rc = ui_menu_open(menu, &prect, 0);
     814        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     815
     816        pos.x = 0;
     817        pos.y = 0;
     818
     819        event.type = POS_PRESS;
     820        event.hpos = 40;
     821        event.vpos = 20;
     822
     823        ui_menu_entry_pos_event(mentry, &pos, &event);
     824        PCUT_ASSERT_FALSE(mentry->inside);
     825        PCUT_ASSERT_FALSE(mentry->held);
     826
     827        ui_menu_bar_destroy(mbar);
     828        ui_window_destroy(window);
     829        ui_destroy(ui);
     830}
     831
     832/** Position event moving out of menu entry */
     833PCUT_TEST(pos_move_out)
     834{
     835        ui_t *ui = NULL;
     836        ui_window_t *window = NULL;
     837        ui_wnd_params_t params;
     838        ui_menu_bar_t *mbar = NULL;
     839        ui_menu_t *menu = NULL;
     840        ui_menu_entry_t *mentry = NULL;
     841        gfx_coord2_t pos;
     842        gfx_rect_t prect;
     843        pos_event_t event;
     844        errno_t rc;
     845
     846        rc = ui_create_disp(NULL, &ui);
     847        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     848
     849        ui_wnd_params_init(&params);
     850        params.caption = "Hello";
     851
     852        rc = ui_window_create(ui, &params, &window);
     853        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     854        PCUT_ASSERT_NOT_NULL(window);
     855
     856        rc = ui_menu_bar_create(ui, window, &mbar);
     857        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     858        PCUT_ASSERT_NOT_NULL(mbar);
     859
     860        rc = ui_menu_dd_create(mbar, "Test", NULL, &menu);
     861        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     862        PCUT_ASSERT_NOT_NULL(menu);
     863
     864        rc = ui_menu_entry_create(menu, "X", "Y", &mentry);
     865        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     866        PCUT_ASSERT_NOT_NULL(mentry);
     867
     868        prect.p0.x = 0;
     869        prect.p0.y = 0;
     870        prect.p1.x = 0;
     871        prect.p1.y = 0;
     872
     873        rc = ui_menu_open(menu, &prect, 0);
    709874        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    710875
     
    756921        PCUT_ASSERT_NOT_NULL(mbar);
    757922
    758         rc = ui_menu_create(mbar, "Test", &menu);
     923        rc = ui_menu_dd_create(mbar, "Test", NULL, &menu);
    759924        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    760925        PCUT_ASSERT_NOT_NULL(menu);
     
    769934        prect.p1.y = 0;
    770935
    771         rc = ui_menu_open(menu, &prect);
     936        rc = ui_menu_open(menu, &prect, 0);
    772937        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    773938
Note: See TracChangeset for help on using the changeset viewer.