Mercurial > molko
annotate tests/test-dir.c @ 570:aaf518c87628
util: introduce dir module
author | David Demelier <markand@malikania.fr> |
---|---|
date | Thu, 09 Mar 2023 20:30:00 +0100 |
parents | |
children | f937857336f3 |
rev | line source |
---|---|
570
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * test-dir.c -- test directory iterator |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 * Copyright (c) 2020-2023 David Demelier <markand@malikania.fr> |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #include <mlk/util/dir.h> |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 #include <dt.h> |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 static void |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 test_basics(void) |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 { |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 struct mlk_dir_iter iter; |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 int a = 0, b = 0, c = 0; |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 DT_EQ_INT(mlk_dir_open(&iter, DIRECTORY "/dir"), 0); |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 /* Order is not guaranteed. */ |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 while (mlk_dir_next(&iter)) { |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 if (strcmp(iter.entry, "a.txt") == 0) |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 a = 1; |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 if (strcmp(iter.entry, "b.txt") == 0) |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 b = 1; |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 if (strcmp(iter.entry, "c.txt") == 0) |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 c = 1; |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 } |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 DT_ASSERT(a); |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 DT_ASSERT(b); |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 DT_ASSERT(c); |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 /* At this point, everything should be empty. */ |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 DT_EQ_PTR(iter.entry, NULL); |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 DT_EQ_PTR(iter.handle, NULL); |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 } |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 static void |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 test_break(void) |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 { |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 /* |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 * This test should ensure there are no memory leaks because we break |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 * the loop while the iterator hasn't completed. |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 */ |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 struct mlk_dir_iter iter; |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 DT_EQ_INT(mlk_dir_open(&iter, DIRECTORY "/dir"), 0); |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 DT_EQ_INT(mlk_dir_next(&iter), 1); |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 mlk_dir_finish(&iter); |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 /* At this point, everything should be empty. */ |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 DT_EQ_PTR(iter.entry, NULL); |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 DT_EQ_PTR(iter.handle, NULL); |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 } |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 int |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 main(void) |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 { |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 DT_RUN(test_basics); |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 DT_RUN(test_break); |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 DT_SUMMARY(); |
aaf518c87628
util: introduce dir module
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 } |