Changeset f1f433d in mainline for uspace/lib/wndmgt/test/wndmgt.c
- Timestamp:
- 2022-11-04T20:54:04Z (18 months ago)
- Branches:
- master, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 3a6d44b7
- Parents:
- fc00f0d
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/wndmgt/test/wndmgt.c
rfc00f0d rf1f433d 54 54 static void test_window_added(void *, sysarg_t); 55 55 static void test_window_removed(void *, sysarg_t); 56 static void test_window_changed(void *, sysarg_t); 56 57 57 58 static wndmgt_ops_t test_wndmgt_srv_ops = { … … 65 66 static wndmgt_cb_t test_wndmgt_cb = { 66 67 .window_added = test_window_added, 67 .window_removed = test_window_removed 68 .window_removed = test_window_removed, 69 .window_changed = test_window_changed 68 70 }; 69 71 … … 98 100 bool window_removed_called; 99 101 sysarg_t window_removed_wnd_id; 102 103 bool window_changed_called; 104 sysarg_t window_changed_wnd_id; 100 105 101 106 fibril_condvar_t event_cv; … … 529 534 } 530 535 536 /** Window changed event can be delivered from server to client callback function */ 537 PCUT_TEST(window_changed_deliver) 538 { 539 errno_t rc; 540 service_id_t sid; 541 wndmgt_t *wndmgt = NULL; 542 test_response_t resp; 543 544 async_set_fallback_port_handler(test_wndmgt_conn, &resp); 545 546 // FIXME This causes this test to be non-reentrant! 547 rc = loc_server_register(test_wndmgt_server); 548 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 549 550 rc = loc_service_register(test_wndmgt_svc, &sid); 551 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 552 553 rc = wndmgt_open(test_wndmgt_svc, &test_wndmgt_cb, &resp, &wndmgt); 554 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 555 PCUT_ASSERT_NOT_NULL(wndmgt); 556 PCUT_ASSERT_NOT_NULL(resp.srv); 557 558 resp.event_cnt = 1; 559 resp.event.etype = wmev_window_changed; 560 resp.event.wnd_id = 42; 561 resp.window_changed_called = false; 562 fibril_mutex_initialize(&resp.event_lock); 563 fibril_condvar_initialize(&resp.event_cv); 564 wndmgt_srv_ev_pending(resp.srv); 565 566 /* Wait for the event handler to be called. */ 567 fibril_mutex_lock(&resp.event_lock); 568 while (!resp.window_changed_called) { 569 fibril_condvar_wait(&resp.event_cv, &resp.event_lock); 570 } 571 fibril_mutex_unlock(&resp.event_lock); 572 573 /* Verify that the event was delivered correctly */ 574 PCUT_ASSERT_INT_EQUALS(resp.event.etype, 575 resp.revent.etype); 576 577 wndmgt_close(wndmgt); 578 579 rc = loc_service_unregister(sid); 580 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 581 } 582 531 583 /** Test window management service connection. */ 532 584 static void test_wndmgt_conn(ipc_call_t *icall, void *arg) … … 569 621 resp->window_removed_called = true; 570 622 resp->window_removed_wnd_id = wnd_id; 623 fibril_condvar_broadcast(&resp->event_cv); 624 fibril_mutex_unlock(&resp->event_lock); 625 } 626 627 static void test_window_changed(void *arg, sysarg_t wnd_id) 628 { 629 test_response_t *resp = (test_response_t *) arg; 630 631 resp->revent.etype = wmev_window_changed; 632 633 fibril_mutex_lock(&resp->event_lock); 634 resp->window_changed_called = true; 635 resp->window_changed_wnd_id = wnd_id; 571 636 fibril_condvar_broadcast(&resp->event_cv); 572 637 fibril_mutex_unlock(&resp->event_lock);
Note:
See TracChangeset
for help on using the changeset viewer.