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

Last change on this file since f9c4c433 was f9c4c433, checked in by Jiri Svoboda <jiri@…>, 4 weeks ago

Create new file in Navigator (WIP)

  • Property mode set to 100644
File size: 30.3 KB
RevLine 
[11662bd]1/*
[f9c4c433]2 * Copyright (c) 2025 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
[f9c4c433]667/** ui_file_list_refresh() */
668PCUT_TEST(refresh)
669{
670 ui_t *ui;
671 ui_window_t *window;
672 ui_wnd_params_t params;
673 ui_file_list_t *flist;
674 ui_file_list_entry_t *entry;
675 char buf[L_tmpnam];
676 char *fname;
677 char *p;
678 errno_t rc;
679 FILE *f;
680 int rv;
681
682 /* Create name for temporary directory */
683 p = tmpnam(buf);
684 PCUT_ASSERT_NOT_NULL(p);
685
686 /* Create temporary directory */
687 rc = vfs_link_path(p, KIND_DIRECTORY, NULL);
688 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
689
690 rv = asprintf(&fname, "%s/%s", p, "a");
691 PCUT_ASSERT_TRUE(rv >= 0);
692
693 f = fopen(fname, "wb");
694 PCUT_ASSERT_NOT_NULL(f);
695
696 rv = fprintf(f, "X");
697 PCUT_ASSERT_TRUE(rv >= 0);
698
699 rv = fclose(f);
700 PCUT_ASSERT_INT_EQUALS(0, rv);
701
702 rc = ui_create_disp(NULL, &ui);
703 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
704
705 ui_wnd_params_init(&params);
706 params.caption = "Test";
707
708 rc = ui_window_create(ui, &params, &window);
709 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
710
711 rc = ui_file_list_create(window, true, &flist);
712 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
713
714 rc = ui_file_list_read_dir(flist, p);
715 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
716
717 PCUT_ASSERT_INT_EQUALS(2, ui_list_entries_cnt(flist->list));
718
719 entry = ui_file_list_first(flist);
720 PCUT_ASSERT_NOT_NULL(entry);
721 PCUT_ASSERT_STR_EQUALS("..", entry->name);
722
723 entry = ui_file_list_next(entry);
724 PCUT_ASSERT_NOT_NULL(entry);
725 PCUT_ASSERT_STR_EQUALS("a", entry->name);
726 PCUT_ASSERT_INT_EQUALS(1, entry->size);
727
728 rv = remove(fname);
729 PCUT_ASSERT_INT_EQUALS(0, rv);
730 free(fname);
731
732 rv = asprintf(&fname, "%s/%s", p, "b");
733 PCUT_ASSERT_TRUE(rv >= 0);
734
735 f = fopen(fname, "wb");
736 PCUT_ASSERT_NOT_NULL(f);
737
738 rv = fprintf(f, "X");
739 PCUT_ASSERT_TRUE(rv >= 0);
740
741 rv = fclose(f);
742 PCUT_ASSERT_INT_EQUALS(0, rv);
743
744 rc = ui_file_list_refresh(flist);
745 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
746
747 entry = ui_file_list_first(flist);
748 PCUT_ASSERT_NOT_NULL(entry);
749 PCUT_ASSERT_STR_EQUALS("..", entry->name);
750
751 entry = ui_file_list_next(entry);
752 PCUT_ASSERT_NOT_NULL(entry);
753 PCUT_ASSERT_STR_EQUALS("b", entry->name);
754 PCUT_ASSERT_INT_EQUALS(1, entry->size);
755
756 rv = remove(fname);
757 PCUT_ASSERT_INT_EQUALS(0, rv);
758 free(fname);
759
760 rv = remove(p);
761 PCUT_ASSERT_INT_EQUALS(0, rv);
762
763 ui_file_list_destroy(flist);
764
765 ui_window_destroy(window);
766 ui_destroy(ui);
767}
768
[7cf5ddb]769/** ui_file_list_list_compare compares two file list entries */
770PCUT_TEST(list_compare)
[11662bd]771{
772 ui_t *ui;
773 ui_window_t *window;
774 ui_wnd_params_t params;
775 ui_file_list_t *flist;
[7cf5ddb]776 ui_file_list_entry_t *a, *b;
[453f9645]777 ui_file_list_entry_attr_t attr;
[7cf5ddb]778 int rel;
[11662bd]779 errno_t rc;
780
781 rc = ui_create_disp(NULL, &ui);
782 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
783
784 ui_wnd_params_init(&params);
785 params.caption = "Test";
786
787 rc = ui_window_create(ui, &params, &window);
788 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
789
790 rc = ui_file_list_create(window, true, &flist);
791 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
792
[453f9645]793 ui_file_list_entry_attr_init(&attr);
[11662bd]794
[453f9645]795 attr.name = "a";
796 attr.size = 2;
797 rc = ui_file_list_entry_append(flist, &attr);
798 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
799
[7cf5ddb]800 attr.name = "b";
801 attr.size = 1;
[453f9645]802 rc = ui_file_list_entry_append(flist, &attr);
803 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
804
[7cf5ddb]805 a = ui_file_list_first(flist);
806 PCUT_ASSERT_NOT_NULL(a);
807 b = ui_file_list_next(a);
808 PCUT_ASSERT_NOT_NULL(b);
[453f9645]809
[7cf5ddb]810 /* a < b */
811 rel = ui_file_list_list_compare(a->entry, b->entry);
812 PCUT_ASSERT_TRUE(rel < 0);
[453f9645]813
[7cf5ddb]814 /* b > a */
815 rel = ui_file_list_list_compare(b->entry, a->entry);
816 PCUT_ASSERT_TRUE(rel > 0);
[453f9645]817
[7cf5ddb]818 /* a == a */
819 rel = ui_file_list_list_compare(a->entry, a->entry);
820 PCUT_ASSERT_INT_EQUALS(0, rel);
[453f9645]821
822 ui_file_list_destroy(flist);
823 ui_window_destroy(window);
824 ui_destroy(ui);
825}
826
[7cf5ddb]827/** ui_file_list_entry_attr_init() initializes file list attribute structure */
828PCUT_TEST(entry_attr_init)
829{
830 ui_file_list_entry_attr_t attr;
831
832 ui_file_list_entry_attr_init(&attr);
833 PCUT_ASSERT_NULL(attr.name);
834 PCUT_ASSERT_INT_EQUALS(0, attr.size);
835 PCUT_ASSERT_EQUALS(false, attr.isdir);
836 PCUT_ASSERT_INT_EQUALS(0, attr.svc);
837}
838
839/** ui_file_list_first() returns valid entry or @c NULL as appropriate */
840PCUT_TEST(first)
[453f9645]841{
842 ui_t *ui;
843 ui_window_t *window;
844 ui_wnd_params_t params;
845 ui_file_list_t *flist;
[7cf5ddb]846 ui_file_list_entry_t *entry;
[453f9645]847 ui_file_list_entry_attr_t attr;
848 errno_t rc;
849
850 rc = ui_create_disp(NULL, &ui);
851 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
852
853 ui_wnd_params_init(&params);
854 params.caption = "Test";
855
856 rc = ui_window_create(ui, &params, &window);
857 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
858
859 rc = ui_file_list_create(window, true, &flist);
860 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
861
862 ui_file_list_entry_attr_init(&attr);
863
[7cf5ddb]864 entry = ui_file_list_first(flist);
865 PCUT_ASSERT_NULL(entry);
866
867 /* Add one entry */
[453f9645]868 attr.name = "a";
869 attr.size = 1;
870 rc = ui_file_list_entry_append(flist, &attr);
871 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
872
[7cf5ddb]873 /* Now try getting it */
874 entry = ui_file_list_first(flist);
875 PCUT_ASSERT_NOT_NULL(entry);
876 PCUT_ASSERT_STR_EQUALS("a", entry->name);
877 PCUT_ASSERT_INT_EQUALS(1, entry->size);
878
879 /* Add another entry */
[453f9645]880 attr.name = "b";
881 attr.size = 2;
882 rc = ui_file_list_entry_append(flist, &attr);
883 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
884
[7cf5ddb]885 /* We should still get the first entry */
886 entry = ui_file_list_first(flist);
887 PCUT_ASSERT_NOT_NULL(entry);
888 PCUT_ASSERT_STR_EQUALS("a", entry->name);
889 PCUT_ASSERT_INT_EQUALS(1, entry->size);
[453f9645]890
891 ui_file_list_destroy(flist);
892 ui_window_destroy(window);
893 ui_destroy(ui);
894}
895
[7cf5ddb]896/** ui_file_list_last() returns valid entry or @c NULL as appropriate */
897PCUT_TEST(last)
[453f9645]898{
899 ui_t *ui;
900 ui_window_t *window;
901 ui_wnd_params_t params;
902 ui_file_list_t *flist;
[7cf5ddb]903 ui_file_list_entry_t *entry;
[453f9645]904 ui_file_list_entry_attr_t attr;
905 errno_t rc;
906
907 rc = ui_create_disp(NULL, &ui);
908 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
909
910 ui_wnd_params_init(&params);
911 params.caption = "Test";
912
913 rc = ui_window_create(ui, &params, &window);
914 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
915
916 rc = ui_file_list_create(window, true, &flist);
917 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
918
919 ui_file_list_entry_attr_init(&attr);
920
[7cf5ddb]921 entry = ui_file_list_last(flist);
922 PCUT_ASSERT_NULL(entry);
923
924 /* Add one entry */
[453f9645]925 attr.name = "a";
926 attr.size = 1;
927 rc = ui_file_list_entry_append(flist, &attr);
928 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
929
[7cf5ddb]930 /* Now try getting it */
931 entry = ui_file_list_last(flist);
932 PCUT_ASSERT_NOT_NULL(entry);
933 PCUT_ASSERT_STR_EQUALS("a", entry->name);
934 PCUT_ASSERT_INT_EQUALS(1, entry->size);
935
936 /* Add another entry */
[453f9645]937 attr.name = "b";
938 attr.size = 2;
939 rc = ui_file_list_entry_append(flist, &attr);
940 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
941
[7cf5ddb]942 /* We should get new entry now */
943 entry = ui_file_list_last(flist);
944 PCUT_ASSERT_NOT_NULL(entry);
945 attr.name = "b";
946 attr.size = 2;
947 PCUT_ASSERT_STR_EQUALS("b", entry->name);
948 PCUT_ASSERT_INT_EQUALS(2, entry->size);
[453f9645]949
950 ui_file_list_destroy(flist);
951 ui_window_destroy(window);
952 ui_destroy(ui);
953}
954
[7cf5ddb]955/** ui_file_list_next() returns the next entry or @c NULL as appropriate */
956PCUT_TEST(next)
[453f9645]957{
958 ui_t *ui;
959 ui_window_t *window;
960 ui_wnd_params_t params;
961 ui_file_list_t *flist;
[7cf5ddb]962 ui_file_list_entry_t *entry;
[453f9645]963 ui_file_list_entry_attr_t attr;
964 errno_t rc;
965
966 rc = ui_create_disp(NULL, &ui);
967 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
968
969 ui_wnd_params_init(&params);
970 params.caption = "Test";
971
972 rc = ui_window_create(ui, &params, &window);
973 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
974
975 rc = ui_file_list_create(window, true, &flist);
976 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
977
978 ui_file_list_entry_attr_init(&attr);
979
[7cf5ddb]980 /* Add one entry */
[453f9645]981 attr.name = "a";
982 attr.size = 1;
983 rc = ui_file_list_entry_append(flist, &attr);
984 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
985
[7cf5ddb]986 /* Now try getting its successor */
987 entry = ui_file_list_first(flist);
988 PCUT_ASSERT_NOT_NULL(entry);
[453f9645]989
[7cf5ddb]990 entry = ui_file_list_next(entry);
991 PCUT_ASSERT_NULL(entry);
[453f9645]992
[7cf5ddb]993 /* Add another entry */
994 attr.name = "b";
995 attr.size = 2;
[453f9645]996 rc = ui_file_list_entry_append(flist, &attr);
997 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
998
[7cf5ddb]999 /* Try getting the successor of first entry again */
1000 entry = ui_file_list_first(flist);
1001 PCUT_ASSERT_NOT_NULL(entry);
[453f9645]1002
[7cf5ddb]1003 entry = ui_file_list_next(entry);
1004 PCUT_ASSERT_NOT_NULL(entry);
1005 PCUT_ASSERT_STR_EQUALS("b", entry->name);
1006 PCUT_ASSERT_INT_EQUALS(2, entry->size);
[453f9645]1007
1008 ui_file_list_destroy(flist);
1009 ui_window_destroy(window);
1010 ui_destroy(ui);
1011}
1012
[7cf5ddb]1013/** ui_file_list_prev() returns the previous entry or @c NULL as appropriate */
1014PCUT_TEST(prev)
[453f9645]1015{
1016 ui_t *ui;
1017 ui_window_t *window;
1018 ui_wnd_params_t params;
1019 ui_file_list_t *flist;
[7cf5ddb]1020 ui_file_list_entry_t *entry;
[453f9645]1021 ui_file_list_entry_attr_t attr;
1022 errno_t rc;
1023
1024 rc = ui_create_disp(NULL, &ui);
1025 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1026
1027 ui_wnd_params_init(&params);
1028 params.caption = "Test";
1029
1030 rc = ui_window_create(ui, &params, &window);
1031 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1032
1033 rc = ui_file_list_create(window, true, &flist);
1034 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1035
1036 ui_file_list_entry_attr_init(&attr);
1037
[7cf5ddb]1038 /* Add one entry */
[453f9645]1039 attr.name = "a";
1040 attr.size = 1;
1041 rc = ui_file_list_entry_append(flist, &attr);
1042 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1043
[7cf5ddb]1044 /* Now try getting its predecessor */
1045 entry = ui_file_list_last(flist);
1046 PCUT_ASSERT_NOT_NULL(entry);
[453f9645]1047
[7cf5ddb]1048 entry = ui_file_list_prev(entry);
1049 PCUT_ASSERT_NULL(entry);
[453f9645]1050
[7cf5ddb]1051 /* Add another entry */
1052 attr.name = "b";
1053 attr.size = 2;
[453f9645]1054 rc = ui_file_list_entry_append(flist, &attr);
1055 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1056
[7cf5ddb]1057 /* Try getting the predecessor of the new entry */
1058 entry = ui_file_list_last(flist);
1059 PCUT_ASSERT_NOT_NULL(entry);
[453f9645]1060
[7cf5ddb]1061 entry = ui_file_list_prev(entry);
1062 PCUT_ASSERT_NOT_NULL(entry);
1063 PCUT_ASSERT_STR_EQUALS("a", entry->name);
1064 PCUT_ASSERT_INT_EQUALS(1, entry->size);
[453f9645]1065
1066 ui_file_list_destroy(flist);
1067 ui_window_destroy(window);
1068 ui_destroy(ui);
1069}
1070
1071/** ui_file_list_open_dir() opens a directory entry */
1072PCUT_TEST(open_dir)
1073{
1074 ui_t *ui;
1075 ui_window_t *window;
1076 ui_wnd_params_t params;
1077 ui_file_list_t *flist;
1078 ui_file_list_entry_t *entry;
1079 char buf[L_tmpnam];
1080 char *sdname;
1081 char *p;
1082 errno_t rc;
1083 int rv;
1084
1085 rc = ui_create_disp(NULL, &ui);
1086 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1087
1088 ui_wnd_params_init(&params);
1089 params.caption = "Test";
1090
1091 rc = ui_window_create(ui, &params, &window);
1092 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1093
1094 /* Create name for temporary directory */
1095 p = tmpnam(buf);
1096 PCUT_ASSERT_NOT_NULL(p);
1097
1098 /* Create temporary directory */
1099 rc = vfs_link_path(p, KIND_DIRECTORY, NULL);
1100 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1101
1102 rv = asprintf(&sdname, "%s/%s", p, "a");
1103 PCUT_ASSERT_TRUE(rv >= 0);
1104
1105 /* Create sub-directory */
1106 rc = vfs_link_path(sdname, KIND_DIRECTORY, NULL);
1107 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1108
1109 rc = ui_file_list_create(window, true, &flist);
1110 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1111
1112 rc = ui_file_list_read_dir(flist, p);
1113 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1114 PCUT_ASSERT_STR_EQUALS(p, flist->dir);
1115
[7cf5ddb]1116 PCUT_ASSERT_INT_EQUALS(2, ui_list_entries_cnt(flist->list));
[453f9645]1117
1118 entry = ui_file_list_first(flist);
1119 PCUT_ASSERT_NOT_NULL(entry);
1120 PCUT_ASSERT_STR_EQUALS("..", entry->name);
1121
1122 entry = ui_file_list_next(entry);
1123 PCUT_ASSERT_NOT_NULL(entry);
1124 PCUT_ASSERT_STR_EQUALS("a", entry->name);
1125 PCUT_ASSERT_TRUE(entry->isdir);
1126
1127 rc = ui_file_list_open_dir(flist, entry);
[11662bd]1128 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1129
1130 PCUT_ASSERT_STR_EQUALS(sdname, flist->dir);
1131
1132 ui_file_list_destroy(flist);
1133 ui_window_destroy(window);
1134 ui_destroy(ui);
1135
1136 rv = remove(sdname);
1137 PCUT_ASSERT_INT_EQUALS(0, rv);
1138
1139 rv = remove(p);
1140 PCUT_ASSERT_INT_EQUALS(0, rv);
1141
1142 free(sdname);
1143}
1144
[453f9645]1145/** ui_file_list_open_file() runs selected callback */
[11662bd]1146PCUT_TEST(open_file)
1147{
[453f9645]1148 ui_t *ui;
1149 ui_window_t *window;
1150 ui_wnd_params_t params;
1151 ui_file_list_t *flist;
1152 ui_file_list_entry_attr_t attr;
1153 errno_t rc;
1154 test_resp_t resp;
1155
1156 rc = ui_create_disp(NULL, &ui);
1157 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1158
1159 ui_wnd_params_init(&params);
1160 params.caption = "Test";
1161
1162 rc = ui_window_create(ui, &params, &window);
1163 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1164
1165 rc = ui_file_list_create(window, true, &flist);
1166 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1167
1168 ui_file_list_set_cb(flist, &test_cb, &resp);
1169
1170 attr.name = "hello.txt";
1171 attr.size = 1;
1172 rc = ui_file_list_entry_append(flist, &attr);
1173 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1174
1175 resp.selected = false;
1176 resp.selected_file_list = NULL;
1177 resp.selected_fname = NULL;
1178
1179 ui_file_list_open_file(flist, ui_file_list_first(flist));
1180 PCUT_ASSERT_TRUE(resp.selected);
1181 PCUT_ASSERT_EQUALS(flist, resp.selected_file_list);
1182 PCUT_ASSERT_STR_EQUALS("hello.txt", resp.selected_fname);
1183
1184 ui_file_list_destroy(flist);
1185 ui_window_destroy(window);
1186 ui_destroy(ui);
[11662bd]1187}
1188
1189/** ui_file_list_activate_req() sends activation request */
1190PCUT_TEST(activate_req)
1191{
[453f9645]1192 ui_t *ui;
1193 ui_window_t *window;
1194 ui_wnd_params_t params;
[11662bd]1195 ui_file_list_t *flist;
1196 errno_t rc;
1197 test_resp_t resp;
1198
[453f9645]1199 rc = ui_create_disp(NULL, &ui);
1200 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1201
1202 ui_wnd_params_init(&params);
1203 params.caption = "Test";
1204
1205 rc = ui_window_create(ui, &params, &window);
1206 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1207
1208 rc = ui_file_list_create(window, true, &flist);
[11662bd]1209 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1210
1211 ui_file_list_set_cb(flist, &test_cb, &resp);
1212
1213 resp.activate_req = false;
1214 resp.activate_req_file_list = NULL;
1215
1216 ui_file_list_activate_req(flist);
1217 PCUT_ASSERT_TRUE(resp.activate_req);
1218 PCUT_ASSERT_EQUALS(flist, resp.activate_req_file_list);
1219
1220 ui_file_list_destroy(flist);
[453f9645]1221 ui_window_destroy(window);
1222 ui_destroy(ui);
[11662bd]1223}
1224
1225/** ui_file_list_selected() runs selected callback */
1226PCUT_TEST(selected)
1227{
[453f9645]1228 ui_t *ui;
1229 ui_window_t *window;
1230 ui_wnd_params_t params;
[11662bd]1231 ui_file_list_t *flist;
1232 errno_t rc;
1233 test_resp_t resp;
1234
[453f9645]1235 rc = ui_create_disp(NULL, &ui);
1236 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1237
1238 ui_wnd_params_init(&params);
1239 params.caption = "Test";
1240
1241 rc = ui_window_create(ui, &params, &window);
1242 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1243
1244 rc = ui_file_list_create(window, true, &flist);
[11662bd]1245 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1246
1247 ui_file_list_set_cb(flist, &test_cb, &resp);
1248
1249 resp.selected = false;
1250 resp.selected_file_list = NULL;
1251 resp.selected_fname = NULL;
1252
1253 ui_file_list_selected(flist, "hello.txt");
1254 PCUT_ASSERT_TRUE(resp.selected);
1255 PCUT_ASSERT_EQUALS(flist, resp.selected_file_list);
1256 PCUT_ASSERT_STR_EQUALS("hello.txt", resp.selected_fname);
1257
1258 ui_file_list_destroy(flist);
[453f9645]1259 ui_window_destroy(window);
1260 ui_destroy(ui);
[11662bd]1261}
1262
[7cf5ddb]1263/** ui_file_list_get_cursor() returns the current cursor position */
1264PCUT_TEST(get_cursor)
1265{
1266 ui_t *ui;
1267 ui_window_t *window;
1268 ui_wnd_params_t params;
1269 ui_file_list_t *flist;
1270 ui_file_list_entry_attr_t attr;
1271 ui_file_list_entry_t *entry;
1272 ui_file_list_entry_t *cursor;
1273 errno_t rc;
1274
1275 rc = ui_create_disp(NULL, &ui);
1276 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1277
1278 ui_wnd_params_init(&params);
1279 params.caption = "Test";
1280
1281 rc = ui_window_create(ui, &params, &window);
1282 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1283
1284 rc = ui_file_list_create(window, true, &flist);
1285 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1286
1287 ui_file_list_entry_attr_init(&attr);
1288
1289 /* Append entry */
1290 attr.name = "a";
1291 attr.size = 1;
1292 rc = ui_file_list_entry_append(flist, &attr);
1293 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
1294
1295 entry = ui_file_list_first(flist);
1296 PCUT_ASSERT_NOT_NULL(entry);
1297
1298 /* Cursor should be at the only entry */
1299 cursor = ui_file_list_get_cursor(flist);
1300 PCUT_ASSERT_EQUALS(entry, cursor);
1301
1302 ui_file_list_destroy(flist);
1303 ui_window_destroy(window);
1304 ui_destroy(ui);
1305}
1306
[11662bd]1307static void test_file_list_activate_req(ui_file_list_t *flist, void *arg)
1308{
1309 test_resp_t *resp = (test_resp_t *)arg;
1310
1311 resp->activate_req = true;
1312 resp->activate_req_file_list = flist;
1313}
1314
1315static void test_file_list_selected(ui_file_list_t *flist, void *arg,
1316 const char *fname)
1317{
1318 test_resp_t *resp = (test_resp_t *)arg;
1319
1320 resp->selected = true;
1321 resp->selected_file_list = flist;
1322 resp->selected_fname = fname;
1323}
1324
1325PCUT_EXPORT(file_list);
Note: See TracBrowser for help on using the repository browser.