Ignore:
File:
1 edited

Legend:

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

    r9e84d2c racd7ac2  
    11/*
    2  * Copyright (c) 2021 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    7070        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    7171
    72         rc = ds_seat_create(disp, &seat);
     72        rc = ds_seat_create(disp, "Alice", &seat);
    7373        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    7474
     
    9090}
    9191
    92 /** Evacuate focus when another window is available. */
    93 PCUT_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.
     92/** Evacuate focus from window.
    14093 *
    14194 * After evacuating no window should be focused
     
    157110        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    158111
    159         rc = ds_seat_create(disp, &seat);
     112        rc = ds_seat_create(disp, "Alice", &seat);
    160113        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    161114
     
    202155        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    203156
    204         rc = ds_seat_create(disp, &seat);
     157        rc = ds_seat_create(disp, "Alice", &seat);
    205158        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    206159
     
    224177}
    225178
     179/** Unfocus window when three windows are available */
     180PCUT_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, "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 */
     231PCUT_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 */
     282PCUT_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 */
     329PCUT_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
    226368/** Switch focus when another window is available. */
    227369PCUT_TEST(switch_focus_two_windows)
     
    242384        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    243385
    244         rc = ds_seat_create(disp, &seat);
     386        rc = ds_seat_create(disp, "Alice", &seat);
    245387        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    246388
     
    291433        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    292434
    293         rc = ds_seat_create(disp, &seat);
     435        rc = ds_seat_create(disp, "Alice", &seat);
    294436        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    295437
     
    335477        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    336478
    337         rc = ds_seat_create(disp, &seat);
     479        rc = ds_seat_create(disp, "Alice", &seat);
    338480        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    339481
     
    388530        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    389531
    390         rc = ds_seat_create(disp, &seat);
     532        rc = ds_seat_create(disp, "Alice", &seat);
    391533        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    392534
     
    452594        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    453595
    454         rc = ds_seat_create(disp, &seat);
     596        rc = ds_seat_create(disp, "Alice", &seat);
    455597        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    456598
     
    548690        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    549691
    550         rc = ds_seat_create(disp, &seat);
     692        rc = ds_seat_create(disp, "Alice", &seat);
    551693        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    552694
Note: See TracChangeset for help on using the changeset viewer.