Ignore:
File:
1 edited

Legend:

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

    rededdc4 r9e84d2c  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2021 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    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
     
    172219
    173220        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)
    181 {
    182         ds_display_t *disp;
    183         ds_client_t *client;
    184         ds_seat_t *seat;
    185         ds_window_t *w0;
    186         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, &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         PCUT_ASSERT_EQUALS(w0, seat->focus);
    215 
    216         ds_window_unfocus(w0);
    217 
    218         /* The previous window, w2, should be focused now */
    219         PCUT_ASSERT_EQUALS(w2, seat->focus);
    220 
    221         ds_window_destroy(w0);
    222         ds_window_destroy(w1);
    223         ds_seat_destroy(seat);
    224         ds_client_destroy(client);
    225         ds_display_destroy(disp);
    226 }
    227 
    228 /** Unfocus window when two windows and one system window are available */
    229 PCUT_TEST(unfocus_wnd_two_windows_one_sys)
    230 {
    231         ds_display_t *disp;
    232         ds_client_t *client;
    233         ds_seat_t *seat;
    234         ds_window_t *w0;
    235         ds_window_t *w1;
    236         ds_window_t *w2;
    237         display_wnd_params_t params;
    238         bool called_cb = false;
    239         errno_t rc;
    240 
    241         rc = ds_display_create(NULL, df_none, &disp);
    242         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    243 
    244         rc = ds_client_create(disp, &test_ds_client_cb, &called_cb, &client);
    245         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    246 
    247         rc = ds_seat_create(disp, &seat);
    248         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    249 
    250         display_wnd_params_init(&params);
    251         params.rect.p0.x = params.rect.p0.y = 0;
    252         params.rect.p1.x = params.rect.p1.y = 1;
    253 
    254         params.flags |= wndf_system;
    255         rc = ds_window_create(client, &params, &w2);
    256         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    257 
    258         params.flags &= ~wndf_system;
    259         rc = ds_window_create(client, &params, &w1);
    260         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    261 
    262         rc = ds_window_create(client, &params, &w0);
    263         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    264 
    265         PCUT_ASSERT_EQUALS(w0, seat->focus);
    266 
    267         ds_window_unfocus(w0);
    268 
    269         /* The previous non-system window is w1, w2 should be skipped */
    270         PCUT_ASSERT_EQUALS(w1, seat->focus);
    271 
    272         ds_window_destroy(w0);
    273         ds_window_destroy(w1);
    274         ds_seat_destroy(seat);
    275         ds_client_destroy(client);
    276         ds_display_destroy(disp);
    277 }
    278 
    279 /** Unfocus window when one window and one system window is available */
    280 PCUT_TEST(unfocus_wnd_one_window_one_sys)
    281 {
    282         ds_display_t *disp;
    283         ds_client_t *client;
    284         ds_seat_t *seat;
    285         ds_window_t *w0;
    286         ds_window_t *w1;
    287         display_wnd_params_t params;
    288         bool called_cb = false;
    289         errno_t rc;
    290 
    291         rc = ds_display_create(NULL, df_none, &disp);
    292         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    293 
    294         rc = ds_client_create(disp, &test_ds_client_cb, &called_cb, &client);
    295         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    296 
    297         rc = ds_seat_create(disp, &seat);
    298         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    299 
    300         display_wnd_params_init(&params);
    301         params.rect.p0.x = params.rect.p0.y = 0;
    302         params.rect.p1.x = params.rect.p1.y = 1;
    303 
    304         params.flags |= wndf_system;
    305         rc = ds_window_create(client, &params, &w1);
    306         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    307 
    308         params.flags &= ~wndf_system;
    309         rc = ds_window_create(client, &params, &w0);
    310         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    311 
    312         PCUT_ASSERT_EQUALS(w0, seat->focus);
    313 
    314         ds_window_unfocus(w0);
    315 
    316         /* Since no non-system window is available, w1 should be focused */
    317         PCUT_ASSERT_EQUALS(w1, seat->focus);
    318 
    319         ds_window_destroy(w0);
    320         ds_window_destroy(w1);
    321         ds_seat_destroy(seat);
    322         ds_client_destroy(client);
    323         ds_display_destroy(disp);
    324 }
    325 
    326 /** Unfocus window when one window is available */
    327 PCUT_TEST(unfocus_wnd_one_window)
    328 {
    329         ds_display_t *disp;
    330         ds_client_t *client;
    331         ds_seat_t *seat;
    332         ds_window_t *w0;
    333         display_wnd_params_t params;
    334         bool called_cb = false;
    335         errno_t rc;
    336 
    337         rc = ds_display_create(NULL, df_none, &disp);
    338         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    339 
    340         rc = ds_client_create(disp, &test_ds_client_cb, &called_cb, &client);
    341         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    342 
    343         rc = ds_seat_create(disp, &seat);
    344         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    345 
    346         display_wnd_params_init(&params);
    347         params.rect.p0.x = params.rect.p0.y = 0;
    348         params.rect.p1.x = params.rect.p1.y = 1;
    349 
    350         rc = ds_window_create(client, &params, &w0);
    351         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    352 
    353         PCUT_ASSERT_EQUALS(w0, seat->focus);
    354 
    355         ds_window_unfocus(w0);
    356 
    357         /* Since no other window is availabe, no window should be focused */
    358         PCUT_ASSERT_EQUALS(NULL, seat->focus);
    359 
    360         ds_window_destroy(w0);
    361221        ds_seat_destroy(seat);
    362222        ds_client_destroy(client);
Note: See TracChangeset for help on using the changeset viewer.