Ignore:
File:
1 edited

Legend:

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

    racd7ac2 r9e84d2c  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2021 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.
     92/** Evacuate focus when another window is available. */
     93PCUT_TEST(evac_focus_two_windows)
     94{
     95        ds_display_t *disp;
     96        ds_client_t *client;
     97        ds_seat_t *seat;
     98        ds_window_t *w0;
     99        ds_window_t *w1;
     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;
     116
     117        rc = ds_window_create(client, &params, &w1);
     118        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     119
     120        rc = ds_window_create(client, &params, &w0);
     121        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     122
     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_wnd_refs(seat, w1);
     129        PCUT_ASSERT_EQUALS(w0, seat->focus);
     130        PCUT_ASSERT_TRUE(called_cb);
     131
     132        ds_window_destroy(w0);
     133        ds_window_destroy(w1);
     134        ds_seat_destroy(seat);
     135        ds_client_destroy(client);
     136        ds_display_destroy(disp);
     137}
     138
     139/** Evacuate focus from the only existing window.
    93140 *
    94141 * After evacuating no window should be focused
     
    110157        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    111158
    112         rc = ds_seat_create(disp, "Alice", &seat);
     159        rc = ds_seat_create(disp, &seat);
    113160        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    114161
     
    155202        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    156203
    157         rc = ds_seat_create(disp, "Alice", &seat);
     204        rc = ds_seat_create(disp, &seat);
    158205        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    159206
     
    177224}
    178225
    179 /** Unfocus window when three windows are available */
    180 PCUT_TEST(unfocus_wnd_three_windows)
     226/** Switch focus when another window is available. */
     227PCUT_TEST(switch_focus_two_windows)
    181228{
    182229        ds_display_t *disp;
     
    185232        ds_window_t *w0;
    186233        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);
    207 
    208         rc = ds_window_create(client, &params, &w1);
    209         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    210 
    211         rc = ds_window_create(client, &params, &w0);
    212         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    213 
    214         /* w0 is at the top, then w1, then w2 */
    215 
    216         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);
    222 
    223         ds_window_destroy(w0);
    224         ds_window_destroy(w1);
    225         ds_seat_destroy(seat);
    226         ds_client_destroy(client);
    227         ds_display_destroy(disp);
    228 }
    229 
    230 /** Unfocus window when two windows and one system window are available */
    231 PCUT_TEST(unfocus_wnd_two_windows_one_sys)
    232 {
    233         ds_display_t *disp;
    234         ds_client_t *client;
    235         ds_seat_t *seat;
    236         ds_window_t *w0;
    237         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);
     234        display_wnd_params_t params;
     235        bool called_cb = false;
     236        errno_t rc;
     237
     238        rc = ds_display_create(NULL, df_none, &disp);
     239        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     240
     241        rc = ds_client_create(disp, &test_ds_client_cb, &called_cb, &client);
     242        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     243
     244        rc = ds_seat_create(disp, &seat);
    387245        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    388246
     
    433291        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    434292
    435         rc = ds_seat_create(disp, "Alice", &seat);
     293        rc = ds_seat_create(disp, &seat);
    436294        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    437295
     
    477335        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    478336
    479         rc = ds_seat_create(disp, "Alice", &seat);
     337        rc = ds_seat_create(disp, &seat);
    480338        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    481339
     
    530388        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    531389
    532         rc = ds_seat_create(disp, "Alice", &seat);
     390        rc = ds_seat_create(disp, &seat);
    533391        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    534392
     
    594452        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    595453
    596         rc = ds_seat_create(disp, "Alice", &seat);
     454        rc = ds_seat_create(disp, &seat);
    597455        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    598456
     
    690548        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    691549
    692         rc = ds_seat_create(disp, "Alice", &seat);
     550        rc = ds_seat_create(disp, &seat);
    693551        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    694552
Note: See TracChangeset for help on using the changeset viewer.