Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 7470d97 in mainline for uspace/lib/ipcgfx/test/ipcgfx.c


Ignore:
Timestamp:
2021-04-30T15:05:06Z (7 months ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
Children:
051349b
Parents:
252d03c
Message:

Add GC operation to set clipping rectangle

The number of changed files is due to the proliferation of GC
implementations, mostly these are just dummies in unit tests.
Definitely need to tame those in the future.

File:
1 edited

Legend:

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

    r252d03c r7470d97  
    5050static void test_ipcgc_conn(ipc_call_t *, void *);
    5151
     52static errno_t test_gc_set_clip_rect(void *, gfx_rect_t *);
    5253static errno_t test_gc_set_color(void *, gfx_color_t *);
    5354static errno_t test_gc_fill_rect(void *, gfx_rect_t *);
     
    6061
    6162static gfx_context_ops_t test_gc_ops = {
     63        .set_clip_rect = test_gc_set_clip_rect,
    6264        .set_color = test_gc_set_color,
    6365        .fill_rect = test_gc_fill_rect,
     
    7577        errno_t rc;
    7678
     79        bool set_clip_rect_called;
     80        bool do_clip;
     81        gfx_rect_t set_clip_rect_rect;
     82
    7783        bool set_color_called;
    7884        uint16_t set_color_r;
     
    103109        gfx_bitmap_alloc_t alloc;
    104110} test_bitmap_t;
     111
     112/** gfx_set_clip_rect with server returning failure */
     113PCUT_TEST(set_clip_rect_failure)
     114{
     115        errno_t rc;
     116        service_id_t sid;
     117        test_response_t resp;
     118        gfx_context_t *gc;
     119        gfx_rect_t rect;
     120        async_sess_t *sess;
     121        ipc_gc_t *ipcgc;
     122
     123        async_set_fallback_port_handler(test_ipcgc_conn, &resp);
     124
     125        // FIXME This causes this test to be non-reentrant!
     126        rc = loc_server_register(test_ipcgfx_server);
     127        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     128
     129        rc = loc_service_register(test_ipcgfx_svc, &sid);
     130        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     131
     132        sess = loc_service_connect(sid, INTERFACE_GC, 0);
     133        PCUT_ASSERT_NOT_NULL(sess);
     134
     135        rc = ipc_gc_create(sess, &ipcgc);
     136        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     137
     138        gc = ipc_gc_get_ctx(ipcgc);
     139        PCUT_ASSERT_NOT_NULL(gc);
     140
     141        resp.rc = ENOMEM;
     142        resp.set_clip_rect_called = false;
     143        rect.p0.x = 1;
     144        rect.p0.y = 2;
     145        rect.p1.x = 3;
     146        rect.p1.y = 4;
     147        rc = gfx_set_clip_rect(gc, &rect);
     148        PCUT_ASSERT_ERRNO_VAL(resp.rc, rc);
     149        PCUT_ASSERT_TRUE(resp.set_clip_rect_called);
     150        PCUT_ASSERT_EQUALS(rect.p0.x, resp.set_clip_rect_rect.p0.x);
     151        PCUT_ASSERT_EQUALS(rect.p0.y, resp.set_clip_rect_rect.p0.y);
     152        PCUT_ASSERT_EQUALS(rect.p1.x, resp.set_clip_rect_rect.p1.x);
     153        PCUT_ASSERT_EQUALS(rect.p1.y, resp.set_clip_rect_rect.p1.y);
     154
     155        ipc_gc_delete(ipcgc);
     156        async_hangup(sess);
     157
     158        rc = loc_service_unregister(sid);
     159        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     160}
     161
     162/** gfx_set_clip_rect with server returning success */
     163PCUT_TEST(set_clip_rect_success)
     164{
     165        errno_t rc;
     166        service_id_t sid;
     167        test_response_t resp;
     168        gfx_context_t *gc;
     169        gfx_rect_t rect;
     170        async_sess_t *sess;
     171        ipc_gc_t *ipcgc;
     172
     173        async_set_fallback_port_handler(test_ipcgc_conn, &resp);
     174
     175        // FIXME This causes this test to be non-reentrant!
     176        rc = loc_server_register(test_ipcgfx_server);
     177        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     178
     179        rc = loc_service_register(test_ipcgfx_svc, &sid);
     180        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     181
     182        sess = loc_service_connect(sid, INTERFACE_GC, 0);
     183        PCUT_ASSERT_NOT_NULL(sess);
     184
     185        rc = ipc_gc_create(sess, &ipcgc);
     186        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     187
     188        gc = ipc_gc_get_ctx(ipcgc);
     189        PCUT_ASSERT_NOT_NULL(gc);
     190
     191        resp.rc = EOK;
     192        resp.set_clip_rect_called = false;
     193        rect.p0.x = 1;
     194        rect.p0.y = 2;
     195        rect.p1.x = 3;
     196        rect.p1.y = 4;
     197        rc = gfx_set_clip_rect(gc, &rect);
     198        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     199        PCUT_ASSERT_TRUE(resp.set_clip_rect_called);
     200        PCUT_ASSERT_TRUE(resp.do_clip);
     201        PCUT_ASSERT_EQUALS(rect.p0.x, resp.set_clip_rect_rect.p0.x);
     202        PCUT_ASSERT_EQUALS(rect.p0.y, resp.set_clip_rect_rect.p0.y);
     203        PCUT_ASSERT_EQUALS(rect.p1.x, resp.set_clip_rect_rect.p1.x);
     204        PCUT_ASSERT_EQUALS(rect.p1.y, resp.set_clip_rect_rect.p1.y);
     205
     206        ipc_gc_delete(ipcgc);
     207        async_hangup(sess);
     208
     209        rc = loc_service_unregister(sid);
     210        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     211}
     212
     213/** gfx_set_clip_rect with null rectangle, server returning success */
     214PCUT_TEST(set_clip_rect_null_success)
     215{
     216        errno_t rc;
     217        service_id_t sid;
     218        test_response_t resp;
     219        gfx_context_t *gc;
     220        async_sess_t *sess;
     221        ipc_gc_t *ipcgc;
     222
     223        async_set_fallback_port_handler(test_ipcgc_conn, &resp);
     224
     225        // FIXME This causes this test to be non-reentrant!
     226        rc = loc_server_register(test_ipcgfx_server);
     227        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     228
     229        rc = loc_service_register(test_ipcgfx_svc, &sid);
     230        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     231
     232        sess = loc_service_connect(sid, INTERFACE_GC, 0);
     233        PCUT_ASSERT_NOT_NULL(sess);
     234
     235        rc = ipc_gc_create(sess, &ipcgc);
     236        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     237
     238        gc = ipc_gc_get_ctx(ipcgc);
     239        PCUT_ASSERT_NOT_NULL(gc);
     240
     241        resp.rc = EOK;
     242        resp.set_clip_rect_called = false;
     243
     244        rc = gfx_set_clip_rect(gc, NULL);
     245        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     246        PCUT_ASSERT_TRUE(resp.set_clip_rect_called);
     247        PCUT_ASSERT_FALSE(resp.do_clip);
     248
     249        ipc_gc_delete(ipcgc);
     250        async_hangup(sess);
     251
     252        rc = loc_service_unregister(sid);
     253        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     254}
    105255
    106256/** gfx_set_color with server returning failure */
     
    234384
    235385        resp.rc = ENOMEM;
    236         resp.set_color_called = false;
     386        resp.fill_rect_called = false;
    237387        rect.p0.x = 1;
    238388        rect.p0.y = 2;
     
    284434
    285435        resp.rc = EOK;
    286         resp.set_color_called = false;
     436        resp.fill_rect_called = false;
    287437        rect.p0.x = 1;
    288438        rect.p0.y = 2;
     
    8981048}
    8991049
     1050/** Set clipping rectangle in test GC.
     1051 *
     1052 * @param arg Test GC
     1053 * @param rect Rectangle
     1054 *
     1055 * @return EOK on success or an error code
     1056 */
     1057static errno_t test_gc_set_clip_rect(void *arg, gfx_rect_t *rect)
     1058{
     1059        test_response_t *resp = (test_response_t *) arg;
     1060
     1061        resp->set_clip_rect_called = true;
     1062        if (rect != NULL) {
     1063                resp->do_clip = true;
     1064                resp->set_clip_rect_rect = *rect;
     1065        } else {
     1066                resp->do_clip = false;
     1067        }
     1068
     1069        return resp->rc;
     1070}
     1071
    9001072/** Set color in test GC.
    9011073 *
Note: See TracChangeset for help on using the changeset viewer.