Ignore:
File:
1 edited

Legend:

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

    rc6f00b40 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 
    45 static ui_control_ops_t test_ctl_ops = {
    46         .destroy = test_ctl_destroy,
    47         .paint = test_ctl_paint,
    48         .pos_event = test_ctl_pos_event
    49 };
    50 
    51 /** Test response */
    52 typedef struct {
    53         /** Claim to return */
    54         ui_evclaim_t claim;
    55         /** Result code to return */
    56         errno_t rc;
    57 
    58         /** @c true iff destroy was called */
    59         bool destroy;
    60 
    61         /** @c true iff paint was called */
    62         bool paint;
    63 
    64         /** @c true iff pos_event was called */
    65         bool pos;
    66         /** Position event that was sent */
    67         pos_event_t pevent;
    68 } test_resp_t;
    6943
    7044/** Allocate and deallocate control */
     
    7448        errno_t rc;
    7549
    76         rc = ui_control_new(&test_ctl_ops, NULL, &control);
     50        rc = ui_control_new(&ui_test_ctl_ops, NULL, &control);
    7751        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    7852        PCUT_ASSERT_NOT_NULL(control);
     
    9064PCUT_TEST(destroy)
    9165{
    92         ui_control_t *control = NULL;
    93         test_resp_t resp;
     66        ui_test_ctl_t *testctl = NULL;
     67        ui_tc_resp_t resp;
    9468        errno_t rc;
    9569
    96         rc = ui_control_new(&test_ctl_ops, &resp, &control);
     70        rc = ui_test_ctl_create(&resp, &testctl);
    9771        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    98         PCUT_ASSERT_NOT_NULL(control);
     72        PCUT_ASSERT_NOT_NULL(testctl);
    9973
    10074        resp.rc = EOK;
    10175        resp.destroy = false;
    10276
    103         ui_control_destroy(control);
     77        ui_control_destroy(ui_test_ctl_ctl(testctl));
    10478        PCUT_ASSERT_TRUE(resp.destroy);
    10579}
     
    10882PCUT_TEST(paint)
    10983{
    110         ui_control_t *control = NULL;
    111         test_resp_t resp;
     84        ui_test_ctl_t *testctl = NULL;
     85        ui_tc_resp_t resp;
    11286        errno_t rc;
    11387
    114         rc = ui_control_new(&test_ctl_ops, &resp, &control);
     88        rc = ui_test_ctl_create(&resp, &testctl);
    11589        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    116         PCUT_ASSERT_NOT_NULL(control);
     90        PCUT_ASSERT_NOT_NULL(testctl);
    11791
    11892        resp.rc = EOK;
    11993        resp.paint = false;
    12094
    121         rc = ui_control_paint(control);
     95        rc = ui_control_paint(ui_test_ctl_ctl(testctl));
    12296        PCUT_ASSERT_ERRNO_VAL(resp.rc, rc);
    12397        PCUT_ASSERT_TRUE(resp.paint);
     
    126100        resp.paint = false;
    127101
    128         rc = ui_control_paint(control);
     102        rc = ui_control_paint(ui_test_ctl_ctl(testctl));
    129103        PCUT_ASSERT_ERRNO_VAL(resp.rc, rc);
    130104        PCUT_ASSERT_TRUE(resp.paint);
    131105
    132         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);
    133138}
    134139
     
    136141PCUT_TEST(pos_event)
    137142{
    138         ui_control_t *control = NULL;
    139         test_resp_t resp;
     143        ui_test_ctl_t *testctl = NULL;
     144        ui_tc_resp_t resp;
    140145        pos_event_t event;
    141146        ui_evclaim_t claim;
    142147        errno_t rc;
    143148
    144         rc = ui_control_new(&test_ctl_ops, &resp, &control);
     149        rc = ui_test_ctl_create(&resp, &testctl);
    145150        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    146         PCUT_ASSERT_NOT_NULL(control);
     151        PCUT_ASSERT_NOT_NULL(testctl);
    147152
    148153        resp.claim = ui_claimed;
     
    154159        event.vpos = 4;
    155160
    156         claim = ui_control_pos_event(control, &event);
     161        claim = ui_control_pos_event(ui_test_ctl_ctl(testctl), &event);
    157162        PCUT_ASSERT_EQUALS(resp.claim, claim);
    158163        PCUT_ASSERT_TRUE(resp.pos);
     
    163168        PCUT_ASSERT_INT_EQUALS(resp.pevent.vpos, event.vpos);
    164169
    165         ui_control_delete(control);
     170        ui_test_ctl_destroy(testctl);
    166171}
    167172
    168 static void test_ctl_destroy(void *arg)
     173/** Test sending unfocus to control */
     174PCUT_TEST(unfocus)
    169175{
    170         test_resp_t *resp = (test_resp_t *) arg;
     176        ui_test_ctl_t *testctl = NULL;
     177        ui_tc_resp_t resp;
     178        errno_t rc;
    171179
    172         resp->destroy = true;
    173 }
     180        rc = ui_test_ctl_create(&resp, &testctl);
     181        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     182        PCUT_ASSERT_NOT_NULL(testctl);
    174183
    175 static errno_t test_ctl_paint(void *arg)
    176 {
    177         test_resp_t *resp = (test_resp_t *) arg;
     184        resp.unfocus = false;
    178185
    179         resp->paint = true;
    180         return resp->rc;
    181 }
     186        ui_control_unfocus(ui_test_ctl_ctl(testctl), 42);
     187        PCUT_ASSERT_TRUE(resp.unfocus);
     188        PCUT_ASSERT_INT_EQUALS(42, resp.unfocus_nfocus);
    182189
    183 static ui_evclaim_t test_ctl_pos_event(void *arg, pos_event_t *event)
    184 {
    185         test_resp_t *resp = (test_resp_t *) arg;
    186 
    187         resp->pos = true;
    188         resp->pevent = *event;
    189 
    190         return resp->claim;
     190        ui_test_ctl_destroy(testctl);
    191191}
    192192
Note: See TracChangeset for help on using the changeset viewer.