Changeset 1af103e in mainline for uspace/lib/ui/test


Ignore:
Timestamp:
2023-09-13T17:29:07Z (23 months ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
61643c8
Parents:
46bd63c9
Message:

System menu (WIP)

The system menu provides browsable, keyboard-accessible access to window
management functions (such as closing, minimizing, maximizing, resizing,
moving).

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

Legend:

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

    r46bd63c9 r1af103e  
    6262};
    6363
     64static void test_wdecor_sysmenu(ui_wdecor_t *, void *, sysarg_t);
    6465static void test_wdecor_minimize(ui_wdecor_t *, void *);
    6566static void test_wdecor_maximize(ui_wdecor_t *, void *);
     
    7273
    7374static ui_wdecor_cb_t test_wdecor_cb = {
     75        .sysmenu = test_wdecor_sysmenu,
    7476        .minimize = test_wdecor_minimize,
    7577        .maximize = test_wdecor_maximize,
     
    102104
    103105typedef struct {
     106        bool sysmenu;
    104107        bool minimize;
    105108        bool maximize;
     
    109112        gfx_coord2_t pos;
    110113        sysarg_t pos_id;
     114        sysarg_t idev_id;
    111115        bool resize;
    112116        ui_wdecor_rsztype_t rsztype;
     
    241245        rc = gfx_context_delete(gc);
    242246        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     247}
     248
     249/** Test ui_wdecor_sysmenu() */
     250PCUT_TEST(sysmenu)
     251{
     252        errno_t rc;
     253        ui_wdecor_t *wdecor;
     254        test_cb_resp_t resp;
     255
     256        rc = ui_wdecor_create(NULL, "Hello", ui_wds_none, &wdecor);
     257        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     258
     259        /* Sysmenu callback with no callbacks set */
     260        ui_wdecor_sysmenu(wdecor, 42);
     261
     262        /* Sysmenu callback with sysmenu callback not implemented */
     263        ui_wdecor_set_cb(wdecor, &dummy_wdecor_cb, NULL);
     264        ui_wdecor_sysmenu(wdecor, 42);
     265
     266        /* Sysmenu callback with real callback set */
     267        resp.sysmenu = false;
     268        resp.idev_id = 0;
     269        ui_wdecor_set_cb(wdecor, &test_wdecor_cb, &resp);
     270        ui_wdecor_sysmenu(wdecor, 42);
     271        PCUT_ASSERT_TRUE(resp.sysmenu);
     272        PCUT_ASSERT_INT_EQUALS(42, resp.idev_id);
     273
     274        ui_wdecor_destroy(wdecor);
    243275}
    244276
     
    544576        PCUT_ASSERT_INT_EQUALS(event.hpos, resp.pos.x);
    545577        PCUT_ASSERT_INT_EQUALS(event.vpos, resp.pos.y);
     578
     579        ui_wdecor_destroy(wdecor);
     580        ui_resource_destroy(resource);
     581
     582        rc = gfx_context_delete(gc);
     583        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     584}
     585
     586/** Pressing F9 generates sysmenu event */
     587PCUT_TEST(kbd_f9_sysmenu)
     588{
     589        errno_t rc;
     590        gfx_rect_t rect;
     591        kbd_event_t event;
     592        gfx_context_t *gc = NULL;
     593        test_gc_t tgc;
     594        test_cb_resp_t resp;
     595        ui_resource_t *resource = NULL;
     596        ui_wdecor_t *wdecor;
     597
     598        memset(&tgc, 0, sizeof(tgc));
     599        rc = gfx_context_new(&ops, &tgc, &gc);
     600        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     601
     602        rc = ui_resource_create(gc, false, &resource);
     603        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     604        PCUT_ASSERT_NOT_NULL(resource);
     605
     606        rc = ui_wdecor_create(resource, "Hello", ui_wds_decorated, &wdecor);
     607        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     608
     609        rect.p0.x = 10;
     610        rect.p0.y = 20;
     611        rect.p1.x = 100;
     612        rect.p1.y = 200;
     613
     614        ui_wdecor_set_rect(wdecor, &rect);
     615
     616        ui_wdecor_set_cb(wdecor, &test_wdecor_cb, (void *) &resp);
     617
     618        resp.move = false;
     619        resp.pos.x = 0;
     620        resp.pos.y = 0;
     621
     622        event.type = KEY_PRESS;
     623        event.mods = 0;
     624        event.key = KC_F9;
     625        event.kbd_id = 42;
     626        ui_wdecor_kbd_event(wdecor, &event);
     627
     628        PCUT_ASSERT_TRUE(resp.sysmenu);
     629        PCUT_ASSERT_INT_EQUALS(event.kbd_id, resp.idev_id);
    546630
    547631        ui_wdecor_destroy(wdecor);
     
    11111195}
    11121196
     1197static void test_wdecor_sysmenu(ui_wdecor_t *wdecor, void *arg,
     1198    sysarg_t idev_id)
     1199{
     1200        test_cb_resp_t *resp = (test_cb_resp_t *) arg;
     1201
     1202        resp->sysmenu = true;
     1203        resp->idev_id = idev_id;
     1204}
     1205
    11131206static void test_wdecor_minimize(ui_wdecor_t *wdecor, void *arg)
    11141207{
  • uspace/lib/ui/test/window.c

    r46bd63c9 r1af103e  
    4545PCUT_TEST_SUITE(window);
    4646
     47static void test_window_sysmenu(ui_window_t *, void *, sysarg_t);
    4748static void test_window_minimize(ui_window_t *, void *);
    4849static void test_window_maximize(ui_window_t *, void *);
     
    5657
    5758static ui_window_cb_t test_window_cb = {
     59        .sysmenu = test_window_sysmenu,
    5860        .minimize = test_window_minimize,
    5961        .maximize = test_window_maximize,
     
    8284typedef struct {
    8385        errno_t rc;
     86        bool sysmenu;
     87        sysarg_t sysmenu_idev_id;
    8488        bool minimize;
    8589        bool maximize;
     
    544548}
    545549
     550/** ui_window_send_sysmenu() calls sysmenu callback set via ui_window_set_cb() */
     551PCUT_TEST(send_sysmenu)
     552{
     553        errno_t rc;
     554        ui_t *ui = NULL;
     555        ui_wnd_params_t params;
     556        ui_window_t *window = NULL;
     557        test_cb_resp_t resp;
     558
     559        rc = ui_create_disp(NULL, &ui);
     560        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     561
     562        ui_wnd_params_init(&params);
     563        params.caption = "Hello";
     564
     565        rc = ui_window_create(ui, &params, &window);
     566        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     567        PCUT_ASSERT_NOT_NULL(window);
     568
     569        /* Sysmenu callback with no callbacks set */
     570        ui_window_send_sysmenu(window, 42);
     571
     572        /* Sysmenu callback with sysmenu callback not implemented */
     573        ui_window_set_cb(window, &dummy_window_cb, NULL);
     574        ui_window_send_sysmenu(window, 42);
     575
     576        /* Sysmenu callback with real callback set */
     577        resp.sysmenu = false;
     578        resp.sysmenu_idev_id = 0;
     579        ui_window_set_cb(window, &test_window_cb, &resp);
     580        ui_window_send_sysmenu(window, 42);
     581        PCUT_ASSERT_TRUE(resp.sysmenu);
     582        PCUT_ASSERT_INT_EQUALS(42, resp.sysmenu_idev_id);
     583
     584        ui_window_destroy(window);
     585        ui_destroy(ui);
     586}
     587
    546588/** ui_window_send_minimize() calls minimize callback set via ui_window_set_cb() */
    547589PCUT_TEST(send_minimize)
     
    894936}
    895937
     938static void test_window_sysmenu(ui_window_t *window, void *arg, sysarg_t idev_id)
     939{
     940        test_cb_resp_t *resp = (test_cb_resp_t *) arg;
     941
     942        resp->sysmenu = true;
     943        resp->sysmenu_idev_id = idev_id;
     944}
     945
    896946static void test_window_minimize(ui_window_t *window, void *arg)
    897947{
Note: See TracChangeset for help on using the changeset viewer.