aboutsummaryrefslogtreecommitdiff
path: root/lib/io/test/dir_iterator.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/io/test/dir_iterator.c')
-rw-r--r--lib/io/test/dir_iterator.c47
1 files changed, 46 insertions, 1 deletions
diff --git a/lib/io/test/dir_iterator.c b/lib/io/test/dir_iterator.c
index 1f04b96..48a57ec 100644
--- a/lib/io/test/dir_iterator.c
+++ b/lib/io/test/dir_iterator.c
@@ -9,6 +9,7 @@
#include "io/dir_iterator.h"
#include "sqfs/error.h"
#include "util/test.h"
+#include "sqfs/io.h"
#include "compat.h"
static int compare_entries(const void *a, const void *b)
@@ -19,11 +20,22 @@ static int compare_entries(const void *a, const void *b)
return strcmp((*lhs)->name, (*rhs)->name);
}
+static int compare_files(const void *a, const void *b)
+{
+ const sqfs_istream_t *const *lhs = a;
+ const sqfs_istream_t *const *rhs = b;
+
+ return strcmp((*lhs)->get_filename(*lhs),
+ (*rhs)->get_filename(*rhs));
+}
+
int main(int argc, char **argv)
{
dir_iterator_t *dir, *suba, *subb, *subc, *sub;
sqfs_dir_entry_t *dent, *ent[6];
- size_t i;
+ sqfs_istream_t *files[3];
+ char buffer[128];
+ size_t i, j;
int ret;
(void)argc; (void)argv;
@@ -330,6 +342,8 @@ int main(int argc, char **argv)
free(ent[i]);
/* sub iterator c */
+ j = 0;
+
for (i = 0; i < 5; ++i) {
ret = subc->next(subc, &ent[i]);
TEST_NOT_NULL(ent[0]);
@@ -339,15 +353,22 @@ int main(int argc, char **argv)
ret = subc->open_subdir(subc, &sub);
TEST_NULL(sub);
TEST_EQUAL_I(ret, SQFS_ERROR_NOT_DIR);
+
+ TEST_ASSERT(j < 3);
+ ret = subc->open_file_ro(subc, &(files[j++]));
+ TEST_EQUAL_I(ret, 0);
}
}
+ TEST_EQUAL_UI(j, 3);
+
ret = subc->next(subc, &dent);
TEST_NULL(dent);
TEST_ASSERT(ret > 0);
subc = sqfs_drop(subc);
qsort(ent, 5, sizeof(ent[0]), compare_entries);
+ qsort(files, 3, sizeof(files[0]), compare_files);
TEST_STR_EQUAL(ent[0]->name, ".");
TEST_ASSERT(S_ISDIR(ent[0]->mode));
@@ -363,5 +384,29 @@ int main(int argc, char **argv)
for (i = 0; i < 5; ++i)
free(ent[i]);
+ TEST_STR_EQUAL(files[0]->get_filename(files[0]), "file_c0");
+ TEST_STR_EQUAL(files[1]->get_filename(files[1]), "file_c1");
+ TEST_STR_EQUAL(files[2]->get_filename(files[2]), "file_c2");
+
+ ret = sqfs_istream_read(files[0], buffer, sizeof(buffer));
+ TEST_EQUAL_I(ret, 12);
+ buffer[ret] = '\0';
+ TEST_STR_EQUAL(buffer, "test string\n");
+ ret = sqfs_istream_read(files[0], buffer, sizeof(buffer));
+ TEST_EQUAL_I(ret, 0);
+
+ ret = sqfs_istream_read(files[1], buffer, sizeof(buffer));
+ TEST_EQUAL_I(ret, 0);
+
+ ret = sqfs_istream_read(files[2], buffer, sizeof(buffer));
+ TEST_EQUAL_I(ret, 10);
+ buffer[ret] = '\0';
+ TEST_STR_EQUAL(buffer, "你好!\n");
+ ret = sqfs_istream_read(files[2], buffer, sizeof(buffer));
+ TEST_EQUAL_I(ret, 0);
+
+ for (i = 0; i < j; ++i)
+ sqfs_drop(files[i]);
+
return EXIT_SUCCESS;
}