source: mainline/uspace/app/taskbar/test/wndlist.c@ ca48672

Last change on this file since ca48672 was ca48672, checked in by Jiri Svoboda <jiri@…>, 8 days ago

loc_service_register() needs to take a port ID argument.

  • Property mode set to 100644
File size: 15.0 KB
RevLine 
[e0e612b]1/*
[ca48672]2 * Copyright (c) 2025 Jiri Svoboda
[e0e612b]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>
[fc00f0d]30#include <loc.h>
[e0e612b]31#include <pcut/pcut.h>
[fc00f0d]32#include <str.h>
[e0e612b]33#include <ui/fixed.h>
34#include <ui/ui.h>
35#include <ui/window.h>
[fc00f0d]36#include <wndmgt_srv.h>
[e0e612b]37#include "../wndlist.h"
38
39PCUT_INIT;
40
41PCUT_TEST_SUITE(taskbar);
42
[fc00f0d]43static void test_wndmgt_conn(ipc_call_t *, void *);
44
45static errno_t test_get_window_list(void *, wndmgt_window_list_t **);
46static errno_t test_get_window_info(void *, sysarg_t, wndmgt_window_info_t **);
47
48static wndmgt_ops_t test_wndmgt_srv_ops = {
49 .get_window_list = test_get_window_list,
50 .get_window_info = test_get_window_info
51};
52
53static const char *test_wndmgt_server = "test-wndlist-wm";
54static const char *test_wndmgt_svc = "test/wndlist-wm";
55
[e0e612b]56/* Test creating and destroying window list */
57PCUT_TEST(create_destroy)
58{
59 errno_t rc;
60 ui_t *ui = NULL;
61 ui_wnd_params_t params;
62 ui_window_t *window = NULL;
63 ui_fixed_t *fixed = NULL;
64 wndlist_t *wndlist;
65
66 rc = ui_create_disp(NULL, &ui);
67 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
68
69 ui_wnd_params_init(&params);
70 params.caption = "Hello";
71
72 rc = ui_window_create(ui, &params, &window);
73 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
74 PCUT_ASSERT_NOT_NULL(window);
75
76 rc = ui_fixed_create(&fixed);
77 ui_window_add(window, ui_fixed_ctl(fixed));
78
[1b92d4b]79 rc = wndlist_create(window, fixed, &wndlist);
[e0e612b]80 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
81
82 wndlist_destroy(wndlist);
83
84 ui_window_destroy(window);
85 ui_destroy(ui);
86}
87
[2f106b0]88/* Test setting window list rectangle */
89PCUT_TEST(set_rect)
90{
91 errno_t rc;
92 ui_t *ui = NULL;
93 ui_wnd_params_t params;
94 ui_window_t *window = NULL;
95 ui_fixed_t *fixed = NULL;
96 gfx_rect_t rect;
97 wndlist_t *wndlist;
98
99 rc = ui_create_disp(NULL, &ui);
100 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
101
102 ui_wnd_params_init(&params);
103 params.caption = "Hello";
104
105 rc = ui_window_create(ui, &params, &window);
106 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
107 PCUT_ASSERT_NOT_NULL(window);
108
109 rc = ui_fixed_create(&fixed);
110 ui_window_add(window, ui_fixed_ctl(fixed));
111
112 rc = wndlist_create(window, fixed, &wndlist);
113 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
114
115 rect.p0.x = 1;
116 rect.p0.y = 2;
117 rect.p1.x = 3;
118 rect.p1.y = 4;
119 wndlist_set_rect(wndlist, &rect);
120 PCUT_ASSERT_INT_EQUALS(1, wndlist->rect.p0.x);
121 PCUT_ASSERT_INT_EQUALS(2, wndlist->rect.p0.y);
122 PCUT_ASSERT_INT_EQUALS(3, wndlist->rect.p1.x);
123 PCUT_ASSERT_INT_EQUALS(4, wndlist->rect.p1.y);
124
125 wndlist_destroy(wndlist);
126
127 ui_window_destroy(window);
128 ui_destroy(ui);
129}
130
[fc00f0d]131/** Test opening WM service */
132PCUT_TEST(open_wm)
133{
134 errno_t rc;
135 service_id_t sid;
136 ui_t *ui = NULL;
137 ui_wnd_params_t params;
138 ui_window_t *window = NULL;
139 ui_fixed_t *fixed = NULL;
140 wndlist_t *wndlist;
[4c6fd56]141 loc_srv_t *srv;
[fc00f0d]142
143 /* Set up a test WM service */
144
145 async_set_fallback_port_handler(test_wndmgt_conn, NULL);
146
147 // FIXME This causes this test to be non-reentrant!
[4c6fd56]148 rc = loc_server_register(test_wndmgt_server, &srv);
[fc00f0d]149 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
150
[ca48672]151 rc = loc_service_register(srv, test_wndmgt_svc, fallback_port_id, &sid);
[fc00f0d]152 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
153
154 /* Create window list and connect it to our test service */
155
156 rc = ui_create_disp(NULL, &ui);
157 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
158
159 ui_wnd_params_init(&params);
160 params.caption = "Hello";
161
162 rc = ui_window_create(ui, &params, &window);
163 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
164 PCUT_ASSERT_NOT_NULL(window);
165
166 rc = ui_fixed_create(&fixed);
167 ui_window_add(window, ui_fixed_ctl(fixed));
168
169 rc = wndlist_create(window, fixed, &wndlist);
170 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
171
172 rc = wndlist_open_wm(wndlist, test_wndmgt_svc);
173 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
174
175 wndlist_destroy(wndlist);
176
177 ui_window_destroy(window);
178 ui_destroy(ui);
179
[4c6fd56]180 rc = loc_service_unregister(srv, sid);
[fc00f0d]181 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
[4c6fd56]182 loc_server_unregister(srv);
[fc00f0d]183}
184
185/** Test appending new entry */
186PCUT_TEST(append)
187{
188 errno_t rc;
189 ui_t *ui = NULL;
190 ui_wnd_params_t params;
191 ui_window_t *window = NULL;
192 ui_fixed_t *fixed = NULL;
193 wndlist_t *wndlist;
194 wndlist_entry_t *entry;
195
196 rc = ui_create_disp(NULL, &ui);
197 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
198
199 ui_wnd_params_init(&params);
200 params.caption = "Hello";
201
202 rc = ui_window_create(ui, &params, &window);
203 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
204 PCUT_ASSERT_NOT_NULL(window);
205
206 rc = ui_fixed_create(&fixed);
207 ui_window_add(window, ui_fixed_ctl(fixed));
208
209 rc = wndlist_create(window, fixed, &wndlist);
210 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
211
[3c54869]212 rc = wndlist_append(wndlist, 123, "Foo", true, true);
[fc00f0d]213 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
214
215 entry = wndlist_first(wndlist);
216 PCUT_ASSERT_INT_EQUALS(123, entry->wnd_id);
217 PCUT_ASSERT_NOT_NULL(entry->button);
[3c54869]218 PCUT_ASSERT_TRUE(ui_pbutton_get_light(entry->button));
[fc00f0d]219
220 wndlist_destroy(wndlist);
221
222 ui_window_destroy(window);
223 ui_destroy(ui);
224}
225
226/** Test removing entry */
227PCUT_TEST(remove)
228{
229 errno_t rc;
230 ui_t *ui = NULL;
231 ui_wnd_params_t params;
232 ui_window_t *window = NULL;
233 ui_fixed_t *fixed = NULL;
234 wndlist_t *wndlist;
235 wndlist_entry_t *entry;
236
237 rc = ui_create_disp(NULL, &ui);
238 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
239
240 ui_wnd_params_init(&params);
241 params.caption = "Hello";
242
243 rc = ui_window_create(ui, &params, &window);
244 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
245 PCUT_ASSERT_NOT_NULL(window);
246
247 rc = ui_fixed_create(&fixed);
248 ui_window_add(window, ui_fixed_ctl(fixed));
249
250 rc = wndlist_create(window, fixed, &wndlist);
251 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
252
[3c54869]253 rc = wndlist_append(wndlist, 1, "Foo", true, true);
[fc00f0d]254 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
255
[3c54869]256 rc = wndlist_append(wndlist, 2, "Bar", false, true);
[fc00f0d]257 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
258
259 entry = wndlist_first(wndlist);
260 PCUT_ASSERT_INT_EQUALS(1, entry->wnd_id);
261
262 rc = wndlist_remove(wndlist, entry, true);
263 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
264
265 entry = wndlist_first(wndlist);
266 PCUT_ASSERT_INT_EQUALS(2, entry->wnd_id);
267
268 wndlist_destroy(wndlist);
269
270 ui_window_destroy(window);
271 ui_destroy(ui);
272}
273
[3c54869]274/** Test updating entry */
275PCUT_TEST(update)
276{
277 errno_t rc;
278 ui_t *ui = NULL;
279 ui_wnd_params_t params;
280 ui_window_t *window = NULL;
281 ui_fixed_t *fixed = NULL;
282 wndlist_t *wndlist;
283 wndlist_entry_t *entry;
284
285 rc = ui_create_disp(NULL, &ui);
286 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
287
288 ui_wnd_params_init(&params);
289 params.caption = "Hello";
290
291 rc = ui_window_create(ui, &params, &window);
292 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
293 PCUT_ASSERT_NOT_NULL(window);
294
295 rc = ui_fixed_create(&fixed);
296 ui_window_add(window, ui_fixed_ctl(fixed));
297
298 rc = wndlist_create(window, fixed, &wndlist);
299 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
300
301 rc = wndlist_append(wndlist, 1, "Foo", true, true);
302 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
303
304 entry = wndlist_first(wndlist);
305 PCUT_ASSERT_INT_EQUALS(1, entry->wnd_id);
306 PCUT_ASSERT_NOT_NULL(entry->button);
307 PCUT_ASSERT_TRUE(ui_pbutton_get_light(entry->button));
308
309 rc = wndlist_update(wndlist, entry, "Bar", false);
310 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
311
312 PCUT_ASSERT_INT_EQUALS(1, entry->wnd_id);
313 PCUT_ASSERT_NOT_NULL(entry->button);
314 PCUT_ASSERT_FALSE(ui_pbutton_get_light(entry->button));
315
316 wndlist_destroy(wndlist);
317
318 ui_window_destroy(window);
319 ui_destroy(ui);
320}
321
[fc00f0d]322/** Test setting entry rectangle */
323PCUT_TEST(set_entry_rect)
324{
325 errno_t rc;
326 ui_t *ui = NULL;
327 ui_wnd_params_t params;
328 ui_window_t *window = NULL;
329 ui_fixed_t *fixed = NULL;
330 wndlist_t *wndlist;
331 wndlist_entry_t *entry;
332
333 rc = ui_create_disp(NULL, &ui);
334 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
335
336 ui_wnd_params_init(&params);
337 params.caption = "Hello";
338
339 rc = ui_window_create(ui, &params, &window);
340 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
341 PCUT_ASSERT_NOT_NULL(window);
342
343 rc = ui_fixed_create(&fixed);
344 ui_window_add(window, ui_fixed_ctl(fixed));
345
346 rc = wndlist_create(window, fixed, &wndlist);
347 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
348
[3c54869]349 rc = wndlist_append(wndlist, 123, "Foo", true, true);
[fc00f0d]350 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
351
352 entry = wndlist_first(wndlist);
353
354 /* Set entry rectangle */
355 wndlist_set_entry_rect(wndlist, entry);
356
357 wndlist_destroy(wndlist);
358
359 ui_window_destroy(window);
360 ui_destroy(ui);
361}
362
363/** Test finding entry by window ID */
364PCUT_TEST(entry_by_id)
365{
366 errno_t rc;
367 ui_t *ui = NULL;
368 ui_wnd_params_t params;
369 ui_window_t *window = NULL;
370 ui_fixed_t *fixed = NULL;
371 wndlist_t *wndlist;
372 wndlist_entry_t *entry;
373
374 rc = ui_create_disp(NULL, &ui);
375 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
376
377 ui_wnd_params_init(&params);
378 params.caption = "Hello";
379
380 rc = ui_window_create(ui, &params, &window);
381 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
382 PCUT_ASSERT_NOT_NULL(window);
383
384 rc = ui_fixed_create(&fixed);
385 ui_window_add(window, ui_fixed_ctl(fixed));
386
387 rc = wndlist_create(window, fixed, &wndlist);
388 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
389
[3c54869]390 rc = wndlist_append(wndlist, 1, "Foo", true, true);
[fc00f0d]391 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
392
[3c54869]393 rc = wndlist_append(wndlist, 2, "Bar", false, true);
[fc00f0d]394 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
395
396 entry = wndlist_entry_by_id(wndlist, 1);
397 PCUT_ASSERT_NOT_NULL(entry);
398 PCUT_ASSERT_INT_EQUALS(1, entry->wnd_id);
399
400 entry = wndlist_entry_by_id(wndlist, 2);
401 PCUT_ASSERT_NOT_NULL(entry);
402 PCUT_ASSERT_INT_EQUALS(2, entry->wnd_id);
403
404 wndlist_destroy(wndlist);
405
406 ui_window_destroy(window);
407 ui_destroy(ui);
408}
409
410/** Test wndlist_first() / wndlist_next() */
411PCUT_TEST(first_next)
412{
413 errno_t rc;
414 ui_t *ui = NULL;
415 ui_wnd_params_t params;
416 ui_window_t *window = NULL;
417 ui_fixed_t *fixed = NULL;
418 wndlist_t *wndlist;
419 wndlist_entry_t *entry;
420
421 rc = ui_create_disp(NULL, &ui);
422 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
423
424 ui_wnd_params_init(&params);
425 params.caption = "Hello";
426
427 rc = ui_window_create(ui, &params, &window);
428 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
429 PCUT_ASSERT_NOT_NULL(window);
430
431 rc = ui_fixed_create(&fixed);
432 ui_window_add(window, ui_fixed_ctl(fixed));
433
434 rc = wndlist_create(window, fixed, &wndlist);
435 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
436
[3c54869]437 rc = wndlist_append(wndlist, 1, "Foo", true, true);
[fc00f0d]438 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
439
[3c54869]440 rc = wndlist_append(wndlist, 2, "Bar", false, true);
[fc00f0d]441 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
442
443 entry = wndlist_first(wndlist);
444 PCUT_ASSERT_NOT_NULL(entry);
445 PCUT_ASSERT_INT_EQUALS(1, entry->wnd_id);
446
447 entry = wndlist_next(entry);
448 PCUT_ASSERT_NOT_NULL(entry);
449 PCUT_ASSERT_INT_EQUALS(2, entry->wnd_id);
450
451 entry = wndlist_next(entry);
452 PCUT_ASSERT_NULL(entry);
453
454 wndlist_destroy(wndlist);
[c4a53280]455
456 ui_window_destroy(window);
457 ui_destroy(ui);
458}
459
460/** Test wndlist_last() */
461PCUT_TEST(last)
462{
463 errno_t rc;
464 ui_t *ui = NULL;
465 ui_wnd_params_t params;
466 ui_window_t *window = NULL;
467 ui_fixed_t *fixed = NULL;
468 wndlist_t *wndlist;
469 wndlist_entry_t *entry;
470
471 rc = ui_create_disp(NULL, &ui);
472 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
473
474 ui_wnd_params_init(&params);
475 params.caption = "Hello";
476
477 rc = ui_window_create(ui, &params, &window);
478 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
479 PCUT_ASSERT_NOT_NULL(window);
480
481 rc = ui_fixed_create(&fixed);
482 ui_window_add(window, ui_fixed_ctl(fixed));
483
484 rc = wndlist_create(window, fixed, &wndlist);
485 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
486
[3c54869]487 rc = wndlist_append(wndlist, 1, "Foo", true, true);
[c4a53280]488 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
489
[3c54869]490 rc = wndlist_append(wndlist, 2, "Bar", false, true);
[c4a53280]491 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
492
493 entry = wndlist_last(wndlist);
494 PCUT_ASSERT_NOT_NULL(entry);
495 PCUT_ASSERT_INT_EQUALS(2, entry->wnd_id);
496
497 wndlist_destroy(wndlist);
[68d68e9]498
499 ui_window_destroy(window);
500 ui_destroy(ui);
501}
502
503/** Test wndlist_count() */
504PCUT_TEST(count)
505{
506 errno_t rc;
507 ui_t *ui = NULL;
508 ui_wnd_params_t params;
509 ui_window_t *window = NULL;
510 ui_fixed_t *fixed = NULL;
511 wndlist_t *wndlist;
512 size_t count;
513
514 rc = ui_create_disp(NULL, &ui);
515 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
516
517 ui_wnd_params_init(&params);
518 params.caption = "Hello";
519
520 rc = ui_window_create(ui, &params, &window);
521 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
522 PCUT_ASSERT_NOT_NULL(window);
523
524 rc = ui_fixed_create(&fixed);
525 ui_window_add(window, ui_fixed_ctl(fixed));
526
527 rc = wndlist_create(window, fixed, &wndlist);
528 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
529
530 count = wndlist_count(wndlist);
531 PCUT_ASSERT_INT_EQUALS(0, count);
532
[3c54869]533 rc = wndlist_append(wndlist, 1, "Foo", true, true);
[68d68e9]534 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
535
536 count = wndlist_count(wndlist);
537 PCUT_ASSERT_INT_EQUALS(1, count);
538
[3c54869]539 rc = wndlist_append(wndlist, 2, "Bar", false, true);
[68d68e9]540 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
541
542 count = wndlist_count(wndlist);
543 PCUT_ASSERT_INT_EQUALS(2, count);
544
545 wndlist_destroy(wndlist);
[fc00f0d]546
547 ui_window_destroy(window);
548 ui_destroy(ui);
549}
550
551/** Test repainting window list */
552PCUT_TEST(repaint)
553{
554 errno_t rc;
555 ui_t *ui = NULL;
556 ui_wnd_params_t params;
557 ui_window_t *window = NULL;
558 ui_fixed_t *fixed = NULL;
559 wndlist_t *wndlist;
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_fixed_create(&fixed);
572 ui_window_add(window, ui_fixed_ctl(fixed));
573
574 rc = wndlist_create(window, fixed, &wndlist);
575 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
576
[3c54869]577 rc = wndlist_append(wndlist, 1, "Foo", true, true);
[fc00f0d]578 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
579
[3c54869]580 rc = wndlist_append(wndlist, 2, "Bar", false, true);
[fc00f0d]581 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
582
583 rc = wndlist_repaint(wndlist);
584 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
585
586 wndlist_destroy(wndlist);
587
588 ui_window_destroy(window);
589 ui_destroy(ui);
590}
591
592/** Test window management service connection. */
593static void test_wndmgt_conn(ipc_call_t *icall, void *arg)
594{
595 wndmgt_srv_t srv;
596
597 /* Set up protocol structure */
598 wndmgt_srv_initialize(&srv);
599 srv.ops = &test_wndmgt_srv_ops;
600 srv.arg = arg;
601
602 /* Handle connection */
603 wndmgt_conn(icall, &srv);
604}
605
606static errno_t test_get_window_list(void *arg, wndmgt_window_list_t **rlist)
607{
608 wndmgt_window_list_t *wlist;
609
610 (void)arg;
611
612 wlist = calloc(1, sizeof(wndmgt_window_list_t));
613 if (wlist == NULL)
614 return ENOMEM;
615
616 wlist->nwindows = 1;
617 wlist->windows = calloc(1, sizeof(sysarg_t));
618 if (wlist->windows == NULL) {
619 free(wlist);
620 return ENOMEM;
621 }
622
623 wlist->windows[0] = 42;
624 *rlist = wlist;
625 return EOK;
626}
627
628static errno_t test_get_window_info(void *arg, sysarg_t wnd_id,
629 wndmgt_window_info_t **rinfo)
630{
631 wndmgt_window_info_t *winfo;
632
633 (void)arg;
634
635 winfo = calloc(1, sizeof(wndmgt_window_info_t));
636 if (winfo == NULL)
637 return ENOMEM;
638
639 winfo->caption = str_dup("Hello");
640 if (winfo->caption == NULL) {
641 free(winfo);
642 return ENOMEM;
643 }
644
645 *rinfo = winfo;
646 return EOK;
647}
648
[e0e612b]649PCUT_EXPORT(wndlist);
Note: See TracBrowser for help on using the repository browser.