Ignore:
File:
1 edited

Legend:

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

    r62223ec r1eaead4  
    11/*
    2  * Copyright (c) 2020 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    2929#include <errno.h>
    3030#include <mem.h>
     31#include <io/kbd_event.h>
    3132#include <io/pos_event.h>
    3233#include <pcut/pcut.h>
    3334#include <ui/control.h>
     35#include <ui/testctl.h>
    3436#include <stdbool.h>
    3537#include <types/ui/event.h>
     38#include "../private/testctl.h"
    3639
    3740PCUT_INIT;
    3841
    3942PCUT_TEST_SUITE(control);
    40 
    41 static void test_ctl_destroy(void *);
    42 static errno_t test_ctl_paint(void *);
    43 static ui_evclaim_t test_ctl_pos_event(void *, pos_event_t *);
    44 static void test_ctl_unfocus(void *);
    45 
    46 static ui_control_ops_t test_ctl_ops = {
    47         .destroy = test_ctl_destroy,
    48         .paint = test_ctl_paint,
    49         .pos_event = test_ctl_pos_event,
    50         .unfocus = test_ctl_unfocus
    51 };
    52 
    53 /** Test response */
    54 typedef struct {
    55         /** Claim to return */
    56         ui_evclaim_t claim;
    57         /** Result code to return */
    58         errno_t rc;
    59 
    60         /** @c true iff destroy was called */
    61         bool destroy;
    62 
    63         /** @c true iff paint was called */
    64         bool paint;
    65 
    66         /** @c true iff pos_event was called */
    67         bool pos;
    68         /** Position event that was sent */
    69         pos_event_t pevent;
    70 
    71         /** @c true iff unfocus was called */
    72         bool unfocus;
    73 } test_resp_t;
    7443
    7544/** Allocate and deallocate control */
     
    7948        errno_t rc;
    8049
    81         rc = ui_control_new(&test_ctl_ops, NULL, &control);
     50        rc = ui_control_new(&ui_test_ctl_ops, NULL, &control);
    8251        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    8352        PCUT_ASSERT_NOT_NULL(control);
     
    9564PCUT_TEST(destroy)
    9665{
    97         ui_control_t *control = NULL;
    98         test_resp_t resp;
     66        ui_test_ctl_t *testctl = NULL;
     67        ui_tc_resp_t resp;
    9968        errno_t rc;
    10069
    101         rc = ui_control_new(&test_ctl_ops, &resp, &control);
     70        rc = ui_test_ctl_create(&resp, &testctl);
    10271        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    103         PCUT_ASSERT_NOT_NULL(control);
     72        PCUT_ASSERT_NOT_NULL(testctl);
    10473
    10574        resp.rc = EOK;
    10675        resp.destroy = false;
    10776
    108         ui_control_destroy(control);
     77        ui_control_destroy(ui_test_ctl_ctl(testctl));
    10978        PCUT_ASSERT_TRUE(resp.destroy);
    11079}
     
    11382PCUT_TEST(paint)
    11483{
    115         ui_control_t *control = NULL;
    116         test_resp_t resp;
     84        ui_test_ctl_t *testctl = NULL;
     85        ui_tc_resp_t resp;
    11786        errno_t rc;
    11887
    119         rc = ui_control_new(&test_ctl_ops, &resp, &control);
     88        rc = ui_test_ctl_create(&resp, &testctl);
    12089        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    121         PCUT_ASSERT_NOT_NULL(control);
     90        PCUT_ASSERT_NOT_NULL(testctl);
    12291
    12392        resp.rc = EOK;
    12493        resp.paint = false;
    12594
    126         rc = ui_control_paint(control);
     95        rc = ui_control_paint(ui_test_ctl_ctl(testctl));
    12796        PCUT_ASSERT_ERRNO_VAL(resp.rc, rc);
    12897        PCUT_ASSERT_TRUE(resp.paint);
     
    131100        resp.paint = false;
    132101
    133         rc = ui_control_paint(control);
     102        rc = ui_control_paint(ui_test_ctl_ctl(testctl));
    134103        PCUT_ASSERT_ERRNO_VAL(resp.rc, rc);
    135104        PCUT_ASSERT_TRUE(resp.paint);
    136105
    137         ui_control_delete(control);
     106        ui_test_ctl_destroy(testctl);
     107}
     108
     109/** Test sending keyboard event to control */
     110PCUT_TEST(kbd_event)
     111{
     112        ui_test_ctl_t *testctl = NULL;
     113        ui_tc_resp_t resp;
     114        kbd_event_t event;
     115        ui_evclaim_t claim;
     116        errno_t rc;
     117
     118        rc = ui_test_ctl_create(&resp, &testctl);
     119        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     120        PCUT_ASSERT_NOT_NULL(testctl);
     121
     122        resp.claim = ui_claimed;
     123        resp.kbd = false;
     124        event.type = KEY_PRESS;
     125        event.key = KC_2;
     126        event.mods = KM_LSHIFT;
     127        event.c = '@';
     128
     129        claim = ui_control_kbd_event(ui_test_ctl_ctl(testctl), &event);
     130        PCUT_ASSERT_EQUALS(resp.claim, claim);
     131        PCUT_ASSERT_TRUE(resp.kbd);
     132        PCUT_ASSERT_EQUALS(resp.kevent.type, event.type);
     133        PCUT_ASSERT_INT_EQUALS(resp.kevent.key, event.key);
     134        PCUT_ASSERT_INT_EQUALS(resp.kevent.mods, event.mods);
     135        PCUT_ASSERT_INT_EQUALS(resp.kevent.c, event.c);
     136
     137        ui_test_ctl_destroy(testctl);
    138138}
    139139
     
    141141PCUT_TEST(pos_event)
    142142{
    143         ui_control_t *control = NULL;
    144         test_resp_t resp;
     143        ui_test_ctl_t *testctl = NULL;
     144        ui_tc_resp_t resp;
    145145        pos_event_t event;
    146146        ui_evclaim_t claim;
    147147        errno_t rc;
    148148
    149         rc = ui_control_new(&test_ctl_ops, &resp, &control);
     149        rc = ui_test_ctl_create(&resp, &testctl);
    150150        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    151         PCUT_ASSERT_NOT_NULL(control);
     151        PCUT_ASSERT_NOT_NULL(testctl);
    152152
    153153        resp.claim = ui_claimed;
     
    159159        event.vpos = 4;
    160160
    161         claim = ui_control_pos_event(control, &event);
     161        claim = ui_control_pos_event(ui_test_ctl_ctl(testctl), &event);
    162162        PCUT_ASSERT_EQUALS(resp.claim, claim);
    163163        PCUT_ASSERT_TRUE(resp.pos);
     
    168168        PCUT_ASSERT_INT_EQUALS(resp.pevent.vpos, event.vpos);
    169169
    170         ui_control_delete(control);
     170        ui_test_ctl_destroy(testctl);
    171171}
    172172
     
    174174PCUT_TEST(unfocus)
    175175{
    176         ui_control_t *control = NULL;
    177         test_resp_t resp;
     176        ui_test_ctl_t *testctl = NULL;
     177        ui_tc_resp_t resp;
    178178        errno_t rc;
    179179
    180         rc = ui_control_new(&test_ctl_ops, &resp, &control);
     180        rc = ui_test_ctl_create(&resp, &testctl);
    181181        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    182         PCUT_ASSERT_NOT_NULL(control);
     182        PCUT_ASSERT_NOT_NULL(testctl);
    183183
    184184        resp.unfocus = false;
    185185
    186         ui_control_unfocus(control);
     186        ui_control_unfocus(ui_test_ctl_ctl(testctl), 42);
    187187        PCUT_ASSERT_TRUE(resp.unfocus);
     188        PCUT_ASSERT_INT_EQUALS(42, resp.unfocus_nfocus);
    188189
    189         ui_control_delete(control);
    190 }
    191 
    192 static void test_ctl_destroy(void *arg)
    193 {
    194         test_resp_t *resp = (test_resp_t *) arg;
    195 
    196         resp->destroy = true;
    197 }
    198 
    199 static errno_t test_ctl_paint(void *arg)
    200 {
    201         test_resp_t *resp = (test_resp_t *) arg;
    202 
    203         resp->paint = true;
    204         return resp->rc;
    205 }
    206 
    207 static ui_evclaim_t test_ctl_pos_event(void *arg, pos_event_t *event)
    208 {
    209         test_resp_t *resp = (test_resp_t *) arg;
    210 
    211         resp->pos = true;
    212         resp->pevent = *event;
    213 
    214         return resp->claim;
    215 }
    216 
    217 static void test_ctl_unfocus(void *arg)
    218 {
    219         test_resp_t *resp = (test_resp_t *) arg;
    220 
    221         resp->unfocus = true;
     190        ui_test_ctl_destroy(testctl);
    222191}
    223192
Note: See TracChangeset for help on using the changeset viewer.