Changes in uspace/lib/memgfx/test/memgfx.c [f8375f7:1215db9] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/memgfx/test/memgfx.c
rf8375f7 r1215db9 1 1 /* 2 * Copyright (c) 202 0Jiri Svoboda2 * Copyright (c) 2021 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 32 32 #include <gfx/coord.h> 33 33 #include <gfx/context.h> 34 #include <gfx/cursor.h> 34 35 #include <gfx/render.h> 35 36 #include <io/pixelmap.h> … … 42 43 PCUT_TEST_SUITE(memgfx); 43 44 44 static void test_update_rect(void *arg, gfx_rect_t *rect); 45 static void test_invalidate_rect(void *arg, gfx_rect_t *rect); 46 static void test_update(void *arg); 47 static errno_t test_cursor_get_pos(void *arg, gfx_coord2_t *); 48 static errno_t test_cursor_set_pos(void *arg, gfx_coord2_t *); 49 static errno_t test_cursor_set_visible(void *arg, bool); 50 51 static mem_gc_cb_t test_mem_gc_cb = { 52 .invalidate = test_invalidate_rect, 53 .update = test_update, 54 .cursor_get_pos = test_cursor_get_pos, 55 .cursor_set_pos = test_cursor_set_pos, 56 .cursor_set_visible = test_cursor_set_visible 57 }; 45 58 46 59 typedef struct { 60 /** Return code to return */ 61 errno_t rc; 62 /** True if invalidate was called */ 63 bool invalidate_called; 64 /** Invalidate rectangle */ 65 gfx_rect_t inv_rect; 47 66 /** True if update was called */ 48 67 bool update_called; 49 /** Update rectangle */ 50 gfx_rect_t rect; 51 } test_update_t; 68 /** True if cursor_get_pos was called */ 69 bool cursor_get_pos_called; 70 /** Position to return from cursor_get_pos */ 71 gfx_coord2_t get_pos_pos; 72 /** True if cursor_set_pos was called */ 73 bool cursor_set_pos_called; 74 /** Position passed to cursor_set_pos */ 75 gfx_coord2_t set_pos_pos; 76 /** True if cursor_set_visible was called */ 77 bool cursor_set_visible_called; 78 /** Value passed to cursor_set_visible */ 79 bool set_visible_vis; 80 } test_resp_t; 52 81 53 82 /** Test creating and deleting a memory GC */ … … 89 118 pixel_t pixel; 90 119 pixel_t expected; 91 test_ update_t update;92 errno_t rc; 93 94 /* Bounding rectangle for memory GC */ 95 rect.p0.x = 0; 96 rect.p0.y = 0; 97 rect.p1.x = 10; 98 rect.p1.y = 10; 99 100 alloc.pitch = (rect.p1.x - rect.p0.x) * sizeof(uint32_t); 101 alloc.off0 = 0; 102 alloc.pixels = calloc(1, alloc.pitch * (rect.p1.y - rect.p0.y)); 103 PCUT_ASSERT_NOT_NULL(alloc.pixels); 104 105 rc = mem_gc_create(&rect, &alloc, test_update_rect, &update, &mgc);120 test_resp_t resp; 121 errno_t rc; 122 123 /* Bounding rectangle for memory GC */ 124 rect.p0.x = 0; 125 rect.p0.y = 0; 126 rect.p1.x = 10; 127 rect.p1.y = 10; 128 129 alloc.pitch = (rect.p1.x - rect.p0.x) * sizeof(uint32_t); 130 alloc.off0 = 0; 131 alloc.pixels = calloc(1, alloc.pitch * (rect.p1.y - rect.p0.y)); 132 PCUT_ASSERT_NOT_NULL(alloc.pixels); 133 134 rc = mem_gc_create(&rect, &alloc, &test_mem_gc_cb, &resp, &mgc); 106 135 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 107 136 … … 122 151 frect.p1.y = 5; 123 152 124 memset(& update, 0, sizeof(update));153 memset(&resp, 0, sizeof(resp)); 125 154 126 155 rc = gfx_fill_rect(gc, &frect); … … 141 170 } 142 171 143 /* Check that the update rect is equal to the filled rect */144 PCUT_ASSERT_TRUE( update.update_called);145 PCUT_ASSERT_INT_EQUALS(frect.p0.x, update.rect.p0.x);146 PCUT_ASSERT_INT_EQUALS(frect.p0.y, update.rect.p0.y);147 PCUT_ASSERT_INT_EQUALS(frect.p1.x, update.rect.p1.x);148 PCUT_ASSERT_INT_EQUALS(frect.p1.y, update.rect.p1.y);172 /* Check that the invalidate rect is equal to the filled rect */ 173 PCUT_ASSERT_TRUE(resp.invalidate_called); 174 PCUT_ASSERT_INT_EQUALS(frect.p0.x, resp.inv_rect.p0.x); 175 PCUT_ASSERT_INT_EQUALS(frect.p0.y, resp.inv_rect.p0.y); 176 PCUT_ASSERT_INT_EQUALS(frect.p1.x, resp.inv_rect.p1.x); 177 PCUT_ASSERT_INT_EQUALS(frect.p1.y, resp.inv_rect.p1.y); 149 178 150 179 /* TODO: Check clipping once memgc can support pitch != width etc. */ … … 169 198 pixel_t pixel; 170 199 pixel_t expected; 171 test_ update_t update;172 errno_t rc; 173 174 /* Bounding rectangle for memory GC */ 175 rect.p0.x = 0; 176 rect.p0.y = 0; 177 rect.p1.x = 10; 178 rect.p1.y = 10; 179 180 alloc.pitch = (rect.p1.x - rect.p0.x) * sizeof(uint32_t); 181 alloc.off0 = 0; 182 alloc.pixels = calloc(1, alloc.pitch * (rect.p1.y - rect.p0.y)); 183 PCUT_ASSERT_NOT_NULL(alloc.pixels); 184 185 rc = mem_gc_create(&rect, &alloc, test_update_rect, &update, &mgc);200 test_resp_t resp; 201 errno_t rc; 202 203 /* Bounding rectangle for memory GC */ 204 rect.p0.x = 0; 205 rect.p0.y = 0; 206 rect.p1.x = 10; 207 rect.p1.y = 10; 208 209 alloc.pitch = (rect.p1.x - rect.p0.x) * sizeof(uint32_t); 210 alloc.off0 = 0; 211 alloc.pixels = calloc(1, alloc.pitch * (rect.p1.y - rect.p0.y)); 212 PCUT_ASSERT_NOT_NULL(alloc.pixels); 213 214 rc = mem_gc_create(&rect, &alloc, &test_mem_gc_cb, &resp, &mgc); 186 215 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 187 216 … … 191 220 /* Create bitmap */ 192 221 222 gfx_bitmap_params_init(¶ms); 193 223 params.rect.p0.x = 0; 194 224 params.rect.p0.y = 0; … … 219 249 dpmap.data = alloc.pixels; 220 250 221 memset(& update, 0, sizeof(update));251 memset(&resp, 0, sizeof(resp)); 222 252 223 253 /* Render the bitmap */ … … 237 267 } 238 268 239 /* Check that the update rect is equal to the filled rect */240 PCUT_ASSERT_TRUE( update.update_called);241 PCUT_ASSERT_INT_EQUALS(params.rect.p0.x, update.rect.p0.x);242 PCUT_ASSERT_INT_EQUALS(params.rect.p0.y, update.rect.p0.y);243 PCUT_ASSERT_INT_EQUALS(params.rect.p1.x, update.rect.p1.x);244 PCUT_ASSERT_INT_EQUALS(params.rect.p1.y, update.rect.p1.y);269 /* Check that the invalidate rect is equal to the filled rect */ 270 PCUT_ASSERT_TRUE(resp.invalidate_called); 271 PCUT_ASSERT_INT_EQUALS(params.rect.p0.x, resp.inv_rect.p0.x); 272 PCUT_ASSERT_INT_EQUALS(params.rect.p0.y, resp.inv_rect.p0.y); 273 PCUT_ASSERT_INT_EQUALS(params.rect.p1.x, resp.inv_rect.p1.x); 274 PCUT_ASSERT_INT_EQUALS(params.rect.p1.y, resp.inv_rect.p1.y); 245 275 246 276 /* TODO: Check clipping once memgc can support pitch != width etc. */ … … 250 280 } 251 281 252 /** Called by memory GC when a rectangle is updated. */ 253 static void test_update_rect(void *arg, gfx_rect_t *rect) 254 { 255 test_update_t *update = (test_update_t *)arg; 256 257 update->update_called = true; 258 update->rect = *rect; 282 /** Test gfx_update() on a memory GC */ 283 PCUT_TEST(gfx_update) 284 { 285 mem_gc_t *mgc; 286 gfx_rect_t rect; 287 gfx_bitmap_alloc_t alloc; 288 gfx_context_t *gc; 289 test_resp_t resp; 290 errno_t rc; 291 292 /* Bounding rectangle for memory GC */ 293 rect.p0.x = 0; 294 rect.p0.y = 0; 295 rect.p1.x = 10; 296 rect.p1.y = 10; 297 298 alloc.pitch = (rect.p1.x - rect.p0.x) * sizeof(uint32_t); 299 alloc.off0 = 0; 300 alloc.pixels = calloc(1, alloc.pitch * (rect.p1.y - rect.p0.y)); 301 PCUT_ASSERT_NOT_NULL(alloc.pixels); 302 303 rc = mem_gc_create(&rect, &alloc, &test_mem_gc_cb, &resp, &mgc); 304 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 305 306 gc = mem_gc_get_ctx(mgc); 307 PCUT_ASSERT_NOT_NULL(gc); 308 309 memset(&resp, 0, sizeof(resp)); 310 PCUT_ASSERT_FALSE(resp.update_called); 311 312 gfx_update(gc); 313 PCUT_ASSERT_TRUE(resp.update_called); 314 315 mem_gc_delete(mgc); 316 free(alloc.pixels); 317 } 318 319 /** Test gfx_cursor_get_pos() on a memory GC */ 320 PCUT_TEST(gfx_cursor_get_pos) 321 { 322 mem_gc_t *mgc; 323 gfx_rect_t rect; 324 gfx_bitmap_alloc_t alloc; 325 gfx_coord2_t pos; 326 gfx_context_t *gc; 327 test_resp_t resp; 328 errno_t rc; 329 330 /* Bounding rectangle for memory GC */ 331 rect.p0.x = 0; 332 rect.p0.y = 0; 333 rect.p1.x = 10; 334 rect.p1.y = 10; 335 336 alloc.pitch = (rect.p1.x - rect.p0.x) * sizeof(uint32_t); 337 alloc.off0 = 0; 338 alloc.pixels = calloc(1, alloc.pitch * (rect.p1.y - rect.p0.y)); 339 PCUT_ASSERT_NOT_NULL(alloc.pixels); 340 341 rc = mem_gc_create(&rect, &alloc, &test_mem_gc_cb, &resp, &mgc); 342 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 343 344 gc = mem_gc_get_ctx(mgc); 345 PCUT_ASSERT_NOT_NULL(gc); 346 347 memset(&resp, 0, sizeof(resp)); 348 resp.rc = EOK; 349 resp.get_pos_pos.x = 1; 350 resp.get_pos_pos.y = 2; 351 PCUT_ASSERT_FALSE(resp.cursor_get_pos_called); 352 353 rc = gfx_cursor_get_pos(gc, &pos); 354 PCUT_ASSERT_TRUE(resp.cursor_get_pos_called); 355 PCUT_ASSERT_INT_EQUALS(resp.get_pos_pos.x, pos.x); 356 PCUT_ASSERT_INT_EQUALS(resp.get_pos_pos.y, pos.y); 357 358 mem_gc_delete(mgc); 359 free(alloc.pixels); 360 } 361 362 /** Test gfx_cursor_set_pos() on a memory GC */ 363 PCUT_TEST(gfx_cursor_set_pos) 364 { 365 mem_gc_t *mgc; 366 gfx_rect_t rect; 367 gfx_bitmap_alloc_t alloc; 368 gfx_coord2_t pos; 369 gfx_context_t *gc; 370 test_resp_t resp; 371 errno_t rc; 372 373 /* Bounding rectangle for memory GC */ 374 rect.p0.x = 0; 375 rect.p0.y = 0; 376 rect.p1.x = 10; 377 rect.p1.y = 10; 378 379 alloc.pitch = (rect.p1.x - rect.p0.x) * sizeof(uint32_t); 380 alloc.off0 = 0; 381 alloc.pixels = calloc(1, alloc.pitch * (rect.p1.y - rect.p0.y)); 382 PCUT_ASSERT_NOT_NULL(alloc.pixels); 383 384 rc = mem_gc_create(&rect, &alloc, &test_mem_gc_cb, &resp, &mgc); 385 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 386 387 gc = mem_gc_get_ctx(mgc); 388 PCUT_ASSERT_NOT_NULL(gc); 389 390 memset(&resp, 0, sizeof(resp)); 391 resp.rc = EOK; 392 pos.x = 1; 393 pos.y = 2; 394 PCUT_ASSERT_FALSE(resp.cursor_set_pos_called); 395 396 rc = gfx_cursor_set_pos(gc, &pos); 397 PCUT_ASSERT_TRUE(resp.cursor_set_pos_called); 398 PCUT_ASSERT_INT_EQUALS(pos.x, resp.set_pos_pos.x); 399 PCUT_ASSERT_INT_EQUALS(pos.y, resp.set_pos_pos.y); 400 401 mem_gc_delete(mgc); 402 free(alloc.pixels); 403 } 404 405 /** Test gfx_cursor_set_visible() on a memory GC */ 406 PCUT_TEST(gfx_cursor_set_visible) 407 { 408 mem_gc_t *mgc; 409 gfx_rect_t rect; 410 gfx_bitmap_alloc_t alloc; 411 gfx_context_t *gc; 412 test_resp_t resp; 413 errno_t rc; 414 415 /* Bounding rectangle for memory GC */ 416 rect.p0.x = 0; 417 rect.p0.y = 0; 418 rect.p1.x = 10; 419 rect.p1.y = 10; 420 421 alloc.pitch = (rect.p1.x - rect.p0.x) * sizeof(uint32_t); 422 alloc.off0 = 0; 423 alloc.pixels = calloc(1, alloc.pitch * (rect.p1.y - rect.p0.y)); 424 PCUT_ASSERT_NOT_NULL(alloc.pixels); 425 426 rc = mem_gc_create(&rect, &alloc, &test_mem_gc_cb, &resp, &mgc); 427 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 428 429 gc = mem_gc_get_ctx(mgc); 430 PCUT_ASSERT_NOT_NULL(gc); 431 432 memset(&resp, 0, sizeof(resp)); 433 resp.rc = EOK; 434 PCUT_ASSERT_FALSE(resp.cursor_set_visible_called); 435 436 rc = gfx_cursor_set_visible(gc, true); 437 PCUT_ASSERT_TRUE(resp.cursor_set_visible_called); 438 PCUT_ASSERT_TRUE(resp.set_visible_vis); 439 440 resp.cursor_set_visible_called = false; 441 442 rc = gfx_cursor_set_visible(gc, false); 443 PCUT_ASSERT_TRUE(resp.cursor_set_visible_called); 444 PCUT_ASSERT_FALSE(resp.set_visible_vis); 445 446 mem_gc_delete(mgc); 447 free(alloc.pixels); 448 } 449 450 /** Called by memory GC when a rectangle is modified. */ 451 static void test_invalidate_rect(void *arg, gfx_rect_t *rect) 452 { 453 test_resp_t *resp = (test_resp_t *)arg; 454 455 resp->invalidate_called = true; 456 resp->inv_rect = *rect; 457 } 458 459 /** Called by memory GC when update is called. */ 460 static void test_update(void *arg) 461 { 462 test_resp_t *resp = (test_resp_t *)arg; 463 464 resp->update_called = true; 465 } 466 467 /** Called by memory GC when cursor_get_pos is called. */ 468 static errno_t test_cursor_get_pos(void *arg, gfx_coord2_t *pos) 469 { 470 test_resp_t *resp = (test_resp_t *)arg; 471 472 resp->cursor_get_pos_called = true; 473 *pos = resp->get_pos_pos; 474 return resp->rc; 475 } 476 477 /** Called by memory GC when cursor_set_pos is called. */ 478 static errno_t test_cursor_set_pos(void *arg, gfx_coord2_t *pos) 479 { 480 test_resp_t *resp = (test_resp_t *)arg; 481 482 resp->cursor_set_pos_called = true; 483 resp->set_pos_pos = *pos; 484 return resp->rc; 485 } 486 487 /** Called by memory GC when cursor_set_visible is called. */ 488 static errno_t test_cursor_set_visible(void *arg, bool visible) 489 { 490 test_resp_t *resp = (test_resp_t *)arg; 491 492 resp->cursor_set_visible_called = true; 493 resp->set_visible_vis = visible; 494 return resp->rc; 259 495 } 260 496
Note:
See TracChangeset
for help on using the changeset viewer.