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


Ignore:
Timestamp:
2022-10-18T09:06:07Z (3 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
7a05d924
Parents:
0761448
git-author:
Jiri Svoboda <jiri@…> (2022-10-17 17:05:56)
git-committer:
Jiri Svoboda <jiri@…> (2022-10-18 09:06:07)
Message:

Window management plumbing

File:
1 edited

Legend:

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

    r0761448 r1766326  
    3434#include <loc.h>
    3535#include <pcut/pcut.h>
     36#include <str.h>
    3637#include "../private/wndmgt.h"
    3738
     
    8182
    8283        bool get_window_info_called;
     84        sysarg_t get_window_info_wnd_id;
    8385        wndmgt_window_info_t *get_window_info_rinfo;
    8486
     
    127129        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    128130}
     131
     132/** wndmgt_get_window_list() with server returning error response works */
     133PCUT_TEST(get_window_list_failure)
     134{
     135        errno_t rc;
     136        service_id_t sid;
     137        wndmgt_t *wndmgt = NULL;
     138        wndmgt_window_list_t *list;
     139        test_response_t resp;
     140
     141        async_set_fallback_port_handler(test_wndmgt_conn, &resp);
     142
     143        // FIXME This causes this test to be non-reentrant!
     144        rc = loc_server_register(test_wndmgt_server);
     145        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     146
     147        rc = loc_service_register(test_wndmgt_svc, &sid);
     148        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     149
     150        rc = wndmgt_open(test_wndmgt_svc, NULL, NULL, &wndmgt);
     151        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     152        PCUT_ASSERT_NOT_NULL(wndmgt);
     153
     154        resp.rc = ENOMEM;
     155        resp.get_window_list_called = false;
     156
     157        rc = wndmgt_get_window_list(wndmgt, &list);
     158        PCUT_ASSERT_TRUE(resp.get_window_list_called);
     159        PCUT_ASSERT_ERRNO_VAL(resp.rc, rc);
     160
     161        wndmgt_close(wndmgt);
     162        rc = loc_service_unregister(sid);
     163        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     164}
     165
     166/** wndmgt_get_window_list() with server returning success response works */
     167PCUT_TEST(get_window_list_success)
     168{
     169        errno_t rc;
     170        service_id_t sid;
     171        wndmgt_t *wndmgt = NULL;
     172        wndmgt_window_list_t *list;
     173        test_response_t resp;
     174
     175        async_set_fallback_port_handler(test_wndmgt_conn, &resp);
     176
     177        // FIXME This causes this test to be non-reentrant!
     178        rc = loc_server_register(test_wndmgt_server);
     179        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     180
     181        rc = loc_service_register(test_wndmgt_svc, &sid);
     182        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     183
     184        rc = wndmgt_open(test_wndmgt_svc, NULL, NULL, &wndmgt);
     185        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     186        PCUT_ASSERT_NOT_NULL(wndmgt);
     187
     188        resp.rc = EOK;
     189        resp.get_window_list_called = false;
     190        resp.get_window_list_rlist = calloc(1, sizeof(wndmgt_window_list_t));
     191        PCUT_ASSERT_NOT_NULL(resp.get_window_list_rlist);
     192        resp.get_window_list_rlist->nwindows = 2;
     193        resp.get_window_list_rlist->windows = calloc(2, sizeof(sysarg_t));
     194        PCUT_ASSERT_NOT_NULL(resp.get_window_list_rlist->windows);
     195        resp.get_window_list_rlist->windows[0] = 42;
     196        resp.get_window_list_rlist->windows[1] = 43;
     197
     198        rc = wndmgt_get_window_list(wndmgt, &list);
     199        PCUT_ASSERT_TRUE(resp.get_window_list_called);
     200        PCUT_ASSERT_ERRNO_VAL(resp.rc, rc);
     201
     202        PCUT_ASSERT_INT_EQUALS(2, list->nwindows);
     203        PCUT_ASSERT_INT_EQUALS(42, list->windows[0]);
     204        PCUT_ASSERT_INT_EQUALS(43, list->windows[1]);
     205
     206        wndmgt_free_window_list(list);
     207        wndmgt_close(wndmgt);
     208        rc = loc_service_unregister(sid);
     209        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     210}
     211
     212/** wndmgt_get_window_infp() with server returning error response works */
     213PCUT_TEST(get_window_info_failure)
     214{
     215        errno_t rc;
     216        service_id_t sid;
     217        wndmgt_t *wndmgt = NULL;
     218        sysarg_t wnd_id;
     219        wndmgt_window_info_t *info;
     220        test_response_t resp;
     221
     222        async_set_fallback_port_handler(test_wndmgt_conn, &resp);
     223
     224        // FIXME This causes this test to be non-reentrant!
     225        rc = loc_server_register(test_wndmgt_server);
     226        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     227
     228        rc = loc_service_register(test_wndmgt_svc, &sid);
     229        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     230
     231        rc = wndmgt_open(test_wndmgt_svc, NULL, NULL, &wndmgt);
     232        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     233        PCUT_ASSERT_NOT_NULL(wndmgt);
     234
     235        resp.rc = ENOMEM;
     236        resp.get_window_info_called = false;
     237        wnd_id = 1;
     238
     239        rc = wndmgt_get_window_info(wndmgt, wnd_id, &info);
     240        PCUT_ASSERT_TRUE(resp.get_window_info_called);
     241        PCUT_ASSERT_INT_EQUALS(wnd_id, resp.get_window_info_wnd_id);
     242        PCUT_ASSERT_ERRNO_VAL(resp.rc, rc);
     243
     244        wndmgt_close(wndmgt);
     245        rc = loc_service_unregister(sid);
     246        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     247}
     248
     249/** wndmgt_get_window_info() with server returning success response works */
     250PCUT_TEST(get_window_info_success)
     251{
     252        errno_t rc;
     253        service_id_t sid;
     254        wndmgt_t *wndmgt = NULL;
     255        sysarg_t wnd_id;
     256        wndmgt_window_info_t *info;
     257        test_response_t resp;
     258
     259        async_set_fallback_port_handler(test_wndmgt_conn, &resp);
     260
     261        // FIXME This causes this test to be non-reentrant!
     262        rc = loc_server_register(test_wndmgt_server);
     263        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     264
     265        rc = loc_service_register(test_wndmgt_svc, &sid);
     266        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     267
     268        rc = wndmgt_open(test_wndmgt_svc, NULL, NULL, &wndmgt);
     269        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     270        PCUT_ASSERT_NOT_NULL(wndmgt);
     271
     272        resp.rc = EOK;
     273        resp.get_window_info_called = false;
     274        resp.get_window_info_rinfo = calloc(1, sizeof(wndmgt_window_info_t));
     275        PCUT_ASSERT_NOT_NULL(resp.get_window_info_rinfo);
     276        resp.get_window_info_rinfo->caption = str_dup("Hello");
     277        PCUT_ASSERT_NOT_NULL(resp.get_window_info_rinfo->caption);
     278        wnd_id = 1;
     279
     280        rc = wndmgt_get_window_info(wndmgt, wnd_id, &info);
     281        PCUT_ASSERT_TRUE(resp.get_window_info_called);
     282        PCUT_ASSERT_INT_EQUALS(wnd_id, resp.get_window_info_wnd_id);
     283        PCUT_ASSERT_ERRNO_VAL(resp.rc, rc);
     284
     285        PCUT_ASSERT_STR_EQUALS("Hello", info->caption);
     286
     287        wndmgt_free_window_info(info);
     288        wndmgt_close(wndmgt);
     289        rc = loc_service_unregister(sid);
     290        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     291}
     292
    129293/** wndmgt_activate_window() with server returning error response works */
    130294PCUT_TEST(activate_window_failure)
     
    199363}
    200364
     365/** wndmgt_close_window() with server returning error response works */
     366PCUT_TEST(close_window_failure)
     367{
     368        errno_t rc;
     369        service_id_t sid;
     370        wndmgt_t *wndmgt = NULL;
     371        sysarg_t wnd_id;
     372        test_response_t resp;
     373
     374        async_set_fallback_port_handler(test_wndmgt_conn, &resp);
     375
     376        // FIXME This causes this test to be non-reentrant!
     377        rc = loc_server_register(test_wndmgt_server);
     378        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     379
     380        rc = loc_service_register(test_wndmgt_svc, &sid);
     381        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     382
     383        rc = wndmgt_open(test_wndmgt_svc, NULL, NULL, &wndmgt);
     384        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     385        PCUT_ASSERT_NOT_NULL(wndmgt);
     386
     387        wnd_id = 42;
     388        resp.rc = ENOMEM;
     389        resp.close_window_called = false;
     390
     391        rc = wndmgt_close_window(wndmgt, wnd_id);
     392        PCUT_ASSERT_TRUE(resp.close_window_called);
     393        PCUT_ASSERT_INT_EQUALS(wnd_id, resp.close_window_wnd_id);
     394        PCUT_ASSERT_ERRNO_VAL(resp.rc, rc);
     395
     396        wndmgt_close(wndmgt);
     397        rc = loc_service_unregister(sid);
     398        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     399}
     400
     401/** wndmgt_close_window() with server returning success response works */
     402PCUT_TEST(close_window_success)
     403{
     404        errno_t rc;
     405        service_id_t sid;
     406        wndmgt_t *wndmgt = NULL;
     407        sysarg_t wnd_id;
     408        test_response_t resp;
     409
     410        async_set_fallback_port_handler(test_wndmgt_conn, &resp);
     411
     412        // FIXME This causes this test to be non-reentrant!
     413        rc = loc_server_register(test_wndmgt_server);
     414        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     415
     416        rc = loc_service_register(test_wndmgt_svc, &sid);
     417        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     418
     419        rc = wndmgt_open(test_wndmgt_svc, NULL, NULL, &wndmgt);
     420        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     421        PCUT_ASSERT_NOT_NULL(wndmgt);
     422
     423        wnd_id = 42;
     424        resp.rc = EOK;
     425        resp.close_window_called = false;
     426
     427        rc = wndmgt_close_window(wndmgt, wnd_id);
     428        PCUT_ASSERT_TRUE(resp.close_window_called);
     429        PCUT_ASSERT_INT_EQUALS(wnd_id, resp.close_window_wnd_id);
     430        PCUT_ASSERT_ERRNO_VAL(resp.rc, rc);
     431
     432        wndmgt_close(wndmgt);
     433        rc = loc_service_unregister(sid);
     434        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     435}
     436
    201437/** Window added event can be delivered from server to client callback function */
    202 PCUT_TEST(window_added_event_deliver)
     438PCUT_TEST(window_added_deliver)
    203439{
    204440        errno_t rc;
     
    247483
    248484/** Window removed event can be delivered from server to client callback function */
    249 PCUT_TEST(window_removed_event_deliver)
     485PCUT_TEST(window_removed_deliver)
    250486{
    251487        errno_t rc;
     
    341577        test_response_t *resp = (test_response_t *) arg;
    342578
     579        resp->get_window_list_called = true;
     580
    343581        if (resp->rc != EOK)
    344582                return resp->rc;
    345583
    346         resp->get_window_list_called = true;
    347584        *rlist = resp->get_window_list_rlist;
    348585        return EOK;
     
    354591        test_response_t *resp = (test_response_t *) arg;
    355592
     593        resp->get_window_info_called = true;
     594        resp->get_window_info_wnd_id = wnd_id;
     595
    356596        if (resp->rc != EOK)
    357597                return resp->rc;
    358598
    359         resp->get_window_info_called = true;
    360599        *rinfo = resp->get_window_info_rinfo;
    361600        return EOK;
Note: See TracChangeset for help on using the changeset viewer.