Changes in uspace/srv/hid/display/test/seat.c [195b7b3:acd7ac2] in mainline
- File:
-
- 1 edited
-
uspace/srv/hid/display/test/seat.c (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/hid/display/test/seat.c
r195b7b3 racd7ac2 1 1 /* 2 * Copyright (c) 20 19Jiri Svoboda2 * Copyright (c) 2023 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 70 70 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 71 71 72 rc = ds_seat_create(disp, &seat);72 rc = ds_seat_create(disp, "Alice", &seat); 73 73 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 74 74 … … 90 90 } 91 91 92 /** Evacuate focus. */ 93 PCUT_TEST(evac_focus) 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(¶ms); 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, ¶ms, &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(¶ms); 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, ¶ms, &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) 94 181 { 95 182 ds_display_t *disp; … … 98 185 ds_window_t *w0; 99 186 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); 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(¶ms); 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, ¶ms, &w2); 206 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 207 208 rc = ds_window_create(client, ¶ms, &w1); 209 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 210 211 rc = ds_window_create(client, ¶ms, &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(¶ms); 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, ¶ms, &w2); 258 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 259 260 params.flags &= ~wndf_system; 261 rc = ds_window_create(client, ¶ms, &w1); 262 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 263 264 rc = ds_window_create(client, ¶ms, &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(¶ms); 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, ¶ms, &w1); 308 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 309 310 params.flags &= ~wndf_system; 311 rc = ds_window_create(client, ¶ms, &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(¶ms); 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, ¶ms, &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); 111 387 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 112 388 … … 126 402 called_cb = false; 127 403 128 ds_seat_ evac_focus(seat, w1);404 ds_seat_switch_focus(seat); 129 405 PCUT_ASSERT_EQUALS(w0, seat->focus); 130 406 PCUT_ASSERT_TRUE(called_cb); … … 137 413 } 138 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(¶ms); 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, ¶ms, &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 139 460 /** Test ds_seat_post_kbd_event() with Alt-Tab switches focus */ 140 461 PCUT_TEST(post_kbd_event_alt_tab) … … 156 477 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 157 478 158 rc = ds_seat_create(disp, &seat);479 rc = ds_seat_create(disp, "Alice", &seat); 159 480 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 160 481 … … 209 530 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 210 531 211 rc = ds_seat_create(disp, &seat);532 rc = ds_seat_create(disp, "Alice", &seat); 212 533 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 213 534 … … 273 594 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 274 595 275 rc = ds_seat_create(disp, &seat);596 rc = ds_seat_create(disp, "Alice", &seat); 276 597 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 277 598 … … 299 620 w1->dpos.y = 400; 300 621 301 PCUT_ASSERT_FALSE(called_cb); 622 /* New window gets focused event */ 623 PCUT_ASSERT_TRUE(called_cb); 624 625 called_cb = false; 302 626 303 627 ds_seat_set_focus(seat, w0); … … 366 690 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 367 691 368 rc = ds_seat_create(disp, &seat);692 rc = ds_seat_create(disp, "Alice", &seat); 369 693 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 370 694
Note:
See TracChangeset
for help on using the changeset viewer.
