Changeset f1f433d in mainline for uspace/lib/wndmgt/test/wndmgt.c


Ignore:
Timestamp:
2022-11-04T20:54:04Z (18 months ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
3a6d44b7
Parents:
fc00f0d
Message:

Update window button when window caption changes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/wndmgt/test/wndmgt.c

    rfc00f0d rf1f433d  
    5454static void test_window_added(void *, sysarg_t);
    5555static void test_window_removed(void *, sysarg_t);
     56static void test_window_changed(void *, sysarg_t);
    5657
    5758static wndmgt_ops_t test_wndmgt_srv_ops = {
     
    6566static wndmgt_cb_t test_wndmgt_cb = {
    6667        .window_added = test_window_added,
    67         .window_removed = test_window_removed
     68        .window_removed = test_window_removed,
     69        .window_changed = test_window_changed
    6870};
    6971
     
    98100        bool window_removed_called;
    99101        sysarg_t window_removed_wnd_id;
     102
     103        bool window_changed_called;
     104        sysarg_t window_changed_wnd_id;
    100105
    101106        fibril_condvar_t event_cv;
     
    529534}
    530535
     536/** Window changed event can be delivered from server to client callback function */
     537PCUT_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
    531583/** Test window management service connection. */
    532584static void test_wndmgt_conn(ipc_call_t *icall, void *arg)
     
    569621        resp->window_removed_called = true;
    570622        resp->window_removed_wnd_id = wnd_id;
     623        fibril_condvar_broadcast(&resp->event_cv);
     624        fibril_mutex_unlock(&resp->event_lock);
     625}
     626
     627static 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;
    571636        fibril_condvar_broadcast(&resp->event_cv);
    572637        fibril_mutex_unlock(&resp->event_lock);
Note: See TracChangeset for help on using the changeset viewer.