source: mainline/uspace/lib/ui/test/menuentry.c@ b8b64a8

serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since b8b64a8 was b8b64a8, checked in by Jiri Svoboda <jiri@…>, 4 years ago

Add column with keyboard shortcuts to menu

  • Property mode set to 100644
File size: 15.4 KB
Line 
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/menu.h>
36#include <ui/menubar.h>
37#include <ui/menuentry.h>
38#include <ui/resource.h>
39#include <ui/ui.h>
40#include "../private/dummygc.h"
41#include "../private/menuentry.h"
42
43PCUT_INIT;
44
45PCUT_TEST_SUITE(menuentry);
46
47typedef struct {
48 bool activated;
49} test_resp_t;
50
51static void test_entry_cb(ui_menu_entry_t *, void *);
52
53/** Create and destroy menu bar */
54PCUT_TEST(create_destroy)
55{
56 ui_menu_bar_t *mbar = NULL;
57 errno_t rc;
58
59 rc = ui_menu_bar_create(NULL, &mbar);
60 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
61 PCUT_ASSERT_NOT_NULL(mbar);
62
63 ui_menu_bar_destroy(mbar);
64}
65
66/** ui_menu_bar_destroy() can take NULL argument (no-op) */
67PCUT_TEST(destroy_null)
68{
69 ui_menu_bar_destroy(NULL);
70}
71
72/** ui_menu_entry_set_cb() .. */
73PCUT_TEST(set_cb)
74{
75 dummy_gc_t *dgc;
76 gfx_context_t *gc;
77 ui_resource_t *resource = NULL;
78 ui_menu_bar_t *mbar = NULL;
79 ui_menu_t *menu = NULL;
80 ui_menu_entry_t *mentry = NULL;
81 test_resp_t resp;
82 errno_t rc;
83
84 rc = dummygc_create(&dgc);
85 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
86
87 gc = dummygc_get_ctx(dgc);
88
89 rc = ui_resource_create(gc, false, &resource);
90 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
91 PCUT_ASSERT_NOT_NULL(resource);
92
93 rc = ui_menu_bar_create(resource, &mbar);
94 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
95 PCUT_ASSERT_NOT_NULL(mbar);
96
97 rc = ui_menu_create(mbar, "Test", &menu);
98 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
99 PCUT_ASSERT_NOT_NULL(menu);
100
101 rc = ui_menu_entry_create(menu, "Foo", "F1", &mentry);
102 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
103 PCUT_ASSERT_NOT_NULL(mentry);
104
105 ui_menu_entry_set_cb(mentry, test_entry_cb, &resp);
106
107 resp.activated = false;
108 ui_menu_entry_cb(mentry);
109 PCUT_ASSERT_TRUE(resp.activated);
110
111 ui_menu_bar_destroy(mbar);
112 ui_resource_destroy(resource);
113 dummygc_destroy(dgc);
114}
115
116/** ui_menu_entry_first() / ui_menu_entry_next() iterate over entries */
117PCUT_TEST(first_next)
118{
119 dummy_gc_t *dgc;
120 gfx_context_t *gc;
121 ui_resource_t *resource = NULL;
122 ui_menu_bar_t *mbar = NULL;
123 ui_menu_t *menu = NULL;
124 ui_menu_entry_t *entry1 = NULL;
125 ui_menu_entry_t *entry2 = NULL;
126 ui_menu_entry_t *e;
127 errno_t rc;
128
129 rc = dummygc_create(&dgc);
130 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
131
132 gc = dummygc_get_ctx(dgc);
133
134 rc = ui_resource_create(gc, false, &resource);
135 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
136 PCUT_ASSERT_NOT_NULL(resource);
137
138 rc = ui_menu_bar_create(resource, &mbar);
139 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
140 PCUT_ASSERT_NOT_NULL(mbar);
141
142 rc = ui_menu_create(mbar, "Test", &menu);
143 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
144 PCUT_ASSERT_NOT_NULL(menu);
145
146 rc = ui_menu_entry_create(menu, "Foo", "F1", &entry1);
147 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
148 PCUT_ASSERT_NOT_NULL(entry1);
149
150 rc = ui_menu_entry_create(menu, "Bar", "F2", &entry2);
151 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
152 PCUT_ASSERT_NOT_NULL(entry2);
153
154 e = ui_menu_entry_first(menu);
155 PCUT_ASSERT_EQUALS(entry1, e);
156
157 e = ui_menu_entry_next(e);
158 PCUT_ASSERT_EQUALS(entry2, e);
159
160 e = ui_menu_entry_next(e);
161 PCUT_ASSERT_NULL(e);
162
163 ui_menu_bar_destroy(mbar);
164 ui_resource_destroy(resource);
165 dummygc_destroy(dgc);
166}
167
168/** ui_menu_entry_widths() / ui_menu_entry_height() */
169PCUT_TEST(widths_height)
170{
171 dummy_gc_t *dgc;
172 gfx_context_t *gc;
173 ui_resource_t *resource = NULL;
174 ui_menu_bar_t *mbar = NULL;
175 ui_menu_t *menu = NULL;
176 ui_menu_entry_t *mentry = NULL;
177 gfx_coord_t caption_w;
178 gfx_coord_t shortcut_w;
179 gfx_coord_t width;
180 gfx_coord_t height;
181 errno_t rc;
182
183 rc = dummygc_create(&dgc);
184 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
185
186 gc = dummygc_get_ctx(dgc);
187
188 rc = ui_resource_create(gc, false, &resource);
189 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
190 PCUT_ASSERT_NOT_NULL(resource);
191
192 rc = ui_menu_bar_create(resource, &mbar);
193 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
194 PCUT_ASSERT_NOT_NULL(mbar);
195
196 rc = ui_menu_create(mbar, "Test", &menu);
197 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
198 PCUT_ASSERT_NOT_NULL(menu);
199
200 rc = ui_menu_entry_create(menu, "X", "Y", &mentry);
201 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
202 PCUT_ASSERT_NOT_NULL(mentry);
203
204 ui_menu_entry_column_widths(mentry, &caption_w, &shortcut_w);
205 PCUT_ASSERT_INT_EQUALS(11, caption_w);
206 PCUT_ASSERT_INT_EQUALS(10, shortcut_w);
207
208 width = ui_menu_entry_calc_width(menu, caption_w, shortcut_w);
209 PCUT_ASSERT_INT_EQUALS(4 + 11 + 8 + 10 + 4, width);
210
211 height = ui_menu_entry_height(mentry);
212 PCUT_ASSERT_INT_EQUALS(13 + 8, height);
213
214 ui_menu_bar_destroy(mbar);
215 ui_resource_destroy(resource);
216 dummygc_destroy(dgc);
217}
218
219/** Paint menu entry */
220PCUT_TEST(paint)
221{
222 dummy_gc_t *dgc;
223 gfx_context_t *gc;
224 ui_resource_t *resource = NULL;
225 ui_menu_bar_t *mbar = NULL;
226 ui_menu_t *menu = NULL;
227 ui_menu_entry_t *mentry = NULL;
228 gfx_coord2_t pos;
229 errno_t rc;
230
231 rc = dummygc_create(&dgc);
232 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
233
234 gc = dummygc_get_ctx(dgc);
235
236 rc = ui_resource_create(gc, false, &resource);
237 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
238 PCUT_ASSERT_NOT_NULL(resource);
239
240 rc = ui_menu_bar_create(resource, &mbar);
241 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
242 PCUT_ASSERT_NOT_NULL(mbar);
243
244 rc = ui_menu_create(mbar, "Test", &menu);
245 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
246 PCUT_ASSERT_NOT_NULL(menu);
247
248 rc = ui_menu_entry_create(menu, "Foo", "F1", &mentry);
249 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
250 PCUT_ASSERT_NOT_NULL(mentry);
251
252 pos.x = 0;
253 pos.y = 0;
254 rc = ui_menu_entry_paint(mentry, &pos);
255 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
256
257 ui_menu_bar_destroy(mbar);
258 ui_resource_destroy(resource);
259 dummygc_destroy(dgc);
260}
261
262/** Press and release activates menu entry */
263PCUT_TEST(press_release)
264{
265 dummy_gc_t *dgc;
266 gfx_context_t *gc;
267 ui_resource_t *resource = NULL;
268 ui_menu_bar_t *mbar = NULL;
269 ui_menu_t *menu = NULL;
270 ui_menu_entry_t *mentry = NULL;
271 gfx_coord2_t pos;
272 test_resp_t resp;
273 errno_t rc;
274
275 rc = dummygc_create(&dgc);
276 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
277
278 gc = dummygc_get_ctx(dgc);
279
280 rc = ui_resource_create(gc, false, &resource);
281 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
282 PCUT_ASSERT_NOT_NULL(resource);
283
284 rc = ui_menu_bar_create(resource, &mbar);
285 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
286 PCUT_ASSERT_NOT_NULL(mbar);
287
288 rc = ui_menu_create(mbar, "Test", &menu);
289 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
290 PCUT_ASSERT_NOT_NULL(menu);
291
292 rc = ui_menu_entry_create(menu, "X", "Y", &mentry);
293 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
294 PCUT_ASSERT_NOT_NULL(mentry);
295
296 ui_menu_entry_set_cb(mentry, test_entry_cb, &resp);
297 resp.activated = false;
298
299 pos.x = 0;
300 pos.y = 0;
301 ui_menu_entry_press(mentry, &pos);
302 PCUT_ASSERT_TRUE(mentry->inside);
303 PCUT_ASSERT_TRUE(mentry->held);
304 PCUT_ASSERT_FALSE(resp.activated);
305
306 ui_menu_entry_release(mentry);
307 PCUT_ASSERT_FALSE(mentry->held);
308 PCUT_ASSERT_TRUE(resp.activated);
309
310 ui_menu_bar_destroy(mbar);
311 ui_resource_destroy(resource);
312 dummygc_destroy(dgc);
313}
314
315/** Press, leave and release does not activate entry */
316PCUT_TEST(press_leave_release)
317{
318 dummy_gc_t *dgc;
319 gfx_context_t *gc;
320 ui_resource_t *resource = NULL;
321 ui_menu_bar_t *mbar = NULL;
322 ui_menu_t *menu = NULL;
323 ui_menu_entry_t *mentry = NULL;
324 gfx_coord2_t pos;
325 test_resp_t resp;
326 errno_t rc;
327
328 rc = dummygc_create(&dgc);
329 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
330
331 gc = dummygc_get_ctx(dgc);
332
333 rc = ui_resource_create(gc, false, &resource);
334 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
335 PCUT_ASSERT_NOT_NULL(resource);
336
337 rc = ui_menu_bar_create(resource, &mbar);
338 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
339 PCUT_ASSERT_NOT_NULL(mbar);
340
341 rc = ui_menu_create(mbar, "Test", &menu);
342 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
343 PCUT_ASSERT_NOT_NULL(menu);
344
345 rc = ui_menu_entry_create(menu, "X", "Y", &mentry);
346 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
347 PCUT_ASSERT_NOT_NULL(mentry);
348
349 ui_menu_entry_set_cb(mentry, test_entry_cb, &resp);
350 resp.activated = false;
351
352 pos.x = 0;
353 pos.y = 0;
354 ui_menu_entry_press(mentry, &pos);
355 PCUT_ASSERT_TRUE(mentry->inside);
356 PCUT_ASSERT_TRUE(mentry->held);
357 PCUT_ASSERT_FALSE(resp.activated);
358
359 ui_menu_entry_leave(mentry, &pos);
360 PCUT_ASSERT_FALSE(mentry->inside);
361 PCUT_ASSERT_TRUE(mentry->held);
362 PCUT_ASSERT_FALSE(resp.activated);
363
364 ui_menu_entry_release(mentry);
365 PCUT_ASSERT_FALSE(mentry->held);
366 PCUT_ASSERT_FALSE(resp.activated);
367
368 ui_menu_bar_destroy(mbar);
369 ui_resource_destroy(resource);
370 dummygc_destroy(dgc);
371}
372
373/** Press, leave, enter and release activates menu entry */
374PCUT_TEST(press_leave_enter_release)
375{
376 dummy_gc_t *dgc;
377 gfx_context_t *gc;
378 ui_resource_t *resource = NULL;
379 ui_menu_bar_t *mbar = NULL;
380 ui_menu_t *menu = NULL;
381 ui_menu_entry_t *mentry = NULL;
382 gfx_coord2_t pos;
383 test_resp_t resp;
384 errno_t rc;
385
386 rc = dummygc_create(&dgc);
387 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
388
389 gc = dummygc_get_ctx(dgc);
390
391 rc = ui_resource_create(gc, false, &resource);
392 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
393 PCUT_ASSERT_NOT_NULL(resource);
394
395 rc = ui_menu_bar_create(resource, &mbar);
396 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
397 PCUT_ASSERT_NOT_NULL(mbar);
398
399 rc = ui_menu_create(mbar, "Test", &menu);
400 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
401 PCUT_ASSERT_NOT_NULL(menu);
402
403 rc = ui_menu_entry_create(menu, "X", "Y", &mentry);
404 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
405 PCUT_ASSERT_NOT_NULL(mentry);
406
407 ui_menu_entry_set_cb(mentry, test_entry_cb, &resp);
408 resp.activated = false;
409
410 pos.x = 0;
411 pos.y = 0;
412 ui_menu_entry_press(mentry, &pos);
413 PCUT_ASSERT_TRUE(mentry->inside);
414 PCUT_ASSERT_TRUE(mentry->held);
415 PCUT_ASSERT_FALSE(resp.activated);
416
417 ui_menu_entry_leave(mentry, &pos);
418 PCUT_ASSERT_FALSE(mentry->inside);
419 PCUT_ASSERT_TRUE(mentry->held);
420 PCUT_ASSERT_FALSE(resp.activated);
421
422 ui_menu_entry_enter(mentry, &pos);
423 PCUT_ASSERT_TRUE(mentry->inside);
424 PCUT_ASSERT_TRUE(mentry->held);
425 PCUT_ASSERT_FALSE(resp.activated);
426
427 ui_menu_entry_release(mentry);
428 PCUT_ASSERT_FALSE(mentry->held);
429 PCUT_ASSERT_TRUE(resp.activated);
430
431 ui_menu_bar_destroy(mbar);
432 ui_resource_destroy(resource);
433 dummygc_destroy(dgc);
434}
435
436/** Press event inside menu entry */
437PCUT_TEST(pos_press_inside)
438{
439 dummy_gc_t *dgc;
440 gfx_context_t *gc;
441 ui_resource_t *resource = NULL;
442 ui_menu_bar_t *mbar = NULL;
443 ui_menu_t *menu = NULL;
444 ui_menu_entry_t *mentry = NULL;
445 gfx_coord2_t pos;
446 pos_event_t event;
447 errno_t rc;
448
449 rc = dummygc_create(&dgc);
450 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
451
452 gc = dummygc_get_ctx(dgc);
453
454 rc = ui_resource_create(gc, false, &resource);
455 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
456 PCUT_ASSERT_NOT_NULL(resource);
457
458 rc = ui_menu_bar_create(resource, &mbar);
459 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
460 PCUT_ASSERT_NOT_NULL(mbar);
461
462 rc = ui_menu_create(mbar, "Test", &menu);
463 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
464 PCUT_ASSERT_NOT_NULL(menu);
465
466 rc = ui_menu_entry_create(menu, "X", "Y", &mentry);
467 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
468 PCUT_ASSERT_NOT_NULL(mentry);
469
470 pos.x = 0;
471 pos.y = 0;
472
473 event.type = POS_PRESS;
474 event.hpos = 4;
475 event.vpos = 4;
476
477 ui_menu_entry_pos_event(mentry, &pos, &event);
478 PCUT_ASSERT_TRUE(mentry->inside);
479 PCUT_ASSERT_TRUE(mentry->held);
480
481 ui_menu_bar_destroy(mbar);
482 ui_resource_destroy(resource);
483 dummygc_destroy(dgc);
484}
485
486/** Press event outside menu entry */
487PCUT_TEST(pos_press_outside)
488{
489 dummy_gc_t *dgc;
490 gfx_context_t *gc;
491 ui_resource_t *resource = NULL;
492 ui_menu_bar_t *mbar = NULL;
493 ui_menu_t *menu = NULL;
494 ui_menu_entry_t *mentry = NULL;
495 gfx_coord2_t pos;
496 pos_event_t event;
497 errno_t rc;
498
499 rc = dummygc_create(&dgc);
500 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
501
502 gc = dummygc_get_ctx(dgc);
503
504 rc = ui_resource_create(gc, false, &resource);
505 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
506 PCUT_ASSERT_NOT_NULL(resource);
507
508 rc = ui_menu_bar_create(resource, &mbar);
509 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
510 PCUT_ASSERT_NOT_NULL(mbar);
511
512 rc = ui_menu_create(mbar, "Test", &menu);
513 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
514 PCUT_ASSERT_NOT_NULL(menu);
515
516 rc = ui_menu_entry_create(menu, "X", "Y", &mentry);
517 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
518 PCUT_ASSERT_NOT_NULL(mentry);
519
520 pos.x = 0;
521 pos.y = 0;
522
523 event.type = POS_PRESS;
524 event.hpos = 40;
525 event.vpos = 20;
526
527 ui_menu_entry_pos_event(mentry, &pos, &event);
528 PCUT_ASSERT_FALSE(mentry->inside);
529 PCUT_ASSERT_FALSE(mentry->held);
530
531 ui_menu_bar_destroy(mbar);
532 ui_resource_destroy(resource);
533 dummygc_destroy(dgc);
534}
535
536/** Position event moving out of menu entry */
537PCUT_TEST(pos_move_out)
538{
539 dummy_gc_t *dgc;
540 gfx_context_t *gc;
541 ui_resource_t *resource = NULL;
542 ui_menu_bar_t *mbar = NULL;
543 ui_menu_t *menu = NULL;
544 ui_menu_entry_t *mentry = NULL;
545 gfx_coord2_t pos;
546 pos_event_t event;
547 errno_t rc;
548
549 rc = dummygc_create(&dgc);
550 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
551
552 gc = dummygc_get_ctx(dgc);
553
554 rc = ui_resource_create(gc, false, &resource);
555 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
556 PCUT_ASSERT_NOT_NULL(resource);
557
558 rc = ui_menu_bar_create(resource, &mbar);
559 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
560 PCUT_ASSERT_NOT_NULL(mbar);
561
562 rc = ui_menu_create(mbar, "Test", &menu);
563 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
564 PCUT_ASSERT_NOT_NULL(menu);
565
566 rc = ui_menu_entry_create(menu, "X", "Y", &mentry);
567 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
568 PCUT_ASSERT_NOT_NULL(mentry);
569
570 pos.x = 0;
571 pos.y = 0;
572 ui_menu_entry_press(mentry, &pos);
573 PCUT_ASSERT_TRUE(mentry->inside);
574 PCUT_ASSERT_TRUE(mentry->held);
575
576 event.type = POS_UPDATE;
577 event.hpos = 40;
578 event.vpos = 20;
579
580 ui_menu_entry_pos_event(mentry, &pos, &event);
581 PCUT_ASSERT_FALSE(mentry->inside);
582 PCUT_ASSERT_TRUE(mentry->held);
583
584 ui_menu_bar_destroy(mbar);
585 ui_resource_destroy(resource);
586 dummygc_destroy(dgc);
587}
588
589/** Position event moving inside menu entry */
590PCUT_TEST(pos_move_in)
591{
592 dummy_gc_t *dgc;
593 gfx_context_t *gc;
594 ui_resource_t *resource = NULL;
595 ui_menu_bar_t *mbar = NULL;
596 ui_menu_t *menu = NULL;
597 ui_menu_entry_t *mentry = NULL;
598 gfx_coord2_t pos;
599 pos_event_t event;
600 errno_t rc;
601
602 rc = dummygc_create(&dgc);
603 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
604
605 gc = dummygc_get_ctx(dgc);
606
607 rc = ui_resource_create(gc, false, &resource);
608 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
609 PCUT_ASSERT_NOT_NULL(resource);
610
611 rc = ui_menu_bar_create(resource, &mbar);
612 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
613 PCUT_ASSERT_NOT_NULL(mbar);
614
615 rc = ui_menu_create(mbar, "Test", &menu);
616 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
617 PCUT_ASSERT_NOT_NULL(menu);
618
619 rc = ui_menu_entry_create(menu, "X", "Y", &mentry);
620 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
621 PCUT_ASSERT_NOT_NULL(mentry);
622
623 event.type = POS_UPDATE;
624 event.hpos = 4;
625 event.vpos = 4;
626
627 pos.x = 0;
628 pos.y = 0;
629
630 ui_menu_entry_pos_event(mentry, &pos, &event);
631 PCUT_ASSERT_TRUE(mentry->inside);
632 PCUT_ASSERT_FALSE(mentry->held);
633
634 ui_menu_bar_destroy(mbar);
635 ui_resource_destroy(resource);
636 dummygc_destroy(dgc);
637}
638
639static void test_entry_cb(ui_menu_entry_t *mentry, void *arg)
640{
641 test_resp_t *resp = (test_resp_t *) arg;
642
643 resp->activated = true;
644}
645
646PCUT_EXPORT(menuentry);
Note: See TracBrowser for help on using the repository browser.