Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/hid/display/test/seat.c

    racd7ac2 r195b7b3  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2019 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    7070        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    7171
    72         rc = ds_seat_create(disp, "Alice", &seat);
     72        rc = ds_seat_create(disp, &seat);
    7373        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    7474
     
    9090}
    9191
    92 /** Evacuate focus from window.
    93  *
    94  * After evacuating no window should be focused
    95  */
    96 PCUT_TEST(evac_focus_one_window)
    97 {
    98         ds_display_t *disp;
    99         ds_client_t *client;
    100         ds_seat_t *seat;
    101         ds_window_t *wnd;
    102         display_wnd_params_t params;
    103         bool called_cb = false;
    104         errno_t rc;
    105 
    106         rc = ds_display_create(NULL, df_none, &disp);
    107         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    108 
    109         rc = ds_client_create(disp, &test_ds_client_cb, &called_cb, &client);
    110         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    111 
    112         rc = ds_seat_create(disp, "Alice", &seat);
    113         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    114 
    115         display_wnd_params_init(&params);
    116         params.rect.p0.x = params.rect.p0.y = 0;
    117         params.rect.p1.x = params.rect.p1.y = 1;
    118 
    119         rc = ds_window_create(client, &params, &wnd);
    120         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    121 
    122         ds_seat_set_focus(seat, wnd);
    123         PCUT_ASSERT_EQUALS(wnd, seat->focus);
    124         PCUT_ASSERT_TRUE(called_cb);
    125         called_cb = false;
    126 
    127         ds_seat_evac_wnd_refs(seat, wnd);
    128         PCUT_ASSERT_NULL(seat->focus);
    129         PCUT_ASSERT_TRUE(called_cb);
    130 
    131         ds_window_destroy(wnd);
    132         ds_seat_destroy(seat);
    133         ds_client_destroy(client);
    134         ds_display_destroy(disp);
    135 }
    136 
    137 /** Evacuate popup reference from window.
    138  *
    139  * After evacuating no window should be set as the popup
    140  */
    141 PCUT_TEST(evac_popup)
    142 {
    143         ds_display_t *disp;
    144         ds_client_t *client;
    145         ds_seat_t *seat;
    146         ds_window_t *wnd;
    147         display_wnd_params_t params;
    148         bool called_cb = false;
    149         errno_t rc;
    150 
    151         rc = ds_display_create(NULL, df_none, &disp);
    152         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    153 
    154         rc = ds_client_create(disp, &test_ds_client_cb, &called_cb, &client);
    155         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    156 
    157         rc = ds_seat_create(disp, "Alice", &seat);
    158         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    159 
    160         display_wnd_params_init(&params);
    161         params.rect.p0.x = params.rect.p0.y = 0;
    162         params.rect.p1.x = params.rect.p1.y = 1;
    163         params.flags |= wndf_popup;
    164 
    165         rc = ds_window_create(client, &params, &wnd);
    166         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    167 
    168         PCUT_ASSERT_EQUALS(wnd, seat->popup);
    169 
    170         ds_seat_evac_wnd_refs(seat, wnd);
    171         PCUT_ASSERT_NULL(seat->popup);
    172 
    173         ds_window_destroy(wnd);
    174         ds_seat_destroy(seat);
    175         ds_client_destroy(client);
    176         ds_display_destroy(disp);
    177 }
    178 
    179 /** Unfocus window when three windows are available */
    180 PCUT_TEST(unfocus_wnd_three_windows)
     92/** Evacuate focus. */
     93PCUT_TEST(evac_focus)
    18194{
    18295        ds_display_t *disp;
     
    18598        ds_window_t *w0;
    18699        ds_window_t *w1;
    187         ds_window_t *w2;
    188         display_wnd_params_t params;
    189         bool called_cb = false;
    190         errno_t rc;
    191 
    192         rc = ds_display_create(NULL, df_none, &disp);
    193         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    194 
    195         rc = ds_client_create(disp, &test_ds_client_cb, &called_cb, &client);
    196         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    197 
    198         rc = ds_seat_create(disp, "Alice", &seat);
    199         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    200 
    201         display_wnd_params_init(&params);
    202         params.rect.p0.x = params.rect.p0.y = 0;
    203         params.rect.p1.x = params.rect.p1.y = 1;
    204 
    205         rc = ds_window_create(client, &params, &w2);
    206         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     100        display_wnd_params_t params;
     101        bool called_cb = false;
     102        errno_t rc;
     103
     104        rc = ds_display_create(NULL, df_none, &disp);
     105        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     106
     107        rc = ds_client_create(disp, &test_ds_client_cb, &called_cb, &client);
     108        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     109
     110        rc = ds_seat_create(disp, &seat);
     111        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     112
     113        display_wnd_params_init(&params);
     114        params.rect.p0.x = params.rect.p0.y = 0;
     115        params.rect.p1.x = params.rect.p1.y = 1;
    207116
    208117        rc = ds_window_create(client, &params, &w1);
     
    212121        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    213122
    214         /* w0 is at the top, then w1, then w2 */
    215 
     123        ds_seat_set_focus(seat, w1);
     124        PCUT_ASSERT_EQUALS(w1, seat->focus);
     125        PCUT_ASSERT_TRUE(called_cb);
     126        called_cb = false;
     127
     128        ds_seat_evac_focus(seat, w1);
    216129        PCUT_ASSERT_EQUALS(w0, seat->focus);
    217 
    218         ds_window_unfocus(w0);
    219 
    220         /* The previous window, w1, should be focused now */
    221         PCUT_ASSERT_EQUALS(w1, seat->focus);
     130        PCUT_ASSERT_TRUE(called_cb);
    222131
    223132        ds_window_destroy(w0);
     
    228137}
    229138
    230 /** Unfocus window when two windows and one system window are available */
    231 PCUT_TEST(unfocus_wnd_two_windows_one_sys)
     139/** Test ds_seat_post_kbd_event() with Alt-Tab switches focus */
     140PCUT_TEST(post_kbd_event_alt_tab)
    232141{
    233142        ds_display_t *disp;
     
    236145        ds_window_t *w0;
    237146        ds_window_t *w1;
    238         ds_window_t *w2;
    239         display_wnd_params_t params;
    240         bool called_cb = false;
    241         errno_t rc;
    242 
    243         rc = ds_display_create(NULL, df_none, &disp);
    244         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    245 
    246         rc = ds_client_create(disp, &test_ds_client_cb, &called_cb, &client);
    247         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    248 
    249         rc = ds_seat_create(disp, "Alice", &seat);
    250         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    251 
    252         display_wnd_params_init(&params);
    253         params.rect.p0.x = params.rect.p0.y = 0;
    254         params.rect.p1.x = params.rect.p1.y = 1;
    255 
    256         params.flags |= wndf_system;
    257         rc = ds_window_create(client, &params, &w2);
    258         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    259 
    260         params.flags &= ~wndf_system;
    261         rc = ds_window_create(client, &params, &w1);
    262         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    263 
    264         rc = ds_window_create(client, &params, &w0);
    265         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    266 
    267         PCUT_ASSERT_EQUALS(w0, seat->focus);
    268 
    269         ds_window_unfocus(w0);
    270 
    271         /* The previous non-system window is w1, w2 should be skipped */
    272         PCUT_ASSERT_EQUALS(w1, seat->focus);
    273 
    274         ds_window_destroy(w0);
    275         ds_window_destroy(w1);
    276         ds_seat_destroy(seat);
    277         ds_client_destroy(client);
    278         ds_display_destroy(disp);
    279 }
    280 
    281 /** Unfocus window when one window and one system window is available */
    282 PCUT_TEST(unfocus_wnd_one_window_one_sys)
    283 {
    284         ds_display_t *disp;
    285         ds_client_t *client;
    286         ds_seat_t *seat;
    287         ds_window_t *w0;
    288         ds_window_t *w1;
    289         display_wnd_params_t params;
    290         bool called_cb = false;
    291         errno_t rc;
    292 
    293         rc = ds_display_create(NULL, df_none, &disp);
    294         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    295 
    296         rc = ds_client_create(disp, &test_ds_client_cb, &called_cb, &client);
    297         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    298 
    299         rc = ds_seat_create(disp, "Alice", &seat);
    300         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    301 
    302         display_wnd_params_init(&params);
    303         params.rect.p0.x = params.rect.p0.y = 0;
    304         params.rect.p1.x = params.rect.p1.y = 1;
    305 
    306         params.flags |= wndf_system;
    307         rc = ds_window_create(client, &params, &w1);
    308         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    309 
    310         params.flags &= ~wndf_system;
    311         rc = ds_window_create(client, &params, &w0);
    312         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    313 
    314         PCUT_ASSERT_EQUALS(w0, seat->focus);
    315 
    316         ds_window_unfocus(w0);
    317 
    318         /* Since no non-system window is available, w1 should be focused */
    319         PCUT_ASSERT_EQUALS(w1, seat->focus);
    320 
    321         ds_window_destroy(w0);
    322         ds_window_destroy(w1);
    323         ds_seat_destroy(seat);
    324         ds_client_destroy(client);
    325         ds_display_destroy(disp);
    326 }
    327 
    328 /** Unfocus window when one window is available */
    329 PCUT_TEST(unfocus_wnd_one_window)
    330 {
    331         ds_display_t *disp;
    332         ds_client_t *client;
    333         ds_seat_t *seat;
    334         ds_window_t *w0;
    335         display_wnd_params_t params;
    336         bool called_cb = false;
    337         errno_t rc;
    338 
    339         rc = ds_display_create(NULL, df_none, &disp);
    340         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    341 
    342         rc = ds_client_create(disp, &test_ds_client_cb, &called_cb, &client);
    343         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    344 
    345         rc = ds_seat_create(disp, "Alice", &seat);
    346         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    347 
    348         display_wnd_params_init(&params);
    349         params.rect.p0.x = params.rect.p0.y = 0;
    350         params.rect.p1.x = params.rect.p1.y = 1;
    351 
    352         rc = ds_window_create(client, &params, &w0);
    353         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    354 
    355         PCUT_ASSERT_EQUALS(w0, seat->focus);
    356 
    357         ds_window_unfocus(w0);
    358 
    359         /* Since no other window is availabe, no window should be focused */
    360         PCUT_ASSERT_EQUALS(NULL, seat->focus);
    361 
    362         ds_window_destroy(w0);
    363         ds_seat_destroy(seat);
    364         ds_client_destroy(client);
    365         ds_display_destroy(disp);
    366 }
    367 
    368 /** Switch focus when another window is available. */
    369 PCUT_TEST(switch_focus_two_windows)
    370 {
    371         ds_display_t *disp;
    372         ds_client_t *client;
    373         ds_seat_t *seat;
    374         ds_window_t *w0;
    375         ds_window_t *w1;
    376         display_wnd_params_t params;
    377         bool called_cb = false;
    378         errno_t rc;
    379 
    380         rc = ds_display_create(NULL, df_none, &disp);
    381         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    382 
    383         rc = ds_client_create(disp, &test_ds_client_cb, &called_cb, &client);
    384         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    385 
    386         rc = ds_seat_create(disp, "Alice", &seat);
    387         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    388 
    389         display_wnd_params_init(&params);
    390         params.rect.p0.x = params.rect.p0.y = 0;
    391         params.rect.p1.x = params.rect.p1.y = 1;
    392 
    393         rc = ds_window_create(client, &params, &w1);
    394         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    395 
    396         rc = ds_window_create(client, &params, &w0);
    397         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    398 
    399         ds_seat_set_focus(seat, w1);
    400         PCUT_ASSERT_EQUALS(w1, seat->focus);
    401         PCUT_ASSERT_TRUE(called_cb);
    402         called_cb = false;
    403 
    404         ds_seat_switch_focus(seat);
    405         PCUT_ASSERT_EQUALS(w0, seat->focus);
    406         PCUT_ASSERT_TRUE(called_cb);
    407 
    408         ds_window_destroy(w0);
    409         ds_window_destroy(w1);
    410         ds_seat_destroy(seat);
    411         ds_client_destroy(client);
    412         ds_display_destroy(disp);
    413 }
    414 
    415 /** Switch focus with just one existing window.
    416  *
    417  * After switching the focus should remain with the same window.
    418  */
    419 PCUT_TEST(switch_focus_one_window)
    420 {
    421         ds_display_t *disp;
    422         ds_client_t *client;
    423         ds_seat_t *seat;
    424         ds_window_t *wnd;
    425         display_wnd_params_t params;
    426         bool called_cb = false;
    427         errno_t rc;
    428 
    429         rc = ds_display_create(NULL, df_none, &disp);
    430         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    431 
    432         rc = ds_client_create(disp, &test_ds_client_cb, &called_cb, &client);
    433         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    434 
    435         rc = ds_seat_create(disp, "Alice", &seat);
    436         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    437 
    438         display_wnd_params_init(&params);
    439         params.rect.p0.x = params.rect.p0.y = 0;
    440         params.rect.p1.x = params.rect.p1.y = 1;
    441 
    442         rc = ds_window_create(client, &params, &wnd);
    443         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    444 
    445         ds_seat_set_focus(seat, wnd);
    446         PCUT_ASSERT_EQUALS(wnd, seat->focus);
    447         PCUT_ASSERT_TRUE(called_cb);
    448         called_cb = false;
    449 
    450         ds_seat_switch_focus(seat);
    451         PCUT_ASSERT_EQUALS(wnd, seat->focus);
    452         PCUT_ASSERT_FALSE(called_cb);
    453 
    454         ds_window_destroy(wnd);
    455         ds_seat_destroy(seat);
    456         ds_client_destroy(client);
    457         ds_display_destroy(disp);
    458 }
    459 
    460 /** Test ds_seat_post_kbd_event() with Alt-Tab switches focus */
    461 PCUT_TEST(post_kbd_event_alt_tab)
    462 {
    463         ds_display_t *disp;
    464         ds_client_t *client;
    465         ds_seat_t *seat;
    466         ds_window_t *w0;
    467         ds_window_t *w1;
    468147        display_wnd_params_t params;
    469148        bool called_cb = false;
     
    477156        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    478157
    479         rc = ds_seat_create(disp, "Alice", &seat);
     158        rc = ds_seat_create(disp, &seat);
    480159        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    481160
     
    530209        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    531210
    532         rc = ds_seat_create(disp, "Alice", &seat);
     211        rc = ds_seat_create(disp, &seat);
    533212        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    534213
     
    594273        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    595274
    596         rc = ds_seat_create(disp, "Alice", &seat);
     275        rc = ds_seat_create(disp, &seat);
    597276        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    598277
     
    620299        w1->dpos.y = 400;
    621300
    622         /* New window gets focused event */
    623         PCUT_ASSERT_TRUE(called_cb);
    624 
    625         called_cb = false;
     301        PCUT_ASSERT_FALSE(called_cb);
    626302
    627303        ds_seat_set_focus(seat, w0);
     
    690366        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    691367
    692         rc = ds_seat_create(disp, "Alice", &seat);
     368        rc = ds_seat_create(disp, &seat);
    693369        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    694370
Note: See TracChangeset for help on using the changeset viewer.