source: mainline/uspace/app/nav/test/panel.c

Last change on this file was a29af37, checked in by Jiri Svoboda <jiri@…>, 16 months ago

Fix navigator tests

  • Property mode set to 100644
File size: 8.9 KB
RevLine 
[6aa85c1]1/*
[a29af37]2 * Copyright (c) 2024 Jiri Svoboda
[6aa85c1]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 <errno.h>
[be1d74c1]30#include <io/kbd_event.h>
31#include <io/pos_event.h>
[6aa85c1]32#include <pcut/pcut.h>
[0e80e40]33#include <stdio.h>
[2fb49522]34#include <ui/ui.h>
[0e80e40]35#include <vfs/vfs.h>
[6aa85c1]36#include "../panel.h"
37
38PCUT_INIT;
39
40PCUT_TEST_SUITE(panel);
41
[39ab17c]42/** Test response */
43typedef struct {
44 bool activate_req;
45 panel_t *activate_req_panel;
46} test_resp_t;
47
48static void test_panel_activate_req(void *, panel_t *);
49
50static panel_cb_t test_cb = {
51 .activate_req = test_panel_activate_req
52};
53
[6aa85c1]54/** Create and destroy panel. */
55PCUT_TEST(create_destroy)
56{
[a29af37]57 ui_t *ui;
58 ui_window_t *window;
59 ui_wnd_params_t params;
[6aa85c1]60 panel_t *panel;
61 errno_t rc;
62
[a29af37]63 rc = ui_create_disp(NULL, &ui);
64 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
65
66 ui_wnd_params_init(&params);
67 params.caption = "Test";
68
69 rc = ui_window_create(ui, &params, &window);
70 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
71
72 rc = panel_create(window, true, &panel);
[6aa85c1]73 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
74
75 panel_destroy(panel);
[a29af37]76 ui_window_destroy(window);
77 ui_destroy(ui);
[6aa85c1]78}
79
[39ab17c]80/** panel_set_cb() sets callback */
81PCUT_TEST(set_cb)
82{
[a29af37]83 ui_t *ui;
84 ui_window_t *window;
85 ui_wnd_params_t params;
[39ab17c]86 panel_t *panel;
87 errno_t rc;
88 test_resp_t resp;
89
[a29af37]90 rc = ui_create_disp(NULL, &ui);
91 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
92
93 ui_wnd_params_init(&params);
94 params.caption = "Test";
95
96 rc = ui_window_create(ui, &params, &window);
97 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
98
99 rc = panel_create(window, true, &panel);
[39ab17c]100 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
101
102 panel_set_cb(panel, &test_cb, &resp);
103 PCUT_ASSERT_EQUALS(&test_cb, panel->cb);
104 PCUT_ASSERT_EQUALS(&resp, panel->cb_arg);
105
106 panel_destroy(panel);
[a29af37]107 ui_window_destroy(window);
108 ui_destroy(ui);
[39ab17c]109}
110
[b36ebb42]111/** Test panel_paint() */
112PCUT_TEST(paint)
113{
114 ui_t *ui;
115 ui_window_t *window;
116 ui_wnd_params_t params;
117 panel_t *panel;
118 errno_t rc;
119
120 rc = ui_create_disp(NULL, &ui);
121 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
122
123 ui_wnd_params_init(&params);
124 params.caption = "Test";
125
126 rc = ui_window_create(ui, &params, &window);
127 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
128
[692c7f40]129 rc = panel_create(window, true, &panel);
[b36ebb42]130 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
131
132 rc = panel_paint(panel);
133 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
134
135 panel_destroy(panel);
136 ui_window_destroy(window);
137 ui_destroy(ui);
138}
139
140/** panel_ctl() returns a valid UI control */
141PCUT_TEST(ctl)
142{
[a29af37]143 ui_t *ui;
144 ui_window_t *window;
145 ui_wnd_params_t params;
[b36ebb42]146 panel_t *panel;
147 ui_control_t *control;
148 errno_t rc;
149
[a29af37]150 rc = ui_create_disp(NULL, &ui);
151 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
152
153 ui_wnd_params_init(&params);
154 params.caption = "Test";
155
156 rc = ui_window_create(ui, &params, &window);
157 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
158
159 rc = panel_create(window, true, &panel);
[b36ebb42]160 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
161
162 control = panel_ctl(panel);
163 PCUT_ASSERT_NOT_NULL(control);
164
165 panel_destroy(panel);
[a29af37]166 ui_window_destroy(window);
167 ui_destroy(ui);
[b36ebb42]168}
169
[be1d74c1]170/** Test panel_kbd_event() */
171PCUT_TEST(kbd_event)
172{
[a29af37]173 ui_t *ui;
174 ui_window_t *window;
175 ui_wnd_params_t params;
[be1d74c1]176 panel_t *panel;
177 ui_evclaim_t claimed;
178 kbd_event_t event;
179 errno_t rc;
180
[692c7f40]181 /* Active panel should claim events */
182
[a29af37]183 rc = ui_create_disp(NULL, &ui);
184 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
185
186 ui_wnd_params_init(&params);
187 params.caption = "Test";
188
189 rc = ui_window_create(ui, &params, &window);
190 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
191
192 rc = panel_create(window, true, &panel);
[be1d74c1]193 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
194
[692c7f40]195 event.type = KEY_PRESS;
[4fcc2de]196 event.key = KC_ESCAPE;
[692c7f40]197 event.mods = 0;
198 event.c = '\0';
199
200 claimed = panel_kbd_event(panel, &event);
201 PCUT_ASSERT_EQUALS(ui_claimed, claimed);
202
203 panel_destroy(panel);
204
205 /* Inactive panel should not claim events */
206
[a29af37]207 rc = panel_create(window, false, &panel);
[692c7f40]208 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
[be1d74c1]209
210 event.type = KEY_PRESS;
[4fcc2de]211 event.key = KC_ESCAPE;
[be1d74c1]212 event.mods = 0;
213 event.c = '\0';
214
215 claimed = panel_kbd_event(panel, &event);
216 PCUT_ASSERT_EQUALS(ui_unclaimed, claimed);
217
218 panel_destroy(panel);
[a29af37]219 ui_window_destroy(window);
220 ui_destroy(ui);
[be1d74c1]221}
222
[b36ebb42]223/** Test panel_pos_event() */
224PCUT_TEST(pos_event)
225{
226}
227
228/** panel_set_rect() sets internal field */
229PCUT_TEST(set_rect)
230{
[a29af37]231 ui_t *ui;
232 ui_window_t *window;
233 ui_wnd_params_t params;
[b36ebb42]234 panel_t *panel;
235 gfx_rect_t rect;
236 errno_t rc;
237
[a29af37]238 rc = ui_create_disp(NULL, &ui);
239 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
240
241 ui_wnd_params_init(&params);
242 params.caption = "Test";
243
244 rc = ui_window_create(ui, &params, &window);
245 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
246
247 rc = panel_create(window, true, &panel);
[b36ebb42]248 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
249
250 rect.p0.x = 1;
251 rect.p0.y = 2;
252 rect.p1.x = 3;
253 rect.p1.y = 4;
254
255 panel_set_rect(panel, &rect);
256 PCUT_ASSERT_INT_EQUALS(rect.p0.x, panel->rect.p0.x);
257 PCUT_ASSERT_INT_EQUALS(rect.p0.y, panel->rect.p0.y);
258 PCUT_ASSERT_INT_EQUALS(rect.p1.x, panel->rect.p1.x);
259 PCUT_ASSERT_INT_EQUALS(rect.p1.y, panel->rect.p1.y);
260
261 panel_destroy(panel);
[a29af37]262 ui_window_destroy(window);
263 ui_destroy(ui);
[b36ebb42]264}
265
[692c7f40]266/** panel_is_active() returns panel activity state */
267PCUT_TEST(is_active)
268{
[a29af37]269 ui_t *ui;
270 ui_window_t *window;
271 ui_wnd_params_t params;
[692c7f40]272 panel_t *panel;
273 errno_t rc;
274
[a29af37]275 rc = ui_create_disp(NULL, &ui);
276 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
277
278 ui_wnd_params_init(&params);
279 params.caption = "Test";
280
281 rc = ui_window_create(ui, &params, &window);
282 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
283
284 rc = panel_create(window, true, &panel);
[692c7f40]285 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
286 PCUT_ASSERT_TRUE(panel_is_active(panel));
287 panel_destroy(panel);
288
[a29af37]289 rc = panel_create(window, false, &panel);
[692c7f40]290 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
291 PCUT_ASSERT_FALSE(panel_is_active(panel));
292 panel_destroy(panel);
[a29af37]293 ui_window_destroy(window);
294 ui_destroy(ui);
[692c7f40]295}
296
297/** panel_activate() activates panel */
298PCUT_TEST(activate)
299{
300 ui_t *ui;
301 ui_window_t *window;
302 ui_wnd_params_t params;
303 panel_t *panel;
304 errno_t rc;
305
306 rc = ui_create_disp(NULL, &ui);
307 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
308
309 ui_wnd_params_init(&params);
310 params.caption = "Test";
311
312 rc = ui_window_create(ui, &params, &window);
313 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
314
315 rc = panel_create(window, false, &panel);
316 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
317
318 PCUT_ASSERT_FALSE(panel_is_active(panel));
[4fcc2de]319 rc = panel_activate(panel);
320 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
[692c7f40]321 PCUT_ASSERT_TRUE(panel_is_active(panel));
322
323 panel_destroy(panel);
324 ui_window_destroy(window);
325 ui_destroy(ui);
326}
327
328/** panel_deactivate() deactivates panel */
329PCUT_TEST(deactivate)
330{
331 ui_t *ui;
332 ui_window_t *window;
333 ui_wnd_params_t params;
334 panel_t *panel;
335 errno_t rc;
336
337 rc = ui_create_disp(NULL, &ui);
338 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
339
340 ui_wnd_params_init(&params);
341 params.caption = "Test";
342
343 rc = ui_window_create(ui, &params, &window);
344 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
345
346 rc = panel_create(window, true, &panel);
347 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
348
349 PCUT_ASSERT_TRUE(panel_is_active(panel));
350 panel_deactivate(panel);
351 PCUT_ASSERT_FALSE(panel_is_active(panel));
352
353 panel_destroy(panel);
354 ui_window_destroy(window);
355 ui_destroy(ui);
356}
357
[39ab17c]358/** panel_activate_req() sends activation request */
359PCUT_TEST(activate_req)
360{
[a29af37]361 ui_t *ui;
362 ui_window_t *window;
363 ui_wnd_params_t params;
[39ab17c]364 panel_t *panel;
365 errno_t rc;
366 test_resp_t resp;
367
[a29af37]368 rc = ui_create_disp(NULL, &ui);
369 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
370
371 ui_wnd_params_init(&params);
372 params.caption = "Test";
373
374 rc = ui_window_create(ui, &params, &window);
375 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
376
377 rc = panel_create(window, true, &panel);
[39ab17c]378 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
379
380 panel_set_cb(panel, &test_cb, &resp);
381
382 resp.activate_req = false;
383 resp.activate_req_panel = NULL;
384
385 panel_activate_req(panel);
386 PCUT_ASSERT_TRUE(resp.activate_req);
387 PCUT_ASSERT_EQUALS(panel, resp.activate_req_panel);
388
389 panel_destroy(panel);
[a29af37]390 ui_window_destroy(window);
391 ui_destroy(ui);
[39ab17c]392}
393
394static void test_panel_activate_req(void *arg, panel_t *panel)
395{
396 test_resp_t *resp = (test_resp_t *)arg;
397
398 resp->activate_req = true;
399 resp->activate_req_panel = panel;
400}
401
[6aa85c1]402PCUT_EXPORT(panel);
Note: See TracBrowser for help on using the repository browser.