Ignore:
File:
1 edited

Legend:

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

    r9e84d2c rededdc4  
    11/*
    2  * Copyright (c) 2021 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    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
     
    219172
    220173        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 */
     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, &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 */
     229PCUT_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 */
     280PCUT_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 */
     327PCUT_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);
    221361        ds_seat_destroy(seat);
    222362        ds_client_destroy(client);
Note: See TracChangeset for help on using the changeset viewer.