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

serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 5823aef3 was c68c18b9, checked in by jxsvoboda <5887334+jxsvoboda@…>, 4 years ago

Specify parent window when creating popup

This will be used in conjunction with ui_wnd_popup_params_t.place
(a rectangle relative to the parent window) to determine where on
the screen the popup window should appear.

  • Property mode set to 100644
File size: 18.5 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/ui.h>
39#include <ui/window.h>
40#include "../private/menuentry.h"
41
42PCUT_INIT;
43
44PCUT_TEST_SUITE(menuentry);
45
46typedef struct {
47 bool activated;
48} test_resp_t;
49
50static void test_entry_cb(ui_menu_entry_t *, void *);
51
52/** Create and destroy menu entry */
53PCUT_TEST(create_destroy)
54{
55 ui_t *ui = NULL;
56 ui_window_t *window = NULL;
57 ui_wnd_params_t params;
58 ui_menu_bar_t *mbar = NULL;
59 ui_menu_t *menu = NULL;
60 ui_menu_entry_t *mentry = NULL;
61 errno_t rc;
62
63 rc = ui_create_disp(NULL, &ui);
64 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
65
66 ui_wnd_params_init(&params);
67 params.caption = "Hello";
68
69 rc = ui_window_create(ui, &params, &window);
70 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
71 PCUT_ASSERT_NOT_NULL(window);
72
73 rc = ui_menu_bar_create(ui, window, &mbar);
74 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
75 PCUT_ASSERT_NOT_NULL(mbar);
76
77 rc = ui_menu_create(mbar, "Test", &menu);
78 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
79 PCUT_ASSERT_NOT_NULL(menu);
80
81 rc = ui_menu_entry_create(menu, "Foo", "F1", &mentry);
82 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
83 PCUT_ASSERT_NOT_NULL(mentry);
84
85 /* Just for sake of test. Menu entry is destroyed along with menu */
86 ui_menu_entry_destroy(mentry);
87
88 ui_menu_bar_destroy(mbar);
89 ui_window_destroy(window);
90 ui_destroy(ui);
91}
92
93/** Create and destroy separator menu entry */
94PCUT_TEST(create_sep_destroy)
95{
96 ui_t *ui = NULL;
97 ui_window_t *window = NULL;
98 ui_wnd_params_t params;
99 ui_menu_bar_t *mbar = NULL;
100 ui_menu_t *menu = NULL;
101 ui_menu_entry_t *mentry = NULL;
102 errno_t rc;
103
104 rc = ui_create_disp(NULL, &ui);
105 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
106
107 ui_wnd_params_init(&params);
108 params.caption = "Hello";
109
110 rc = ui_window_create(ui, &params, &window);
111 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
112 PCUT_ASSERT_NOT_NULL(window);
113
114 rc = ui_menu_bar_create(ui, window, &mbar);
115 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
116 PCUT_ASSERT_NOT_NULL(mbar);
117
118 rc = ui_menu_create(mbar, "Test", &menu);
119 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
120 PCUT_ASSERT_NOT_NULL(menu);
121
122 rc = ui_menu_entry_sep_create(menu, &mentry);
123 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
124 PCUT_ASSERT_NOT_NULL(mentry);
125
126 /* Just for sake of test. Menu entry is destroyed along with menu */
127 ui_menu_entry_destroy(mentry);
128
129 ui_menu_bar_destroy(mbar);
130 ui_window_destroy(window);
131 ui_destroy(ui);
132}
133
134/** ui_menu_bar_destroy() can take NULL argument (no-op) */
135PCUT_TEST(destroy_null)
136{
137 ui_menu_bar_destroy(NULL);
138}
139
140/** ui_menu_entry_set_cb() .. */
141PCUT_TEST(set_cb)
142{
143 ui_t *ui = NULL;
144 ui_window_t *window = NULL;
145 ui_wnd_params_t params;
146 ui_menu_bar_t *mbar = NULL;
147 ui_menu_t *menu = NULL;
148 ui_menu_entry_t *mentry = NULL;
149 test_resp_t resp;
150 errno_t rc;
151
152 rc = ui_create_disp(NULL, &ui);
153 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
154
155 ui_wnd_params_init(&params);
156 params.caption = "Hello";
157
158 rc = ui_window_create(ui, &params, &window);
159 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
160 PCUT_ASSERT_NOT_NULL(window);
161
162 rc = ui_menu_bar_create(ui, window, &mbar);
163 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
164 PCUT_ASSERT_NOT_NULL(mbar);
165
166 rc = ui_menu_create(mbar, "Test", &menu);
167 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
168 PCUT_ASSERT_NOT_NULL(menu);
169
170 rc = ui_menu_entry_create(menu, "Foo", "F1", &mentry);
171 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
172 PCUT_ASSERT_NOT_NULL(mentry);
173
174 ui_menu_entry_set_cb(mentry, test_entry_cb, &resp);
175
176 resp.activated = false;
177 ui_menu_entry_cb(mentry);
178 PCUT_ASSERT_TRUE(resp.activated);
179
180 ui_menu_bar_destroy(mbar);
181 ui_window_destroy(window);
182 ui_destroy(ui);
183}
184
185/** ui_menu_entry_first() / ui_menu_entry_next() iterate over entries */
186PCUT_TEST(first_next)
187{
188 ui_t *ui = NULL;
189 ui_window_t *window = NULL;
190 ui_wnd_params_t params;
191 ui_menu_bar_t *mbar = NULL;
192 ui_menu_t *menu = NULL;
193 ui_menu_entry_t *entry1 = NULL;
194 ui_menu_entry_t *entry2 = NULL;
195 ui_menu_entry_t *e;
196 errno_t rc;
197
198 rc = ui_create_disp(NULL, &ui);
199 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
200
201 ui_wnd_params_init(&params);
202 params.caption = "Hello";
203
204 rc = ui_window_create(ui, &params, &window);
205 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
206 PCUT_ASSERT_NOT_NULL(window);
207
208 rc = ui_menu_bar_create(ui, window, &mbar);
209 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
210 PCUT_ASSERT_NOT_NULL(mbar);
211
212 rc = ui_menu_create(mbar, "Test", &menu);
213 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
214 PCUT_ASSERT_NOT_NULL(menu);
215
216 rc = ui_menu_entry_create(menu, "Foo", "F1", &entry1);
217 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
218 PCUT_ASSERT_NOT_NULL(entry1);
219
220 rc = ui_menu_entry_create(menu, "Bar", "F2", &entry2);
221 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
222 PCUT_ASSERT_NOT_NULL(entry2);
223
224 e = ui_menu_entry_first(menu);
225 PCUT_ASSERT_EQUALS(entry1, e);
226
227 e = ui_menu_entry_next(e);
228 PCUT_ASSERT_EQUALS(entry2, e);
229
230 e = ui_menu_entry_next(e);
231 PCUT_ASSERT_NULL(e);
232
233 ui_menu_bar_destroy(mbar);
234 ui_window_destroy(window);
235 ui_destroy(ui);
236}
237
238/** ui_menu_entry_column_widths() / ui_menu_entry_height() */
239PCUT_TEST(widths_height)
240{
241 ui_t *ui = NULL;
242 ui_window_t *window = NULL;
243 ui_wnd_params_t params;
244 ui_menu_bar_t *mbar = NULL;
245 ui_menu_t *menu = NULL;
246 ui_menu_entry_t *mentry = NULL;
247 gfx_coord_t caption_w;
248 gfx_coord_t shortcut_w;
249 gfx_coord_t width;
250 gfx_coord_t height;
251 errno_t rc;
252
253 rc = ui_create_disp(NULL, &ui);
254 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
255
256 ui_wnd_params_init(&params);
257 params.caption = "Hello";
258
259 rc = ui_window_create(ui, &params, &window);
260 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
261 PCUT_ASSERT_NOT_NULL(window);
262
263 rc = ui_menu_bar_create(ui, window, &mbar);
264 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
265 PCUT_ASSERT_NOT_NULL(mbar);
266
267 rc = ui_menu_create(mbar, "Test", &menu);
268 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
269 PCUT_ASSERT_NOT_NULL(menu);
270
271 rc = ui_menu_entry_create(menu, "X", "Y", &mentry);
272 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
273 PCUT_ASSERT_NOT_NULL(mentry);
274
275 ui_menu_entry_column_widths(mentry, &caption_w, &shortcut_w);
276 PCUT_ASSERT_INT_EQUALS(11, caption_w);
277 PCUT_ASSERT_INT_EQUALS(10, shortcut_w);
278
279 width = ui_menu_entry_calc_width(menu, caption_w, shortcut_w);
280 PCUT_ASSERT_INT_EQUALS(4 + 11 + 8 + 10 + 4, width);
281
282 height = ui_menu_entry_height(mentry);
283 PCUT_ASSERT_INT_EQUALS(13 + 8, height);
284
285 ui_menu_bar_destroy(mbar);
286 ui_window_destroy(window);
287 ui_destroy(ui);
288}
289
290/** Paint menu entry */
291PCUT_TEST(paint)
292{
293 ui_t *ui = NULL;
294 ui_window_t *window = NULL;
295 ui_wnd_params_t params;
296 ui_menu_bar_t *mbar = NULL;
297 ui_menu_t *menu = NULL;
298 ui_menu_entry_t *mentry = NULL;
299 gfx_coord2_t pos;
300 gfx_rect_t prect;
301 errno_t rc;
302
303 rc = ui_create_disp(NULL, &ui);
304 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
305
306 ui_wnd_params_init(&params);
307 params.caption = "Hello";
308
309 rc = ui_window_create(ui, &params, &window);
310 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
311 PCUT_ASSERT_NOT_NULL(window);
312
313 rc = ui_menu_bar_create(ui, window, &mbar);
314 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
315 PCUT_ASSERT_NOT_NULL(mbar);
316
317 rc = ui_menu_create(mbar, "Test", &menu);
318 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
319 PCUT_ASSERT_NOT_NULL(menu);
320
321 rc = ui_menu_entry_create(menu, "Foo", "F1", &mentry);
322 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
323 PCUT_ASSERT_NOT_NULL(mentry);
324
325 prect.p0.x = 0;
326 prect.p0.y = 0;
327 prect.p1.x = 0;
328 prect.p1.y = 0;
329
330 rc = ui_menu_open(menu, &prect);
331 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
332
333 pos.x = 0;
334 pos.y = 0;
335 rc = ui_menu_entry_paint(mentry, &pos);
336 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
337
338 ui_menu_bar_destroy(mbar);
339 ui_window_destroy(window);
340 ui_destroy(ui);
341}
342
343/** Press and release activates menu entry */
344PCUT_TEST(press_release)
345{
346 ui_t *ui = NULL;
347 ui_window_t *window = NULL;
348 ui_wnd_params_t params;
349 ui_menu_bar_t *mbar = NULL;
350 ui_menu_t *menu = NULL;
351 ui_menu_entry_t *mentry = NULL;
352 gfx_coord2_t pos;
353 gfx_rect_t prect;
354 test_resp_t resp;
355 errno_t rc;
356
357 rc = ui_create_disp(NULL, &ui);
358 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
359
360 ui_wnd_params_init(&params);
361 params.caption = "Hello";
362
363 rc = ui_window_create(ui, &params, &window);
364 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
365 PCUT_ASSERT_NOT_NULL(window);
366
367 rc = ui_menu_bar_create(ui, window, &mbar);
368 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
369 PCUT_ASSERT_NOT_NULL(mbar);
370
371 rc = ui_menu_create(mbar, "Test", &menu);
372 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
373 PCUT_ASSERT_NOT_NULL(menu);
374
375 rc = ui_menu_entry_create(menu, "X", "Y", &mentry);
376 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
377 PCUT_ASSERT_NOT_NULL(mentry);
378
379 ui_menu_entry_set_cb(mentry, test_entry_cb, &resp);
380 resp.activated = false;
381
382 prect.p0.x = 0;
383 prect.p0.y = 0;
384 prect.p1.x = 0;
385 prect.p1.y = 0;
386
387 rc = ui_menu_open(menu, &prect);
388 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
389
390 pos.x = 0;
391 pos.y = 0;
392 ui_menu_entry_press(mentry, &pos);
393 PCUT_ASSERT_TRUE(mentry->inside);
394 PCUT_ASSERT_TRUE(mentry->held);
395 PCUT_ASSERT_FALSE(resp.activated);
396
397 ui_menu_entry_release(mentry);
398 PCUT_ASSERT_FALSE(mentry->held);
399 PCUT_ASSERT_TRUE(resp.activated);
400
401 ui_menu_bar_destroy(mbar);
402 ui_window_destroy(window);
403 ui_destroy(ui);
404}
405
406/** Press, leave and release does not activate entry */
407PCUT_TEST(press_leave_release)
408{
409 ui_t *ui = NULL;
410 ui_window_t *window = NULL;
411 ui_wnd_params_t params;
412 ui_menu_bar_t *mbar = NULL;
413 ui_menu_t *menu = NULL;
414 ui_menu_entry_t *mentry = NULL;
415 gfx_coord2_t pos;
416 gfx_rect_t prect;
417 test_resp_t resp;
418 errno_t rc;
419
420 rc = ui_create_disp(NULL, &ui);
421 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
422
423 ui_wnd_params_init(&params);
424 params.caption = "Hello";
425
426 rc = ui_window_create(ui, &params, &window);
427 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
428 PCUT_ASSERT_NOT_NULL(window);
429
430 rc = ui_menu_bar_create(ui, window, &mbar);
431 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
432 PCUT_ASSERT_NOT_NULL(mbar);
433
434 rc = ui_menu_create(mbar, "Test", &menu);
435 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
436 PCUT_ASSERT_NOT_NULL(menu);
437
438 rc = ui_menu_entry_create(menu, "X", "Y", &mentry);
439 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
440 PCUT_ASSERT_NOT_NULL(mentry);
441
442 ui_menu_entry_set_cb(mentry, test_entry_cb, &resp);
443 resp.activated = false;
444
445 prect.p0.x = 0;
446 prect.p0.y = 0;
447 prect.p1.x = 0;
448 prect.p1.y = 0;
449
450 rc = ui_menu_open(menu, &prect);
451 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
452
453 pos.x = 0;
454 pos.y = 0;
455 ui_menu_entry_press(mentry, &pos);
456 PCUT_ASSERT_TRUE(mentry->inside);
457 PCUT_ASSERT_TRUE(mentry->held);
458 PCUT_ASSERT_FALSE(resp.activated);
459
460 ui_menu_entry_leave(mentry, &pos);
461 PCUT_ASSERT_FALSE(mentry->inside);
462 PCUT_ASSERT_TRUE(mentry->held);
463 PCUT_ASSERT_FALSE(resp.activated);
464
465 ui_menu_entry_release(mentry);
466 PCUT_ASSERT_FALSE(mentry->held);
467 PCUT_ASSERT_FALSE(resp.activated);
468
469 ui_menu_bar_destroy(mbar);
470 ui_window_destroy(window);
471 ui_destroy(ui);
472}
473
474/** Press, leave, enter and release activates menu entry */
475PCUT_TEST(press_leave_enter_release)
476{
477 ui_t *ui = NULL;
478 ui_window_t *window = NULL;
479 ui_wnd_params_t params;
480 ui_menu_bar_t *mbar = NULL;
481 ui_menu_t *menu = NULL;
482 ui_menu_entry_t *mentry = NULL;
483 gfx_coord2_t pos;
484 gfx_rect_t prect;
485 test_resp_t resp;
486 errno_t rc;
487
488 rc = ui_create_disp(NULL, &ui);
489 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
490
491 ui_wnd_params_init(&params);
492 params.caption = "Hello";
493
494 rc = ui_window_create(ui, &params, &window);
495 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
496 PCUT_ASSERT_NOT_NULL(window);
497
498 rc = ui_menu_bar_create(ui, window, &mbar);
499 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
500 PCUT_ASSERT_NOT_NULL(mbar);
501
502 rc = ui_menu_create(mbar, "Test", &menu);
503 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
504 PCUT_ASSERT_NOT_NULL(menu);
505
506 rc = ui_menu_entry_create(menu, "X", "Y", &mentry);
507 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
508 PCUT_ASSERT_NOT_NULL(mentry);
509
510 ui_menu_entry_set_cb(mentry, test_entry_cb, &resp);
511 resp.activated = false;
512
513 prect.p0.x = 0;
514 prect.p0.y = 0;
515 prect.p1.x = 0;
516 prect.p1.y = 0;
517
518 rc = ui_menu_open(menu, &prect);
519 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
520
521 pos.x = 0;
522 pos.y = 0;
523 ui_menu_entry_press(mentry, &pos);
524 PCUT_ASSERT_TRUE(mentry->inside);
525 PCUT_ASSERT_TRUE(mentry->held);
526 PCUT_ASSERT_FALSE(resp.activated);
527
528 ui_menu_entry_leave(mentry, &pos);
529 PCUT_ASSERT_FALSE(mentry->inside);
530 PCUT_ASSERT_TRUE(mentry->held);
531 PCUT_ASSERT_FALSE(resp.activated);
532
533 ui_menu_entry_enter(mentry, &pos);
534 PCUT_ASSERT_TRUE(mentry->inside);
535 PCUT_ASSERT_TRUE(mentry->held);
536 PCUT_ASSERT_FALSE(resp.activated);
537
538 ui_menu_entry_release(mentry);
539 PCUT_ASSERT_FALSE(mentry->held);
540 PCUT_ASSERT_TRUE(resp.activated);
541
542 ui_menu_bar_destroy(mbar);
543 ui_window_destroy(window);
544 ui_destroy(ui);
545}
546
547/** Press event inside menu entry */
548PCUT_TEST(pos_press_inside)
549{
550 ui_t *ui = NULL;
551 ui_window_t *window = NULL;
552 ui_wnd_params_t params;
553 ui_menu_bar_t *mbar = NULL;
554 ui_menu_t *menu = NULL;
555 ui_menu_entry_t *mentry = NULL;
556 gfx_coord2_t pos;
557 gfx_rect_t prect;
558 pos_event_t event;
559 errno_t rc;
560
561 rc = ui_create_disp(NULL, &ui);
562 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
563
564 ui_wnd_params_init(&params);
565 params.caption = "Hello";
566
567 rc = ui_window_create(ui, &params, &window);
568 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
569 PCUT_ASSERT_NOT_NULL(window);
570
571 rc = ui_menu_bar_create(ui, window, &mbar);
572 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
573 PCUT_ASSERT_NOT_NULL(mbar);
574
575 rc = ui_menu_create(mbar, "Test", &menu);
576 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
577 PCUT_ASSERT_NOT_NULL(menu);
578
579 rc = ui_menu_entry_create(menu, "X", "Y", &mentry);
580 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
581 PCUT_ASSERT_NOT_NULL(mentry);
582
583 prect.p0.x = 0;
584 prect.p0.y = 0;
585 prect.p1.x = 0;
586 prect.p1.y = 0;
587
588 rc = ui_menu_open(menu, &prect);
589 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
590
591 pos.x = 0;
592 pos.y = 0;
593
594 event.type = POS_PRESS;
595 event.hpos = 4;
596 event.vpos = 4;
597
598 ui_menu_entry_pos_event(mentry, &pos, &event);
599 PCUT_ASSERT_TRUE(mentry->inside);
600 PCUT_ASSERT_TRUE(mentry->held);
601
602 ui_menu_bar_destroy(mbar);
603 ui_window_destroy(window);
604 ui_destroy(ui);
605}
606
607/** Press event outside menu entry */
608PCUT_TEST(pos_press_outside)
609{
610 ui_t *ui = NULL;
611 ui_window_t *window = NULL;
612 ui_wnd_params_t params;
613 ui_menu_bar_t *mbar = NULL;
614 ui_menu_t *menu = NULL;
615 ui_menu_entry_t *mentry = NULL;
616 gfx_coord2_t pos;
617 gfx_rect_t prect;
618 pos_event_t event;
619 errno_t rc;
620
621 rc = ui_create_disp(NULL, &ui);
622 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
623
624 ui_wnd_params_init(&params);
625 params.caption = "Hello";
626
627 rc = ui_window_create(ui, &params, &window);
628 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
629 PCUT_ASSERT_NOT_NULL(window);
630
631 rc = ui_menu_bar_create(ui, window, &mbar);
632 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
633 PCUT_ASSERT_NOT_NULL(mbar);
634
635 rc = ui_menu_create(mbar, "Test", &menu);
636 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
637 PCUT_ASSERT_NOT_NULL(menu);
638
639 rc = ui_menu_entry_create(menu, "X", "Y", &mentry);
640 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
641 PCUT_ASSERT_NOT_NULL(mentry);
642
643 prect.p0.x = 0;
644 prect.p0.y = 0;
645 prect.p1.x = 0;
646 prect.p1.y = 0;
647
648 rc = ui_menu_open(menu, &prect);
649 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
650
651 pos.x = 0;
652 pos.y = 0;
653
654 event.type = POS_PRESS;
655 event.hpos = 40;
656 event.vpos = 20;
657
658 ui_menu_entry_pos_event(mentry, &pos, &event);
659 PCUT_ASSERT_FALSE(mentry->inside);
660 PCUT_ASSERT_FALSE(mentry->held);
661
662 ui_menu_bar_destroy(mbar);
663 ui_window_destroy(window);
664 ui_destroy(ui);
665}
666
667/** Position event moving out of menu entry */
668PCUT_TEST(pos_move_out)
669{
670 ui_t *ui = NULL;
671 ui_window_t *window = NULL;
672 ui_wnd_params_t params;
673 ui_menu_bar_t *mbar = NULL;
674 ui_menu_t *menu = NULL;
675 ui_menu_entry_t *mentry = NULL;
676 gfx_coord2_t pos;
677 gfx_rect_t prect;
678 pos_event_t event;
679 errno_t rc;
680
681 rc = ui_create_disp(NULL, &ui);
682 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
683
684 ui_wnd_params_init(&params);
685 params.caption = "Hello";
686
687 rc = ui_window_create(ui, &params, &window);
688 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
689 PCUT_ASSERT_NOT_NULL(window);
690
691 rc = ui_menu_bar_create(ui, window, &mbar);
692 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
693 PCUT_ASSERT_NOT_NULL(mbar);
694
695 rc = ui_menu_create(mbar, "Test", &menu);
696 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
697 PCUT_ASSERT_NOT_NULL(menu);
698
699 rc = ui_menu_entry_create(menu, "X", "Y", &mentry);
700 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
701 PCUT_ASSERT_NOT_NULL(mentry);
702
703 prect.p0.x = 0;
704 prect.p0.y = 0;
705 prect.p1.x = 0;
706 prect.p1.y = 0;
707
708 rc = ui_menu_open(menu, &prect);
709 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
710
711 pos.x = 0;
712 pos.y = 0;
713 ui_menu_entry_press(mentry, &pos);
714 PCUT_ASSERT_TRUE(mentry->inside);
715 PCUT_ASSERT_TRUE(mentry->held);
716
717 event.type = POS_UPDATE;
718 event.hpos = 40;
719 event.vpos = 20;
720
721 ui_menu_entry_pos_event(mentry, &pos, &event);
722 PCUT_ASSERT_FALSE(mentry->inside);
723 PCUT_ASSERT_TRUE(mentry->held);
724
725 ui_menu_bar_destroy(mbar);
726 ui_window_destroy(window);
727 ui_destroy(ui);
728}
729
730/** Position event moving inside menu entry */
731PCUT_TEST(pos_move_in)
732{
733 ui_t *ui = NULL;
734 ui_window_t *window = NULL;
735 ui_wnd_params_t params;
736 ui_menu_bar_t *mbar = NULL;
737 ui_menu_t *menu = NULL;
738 ui_menu_entry_t *mentry = NULL;
739 gfx_coord2_t pos;
740 gfx_rect_t prect;
741 pos_event_t event;
742 errno_t rc;
743
744 rc = ui_create_disp(NULL, &ui);
745 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
746
747 ui_wnd_params_init(&params);
748 params.caption = "Hello";
749
750 rc = ui_window_create(ui, &params, &window);
751 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
752 PCUT_ASSERT_NOT_NULL(window);
753
754 rc = ui_menu_bar_create(ui, window, &mbar);
755 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
756 PCUT_ASSERT_NOT_NULL(mbar);
757
758 rc = ui_menu_create(mbar, "Test", &menu);
759 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
760 PCUT_ASSERT_NOT_NULL(menu);
761
762 rc = ui_menu_entry_create(menu, "X", "Y", &mentry);
763 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
764 PCUT_ASSERT_NOT_NULL(mentry);
765
766 prect.p0.x = 0;
767 prect.p0.y = 0;
768 prect.p1.x = 0;
769 prect.p1.y = 0;
770
771 rc = ui_menu_open(menu, &prect);
772 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
773
774 event.type = POS_UPDATE;
775 event.hpos = 4;
776 event.vpos = 4;
777
778 pos.x = 0;
779 pos.y = 0;
780
781 ui_menu_entry_pos_event(mentry, &pos, &event);
782 PCUT_ASSERT_TRUE(mentry->inside);
783 PCUT_ASSERT_FALSE(mentry->held);
784
785 ui_menu_bar_destroy(mbar);
786 ui_window_destroy(window);
787 ui_destroy(ui);
788}
789
790static void test_entry_cb(ui_menu_entry_t *mentry, void *arg)
791{
792 test_resp_t *resp = (test_resp_t *) arg;
793
794 resp->activated = true;
795}
796
797PCUT_EXPORT(menuentry);
Note: See TracBrowser for help on using the repository browser.