Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/ui/test/pbutton.c

    r3583ffb r1fa6292  
    11/*
    2  * Copyright (c) 2020 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    3636#include <ui/resource.h>
    3737#include "../private/pbutton.h"
     38#include "../private/testgc.h"
    3839
    3940PCUT_INIT;
     
    4142PCUT_TEST_SUITE(pbutton);
    4243
    43 static errno_t testgc_set_color(void *, gfx_color_t *);
    44 static errno_t testgc_fill_rect(void *, gfx_rect_t *);
    45 static errno_t testgc_bitmap_create(void *, gfx_bitmap_params_t *,
    46     gfx_bitmap_alloc_t *, void **);
    47 static errno_t testgc_bitmap_destroy(void *);
    48 static errno_t testgc_bitmap_render(void *, gfx_rect_t *, gfx_coord2_t *);
    49 static errno_t testgc_bitmap_get_alloc(void *, gfx_bitmap_alloc_t *);
    50 
    51 static gfx_context_ops_t ops = {
    52         .set_color = testgc_set_color,
    53         .fill_rect = testgc_fill_rect,
    54         .bitmap_create = testgc_bitmap_create,
    55         .bitmap_destroy = testgc_bitmap_destroy,
    56         .bitmap_render = testgc_bitmap_render,
    57         .bitmap_get_alloc = testgc_bitmap_get_alloc
    58 };
    59 
    6044static void test_pbutton_clicked(ui_pbutton_t *, void *);
     45static void test_pbutton_down(ui_pbutton_t *, void *);
     46static void test_pbutton_up(ui_pbutton_t *, void *);
    6147
    6248static ui_pbutton_cb_t test_pbutton_cb = {
    63         .clicked = test_pbutton_clicked
     49        .clicked = test_pbutton_clicked,
     50        .down = test_pbutton_down,
     51        .up = test_pbutton_up
    6452};
    6553
     
    6856
    6957typedef struct {
    70         bool bm_created;
    71         bool bm_destroyed;
    72         gfx_bitmap_params_t bm_params;
    73         void *bm_pixels;
    74         gfx_rect_t bm_srect;
    75         gfx_coord2_t bm_offs;
    76         bool bm_rendered;
    77         bool bm_got_alloc;
    78 } test_gc_t;
    79 
    80 typedef struct {
    81         test_gc_t *tgc;
    82         gfx_bitmap_alloc_t alloc;
    83         bool myalloc;
    84 } testgc_bitmap_t;
    85 
    86 typedef struct {
    8758        bool clicked;
     59        bool down;
     60        bool up;
    8861} test_cb_resp_t;
    8962
     
    12194
    12295        ui_control_destroy(control);
     96}
     97
     98/** Set flags sets internal field */
     99PCUT_TEST(set_flags)
     100{
     101        ui_pbutton_t *pbutton;
     102        errno_t rc;
     103
     104        rc = ui_pbutton_create(NULL, "Hello", &pbutton);
     105        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     106
     107        ui_pbutton_set_flags(pbutton, ui_pbf_no_text_depress);
     108        PCUT_ASSERT_INT_EQUALS(ui_pbf_no_text_depress, pbutton->flags);
     109
     110        ui_pbutton_destroy(pbutton);
    123111}
    124112
     
    165153}
    166154
     155/** Get light gets internal field */
     156PCUT_TEST(get_light)
     157{
     158        ui_pbutton_t *pbutton;
     159        errno_t rc;
     160
     161        rc = ui_pbutton_create(NULL, "Hello", &pbutton);
     162        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     163
     164        pbutton->light = true;
     165        PCUT_ASSERT_TRUE(ui_pbutton_get_light(pbutton));
     166
     167        pbutton->light = false;
     168        PCUT_ASSERT_FALSE(ui_pbutton_get_light(pbutton));
     169
     170        ui_pbutton_destroy(pbutton);
     171}
     172
     173/** Set light sets internal field */
     174PCUT_TEST(set_light)
     175{
     176        ui_pbutton_t *pbutton;
     177        errno_t rc;
     178
     179        rc = ui_pbutton_create(NULL, "Hello", &pbutton);
     180        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     181
     182        ui_pbutton_set_light(pbutton, true);
     183        PCUT_ASSERT_TRUE(pbutton->light);
     184
     185        ui_pbutton_set_light(pbutton, false);
     186        PCUT_ASSERT_FALSE(pbutton->light);
     187
     188        ui_pbutton_destroy(pbutton);
     189}
     190
     191/** Set caption sets internal field */
     192PCUT_TEST(set_caption)
     193{
     194        ui_pbutton_t *pbutton;
     195        errno_t rc;
     196
     197        rc = ui_pbutton_create(NULL, "Hello", &pbutton);
     198        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     199
     200        PCUT_ASSERT_STR_EQUALS("Hello", pbutton->caption);
     201
     202        rc = ui_pbutton_set_caption(pbutton, "World");
     203        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     204
     205        PCUT_ASSERT_STR_EQUALS("World", pbutton->caption);
     206
     207        ui_pbutton_destroy(pbutton);
     208}
     209
    167210/** Paint button */
    168211PCUT_TEST(paint)
     
    178221        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    179222
    180         rc = ui_resource_create(gc, &resource);
     223        rc = ui_resource_create(gc, false, &resource);
    181224        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    182225        PCUT_ASSERT_NOT_NULL(resource);
     
    221264}
    222265
     266/** Test ui_pbutton_down() */
     267PCUT_TEST(down)
     268{
     269        errno_t rc;
     270        ui_pbutton_t *pbutton;
     271        test_cb_resp_t resp;
     272
     273        rc = ui_pbutton_create(NULL, "Hello", &pbutton);
     274        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     275
     276        /* Down with no callbacks set */
     277        ui_pbutton_clicked(pbutton);
     278
     279        /* Down with callback not implementing down */
     280        ui_pbutton_set_cb(pbutton, &dummy_pbutton_cb, NULL);
     281        ui_pbutton_down(pbutton);
     282
     283        /* Down with real callback set */
     284        resp.down = false;
     285        ui_pbutton_set_cb(pbutton, &test_pbutton_cb, &resp);
     286        ui_pbutton_down(pbutton);
     287        PCUT_ASSERT_TRUE(resp.down);
     288
     289        ui_pbutton_destroy(pbutton);
     290}
     291
     292/** Test ui_pbutton_up() */
     293PCUT_TEST(up)
     294{
     295        errno_t rc;
     296        ui_pbutton_t *pbutton;
     297        test_cb_resp_t resp;
     298
     299        rc = ui_pbutton_create(NULL, "Hello", &pbutton);
     300        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     301
     302        /* Up with no callbacks set */
     303        ui_pbutton_clicked(pbutton);
     304
     305        /* Up with callback not implementing up */
     306        ui_pbutton_set_cb(pbutton, &dummy_pbutton_cb, NULL);
     307        ui_pbutton_up(pbutton);
     308
     309        /* Up with real callback set */
     310        resp.up = false;
     311        ui_pbutton_set_cb(pbutton, &test_pbutton_cb, &resp);
     312        ui_pbutton_up(pbutton);
     313        PCUT_ASSERT_TRUE(resp.up);
     314
     315        ui_pbutton_destroy(pbutton);
     316}
     317
    223318/** Press and release button */
    224319PCUT_TEST(press_release)
     
    235330        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    236331
    237         rc = ui_resource_create(gc, &resource);
     332        rc = ui_resource_create(gc, false, &resource);
     333        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     334        PCUT_ASSERT_NOT_NULL(resource);
     335
     336        rc = ui_pbutton_create(resource, "Hello", &pbutton);
     337        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     338
     339        resp.clicked = false;
     340        resp.down = false;
     341        resp.up = false;
     342        ui_pbutton_set_cb(pbutton, &test_pbutton_cb, &resp);
     343
     344        PCUT_ASSERT_FALSE(pbutton->held);
     345        PCUT_ASSERT_FALSE(pbutton->inside);
     346
     347        ui_pbutton_press(pbutton);
     348        PCUT_ASSERT_TRUE(pbutton->held);
     349        PCUT_ASSERT_TRUE(pbutton->inside);
     350        PCUT_ASSERT_TRUE(resp.down);
     351        PCUT_ASSERT_FALSE(resp.up);
     352        PCUT_ASSERT_FALSE(resp.clicked);
     353
     354        ui_pbutton_release(pbutton);
     355        PCUT_ASSERT_FALSE(pbutton->held);
     356        PCUT_ASSERT_TRUE(pbutton->inside);
     357        PCUT_ASSERT_TRUE(resp.up);
     358        PCUT_ASSERT_TRUE(resp.clicked);
     359
     360        ui_pbutton_destroy(pbutton);
     361        ui_resource_destroy(resource);
     362
     363        rc = gfx_context_delete(gc);
     364        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     365}
     366
     367/** Press, leave and release button */
     368PCUT_TEST(press_leave_release)
     369{
     370        errno_t rc;
     371        gfx_context_t *gc = NULL;
     372        test_gc_t tgc;
     373        ui_resource_t *resource = NULL;
     374        ui_pbutton_t *pbutton;
     375        test_cb_resp_t resp;
     376
     377        memset(&tgc, 0, sizeof(tgc));
     378        rc = gfx_context_new(&ops, &tgc, &gc);
     379        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     380
     381        rc = ui_resource_create(gc, false, &resource);
    238382        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    239383        PCUT_ASSERT_NOT_NULL(resource);
     
    253397        PCUT_ASSERT_FALSE(resp.clicked);
    254398
     399        ui_pbutton_leave(pbutton);
     400        PCUT_ASSERT_TRUE(pbutton->held);
     401        PCUT_ASSERT_FALSE(pbutton->inside);
     402        PCUT_ASSERT_FALSE(resp.clicked);
     403
    255404        ui_pbutton_release(pbutton);
    256405        PCUT_ASSERT_FALSE(pbutton->held);
    257         PCUT_ASSERT_TRUE(pbutton->inside);
    258         PCUT_ASSERT_TRUE(resp.clicked);
     406        PCUT_ASSERT_FALSE(pbutton->inside);
     407        PCUT_ASSERT_FALSE(resp.clicked);
    259408
    260409        ui_pbutton_destroy(pbutton);
     
    265414}
    266415
    267 /** Press, leave and release button */
    268 PCUT_TEST(press_leave_release)
     416/** Press, leave, enter and release button */
     417PCUT_TEST(press_leave_enter_release)
    269418{
    270419        errno_t rc;
     
    279428        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    280429
    281         rc = ui_resource_create(gc, &resource);
     430        rc = ui_resource_create(gc, false, &resource);
    282431        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    283432        PCUT_ASSERT_NOT_NULL(resource);
     
    302451        PCUT_ASSERT_FALSE(resp.clicked);
    303452
    304         ui_pbutton_release(pbutton);
    305         PCUT_ASSERT_FALSE(pbutton->held);
    306         PCUT_ASSERT_FALSE(pbutton->inside);
    307         PCUT_ASSERT_FALSE(resp.clicked);
    308 
    309         ui_pbutton_destroy(pbutton);
    310         ui_resource_destroy(resource);
    311 
    312         rc = gfx_context_delete(gc);
    313         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    314 }
    315 
    316 /** Press, leave, enter and release button */
    317 PCUT_TEST(press_leave_enter_release)
    318 {
    319         errno_t rc;
    320         gfx_context_t *gc = NULL;
    321         test_gc_t tgc;
    322         ui_resource_t *resource = NULL;
    323         ui_pbutton_t *pbutton;
    324         test_cb_resp_t resp;
    325 
    326         memset(&tgc, 0, sizeof(tgc));
    327         rc = gfx_context_new(&ops, &tgc, &gc);
    328         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    329 
    330         rc = ui_resource_create(gc, &resource);
    331         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    332         PCUT_ASSERT_NOT_NULL(resource);
    333 
    334         rc = ui_pbutton_create(resource, "Hello", &pbutton);
    335         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    336 
    337         resp.clicked = false;
    338         ui_pbutton_set_cb(pbutton, &test_pbutton_cb, &resp);
    339 
    340         PCUT_ASSERT_FALSE(pbutton->held);
    341         PCUT_ASSERT_FALSE(pbutton->inside);
    342 
    343         ui_pbutton_press(pbutton);
    344         PCUT_ASSERT_TRUE(pbutton->held);
    345         PCUT_ASSERT_TRUE(pbutton->inside);
    346         PCUT_ASSERT_FALSE(resp.clicked);
    347 
    348         ui_pbutton_leave(pbutton);
    349         PCUT_ASSERT_TRUE(pbutton->held);
    350         PCUT_ASSERT_FALSE(pbutton->inside);
    351         PCUT_ASSERT_FALSE(resp.clicked);
    352 
    353453        ui_pbutton_enter(pbutton);
    354454        PCUT_ASSERT_TRUE(pbutton->held);
     
    384484        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    385485
    386         rc = ui_resource_create(gc, &resource);
     486        rc = ui_resource_create(gc, false, &resource);
    387487        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    388488        PCUT_ASSERT_NOT_NULL(resource);
     
    445545        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    446546
    447         rc = ui_resource_create(gc, &resource);
     547        rc = ui_resource_create(gc, false, &resource);
    448548        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    449549        PCUT_ASSERT_NOT_NULL(resource);
     
    488588}
    489589
    490 static errno_t testgc_set_color(void *arg, gfx_color_t *color)
    491 {
    492         (void) arg;
    493         (void) color;
    494         return EOK;
    495 }
    496 
    497 static errno_t testgc_fill_rect(void *arg, gfx_rect_t *rect)
    498 {
    499         (void) arg;
    500         (void) rect;
    501         return EOK;
    502 }
    503 
    504 static errno_t testgc_bitmap_create(void *arg, gfx_bitmap_params_t *params,
    505     gfx_bitmap_alloc_t *alloc, void **rbm)
    506 {
    507         test_gc_t *tgc = (test_gc_t *) arg;
    508         testgc_bitmap_t *tbm;
    509 
    510         tbm = calloc(1, sizeof(testgc_bitmap_t));
    511         if (tbm == NULL)
    512                 return ENOMEM;
    513 
    514         if (alloc == NULL) {
    515                 tbm->alloc.pitch = (params->rect.p1.x - params->rect.p0.x) *
    516                     sizeof(uint32_t);
    517                 tbm->alloc.off0 = 0;
    518                 tbm->alloc.pixels = calloc(sizeof(uint32_t),
    519                     (params->rect.p1.x - params->rect.p0.x) *
    520                     (params->rect.p1.y - params->rect.p0.y));
    521                 tbm->myalloc = true;
    522                 if (tbm->alloc.pixels == NULL) {
    523                         free(tbm);
    524                         return ENOMEM;
    525                 }
    526         } else {
    527                 tbm->alloc = *alloc;
    528         }
    529 
    530         tbm->tgc = tgc;
    531         tgc->bm_created = true;
    532         tgc->bm_params = *params;
    533         tgc->bm_pixels = tbm->alloc.pixels;
    534         *rbm = (void *)tbm;
    535         return EOK;
    536 }
    537 
    538 static errno_t testgc_bitmap_destroy(void *bm)
    539 {
    540         testgc_bitmap_t *tbm = (testgc_bitmap_t *)bm;
    541         if (tbm->myalloc)
    542                 free(tbm->alloc.pixels);
    543         tbm->tgc->bm_destroyed = true;
    544         free(tbm);
    545         return EOK;
    546 }
    547 
    548 static errno_t testgc_bitmap_render(void *bm, gfx_rect_t *srect,
    549     gfx_coord2_t *offs)
    550 {
    551         testgc_bitmap_t *tbm = (testgc_bitmap_t *)bm;
    552         tbm->tgc->bm_rendered = true;
    553         tbm->tgc->bm_srect = *srect;
    554         tbm->tgc->bm_offs = *offs;
    555         return EOK;
    556 }
    557 
    558 static errno_t testgc_bitmap_get_alloc(void *bm, gfx_bitmap_alloc_t *alloc)
    559 {
    560         testgc_bitmap_t *tbm = (testgc_bitmap_t *)bm;
    561         *alloc = tbm->alloc;
    562         tbm->tgc->bm_got_alloc = true;
    563         return EOK;
    564 }
    565 
    566590static void test_pbutton_clicked(ui_pbutton_t *pbutton, void *arg)
    567591{
     
    571595}
    572596
     597static void test_pbutton_down(ui_pbutton_t *pbutton, void *arg)
     598{
     599        test_cb_resp_t *resp = (test_cb_resp_t *) arg;
     600
     601        resp->down = true;
     602}
     603
     604static void test_pbutton_up(ui_pbutton_t *pbutton, void *arg)
     605{
     606        test_cb_resp_t *resp = (test_cb_resp_t *) arg;
     607
     608        resp->up = true;
     609}
     610
    573611PCUT_EXPORT(pbutton);
Note: See TracChangeset for help on using the changeset viewer.