Changeset 8ef48ece in mainline for uspace/lib/ui/test/pbutton.c


Ignore:
Timestamp:
2020-10-15T22:12:22Z (4 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
de9992c
Parents:
faca61b8
Message:

Generating button activation event

File:
1 edited

Legend:

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

    rfaca61b8 r8ef48ece  
    5757};
    5858
     59static void test_pbutton_clicked(ui_pbutton_t *, void *);
     60
     61static ui_pbutton_cb_t test_pbutton_cb = {
     62        .clicked = test_pbutton_clicked
     63};
     64
     65static ui_pbutton_cb_t dummy_pbutton_cb = {
     66};
     67
    5968typedef struct {
    6069        bool bm_created;
     
    7483} testgc_bitmap_t;
    7584
     85typedef struct {
     86        bool clicked;
     87} test_cb_resp_t;
     88
    7689/** Create and destroy button */
    7790PCUT_TEST(create_destroy)
     
    165178}
    166179
    167 /** ui_pbutton_press()/release() sets/clears internal held flag */
     180/** Test ui_pbutton_clicked() */
     181PCUT_TEST(clicked)
     182{
     183        errno_t rc;
     184        ui_pbutton_t *pbutton;
     185        test_cb_resp_t resp;
     186
     187        rc = ui_pbutton_create(NULL, "Hello", &pbutton);
     188        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     189
     190        /* Clicked with no callbacks set */
     191        ui_pbutton_clicked(pbutton);
     192
     193        /* Clicked with callback not implementing clicked */
     194        ui_pbutton_set_cb(pbutton, &dummy_pbutton_cb, NULL);
     195        ui_pbutton_clicked(pbutton);
     196
     197        /* Clicked with real callback set */
     198        resp.clicked = false;
     199        ui_pbutton_set_cb(pbutton, &test_pbutton_cb, &resp);
     200        ui_pbutton_clicked(pbutton);
     201        PCUT_ASSERT_TRUE(resp.clicked);
     202
     203        ui_pbutton_destroy(pbutton);
     204}
     205
     206/** Press and release button */
    168207PCUT_TEST(press_release)
    169208{
    170         ui_pbutton_t *pbutton;
    171         errno_t rc;
    172 
    173         rc = ui_pbutton_create(NULL, "Hello", &pbutton);
    174         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    175 
    176         PCUT_ASSERT_FALSE(pbutton->held);
     209        errno_t rc;
     210        gfx_context_t *gc = NULL;
     211        test_gc_t tgc;
     212        ui_resource_t *resource = NULL;
     213        ui_pbutton_t *pbutton;
     214        test_cb_resp_t resp;
     215
     216        memset(&tgc, 0, sizeof(tgc));
     217        rc = gfx_context_new(&ops, &tgc, &gc);
     218        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     219
     220        rc = ui_resource_create(gc, &resource);
     221        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     222        PCUT_ASSERT_NOT_NULL(resource);
     223
     224        rc = ui_pbutton_create(resource, "Hello", &pbutton);
     225        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     226
     227        resp.clicked = false;
     228        ui_pbutton_set_cb(pbutton, &test_pbutton_cb, &resp);
     229
     230        PCUT_ASSERT_FALSE(pbutton->held);
     231        PCUT_ASSERT_FALSE(pbutton->inside);
    177232
    178233        ui_pbutton_press(pbutton);
    179234        PCUT_ASSERT_TRUE(pbutton->held);
     235        PCUT_ASSERT_TRUE(pbutton->inside);
     236        PCUT_ASSERT_FALSE(resp.clicked);
    180237
    181238        ui_pbutton_release(pbutton);
    182239        PCUT_ASSERT_FALSE(pbutton->held);
    183 
    184         ui_pbutton_destroy(pbutton);
     240        PCUT_ASSERT_TRUE(pbutton->inside);
     241        PCUT_ASSERT_TRUE(resp.clicked);
     242
     243        ui_pbutton_destroy(pbutton);
     244        ui_resource_destroy(resource);
     245
     246        rc = gfx_context_delete(gc);
     247        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     248}
     249
     250/** Press, leave and release button */
     251PCUT_TEST(press_leave_release)
     252{
     253        errno_t rc;
     254        gfx_context_t *gc = NULL;
     255        test_gc_t tgc;
     256        ui_resource_t *resource = NULL;
     257        ui_pbutton_t *pbutton;
     258        test_cb_resp_t resp;
     259
     260        memset(&tgc, 0, sizeof(tgc));
     261        rc = gfx_context_new(&ops, &tgc, &gc);
     262        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     263
     264        rc = ui_resource_create(gc, &resource);
     265        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     266        PCUT_ASSERT_NOT_NULL(resource);
     267
     268        rc = ui_pbutton_create(resource, "Hello", &pbutton);
     269        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     270
     271        resp.clicked = false;
     272        ui_pbutton_set_cb(pbutton, &test_pbutton_cb, &resp);
     273
     274        PCUT_ASSERT_FALSE(pbutton->held);
     275        PCUT_ASSERT_FALSE(pbutton->inside);
     276
     277        ui_pbutton_press(pbutton);
     278        PCUT_ASSERT_TRUE(pbutton->held);
     279        PCUT_ASSERT_TRUE(pbutton->inside);
     280        PCUT_ASSERT_FALSE(resp.clicked);
     281
     282        ui_pbutton_leave(pbutton);
     283        PCUT_ASSERT_TRUE(pbutton->held);
     284        PCUT_ASSERT_FALSE(pbutton->inside);
     285        PCUT_ASSERT_FALSE(resp.clicked);
     286
     287        ui_pbutton_release(pbutton);
     288        PCUT_ASSERT_FALSE(pbutton->held);
     289        PCUT_ASSERT_FALSE(pbutton->inside);
     290        PCUT_ASSERT_FALSE(resp.clicked);
     291
     292        ui_pbutton_destroy(pbutton);
     293        ui_resource_destroy(resource);
     294
     295        rc = gfx_context_delete(gc);
     296        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     297}
     298
     299/** Press, leave, enter and release button */
     300PCUT_TEST(press_leave_enter_release)
     301{
     302        errno_t rc;
     303        gfx_context_t *gc = NULL;
     304        test_gc_t tgc;
     305        ui_resource_t *resource = NULL;
     306        ui_pbutton_t *pbutton;
     307        test_cb_resp_t resp;
     308
     309        memset(&tgc, 0, sizeof(tgc));
     310        rc = gfx_context_new(&ops, &tgc, &gc);
     311        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     312
     313        rc = ui_resource_create(gc, &resource);
     314        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     315        PCUT_ASSERT_NOT_NULL(resource);
     316
     317        rc = ui_pbutton_create(resource, "Hello", &pbutton);
     318        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     319
     320        resp.clicked = false;
     321        ui_pbutton_set_cb(pbutton, &test_pbutton_cb, &resp);
     322
     323        PCUT_ASSERT_FALSE(pbutton->held);
     324        PCUT_ASSERT_FALSE(pbutton->inside);
     325
     326        ui_pbutton_press(pbutton);
     327        PCUT_ASSERT_TRUE(pbutton->held);
     328        PCUT_ASSERT_TRUE(pbutton->inside);
     329        PCUT_ASSERT_FALSE(resp.clicked);
     330
     331        ui_pbutton_leave(pbutton);
     332        PCUT_ASSERT_TRUE(pbutton->held);
     333        PCUT_ASSERT_FALSE(pbutton->inside);
     334        PCUT_ASSERT_FALSE(resp.clicked);
     335
     336        ui_pbutton_enter(pbutton);
     337        PCUT_ASSERT_TRUE(pbutton->held);
     338        PCUT_ASSERT_TRUE(pbutton->inside);
     339        PCUT_ASSERT_FALSE(resp.clicked);
     340
     341        ui_pbutton_release(pbutton);
     342        PCUT_ASSERT_FALSE(pbutton->held);
     343        PCUT_ASSERT_TRUE(pbutton->inside);
     344        PCUT_ASSERT_TRUE(resp.clicked);
     345
     346        ui_pbutton_destroy(pbutton);
     347        ui_resource_destroy(resource);
     348
     349        rc = gfx_context_delete(gc);
     350        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    185351}
    186352
     
    188354PCUT_TEST(pos_event_press_release)
    189355{
     356        errno_t rc;
     357        gfx_context_t *gc = NULL;
     358        test_gc_t tgc;
     359        ui_resource_t *resource = NULL;
    190360        ui_pbutton_t *pbutton;
    191361        pos_event_t event;
    192362        gfx_rect_t rect;
    193         errno_t rc;
    194 
    195         rc = ui_pbutton_create(NULL, "Hello", &pbutton);
     363
     364        memset(&tgc, 0, sizeof(tgc));
     365        rc = gfx_context_new(&ops, &tgc, &gc);
     366        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     367
     368        rc = ui_resource_create(gc, &resource);
     369        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     370        PCUT_ASSERT_NOT_NULL(resource);
     371
     372        rc = ui_pbutton_create(resource, "Hello", &pbutton);
    196373        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    197374
     
    226403
    227404        ui_pbutton_destroy(pbutton);
     405        ui_resource_destroy(resource);
     406
     407        rc = gfx_context_delete(gc);
     408        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     409}
     410
     411/** ui_pos_event() correctly translates POS_UPDATE to enter/leave */
     412PCUT_TEST(pos_event_enter_leave)
     413{
     414        errno_t rc;
     415        gfx_context_t *gc = NULL;
     416        test_gc_t tgc;
     417        ui_resource_t *resource = NULL;
     418        ui_pbutton_t *pbutton;
     419        pos_event_t event;
     420        gfx_rect_t rect;
     421
     422        memset(&tgc, 0, sizeof(tgc));
     423        rc = gfx_context_new(&ops, &tgc, &gc);
     424        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     425
     426        rc = ui_resource_create(gc, &resource);
     427        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     428        PCUT_ASSERT_NOT_NULL(resource);
     429
     430        rc = ui_pbutton_create(resource, "Hello", &pbutton);
     431        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     432
     433        PCUT_ASSERT_FALSE(pbutton->inside);
     434
     435        rect.p0.x = 10;
     436        rect.p0.y = 20;
     437        rect.p1.x = 30;
     438        rect.p1.y = 40;
     439        ui_pbutton_set_rect(pbutton, &rect);
     440
     441        /* Moving outside does nothing */
     442        event.type = POS_UPDATE;
     443        event.hpos = 9;
     444        event.vpos = 20;
     445        ui_pbutton_pos_event(pbutton, &event);
     446        PCUT_ASSERT_FALSE(pbutton->inside);
     447
     448        /* Moving inside sets inside flag */
     449        event.type = POS_UPDATE;
     450        event.hpos = 10;
     451        event.vpos = 20;
     452        ui_pbutton_pos_event(pbutton, &event);
     453        PCUT_ASSERT_TRUE(pbutton->inside);
     454
     455        /* Moving outside clears inside flag */
     456        event.type = POS_UPDATE;
     457        event.hpos = 9;
     458        event.vpos = 20;
     459        ui_pbutton_pos_event(pbutton, &event);
     460        PCUT_ASSERT_FALSE(pbutton->inside);
     461
     462        ui_pbutton_destroy(pbutton);
     463        ui_resource_destroy(resource);
     464
     465        rc = gfx_context_delete(gc);
     466        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    228467}
    229468
     
    304543}
    305544
     545static void test_pbutton_clicked(ui_pbutton_t *pbutton, void *arg)
     546{
     547        test_cb_resp_t *resp = (test_cb_resp_t *) arg;
     548
     549        resp->clicked = true;
     550}
     551
    306552PCUT_EXPORT(pbutton);
Note: See TracChangeset for help on using the changeset viewer.