Changeset f7fb2b21 in mainline for uspace/lib/display/test/display.c
- Timestamp:
- 2020-02-10T19:01:42Z (4 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- b43edabe
- Parents:
- 287688f
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/display/test/display.c
r287688f rf7fb2b21 48 48 static void test_display_conn(ipc_call_t *, void *); 49 49 static void test_kbd_event(void *, kbd_event_t *); 50 static void test_pos_event(void *, pos_event_t *); 50 51 51 52 static errno_t test_window_create(void *, display_wnd_params_t *, sysarg_t *); … … 62 63 63 64 static display_wnd_cb_t test_display_wnd_cb = { 64 .kbd_event = test_kbd_event 65 .kbd_event = test_kbd_event, 66 .pos_event = test_pos_event 65 67 }; 66 68 … … 84 86 bool set_color_called; 85 87 bool kbd_event_called; 86 fibril_condvar_t kbd_event_cv; 87 fibril_mutex_t kbd_event_lock; 88 bool pos_event_called; 89 fibril_condvar_t event_cv; 90 fibril_mutex_t event_lock; 88 91 display_srv_t *srv; 89 92 } test_response_t; … … 392 395 display_window_t *wnd; 393 396 test_response_t resp; 394 gfx_context_t *gc;395 397 396 398 async_set_fallback_port_handler(test_display_conn, &resp); … … 421 423 PCUT_ASSERT_NOT_NULL(wnd); 422 424 423 gc = NULL;424 rc = display_window_get_gc(wnd, &gc);425 PCUT_ASSERT_ERRNO_VAL(EOK, rc);426 PCUT_ASSERT_NOT_NULL(gc);427 428 425 resp.event_cnt = 1; 429 resp.event.kbd_event.type = KEY_PRESS; 430 resp.event.kbd_event.key = KC_ENTER; 431 resp.event.kbd_event.mods = 0; 432 resp.event.kbd_event.c = L'\0'; 426 resp.event.etype = wev_kbd; 427 resp.event.ev.kbd.type = KEY_PRESS; 428 resp.event.ev.kbd.key = KC_ENTER; 429 resp.event.ev.kbd.mods = 0; 430 resp.event.ev.kbd.c = L'\0'; 433 431 resp.wnd_id = wnd->id; 434 432 resp.kbd_event_called = false; 435 fibril_mutex_initialize(&resp. kbd_event_lock);436 fibril_condvar_initialize(&resp. kbd_event_cv);433 fibril_mutex_initialize(&resp.event_lock); 434 fibril_condvar_initialize(&resp.event_cv); 437 435 display_srv_ev_pending(resp.srv); 438 436 439 437 /* Wait for the event handler to be called. */ 440 fibril_mutex_lock(&resp. kbd_event_lock);438 fibril_mutex_lock(&resp.event_lock); 441 439 while (!resp.kbd_event_called) { 442 fibril_condvar_wait(&resp. kbd_event_cv, &resp.kbd_event_lock);440 fibril_condvar_wait(&resp.event_cv, &resp.event_lock); 443 441 } 444 fibril_mutex_unlock(&resp. kbd_event_lock);442 fibril_mutex_unlock(&resp.event_lock); 445 443 446 444 /* Verify that the event was delivered correctly */ 447 PCUT_ASSERT_EQUALS(resp.event.kbd_event.type, 448 resp.revent.kbd_event.type); 449 PCUT_ASSERT_EQUALS(resp.event.kbd_event.key, 450 resp.revent.kbd_event.key); 451 PCUT_ASSERT_EQUALS(resp.event.kbd_event.mods, 452 resp.revent.kbd_event.mods); 453 PCUT_ASSERT_EQUALS(resp.event.kbd_event.c, 454 resp.revent.kbd_event.c); 445 PCUT_ASSERT_EQUALS(resp.event.etype, 446 resp.revent.etype); 447 PCUT_ASSERT_EQUALS(resp.event.ev.kbd.type, 448 resp.revent.ev.kbd.type); 449 PCUT_ASSERT_EQUALS(resp.event.ev.kbd.key, 450 resp.revent.ev.kbd.key); 451 PCUT_ASSERT_EQUALS(resp.event.ev.kbd.mods, 452 resp.revent.ev.kbd.mods); 453 PCUT_ASSERT_EQUALS(resp.event.ev.kbd.c, 454 resp.revent.ev.kbd.c); 455 456 rc = display_window_destroy(wnd); 457 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 458 459 display_close(disp); 460 461 rc = loc_service_unregister(sid); 462 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 463 } 464 465 /** Position event can be delivered from server to client callback function */ 466 PCUT_TEST(pos_event_deliver) 467 { 468 errno_t rc; 469 service_id_t sid; 470 display_t *disp = NULL; 471 display_wnd_params_t params; 472 display_window_t *wnd; 473 test_response_t resp; 474 475 async_set_fallback_port_handler(test_display_conn, &resp); 476 477 // FIXME This causes this test to be non-reentrant! 478 rc = loc_server_register(test_display_server); 479 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 480 481 rc = loc_service_register(test_display_svc, &sid); 482 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 483 484 rc = display_open(test_display_svc, &disp); 485 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 486 PCUT_ASSERT_NOT_NULL(disp); 487 PCUT_ASSERT_NOT_NULL(resp.srv); 488 489 wnd = NULL; 490 resp.rc = EOK; 491 display_wnd_params_init(¶ms); 492 params.rect.p0.x = 0; 493 params.rect.p0.y = 0; 494 params.rect.p0.x = 100; 495 params.rect.p0.y = 100; 496 497 rc = display_window_create(disp, ¶ms, &test_display_wnd_cb, 498 (void *) &resp, &wnd); 499 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 500 PCUT_ASSERT_NOT_NULL(wnd); 501 502 resp.event_cnt = 1; 503 resp.event.etype = wev_pos; 504 resp.event.ev.pos.type = POS_PRESS; 505 resp.event.ev.pos.btn_num = 1; 506 resp.event.ev.pos.hpos = 2; 507 resp.event.ev.pos.vpos = 3; 508 resp.wnd_id = wnd->id; 509 resp.pos_event_called = false; 510 fibril_mutex_initialize(&resp.event_lock); 511 fibril_condvar_initialize(&resp.event_cv); 512 display_srv_ev_pending(resp.srv); 513 514 /* Wait for the event handler to be called. */ 515 fibril_mutex_lock(&resp.event_lock); 516 while (!resp.pos_event_called) { 517 fibril_condvar_wait(&resp.event_cv, &resp.event_lock); 518 } 519 fibril_mutex_unlock(&resp.event_lock); 520 521 /* Verify that the event was delivered correctly */ 522 PCUT_ASSERT_EQUALS(resp.event.etype, 523 resp.revent.etype); 524 PCUT_ASSERT_EQUALS(resp.event.ev.pos.type, 525 resp.revent.ev.pos.type); 526 PCUT_ASSERT_EQUALS(resp.event.ev.pos.btn_num, 527 resp.revent.ev.pos.btn_num); 528 PCUT_ASSERT_EQUALS(resp.event.ev.pos.hpos, 529 resp.revent.ev.pos.hpos); 530 PCUT_ASSERT_EQUALS(resp.event.ev.pos.vpos, 531 resp.revent.ev.pos.vpos); 455 532 456 533 rc = display_window_destroy(wnd); … … 514 591 test_response_t *resp = (test_response_t *) arg; 515 592 516 resp->revent.kbd_event = *event; 517 518 fibril_mutex_lock(&resp->kbd_event_lock); 593 resp->revent.etype = wev_kbd; 594 resp->revent.ev.kbd = *event; 595 596 fibril_mutex_lock(&resp->event_lock); 519 597 resp->kbd_event_called = true; 520 fibril_condvar_broadcast(&resp->kbd_event_cv); 521 fibril_mutex_unlock(&resp->kbd_event_lock); 598 fibril_condvar_broadcast(&resp->event_cv); 599 fibril_mutex_unlock(&resp->event_lock); 600 } 601 602 static void test_pos_event(void *arg, pos_event_t *event) 603 { 604 test_response_t *resp = (test_response_t *) arg; 605 606 resp->revent.etype = wev_pos; 607 resp->revent.ev.pos = *event; 608 609 fibril_mutex_lock(&resp->event_lock); 610 resp->pos_event_called = true; 611 fibril_condvar_broadcast(&resp->event_cv); 612 fibril_mutex_unlock(&resp->event_lock); 522 613 } 523 614
Note:
See TracChangeset
for help on using the changeset viewer.