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

Last change on this file was c0757e1f, checked in by Jiri Svoboda <jiri@…>, 2 years ago

UI display configuration utility

In addition to the command-line utility 'disp', we introduce its UI
equivalent 'display-cfg'. Currently this allows the user to configure
seats in a very comfortable way.

  • Property mode set to 100644
File size: 28.2 KB
RevLine 
[11662bd]1/*
[7cf5ddb]2 * Copyright (c) 2023 Jiri Svoboda
[11662bd]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>
30#include <io/kbd_event.h>
31#include <io/pos_event.h>
32#include <pcut/pcut.h>
33#include <stdio.h>
34#include <ui/ui.h>
35#include <ui/filelist.h>
[453f9645]36#include <ui/scrollbar.h>
[11662bd]37#include <vfs/vfs.h>
38#include "../private/filelist.h"
[7cf5ddb]39#include "../private/list.h"
[11662bd]40
41PCUT_INIT;
42
43PCUT_TEST_SUITE(file_list);
44
45/** Test response */
46typedef struct {
47 bool activate_req;
48 ui_file_list_t *activate_req_file_list;
49
50 bool selected;
51 ui_file_list_t *selected_file_list;
52 const char *selected_fname;
53} test_resp_t;
54
55static void test_file_list_activate_req(ui_file_list_t *, void *);
56static void test_file_list_selected(ui_file_list_t *, void *, const char *);
57
58static ui_file_list_cb_t test_cb = {
59 .activate_req = test_file_list_activate_req,
60 .selected = test_file_list_selected
61};
62
63/** Create and destroy file list. */
64PCUT_TEST(create_destroy)
65{
[453f9645]66 ui_t *ui;
67 ui_window_t *window;
68 ui_wnd_params_t params;
[11662bd]69 ui_file_list_t *flist;
70 errno_t rc;
71
[453f9645]72 rc = ui_create_disp(NULL, &ui);
73 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
74
75 ui_wnd_params_init(&params);
76 params.caption = "Test";
77
78 rc = ui_window_create(ui, &params, &window);
79 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
80
81 rc = ui_file_list_create(window, true, &flist);
[11662bd]82 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
83
84 ui_file_list_destroy(flist);
[453f9645]85 ui_window_destroy(window);
86 ui_destroy(ui);
[11662bd]87}
88
89/** ui_file_list_set_cb() sets callback */
90PCUT_TEST(set_cb)
91{
[453f9645]92 ui_t *ui;
93 ui_window_t *window;
94 ui_wnd_params_t params;
[11662bd]95 ui_file_list_t *flist;
96 errno_t rc;
97 test_resp_t resp;
98
[453f9645]99 rc = ui_create_disp(NULL, &ui);
100 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
101
102 ui_wnd_params_init(&params);
103 params.caption = "Test";
104
105 rc = ui_window_create(ui, &params, &window);
106 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
107
108 rc = ui_file_list_create(window, true, &flist);
[11662bd]109 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
110
111 ui_file_list_set_cb(flist, &test_cb, &resp);
112 PCUT_ASSERT_EQUALS(&test_cb, flist->cb);
113 PCUT_ASSERT_EQUALS(&resp, flist->cb_arg);
114
115 ui_file_list_destroy(flist);
[453f9645]116 ui_window_destroy(window);
117 ui_destroy(ui);
[11662bd]118}
119
[7cf5ddb]120/** Test ui_file_list_paint() */
121PCUT_TEST(paint)
[11662bd]122{
[453f9645]123 ui_t *ui;
124 ui_window_t *window;
125 ui_wnd_params_t params;
126 ui_file_list_t *flist;
127 errno_t rc;
128
129 rc = ui_create_disp(NULL, &ui);
130 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
131
132 ui_wnd_params_init(&params);
133 params.caption = "Test";
134
135 rc = ui_window_create(ui, &params, &window);
136 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
137
138 rc = ui_file_list_create(window, true, &flist);
139 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
140
[7cf5ddb]141 rc = ui_file_list_paint(flist);
142 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
[453f9645]143
144 ui_file_list_destroy(flist);
145 ui_window_destroy(window);
146 ui_destroy(ui);
[11662bd]147}
148
[7cf5ddb]149/** ui_file_list_ctl() returns a valid UI control */
150PCUT_TEST(ctl)
[11662bd]151{
152 ui_t *ui;
153 ui_window_t *window;
154 ui_wnd_params_t params;
155 ui_file_list_t *flist;
[7cf5ddb]156 ui_control_t *control;
[11662bd]157 errno_t rc;
158
159 rc = ui_create_disp(NULL, &ui);
160 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
161
162 ui_wnd_params_init(&params);
163 params.caption = "Test";
164
165 rc = ui_window_create(ui, &params, &window);
166 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
167
168 rc = ui_file_list_create(window, true, &flist);
169 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
170
[7cf5ddb]171 control = ui_file_list_ctl(flist);
172 PCUT_ASSERT_NOT_NULL(control);
[11662bd]173
174 ui_file_list_destroy(flist);
175 ui_window_destroy(window);
176 ui_destroy(ui);
177}
178
[7cf5ddb]179/** ui_file_list_set_rect() sets internal field */
180PCUT_TEST(set_rect)
[11662bd]181{
182 ui_t *ui;
183 ui_window_t *window;
184 ui_wnd_params_t params;
185 ui_file_list_t *flist;
[7cf5ddb]186 gfx_rect_t rect;
[11662bd]187 errno_t rc;
188
189 rc = ui_create_disp(NULL, &ui);
190 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
191
192 ui_wnd_params_init(&params);
193 params.caption = "Test";
194
195 rc = ui_window_create(ui, &params, &window);
196 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
197
198 rc = ui_file_list_create(window, true, &flist);
199 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
200
[7cf5ddb]201 rect.p0.x = 1;
202 rect.p0.y = 2;
203 rect.p1.x = 3;
204 rect.p1.y = 4;
205
206 ui_file_list_set_rect(flist, &rect);
207 PCUT_ASSERT_INT_EQUALS(rect.p0.x, flist->list->rect.p0.x);
208 PCUT_ASSERT_INT_EQUALS(rect.p0.y, flist->list->rect.p0.y);
209 PCUT_ASSERT_INT_EQUALS(rect.p1.x, flist->list->rect.p1.x);
210 PCUT_ASSERT_INT_EQUALS(rect.p1.y, flist->list->rect.p1.y);
[11662bd]211
212 ui_file_list_destroy(flist);
213 ui_window_destroy(window);
214 ui_destroy(ui);
215}
216
[7cf5ddb]217/** ui_file_list_is_active() returns file list activity state */
218PCUT_TEST(is_active)
[11662bd]219{
[453f9645]220 ui_t *ui;
221 ui_window_t *window;
222 ui_wnd_params_t params;
[11662bd]223 ui_file_list_t *flist;
224 errno_t rc;
225
[453f9645]226 rc = ui_create_disp(NULL, &ui);
227 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
228
229 ui_wnd_params_init(&params);
230 params.caption = "Test";
231
232 rc = ui_window_create(ui, &params, &window);
233 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
234
235 rc = ui_file_list_create(window, true, &flist);
[11662bd]236 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
[7cf5ddb]237 PCUT_ASSERT_TRUE(ui_file_list_is_active(flist));
238 ui_file_list_destroy(flist);
[11662bd]239
[7cf5ddb]240 rc = ui_file_list_create(window, false, &flist);
241 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
242 PCUT_ASSERT_FALSE(ui_file_list_is_active(flist));
[11662bd]243 ui_file_list_destroy(flist);
[453f9645]244 ui_window_destroy(window);
245 ui_destroy(ui);
[11662bd]246}
247
[7cf5ddb]248/** ui_file_list_activate() activates file list */
249PCUT_TEST(activate)
[11662bd]250{
[453f9645]251 ui_t *ui;
252 ui_window_t *window;
253 ui_wnd_params_t params;
[11662bd]254 ui_file_list_t *flist;
255 errno_t rc;
256
[453f9645]257 rc = ui_create_disp(NULL, &ui);
258 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
259
260 ui_wnd_params_init(&params);
261 params.caption = "Test";
262
263 rc = ui_window_create(ui, &params, &window);
264 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
265
[7cf5ddb]266 rc = ui_file_list_create(window, false, &flist);
[11662bd]267 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
268
[7cf5ddb]269 PCUT_ASSERT_FALSE(ui_file_list_is_active(flist));
270 rc = ui_file_list_activate(flist);
271 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
272 PCUT_ASSERT_TRUE(ui_file_list_is_active(flist));
[11662bd]273
274 ui_file_list_destroy(flist);
[7cf5ddb]275 ui_window_destroy(window);
276 ui_destroy(ui);
277}
[11662bd]278
[7cf5ddb]279/** ui_file_list_deactivate() deactivates file list */
280PCUT_TEST(deactivate)
281{
282 ui_t *ui;
283 ui_window_t *window;
284 ui_wnd_params_t params;
285 ui_file_list_t *flist;
286 errno_t rc;
[11662bd]287
[453f9645]288 rc = ui_create_disp(NULL, &ui);
289 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
290
291 ui_wnd_params_init(&params);
292 params.caption = "Test";
293
294 rc = ui_window_create(ui, &params, &window);
295 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
296
[7cf5ddb]297 rc = ui_file_list_create(window, true, &flist);
[11662bd]298 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
299
[7cf5ddb]300 PCUT_ASSERT_TRUE(ui_file_list_is_active(flist));
301 ui_file_list_deactivate(flist);
302 PCUT_ASSERT_FALSE(ui_file_list_is_active(flist));
[11662bd]303
304 ui_file_list_destroy(flist);
[453f9645]305 ui_window_destroy(window);
306 ui_destroy(ui);
[11662bd]307}
308
[7cf5ddb]309/** ui_file_list_entry_append() appends new entry */
310PCUT_TEST(entry_append)
[11662bd]311{
312 ui_t *ui;
313 ui_window_t *window;
314 ui_wnd_params_t params;
315 ui_file_list_t *flist;
316 ui_file_list_entry_attr_t attr;
317 errno_t rc;
318
319 rc = ui_create_disp(NULL, &ui);
320 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
321
322 ui_wnd_params_init(&params);
323 params.caption = "Test";
324
325 rc = ui_window_create(ui, &params, &window);
326 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
327
328 rc = ui_file_list_create(window, true, &flist);
329 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
330
331 ui_file_list_entry_attr_init(&attr);
[7cf5ddb]332
[11662bd]333 attr.name = "a";
334 attr.size = 1;
335 rc = ui_file_list_entry_append(flist, &attr);
336 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
337
[7cf5ddb]338 PCUT_ASSERT_INT_EQUALS(1, ui_list_entries_cnt(flist->list));
339
[11662bd]340 attr.name = "b";
341 attr.size = 2;
342 rc = ui_file_list_entry_append(flist, &attr);
343 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
344
[7cf5ddb]345 PCUT_ASSERT_INT_EQUALS(2, ui_list_entries_cnt(flist->list));
[11662bd]346
347 ui_file_list_destroy(flist);
348 ui_window_destroy(window);
349 ui_destroy(ui);
350}
351
[c0757e1f]352/** ui_file_list_entry_destroy() destroys entry */
353PCUT_TEST(entry_destroy)
[11662bd]354{
[453f9645]355 ui_t *ui;
356 ui_window_t *window;
357 ui_wnd_params_t params;
[11662bd]358 ui_file_list_t *flist;
[7cf5ddb]359 ui_file_list_entry_t *entry;
360 ui_file_list_entry_attr_t attr;
[11662bd]361 errno_t rc;
362
[453f9645]363 rc = ui_create_disp(NULL, &ui);
364 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
365
366 ui_wnd_params_init(&params);
367 params.caption = "Test";
368
369 rc = ui_window_create(ui, &params, &window);
370 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
371
372 rc = ui_file_list_create(window, true, &flist);
[11662bd]373 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
374
[7cf5ddb]375 attr.name = "a";
376 attr.size = 1;
377 rc = ui_file_list_entry_append(flist, &attr);
378 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
[11662bd]379
[7cf5ddb]380 attr.name = "b";
381 attr.size = 2;
382 rc = ui_file_list_entry_append(flist, &attr);
383 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
384
385 PCUT_ASSERT_INT_EQUALS(2, ui_list_entries_cnt(flist->list));
386
387 entry = ui_file_list_first(flist);
[c0757e1f]388 ui_file_list_entry_destroy(entry);
[7cf5ddb]389
390 PCUT_ASSERT_INT_EQUALS(1, ui_list_entries_cnt(flist->list));
391
392 entry = ui_file_list_first(flist);
[c0757e1f]393 ui_file_list_entry_destroy(entry);
[7cf5ddb]394
395 PCUT_ASSERT_INT_EQUALS(0, ui_list_entries_cnt(flist->list));
[11662bd]396
397 ui_file_list_destroy(flist);
[453f9645]398 ui_window_destroy(window);
399 ui_destroy(ui);
[11662bd]400}
401
[7cf5ddb]402/** ui_file_list_clear_entries() removes all entries from file list */
403PCUT_TEST(clear_entries)
[11662bd]404{
405 ui_t *ui;
406 ui_window_t *window;
407 ui_wnd_params_t params;
408 ui_file_list_t *flist;
[7cf5ddb]409 ui_file_list_entry_attr_t attr;
[11662bd]410 errno_t rc;
411
412 rc = ui_create_disp(NULL, &ui);
413 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
414
415 ui_wnd_params_init(&params);
416 params.caption = "Test";
417
418 rc = ui_window_create(ui, &params, &window);
419 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
420
421 rc = ui_file_list_create(window, true, &flist);
422 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
423
[7cf5ddb]424 ui_file_list_entry_attr_init(&attr);
425 attr.name = "a";
426 attr.size = 1;
427 rc = ui_file_list_entry_append(flist, &attr);
428 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
429
430 attr.name = "a";
431 attr.size = 2;
432 rc = ui_file_list_entry_append(flist, &attr);
433 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
[11662bd]434
[7cf5ddb]435 PCUT_ASSERT_INT_EQUALS(2, ui_list_entries_cnt(flist->list));
[11662bd]436
[7cf5ddb]437 ui_file_list_clear_entries(flist);
438 PCUT_ASSERT_INT_EQUALS(0, ui_list_entries_cnt(flist->list));
[11662bd]439
440 ui_file_list_destroy(flist);
441 ui_window_destroy(window);
442 ui_destroy(ui);
443}
444
[7cf5ddb]445/** ui_file_list_read_dir() reads the contents of a directory */
446PCUT_TEST(read_dir)
[11662bd]447{
[453f9645]448 ui_t *ui;
449 ui_window_t *window;
450 ui_wnd_params_t params;
451 ui_file_list_t *flist;
[7cf5ddb]452 ui_file_list_entry_t *entry;
453 char buf[L_tmpnam];
454 char *fname;
455 char *p;
[453f9645]456 errno_t rc;
[7cf5ddb]457 FILE *f;
458 int rv;
[453f9645]459
[7cf5ddb]460 /* Create name for temporary directory */
461 p = tmpnam(buf);
462 PCUT_ASSERT_NOT_NULL(p);
[453f9645]463
[7cf5ddb]464 /* Create temporary directory */
465 rc = vfs_link_path(p, KIND_DIRECTORY, NULL);
[453f9645]466 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
467
[7cf5ddb]468 rv = asprintf(&fname, "%s/%s", p, "a");
469 PCUT_ASSERT_TRUE(rv >= 0);
[453f9645]470
[7cf5ddb]471 f = fopen(fname, "wb");
472 PCUT_ASSERT_NOT_NULL(f);
[453f9645]473
[7cf5ddb]474 rv = fprintf(f, "X");
475 PCUT_ASSERT_TRUE(rv >= 0);
[453f9645]476
[7cf5ddb]477 rv = fclose(f);
478 PCUT_ASSERT_INT_EQUALS(0, rv);
[453f9645]479
480 rc = ui_create_disp(NULL, &ui);
481 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
482
483 ui_wnd_params_init(&params);
484 params.caption = "Test";
485
486 rc = ui_window_create(ui, &params, &window);
487 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
488
489 rc = ui_file_list_create(window, true, &flist);
490 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
491
[7cf5ddb]492 rc = ui_file_list_read_dir(flist, p);
493 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
494
495 PCUT_ASSERT_INT_EQUALS(2, ui_list_entries_cnt(flist->list));
[453f9645]496
[7cf5ddb]497 entry = ui_file_list_first(flist);
498 PCUT_ASSERT_NOT_NULL(entry);
499 PCUT_ASSERT_STR_EQUALS("..", entry->name);
[453f9645]500
[7cf5ddb]501 entry = ui_file_list_next(entry);
502 PCUT_ASSERT_NOT_NULL(entry);
503 PCUT_ASSERT_STR_EQUALS("a", entry->name);
504 PCUT_ASSERT_INT_EQUALS(1, entry->size);
[453f9645]505
506 ui_file_list_destroy(flist);
[7cf5ddb]507
508 rv = remove(fname);
509 PCUT_ASSERT_INT_EQUALS(0, rv);
510
511 rv = remove(p);
512 PCUT_ASSERT_INT_EQUALS(0, rv);
513
514 free(fname);
[453f9645]515 ui_window_destroy(window);
516 ui_destroy(ui);
517}
518
[7cf5ddb]519/** When moving to parent directory from a subdir, we seek to the
520 * coresponding entry
521 */
522PCUT_TEST(read_dir_up)
[453f9645]523{
524 ui_t *ui;
525 ui_window_t *window;
526 ui_wnd_params_t params;
527 ui_file_list_t *flist;
[7cf5ddb]528 char buf[L_tmpnam];
529 char *subdir_a;
530 char *subdir_b;
531 char *subdir_c;
532 char *p;
[453f9645]533 errno_t rc;
[7cf5ddb]534 int rv;
[453f9645]535
[7cf5ddb]536 /* Create name for temporary directory */
537 p = tmpnam(buf);
538 PCUT_ASSERT_NOT_NULL(p);
539
540 /* Create temporary directory */
541 rc = vfs_link_path(p, KIND_DIRECTORY, NULL);
[453f9645]542 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
543
[7cf5ddb]544 /* Create some subdirectories */
[453f9645]545
[7cf5ddb]546 rv = asprintf(&subdir_a, "%s/%s", p, "a");
547 PCUT_ASSERT_TRUE(rv >= 0);
548 rc = vfs_link_path(subdir_a, KIND_DIRECTORY, NULL);
[453f9645]549 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
550
[7cf5ddb]551 rv = asprintf(&subdir_b, "%s/%s", p, "b");
552 PCUT_ASSERT_TRUE(rv >= 0);
553 rc = vfs_link_path(subdir_b, KIND_DIRECTORY, NULL);
[453f9645]554 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
555
[7cf5ddb]556 rv = asprintf(&subdir_c, "%s/%s", p, "c");
557 PCUT_ASSERT_TRUE(rv >= 0);
558 rc = vfs_link_path(subdir_c, KIND_DIRECTORY, NULL);
[453f9645]559 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
560
[7cf5ddb]561 rc = ui_create_disp(NULL, &ui);
[453f9645]562 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
563
[7cf5ddb]564 ui_wnd_params_init(&params);
565 params.caption = "Test";
566
567 rc = ui_window_create(ui, &params, &window);
[453f9645]568 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
569
[7cf5ddb]570 rc = ui_file_list_create(window, true, &flist);
571 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
[453f9645]572
[7cf5ddb]573 /* Start in subdirectory "b" */
574 rc = ui_file_list_read_dir(flist, subdir_b);
575 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
[453f9645]576
[7cf5ddb]577 /* Now go up (into p) */
[453f9645]578
[7cf5ddb]579 rc = ui_file_list_read_dir(flist, "..");
[11662bd]580 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
581
[7cf5ddb]582 PCUT_ASSERT_NOT_NULL(ui_file_list_get_cursor(flist));
583 PCUT_ASSERT_STR_EQUALS("b", ui_file_list_get_cursor(flist)->name);
[11662bd]584
[7cf5ddb]585 ui_file_list_destroy(flist);
[11662bd]586
[7cf5ddb]587 rv = remove(subdir_a);
588 PCUT_ASSERT_INT_EQUALS(0, rv);
[11662bd]589
[7cf5ddb]590 rv = remove(subdir_b);
591 PCUT_ASSERT_INT_EQUALS(0, rv);
[11662bd]592
[7cf5ddb]593 rv = remove(subdir_c);
594 PCUT_ASSERT_INT_EQUALS(0, rv);
[11662bd]595
[7cf5ddb]596 rv = remove(p);
597 PCUT_ASSERT_INT_EQUALS(0, rv);
[11662bd]598
[7cf5ddb]599 free(subdir_a);
600 free(subdir_b);
601 free(subdir_c);
[11662bd]602
603 ui_window_destroy(window);
604 ui_destroy(ui);
605}
606
[7cf5ddb]607/** ui_file_list_sort() sorts file list entries */
608PCUT_TEST(sort)
[11662bd]609{
610 ui_t *ui;
611 ui_window_t *window;
612 ui_wnd_params_t params;
613 ui_file_list_t *flist;
[7cf5ddb]614 ui_file_list_entry_t *entry;
[11662bd]615 ui_file_list_entry_attr_t attr;
616 errno_t rc;
617
618 rc = ui_create_disp(NULL, &ui);
619 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
620
621 ui_wnd_params_init(&params);
622 params.caption = "Test";
623
624 rc = ui_window_create(ui, &params, &window);
625 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
626
627 rc = ui_file_list_create(window, true, &flist);
628 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
629
630 ui_file_list_entry_attr_init(&attr);
631
632 attr.name = "b";
[7cf5ddb]633 attr.size = 1;
[11662bd]634 rc = ui_file_list_entry_append(flist, &attr);
635 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
636
637 attr.name = "c";
638 attr.size = 3;
639 rc = ui_file_list_entry_append(flist, &attr);
640 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
641
[7cf5ddb]642 attr.name = "a";
643 attr.size = 2;
[11662bd]644 rc = ui_file_list_entry_append(flist, &attr);
645 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
646
[7cf5ddb]647 rc = ui_file_list_sort(flist);
[11662bd]648 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
649
[7cf5ddb]650 entry = ui_file_list_first(flist);
651 PCUT_ASSERT_STR_EQUALS("a", entry->name);
652 PCUT_ASSERT_INT_EQUALS(2, entry->size);
653
654 entry = ui_file_list_next(entry);
655 PCUT_ASSERT_STR_EQUALS("b", entry->name);
656 PCUT_ASSERT_INT_EQUALS(1, entry->size);
657
658 entry = ui_file_list_next(entry);
659 PCUT_ASSERT_STR_EQUALS("c", entry->name);
660 PCUT_ASSERT_INT_EQUALS(3, entry->size);
[11662bd]661
662 ui_file_list_destroy(flist);
663 ui_window_destroy(window);
664 ui_destroy(ui);
665}
666
[7cf5ddb]667/** ui_file_list_list_compare compares two file list entries */
668PCUT_TEST(list_compare)
[11662bd]669{
670 ui_t *ui;
671 ui_window_t *window;
672 ui_wnd_params_t params;
673 ui_file_list_t *flist;
[7cf5ddb]674 ui_file_list_entry_t *a, *b;
[453f9645]675 ui_file_list_entry_attr_t attr;
[7cf5ddb]676 int rel;
[11662bd]677 errno_t rc;
678
679 rc = ui_create_disp(NULL, &ui);
680 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
681
682 ui_wnd_params_init(&params);
683 params.caption = "Test";
684
685 rc = ui_window_create(ui, &params, &window);
686 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
687
688 rc = ui_file_list_create(window, true, &flist);
689 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
690
[453f9645]691 ui_file_list_entry_attr_init(&attr);
[11662bd]692
[453f9645]693 attr.name = "a";
694 attr.size = 2;
695 rc = ui_file_list_entry_append(flist, &attr);
696 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
697
[7cf5ddb]698 attr.name = "b";
699 attr.size = 1;
[453f9645]700 rc = ui_file_list_entry_append(flist, &attr);
701 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
702
[7cf5ddb]703 a = ui_file_list_first(flist);
704 PCUT_ASSERT_NOT_NULL(a);
705 b = ui_file_list_next(a);
706 PCUT_ASSERT_NOT_NULL(b);
[453f9645]707
[7cf5ddb]708 /* a < b */
709 rel = ui_file_list_list_compare(a->entry, b->entry);
710 PCUT_ASSERT_TRUE(rel < 0);
[453f9645]711
[7cf5ddb]712 /* b > a */
713 rel = ui_file_list_list_compare(b->entry, a->entry);
714 PCUT_ASSERT_TRUE(rel > 0);
[453f9645]715
[7cf5ddb]716 /* a == a */
717 rel = ui_file_list_list_compare(a->entry, a->entry);
718 PCUT_ASSERT_INT_EQUALS(0, rel);
[453f9645]719
720 ui_file_list_destroy(flist);
721 ui_window_destroy(window);
722 ui_destroy(ui);
723}
724
[7cf5ddb]725/** ui_file_list_entry_attr_init() initializes file list attribute structure */
726PCUT_TEST(entry_attr_init)
727{
728 ui_file_list_entry_attr_t attr;
729
730 ui_file_list_entry_attr_init(&attr);
731 PCUT_ASSERT_NULL(attr.name);
732 PCUT_ASSERT_INT_EQUALS(0, attr.size);
733 PCUT_ASSERT_EQUALS(false, attr.isdir);
734 PCUT_ASSERT_INT_EQUALS(0, attr.svc);
735}
736
737/** ui_file_list_first() returns valid entry or @c NULL as appropriate */
738PCUT_TEST(first)
[453f9645]739{
740 ui_t *ui;
741 ui_window_t *window;
742 ui_wnd_params_t params;
743 ui_file_list_t *flist;
[7cf5ddb]744 ui_file_list_entry_t *entry;
[453f9645]745 ui_file_list_entry_attr_t attr;
746 errno_t rc;
747
748 rc = ui_create_disp(NULL, &ui);
749 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
750
751 ui_wnd_params_init(&params);
752 params.caption = "Test";
753
754 rc = ui_window_create(ui, &params, &window);
755 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
756
757 rc = ui_file_list_create(window, true, &flist);
758 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
759
760 ui_file_list_entry_attr_init(&attr);
761
[7cf5ddb]762 entry = ui_file_list_first(flist);
763 PCUT_ASSERT_NULL(entry);
764
765 /* Add one entry */
[453f9645]766 attr.name = "a";
767 attr.size = 1;
768 rc = ui_file_list_entry_append(flist, &attr);
769 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
770
[7cf5ddb]771 /* Now try getting it */
772 entry = ui_file_list_first(flist);
773 PCUT_ASSERT_NOT_NULL(entry);
774 PCUT_ASSERT_STR_EQUALS("a", entry->name);
775 PCUT_ASSERT_INT_EQUALS(1, entry->size);
776
777 /* Add another entry */
[453f9645]778 attr.name = "b";
779 attr.size = 2;
780 rc = ui_file_list_entry_append(flist, &attr);
781 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
782
[7cf5ddb]783 /* We should still get the first entry */
784 entry = ui_file_list_first(flist);
785 PCUT_ASSERT_NOT_NULL(entry);
786 PCUT_ASSERT_STR_EQUALS("a", entry->name);
787 PCUT_ASSERT_INT_EQUALS(1, entry->size);
[453f9645]788
789 ui_file_list_destroy(flist);
790 ui_window_destroy(window);
791 ui_destroy(ui);
792}
793
[7cf5ddb]794/** ui_file_list_last() returns valid entry or @c NULL as appropriate */
795PCUT_TEST(last)
[453f9645]796{
797 ui_t *ui;
798 ui_window_t *window;
799 ui_wnd_params_t params;
800 ui_file_list_t *flist;
[7cf5ddb]801 ui_file_list_entry_t *entry;
[453f9645]802 ui_file_list_entry_attr_t attr;
803 errno_t rc;
804
805 rc = ui_create_disp(NULL, &ui);
806 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
807
808 ui_wnd_params_init(&params);
809 params.caption = "Test";
810
811 rc = ui_window_create(ui, &params, &window);
812 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
813
814 rc = ui_file_list_create(window, true, &flist);
815 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
816
817 ui_file_list_entry_attr_init(&attr);
818
[7cf5ddb]819 entry = ui_file_list_last(flist);
820 PCUT_ASSERT_NULL(entry);
821
822 /* Add one entry */
[453f9645]823 attr.name = "a";
824 attr.size = 1;
825 rc = ui_file_list_entry_append(flist, &attr);
826 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
827
[7cf5ddb]828 /* Now try getting it */
829 entry = ui_file_list_last(flist);
830 PCUT_ASSERT_NOT_NULL(entry);
831 PCUT_ASSERT_STR_EQUALS("a", entry->name);
832 PCUT_ASSERT_INT_EQUALS(1, entry->size);
833
834 /* Add another entry */
[453f9645]835 attr.name = "b";
836 attr.size = 2;
837 rc = ui_file_list_entry_append(flist, &attr);
838 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
839
[7cf5ddb]840 /* We should get new entry now */
841 entry = ui_file_list_last(flist);
842 PCUT_ASSERT_NOT_NULL(entry);
843 attr.name = "b";
844 attr.size = 2;
845 PCUT_ASSERT_STR_EQUALS("b", entry->name);
846 PCUT_ASSERT_INT_EQUALS(2, entry->size);
[453f9645]847
848 ui_file_list_destroy(flist);
849 ui_window_destroy(window);
850 ui_destroy(ui);
851}
852
[7cf5ddb]853/** ui_file_list_next() returns the next entry or @c NULL as appropriate */
854PCUT_TEST(next)
[453f9645]855{
856 ui_t *ui;
857 ui_window_t *window;
858 ui_wnd_params_t params;
859 ui_file_list_t *flist;
[7cf5ddb]860 ui_file_list_entry_t *entry;
[453f9645]861 ui_file_list_entry_attr_t attr;
862 errno_t rc;
863
864 rc = ui_create_disp(NULL, &ui);
865 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
866
867 ui_wnd_params_init(&params);
868 params.caption = "Test";
869
870 rc = ui_window_create(ui, &params, &window);
871 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
872
873 rc = ui_file_list_create(window, true, &flist);
874 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
875
876 ui_file_list_entry_attr_init(&attr);
877
[7cf5ddb]878 /* Add one entry */
[453f9645]879 attr.name = "a";
880 attr.size = 1;
881 rc = ui_file_list_entry_append(flist, &attr);
882 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
883
[7cf5ddb]884 /* Now try getting its successor */
885 entry = ui_file_list_first(flist);
886 PCUT_ASSERT_NOT_NULL(entry);
[453f9645]887
[7cf5ddb]888 entry = ui_file_list_next(entry);
889 PCUT_ASSERT_NULL(entry);
[453f9645]890
[7cf5ddb]891 /* Add another entry */
892 attr.name = "b";
893 attr.size = 2;
[453f9645]894 rc = ui_file_list_entry_append(flist, &attr);
895 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
896
[7cf5ddb]897 /* Try getting the successor of first entry again */
898 entry = ui_file_list_first(flist);
899 PCUT_ASSERT_NOT_NULL(entry);
[453f9645]900
[7cf5ddb]901 entry = ui_file_list_next(entry);
902 PCUT_ASSERT_NOT_NULL(entry);
903 PCUT_ASSERT_STR_EQUALS("b", entry->name);
904 PCUT_ASSERT_INT_EQUALS(2, entry->size);
[453f9645]905
906 ui_file_list_destroy(flist);
907 ui_window_destroy(window);
908 ui_destroy(ui);
909}
910
[7cf5ddb]911/** ui_file_list_prev() returns the previous entry or @c NULL as appropriate */
912PCUT_TEST(prev)
[453f9645]913{
914 ui_t *ui;
915 ui_window_t *window;
916 ui_wnd_params_t params;
917 ui_file_list_t *flist;
[7cf5ddb]918 ui_file_list_entry_t *entry;
[453f9645]919 ui_file_list_entry_attr_t attr;
920 errno_t rc;
921
922 rc = ui_create_disp(NULL, &ui);
923 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
924
925 ui_wnd_params_init(&params);
926 params.caption = "Test";
927
928 rc = ui_window_create(ui, &params, &window);
929 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
930
931 rc = ui_file_list_create(window, true, &flist);
932 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
933
934 ui_file_list_entry_attr_init(&attr);
935
[7cf5ddb]936 /* Add one entry */
[453f9645]937 attr.name = "a";
938 attr.size = 1;
939 rc = ui_file_list_entry_append(flist, &attr);
940 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
941
[7cf5ddb]942 /* Now try getting its predecessor */
943 entry = ui_file_list_last(flist);
944 PCUT_ASSERT_NOT_NULL(entry);
[453f9645]945
[7cf5ddb]946 entry = ui_file_list_prev(entry);
947 PCUT_ASSERT_NULL(entry);
[453f9645]948
[7cf5ddb]949 /* Add another entry */
950 attr.name = "b";
951 attr.size = 2;
[453f9645]952 rc = ui_file_list_entry_append(flist, &attr);
953 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
954
[7cf5ddb]955 /* Try getting the predecessor of the new entry */
956 entry = ui_file_list_last(flist);
957 PCUT_ASSERT_NOT_NULL(entry);
[453f9645]958
[7cf5ddb]959 entry = ui_file_list_prev(entry);
960 PCUT_ASSERT_NOT_NULL(entry);
961 PCUT_ASSERT_STR_EQUALS("a", entry->name);
962 PCUT_ASSERT_INT_EQUALS(1, entry->size);
[453f9645]963
964 ui_file_list_destroy(flist);
965 ui_window_destroy(window);
966 ui_destroy(ui);
967}
968
969/** ui_file_list_open_dir() opens a directory entry */
970PCUT_TEST(open_dir)
971{
972 ui_t *ui;
973 ui_window_t *window;
974 ui_wnd_params_t params;
975 ui_file_list_t *flist;
976 ui_file_list_entry_t *entry;
977 char buf[L_tmpnam];
978 char *sdname;
979 char *p;
980 errno_t rc;
981 int rv;
982
983 rc = ui_create_disp(NULL, &ui);
984 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
985
986 ui_wnd_params_init(&params);
987 params.caption = "Test";
988
989 rc = ui_window_create(ui, &params, &window);
990 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
991
992 /* Create name for temporary directory */
993 p = tmpnam(buf);
994 PCUT_ASSERT_NOT_NULL(p);
995
996 /* Create temporary directory */
997 rc = vfs_link_path(p, KIND_DIRECTORY, NULL);
998 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
999
1000 rv = asprintf(&sdname, "%s/%s", p, "a");
1001 PCUT_ASSERT_TRUE(rv >= 0);
1002
1003 /* Create sub-directory */
1004 rc = vfs_link_path(sdname, KIND_DIRECTORY, NULL);
1005 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1006
1007 rc = ui_file_list_create(window, true, &flist);
1008 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1009
1010 rc = ui_file_list_read_dir(flist, p);
1011 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1012 PCUT_ASSERT_STR_EQUALS(p, flist->dir);
1013
[7cf5ddb]1014 PCUT_ASSERT_INT_EQUALS(2, ui_list_entries_cnt(flist->list));
[453f9645]1015
1016 entry = ui_file_list_first(flist);
1017 PCUT_ASSERT_NOT_NULL(entry);
1018 PCUT_ASSERT_STR_EQUALS("..", entry->name);
1019
1020 entry = ui_file_list_next(entry);
1021 PCUT_ASSERT_NOT_NULL(entry);
1022 PCUT_ASSERT_STR_EQUALS("a", entry->name);
1023 PCUT_ASSERT_TRUE(entry->isdir);
1024
1025 rc = ui_file_list_open_dir(flist, entry);
[11662bd]1026 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1027
1028 PCUT_ASSERT_STR_EQUALS(sdname, flist->dir);
1029
1030 ui_file_list_destroy(flist);
1031 ui_window_destroy(window);
1032 ui_destroy(ui);
1033
1034 rv = remove(sdname);
1035 PCUT_ASSERT_INT_EQUALS(0, rv);
1036
1037 rv = remove(p);
1038 PCUT_ASSERT_INT_EQUALS(0, rv);
1039
1040 free(sdname);
1041}
1042
[453f9645]1043/** ui_file_list_open_file() runs selected callback */
[11662bd]1044PCUT_TEST(open_file)
1045{
[453f9645]1046 ui_t *ui;
1047 ui_window_t *window;
1048 ui_wnd_params_t params;
1049 ui_file_list_t *flist;
1050 ui_file_list_entry_attr_t attr;
1051 errno_t rc;
1052 test_resp_t resp;
1053
1054 rc = ui_create_disp(NULL, &ui);
1055 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1056
1057 ui_wnd_params_init(&params);
1058 params.caption = "Test";
1059
1060 rc = ui_window_create(ui, &params, &window);
1061 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1062
1063 rc = ui_file_list_create(window, true, &flist);
1064 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1065
1066 ui_file_list_set_cb(flist, &test_cb, &resp);
1067
1068 attr.name = "hello.txt";
1069 attr.size = 1;
1070 rc = ui_file_list_entry_append(flist, &attr);
1071 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1072
1073 resp.selected = false;
1074 resp.selected_file_list = NULL;
1075 resp.selected_fname = NULL;
1076
1077 ui_file_list_open_file(flist, ui_file_list_first(flist));
1078 PCUT_ASSERT_TRUE(resp.selected);
1079 PCUT_ASSERT_EQUALS(flist, resp.selected_file_list);
1080 PCUT_ASSERT_STR_EQUALS("hello.txt", resp.selected_fname);
1081
1082 ui_file_list_destroy(flist);
1083 ui_window_destroy(window);
1084 ui_destroy(ui);
[11662bd]1085}
1086
1087/** ui_file_list_activate_req() sends activation request */
1088PCUT_TEST(activate_req)
1089{
[453f9645]1090 ui_t *ui;
1091 ui_window_t *window;
1092 ui_wnd_params_t params;
[11662bd]1093 ui_file_list_t *flist;
1094 errno_t rc;
1095 test_resp_t resp;
1096
[453f9645]1097 rc = ui_create_disp(NULL, &ui);
1098 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1099
1100 ui_wnd_params_init(&params);
1101 params.caption = "Test";
1102
1103 rc = ui_window_create(ui, &params, &window);
1104 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1105
1106 rc = ui_file_list_create(window, true, &flist);
[11662bd]1107 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1108
1109 ui_file_list_set_cb(flist, &test_cb, &resp);
1110
1111 resp.activate_req = false;
1112 resp.activate_req_file_list = NULL;
1113
1114 ui_file_list_activate_req(flist);
1115 PCUT_ASSERT_TRUE(resp.activate_req);
1116 PCUT_ASSERT_EQUALS(flist, resp.activate_req_file_list);
1117
1118 ui_file_list_destroy(flist);
[453f9645]1119 ui_window_destroy(window);
1120 ui_destroy(ui);
[11662bd]1121}
1122
1123/** ui_file_list_selected() runs selected callback */
1124PCUT_TEST(selected)
1125{
[453f9645]1126 ui_t *ui;
1127 ui_window_t *window;
1128 ui_wnd_params_t params;
[11662bd]1129 ui_file_list_t *flist;
1130 errno_t rc;
1131 test_resp_t resp;
1132
[453f9645]1133 rc = ui_create_disp(NULL, &ui);
1134 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1135
1136 ui_wnd_params_init(&params);
1137 params.caption = "Test";
1138
1139 rc = ui_window_create(ui, &params, &window);
1140 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1141
1142 rc = ui_file_list_create(window, true, &flist);
[11662bd]1143 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1144
1145 ui_file_list_set_cb(flist, &test_cb, &resp);
1146
1147 resp.selected = false;
1148 resp.selected_file_list = NULL;
1149 resp.selected_fname = NULL;
1150
1151 ui_file_list_selected(flist, "hello.txt");
1152 PCUT_ASSERT_TRUE(resp.selected);
1153 PCUT_ASSERT_EQUALS(flist, resp.selected_file_list);
1154 PCUT_ASSERT_STR_EQUALS("hello.txt", resp.selected_fname);
1155
1156 ui_file_list_destroy(flist);
[453f9645]1157 ui_window_destroy(window);
1158 ui_destroy(ui);
[11662bd]1159}
1160
[7cf5ddb]1161/** ui_file_list_get_cursor() returns the current cursor position */
1162PCUT_TEST(get_cursor)
1163{
1164 ui_t *ui;
1165 ui_window_t *window;
1166 ui_wnd_params_t params;
1167 ui_file_list_t *flist;
1168 ui_file_list_entry_attr_t attr;
1169 ui_file_list_entry_t *entry;
1170 ui_file_list_entry_t *cursor;
1171 errno_t rc;
1172
1173 rc = ui_create_disp(NULL, &ui);
1174 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1175
1176 ui_wnd_params_init(&params);
1177 params.caption = "Test";
1178
1179 rc = ui_window_create(ui, &params, &window);
1180 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1181
1182 rc = ui_file_list_create(window, true, &flist);
1183 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1184
1185 ui_file_list_entry_attr_init(&attr);
1186
1187 /* Append entry */
1188 attr.name = "a";
1189 attr.size = 1;
1190 rc = ui_file_list_entry_append(flist, &attr);
1191 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1192
1193 entry = ui_file_list_first(flist);
1194 PCUT_ASSERT_NOT_NULL(entry);
1195
1196 /* Cursor should be at the only entry */
1197 cursor = ui_file_list_get_cursor(flist);
1198 PCUT_ASSERT_EQUALS(entry, cursor);
1199
1200 ui_file_list_destroy(flist);
1201 ui_window_destroy(window);
1202 ui_destroy(ui);
1203}
1204
[11662bd]1205static void test_file_list_activate_req(ui_file_list_t *flist, void *arg)
1206{
1207 test_resp_t *resp = (test_resp_t *)arg;
1208
1209 resp->activate_req = true;
1210 resp->activate_req_file_list = flist;
1211}
1212
1213static void test_file_list_selected(ui_file_list_t *flist, void *arg,
1214 const char *fname)
1215{
1216 test_resp_t *resp = (test_resp_t *)arg;
1217
1218 resp->selected = true;
1219 resp->selected_file_list = flist;
1220 resp->selected_fname = fname;
1221}
1222
1223PCUT_EXPORT(file_list);
Note: See TracBrowser for help on using the repository browser.