summaryrefslogtreecommitdiff
path: root/libs/zip/test/test_append.c
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrikboy@gmail.com>2025-08-23 11:18:44 +0200
committerAldrik Ramaekers <aldrikboy@gmail.com>2025-08-23 11:18:44 +0200
commit359422c97cce93bbb27051f9df3efb45bd0b9052 (patch)
tree2e352bb852a25390d40d45e199f835d218ad497f /libs/zip/test/test_append.c
parent8ea59863c5d13e68e080cf7612047ea4c655292c (diff)
settings file writing
Diffstat (limited to 'libs/zip/test/test_append.c')
-rw-r--r--libs/zip/test/test_append.c106
1 files changed, 106 insertions, 0 deletions
diff --git a/libs/zip/test/test_append.c b/libs/zip/test/test_append.c
new file mode 100644
index 0000000..09b08ba
--- /dev/null
+++ b/libs/zip/test/test_append.c
@@ -0,0 +1,106 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <zip.h>
+
+#include "minunit.h"
+
+#if defined(_WIN32) || defined(_WIN64)
+#include <io.h>
+
+#define MKTEMP _mktemp
+#define UNLINK _unlink
+#else
+#define MKTEMP mkstemp
+#define UNLINK unlink
+#endif
+
+static char ZIPNAME[L_tmpnam + 1] = {0};
+static int total_entries = 0;
+
+#define TESTDATA1 "Some test data 1...\0"
+
+void test_setup(void) {
+ strncpy(ZIPNAME, "z-XXXXXX\0", L_tmpnam);
+ MKTEMP(ZIPNAME);
+
+ struct zip_t *zip = zip_open(ZIPNAME, ZIP_DEFAULT_COMPRESSION_LEVEL, 'w');
+
+ zip_entry_open(zip, "test/test-1.txt");
+ zip_entry_write(zip, TESTDATA1, strlen(TESTDATA1));
+ zip_entry_close(zip);
+ ++total_entries;
+
+ zip_close(zip);
+}
+
+void test_teardown(void) { UNLINK(ZIPNAME); }
+
+#define TESTDATA2 "Some test data 2...\0"
+#define CRC32DATA2 2532008468
+
+MU_TEST(test_append) {
+ struct zip_t *zip = zip_open(ZIPNAME, ZIP_DEFAULT_COMPRESSION_LEVEL, 'a');
+ mu_check(zip != NULL);
+
+ mu_assert_int_eq(0, zip_entry_open(zip, "test\\test-2.txt"));
+ mu_assert_int_eq(0, strcmp(zip_entry_name(zip), "test/test-2.txt"));
+ mu_assert_int_eq(total_entries, zip_entry_index(zip));
+ mu_assert_int_eq(0, zip_entry_write(zip, TESTDATA2, strlen(TESTDATA2)));
+ mu_assert_int_eq(strlen(TESTDATA2), zip_entry_size(zip));
+ mu_check(CRC32DATA2 == zip_entry_crc32(zip));
+ mu_assert_int_eq(0, zip_entry_close(zip));
+ ++total_entries;
+ zip_close(zip);
+
+ zip = zip_open(ZIPNAME, ZIP_DEFAULT_COMPRESSION_LEVEL, 'a');
+ mu_assert_int_eq(0, zip_entry_open(zip, "test\\empty/"));
+ mu_assert_int_eq(0, strcmp(zip_entry_name(zip), "test/empty/"));
+ mu_assert_int_eq(0, zip_entry_size(zip));
+ mu_assert_int_eq(0, zip_entry_crc32(zip));
+ mu_assert_int_eq(total_entries, zip_entry_index(zip));
+ mu_assert_int_eq(0, zip_entry_close(zip));
+ ++total_entries;
+ zip_close(zip);
+
+ zip = zip_open(ZIPNAME, ZIP_DEFAULT_COMPRESSION_LEVEL, 'a');
+ mu_assert_int_eq(0, zip_entry_open(zip, "empty/"));
+ mu_assert_int_eq(0, strcmp(zip_entry_name(zip), "empty/"));
+ mu_assert_int_eq(0, zip_entry_size(zip));
+ mu_assert_int_eq(0, zip_entry_crc32(zip));
+ mu_assert_int_eq(total_entries, zip_entry_index(zip));
+ mu_assert_int_eq(0, zip_entry_close(zip));
+ ++total_entries;
+
+ mu_assert_int_eq(0, zip_entry_open(zip, "dotfiles/.test"));
+ mu_assert_int_eq(0, strcmp(zip_entry_name(zip), "dotfiles/.test"));
+ mu_assert_int_eq(0, zip_entry_size(zip));
+ mu_assert_int_eq(0, zip_entry_crc32(zip));
+ mu_assert_int_eq(0, zip_entry_write(zip, TESTDATA2, strlen(TESTDATA2)));
+ mu_assert_int_eq(strlen(TESTDATA2), zip_entry_size(zip));
+ mu_check(CRC32DATA2 == zip_entry_crc32(zip));
+ mu_assert_int_eq(total_entries, zip_entry_index(zip));
+ mu_assert_int_eq(0, zip_entry_close(zip));
+ ++total_entries;
+
+ mu_assert_int_eq(total_entries, zip_entries_total(zip));
+
+ zip_close(zip);
+}
+
+MU_TEST_SUITE(test_append_suite) {
+ MU_SUITE_CONFIGURE(&test_setup, &test_teardown);
+
+ MU_RUN_TEST(test_append);
+}
+
+#define UNUSED(x) (void)x
+
+int main(int argc, char *argv[]) {
+ UNUSED(argc);
+ UNUSED(argv);
+
+ MU_RUN_SUITE(test_append_suite);
+ MU_REPORT();
+ return MU_EXIT_CODE;
+}