source: mainline/uspace/lib/ui/test/rbutton.c

Last change on this file was 1fa6292, checked in by Jiří Zárevúcky <zarevucky.jiri@…>, 5 months ago

Remove a ton of duplicated code in libui/libgfxfont tests

  • Property mode set to 100644
File size: 14.8 KB
RevLine 
[7020d1f]1/*
2 * Copyright (c) 2021 Jiri Svoboda
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29#include <gfx/context.h>
30#include <gfx/coord.h>
31#include <mem.h>
32#include <pcut/pcut.h>
33#include <stdbool.h>
34#include <ui/control.h>
35#include <ui/rbutton.h>
36#include <ui/resource.h>
37#include "../private/rbutton.h"
[1fa6292]38#include "../private/testgc.h"
[7020d1f]39
40PCUT_INIT;
41
42PCUT_TEST_SUITE(rbutton);
43
44static void test_rbutton_select(ui_rbutton_group_t *, void *, void *);
45
46static ui_rbutton_group_cb_t test_rbutton_group_cb = {
47 .selected = test_rbutton_select
48};
49
50static ui_rbutton_group_cb_t dummy_rbutton_group_cb = {
51};
52
53typedef struct {
54 bool selected;
55} test_cb_resp_t;
56
57/** Create and destroy radio button */
58PCUT_TEST(create_destroy)
59{
60 ui_rbutton_group_t *group = NULL;
61 ui_rbutton_t *rbutton = NULL;
62 errno_t rc;
63
64 rc = ui_rbutton_group_create(NULL, &group);
65 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
66
67 rc = ui_rbutton_create(group, "Hello", NULL, &rbutton);
68 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
69 PCUT_ASSERT_NOT_NULL(rbutton);
70
71 ui_rbutton_destroy(rbutton);
72 ui_rbutton_group_destroy(group);
73}
74
75/** ui_rbutton_destroy() can take NULL argument (no-op) */
76PCUT_TEST(destroy_null)
77{
78 ui_rbutton_destroy(NULL);
79}
80
81/** ui_rbutton_ctl() returns control that has a working virtual destructor */
82PCUT_TEST(ctl)
83{
84 ui_rbutton_group_t *group = NULL;
85 ui_rbutton_t *rbutton;
86 ui_control_t *control;
87 errno_t rc;
88
89 rc = ui_rbutton_group_create(NULL, &group);
90 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
91
92 rc = ui_rbutton_create(group, "Hello", NULL, &rbutton);
93 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
94
95 control = ui_rbutton_ctl(rbutton);
96 PCUT_ASSERT_NOT_NULL(control);
97
98 ui_control_destroy(control);
99 ui_rbutton_group_destroy(group);
100}
101
102/** Set radio button rectangle sets internal field */
103PCUT_TEST(set_rect)
104{
105 ui_rbutton_group_t *group = NULL;
106 ui_rbutton_t *rbutton;
107 gfx_rect_t rect;
108 errno_t rc;
109
110 rc = ui_rbutton_group_create(NULL, &group);
111 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
112
113 rc = ui_rbutton_create(group, "Hello", NULL, &rbutton);
114 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
115
116 rect.p0.x = 1;
117 rect.p0.y = 2;
118 rect.p1.x = 3;
119 rect.p1.y = 4;
120
121 ui_rbutton_set_rect(rbutton, &rect);
122 PCUT_ASSERT_INT_EQUALS(rect.p0.x, rbutton->rect.p0.x);
123 PCUT_ASSERT_INT_EQUALS(rect.p0.y, rbutton->rect.p0.y);
124 PCUT_ASSERT_INT_EQUALS(rect.p1.x, rbutton->rect.p1.x);
125 PCUT_ASSERT_INT_EQUALS(rect.p1.y, rbutton->rect.p1.y);
126
127 ui_rbutton_destroy(rbutton);
128 ui_rbutton_group_destroy(group);
129}
130
[297b1b3]131/** Paint radio button in graphics mode */
132PCUT_TEST(paint_gfx)
[7020d1f]133{
134 errno_t rc;
135 gfx_context_t *gc = NULL;
136 test_gc_t tgc;
137 ui_rbutton_group_t *group = NULL;
138 ui_resource_t *resource = NULL;
139 ui_rbutton_t *rbutton;
140
141 memset(&tgc, 0, sizeof(tgc));
142 rc = gfx_context_new(&ops, &tgc, &gc);
143 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
144
[9c7dc8e]145 rc = ui_resource_create(gc, false, &resource);
[7020d1f]146 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
147 PCUT_ASSERT_NOT_NULL(resource);
148
149 rc = ui_rbutton_group_create(resource, &group);
150 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
151
152 rc = ui_rbutton_create(group, "Hello", NULL, &rbutton);
153 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
154
[297b1b3]155 rc = ui_rbutton_paint_gfx(rbutton);
156 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
157
158 ui_rbutton_destroy(rbutton);
159 ui_rbutton_group_destroy(group);
160 ui_resource_destroy(resource);
161
162 rc = gfx_context_delete(gc);
163 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
164}
165
166/** Paint radio button in text mode */
167PCUT_TEST(paint_text)
168{
169 errno_t rc;
170 gfx_context_t *gc = NULL;
171 test_gc_t tgc;
172 ui_rbutton_group_t *group = NULL;
173 ui_resource_t *resource = NULL;
174 ui_rbutton_t *rbutton;
175
176 memset(&tgc, 0, sizeof(tgc));
177 rc = gfx_context_new(&ops, &tgc, &gc);
178 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
179
180 rc = ui_resource_create(gc, false, &resource);
181 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
182 PCUT_ASSERT_NOT_NULL(resource);
183
184 rc = ui_rbutton_group_create(resource, &group);
185 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
186
187 rc = ui_rbutton_create(group, "Hello", NULL, &rbutton);
188 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
189
190 rc = ui_rbutton_paint_text(rbutton);
[7020d1f]191 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
192
193 ui_rbutton_destroy(rbutton);
194 ui_rbutton_group_destroy(group);
195 ui_resource_destroy(resource);
196
197 rc = gfx_context_delete(gc);
198 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
199}
200
201/** Test ui_rbutton_selected() */
202PCUT_TEST(selected)
203{
204 errno_t rc;
205 ui_rbutton_group_t *group = NULL;
206 ui_rbutton_t *rbutton;
207 test_cb_resp_t resp;
208
209 rc = ui_rbutton_group_create(NULL, &group);
210 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
211
212 rc = ui_rbutton_create(group, "Hello", NULL, &rbutton);
213 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
214
215 /* Selected with no callbacks set */
216 ui_rbutton_selected(rbutton);
217
218 /* Selected with callback not implementing selected */
219 ui_rbutton_group_set_cb(group, &dummy_rbutton_group_cb, NULL);
220 ui_rbutton_selected(rbutton);
221
222 /* Selected with real callback set */
223 resp.selected = false;
224 ui_rbutton_group_set_cb(group, &test_rbutton_group_cb, &resp);
225 ui_rbutton_selected(rbutton);
226 PCUT_ASSERT_TRUE(resp.selected);
227
228 ui_rbutton_destroy(rbutton);
229 ui_rbutton_group_destroy(group);
230}
231
232/** Press and release radio button */
233PCUT_TEST(press_release)
234{
235 errno_t rc;
236 gfx_context_t *gc = NULL;
237 test_gc_t tgc;
238 ui_resource_t *resource = NULL;
239 ui_rbutton_group_t *group = NULL;
[f14a900]240 ui_rbutton_t *rbutton1;
241 ui_rbutton_t *rbutton2;
[7020d1f]242 test_cb_resp_t resp;
243
244 memset(&tgc, 0, sizeof(tgc));
245 rc = gfx_context_new(&ops, &tgc, &gc);
246 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
247
[9c7dc8e]248 rc = ui_resource_create(gc, false, &resource);
[7020d1f]249 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
250 PCUT_ASSERT_NOT_NULL(resource);
251
252 rc = ui_rbutton_group_create(resource, &group);
253 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
254 PCUT_ASSERT_NULL(group->selected);
255
[f14a900]256 rc = ui_rbutton_create(group, "One", NULL, &rbutton1);
[7020d1f]257 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
[f14a900]258 PCUT_ASSERT_EQUALS(group->selected, rbutton1);
259
260 rc = ui_rbutton_create(group, "Two", NULL, &rbutton2);
261 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
262 PCUT_ASSERT_EQUALS(group->selected, rbutton1);
[7020d1f]263
264 resp.selected = false;
265 ui_rbutton_group_set_cb(group, &test_rbutton_group_cb, &resp);
266
[f14a900]267 PCUT_ASSERT_FALSE(rbutton2->held);
268 PCUT_ASSERT_FALSE(rbutton2->inside);
[7020d1f]269
[f14a900]270 ui_rbutton_press(rbutton2);
271 PCUT_ASSERT_TRUE(rbutton2->held);
272 PCUT_ASSERT_TRUE(rbutton2->inside);
[7020d1f]273 PCUT_ASSERT_FALSE(resp.selected);
[f14a900]274 PCUT_ASSERT_EQUALS(group->selected, rbutton1);
[7020d1f]275
[f14a900]276 ui_rbutton_release(rbutton2);
277 PCUT_ASSERT_FALSE(rbutton2->held);
278 PCUT_ASSERT_TRUE(rbutton2->inside);
[7020d1f]279 PCUT_ASSERT_TRUE(resp.selected);
[f14a900]280 PCUT_ASSERT_EQUALS(group->selected, rbutton2);
[7020d1f]281
[f14a900]282 ui_rbutton_destroy(rbutton1);
283 ui_rbutton_destroy(rbutton2);
[7020d1f]284 ui_rbutton_group_destroy(group);
285 ui_resource_destroy(resource);
286
287 rc = gfx_context_delete(gc);
288 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
289}
290
291/** Press, leave and release radio button */
292PCUT_TEST(press_leave_release)
293{
294 errno_t rc;
295 gfx_context_t *gc = NULL;
296 test_gc_t tgc;
297 ui_resource_t *resource = NULL;
298 ui_rbutton_group_t *group = NULL;
[f14a900]299 ui_rbutton_t *rbutton1;
300 ui_rbutton_t *rbutton2;
[7020d1f]301 test_cb_resp_t resp;
302
303 memset(&tgc, 0, sizeof(tgc));
304 rc = gfx_context_new(&ops, &tgc, &gc);
305 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
306
[9c7dc8e]307 rc = ui_resource_create(gc, false, &resource);
[7020d1f]308 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
309 PCUT_ASSERT_NOT_NULL(resource);
310
311 rc = ui_rbutton_group_create(resource, &group);
312 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
[f14a900]313 PCUT_ASSERT_NULL(group->selected);
[7020d1f]314
[f14a900]315 rc = ui_rbutton_create(group, "One", NULL, &rbutton1);
[7020d1f]316 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
[f14a900]317 PCUT_ASSERT_EQUALS(group->selected, rbutton1);
318
319 rc = ui_rbutton_create(group, "Two", NULL, &rbutton2);
320 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
321 PCUT_ASSERT_EQUALS(group->selected, rbutton1);
[7020d1f]322
323 resp.selected = false;
324 ui_rbutton_group_set_cb(group, &test_rbutton_group_cb, &resp);
325
[f14a900]326 PCUT_ASSERT_FALSE(rbutton2->held);
327 PCUT_ASSERT_FALSE(rbutton2->inside);
[7020d1f]328
[f14a900]329 ui_rbutton_press(rbutton2);
330 PCUT_ASSERT_TRUE(rbutton2->held);
331 PCUT_ASSERT_TRUE(rbutton2->inside);
[7020d1f]332 PCUT_ASSERT_FALSE(resp.selected);
[f14a900]333 PCUT_ASSERT_EQUALS(group->selected, rbutton1);
[7020d1f]334
[f14a900]335 ui_rbutton_leave(rbutton2);
336 PCUT_ASSERT_TRUE(rbutton2->held);
337 PCUT_ASSERT_FALSE(rbutton2->inside);
[7020d1f]338 PCUT_ASSERT_FALSE(resp.selected);
[f14a900]339 PCUT_ASSERT_EQUALS(group->selected, rbutton1);
[7020d1f]340
[f14a900]341 ui_rbutton_release(rbutton2);
342 PCUT_ASSERT_FALSE(rbutton2->held);
343 PCUT_ASSERT_FALSE(rbutton2->inside);
[7020d1f]344 PCUT_ASSERT_FALSE(resp.selected);
[f14a900]345 PCUT_ASSERT_EQUALS(group->selected, rbutton1);
[7020d1f]346
[f14a900]347 ui_rbutton_destroy(rbutton1);
348 ui_rbutton_destroy(rbutton2);
[7020d1f]349 ui_rbutton_group_destroy(group);
350 ui_resource_destroy(resource);
351
352 rc = gfx_context_delete(gc);
353 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
354}
355
356/** Press, leave, enter and release radio button */
357PCUT_TEST(press_leave_enter_release)
358{
359 errno_t rc;
360 gfx_context_t *gc = NULL;
361 test_gc_t tgc;
362 ui_resource_t *resource = NULL;
363 ui_rbutton_group_t *group = NULL;
[f14a900]364 ui_rbutton_t *rbutton1;
365 ui_rbutton_t *rbutton2;
[7020d1f]366 test_cb_resp_t resp;
367
368 memset(&tgc, 0, sizeof(tgc));
369 rc = gfx_context_new(&ops, &tgc, &gc);
370 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
371
[9c7dc8e]372 rc = ui_resource_create(gc, false, &resource);
[7020d1f]373 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
374 PCUT_ASSERT_NOT_NULL(resource);
375
376 rc = ui_rbutton_group_create(resource, &group);
377 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
[f14a900]378 PCUT_ASSERT_NULL(group->selected);
379
380 rc = ui_rbutton_create(group, "One", NULL, &rbutton1);
381 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
382 PCUT_ASSERT_EQUALS(group->selected, rbutton1);
[7020d1f]383
[f14a900]384 rc = ui_rbutton_create(group, "Two", NULL, &rbutton2);
[7020d1f]385 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
[f14a900]386 PCUT_ASSERT_EQUALS(group->selected, rbutton1);
[7020d1f]387
388 resp.selected = false;
389 ui_rbutton_group_set_cb(group, &test_rbutton_group_cb, &resp);
390
[f14a900]391 PCUT_ASSERT_FALSE(rbutton2->held);
392 PCUT_ASSERT_FALSE(rbutton2->inside);
[7020d1f]393
[f14a900]394 ui_rbutton_press(rbutton2);
395 PCUT_ASSERT_TRUE(rbutton2->held);
396 PCUT_ASSERT_TRUE(rbutton2->inside);
[7020d1f]397 PCUT_ASSERT_FALSE(resp.selected);
[f14a900]398 PCUT_ASSERT_EQUALS(group->selected, rbutton1);
[7020d1f]399
[f14a900]400 ui_rbutton_leave(rbutton2);
401 PCUT_ASSERT_TRUE(rbutton2->held);
402 PCUT_ASSERT_FALSE(rbutton2->inside);
[7020d1f]403 PCUT_ASSERT_FALSE(resp.selected);
[f14a900]404 PCUT_ASSERT_EQUALS(group->selected, rbutton1);
[7020d1f]405
[f14a900]406 ui_rbutton_enter(rbutton2);
407 PCUT_ASSERT_TRUE(rbutton2->held);
408 PCUT_ASSERT_TRUE(rbutton2->inside);
[7020d1f]409 PCUT_ASSERT_FALSE(resp.selected);
[f14a900]410 PCUT_ASSERT_EQUALS(group->selected, rbutton1);
[7020d1f]411
[f14a900]412 ui_rbutton_release(rbutton2);
413 PCUT_ASSERT_FALSE(rbutton2->held);
414 PCUT_ASSERT_TRUE(rbutton2->inside);
[7020d1f]415 PCUT_ASSERT_TRUE(resp.selected);
[f14a900]416 PCUT_ASSERT_EQUALS(group->selected, rbutton2);
[7020d1f]417
[f14a900]418 ui_rbutton_destroy(rbutton1);
419 ui_rbutton_destroy(rbutton2);
[7020d1f]420 ui_rbutton_group_destroy(group);
421 ui_resource_destroy(resource);
422
423 rc = gfx_context_delete(gc);
424 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
425}
426
427/** ui_pos_event() correctly translates POS_PRESS/POS_RELEASE */
428PCUT_TEST(pos_event_press_release)
429{
430 errno_t rc;
431 gfx_context_t *gc = NULL;
432 test_gc_t tgc;
433 ui_resource_t *resource = NULL;
434 ui_rbutton_group_t *group = NULL;
435 ui_rbutton_t *rbutton;
436 ui_evclaim_t claim;
437 pos_event_t event;
438 gfx_rect_t rect;
439
440 memset(&tgc, 0, sizeof(tgc));
441 rc = gfx_context_new(&ops, &tgc, &gc);
442 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
443
[9c7dc8e]444 rc = ui_resource_create(gc, false, &resource);
[7020d1f]445 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
446 PCUT_ASSERT_NOT_NULL(resource);
447
448 rc = ui_rbutton_group_create(resource, &group);
449 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
450
451 rc = ui_rbutton_create(group, "Hello", NULL, &rbutton);
452 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
453
454 PCUT_ASSERT_FALSE(rbutton->held);
455
456 rect.p0.x = 10;
457 rect.p0.y = 20;
458 rect.p1.x = 30;
459 rect.p1.y = 40;
460 ui_rbutton_set_rect(rbutton, &rect);
461
462 /* Press outside is not claimed and does nothing */
463 event.type = POS_PRESS;
464 event.hpos = 9;
465 event.vpos = 20;
466 claim = ui_rbutton_pos_event(rbutton, &event);
467 PCUT_ASSERT_FALSE(rbutton->held);
468 PCUT_ASSERT_EQUALS(ui_unclaimed, claim);
469
470 /* Press inside is claimed and depresses radio button */
471 event.type = POS_PRESS;
472 event.hpos = 10;
473 event.vpos = 20;
474 claim = ui_rbutton_pos_event(rbutton, &event);
475 PCUT_ASSERT_TRUE(rbutton->held);
476 PCUT_ASSERT_EQUALS(ui_claimed, claim);
477
478 /* Release outside (or anywhere) is claimed and relases radio button */
479 event.type = POS_RELEASE;
480 event.hpos = 9;
481 event.vpos = 20;
482 claim = ui_rbutton_pos_event(rbutton, &event);
483 PCUT_ASSERT_FALSE(rbutton->held);
484 PCUT_ASSERT_EQUALS(ui_claimed, claim);
485
486 ui_rbutton_destroy(rbutton);
487 ui_rbutton_group_destroy(group);
488 ui_resource_destroy(resource);
489
490 rc = gfx_context_delete(gc);
491 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
492}
493
494/** ui_pos_event() correctly translates POS_UPDATE to enter/leave */
495PCUT_TEST(pos_event_enter_leave)
496{
497 errno_t rc;
498 gfx_context_t *gc = NULL;
499 test_gc_t tgc;
500 ui_resource_t *resource = NULL;
501 ui_rbutton_group_t *group = NULL;
502 ui_rbutton_t *rbutton;
503 pos_event_t event;
504 gfx_rect_t rect;
505
506 memset(&tgc, 0, sizeof(tgc));
507 rc = gfx_context_new(&ops, &tgc, &gc);
508 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
509
[9c7dc8e]510 rc = ui_resource_create(gc, false, &resource);
[7020d1f]511 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
512 PCUT_ASSERT_NOT_NULL(resource);
513
514 rc = ui_rbutton_group_create(resource, &group);
515 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
516
517 rc = ui_rbutton_create(group, "Hello", NULL, &rbutton);
518 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
519
520 PCUT_ASSERT_FALSE(rbutton->inside);
521
522 rect.p0.x = 10;
523 rect.p0.y = 20;
524 rect.p1.x = 30;
525 rect.p1.y = 40;
526 ui_rbutton_set_rect(rbutton, &rect);
527
528 /* Moving outside does nothing */
529 event.type = POS_UPDATE;
530 event.hpos = 9;
531 event.vpos = 20;
532 ui_rbutton_pos_event(rbutton, &event);
533 PCUT_ASSERT_FALSE(rbutton->inside);
534
535 /* Moving inside sets inside flag */
536 event.type = POS_UPDATE;
537 event.hpos = 10;
538 event.vpos = 20;
539 ui_rbutton_pos_event(rbutton, &event);
540 PCUT_ASSERT_TRUE(rbutton->inside);
541
542 /* Moving outside clears inside flag */
543 event.type = POS_UPDATE;
544 event.hpos = 9;
545 event.vpos = 20;
546 ui_rbutton_pos_event(rbutton, &event);
547 PCUT_ASSERT_FALSE(rbutton->inside);
548
549 ui_rbutton_destroy(rbutton);
550 ui_rbutton_group_destroy(group);
551 ui_resource_destroy(resource);
552
553 rc = gfx_context_delete(gc);
554 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
555}
556
557static void test_rbutton_select(ui_rbutton_group_t *group, void *arg,
558 void *barg)
559{
560 test_cb_resp_t *resp = (test_cb_resp_t *) arg;
561
562 resp->selected = true;
563}
564
565PCUT_EXPORT(rbutton);
Note: See TracBrowser for help on using the repository browser.