diff options
Diffstat (limited to 'libs/zip/test/test_write.c')
| -rw-r--r-- | libs/zip/test/test_write.c | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/libs/zip/test/test_write.c b/libs/zip/test/test_write.c new file mode 100644 index 0000000..802d5d0 --- /dev/null +++ b/libs/zip/test/test_write.c @@ -0,0 +1,115 @@ +#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 char WFILE[L_tmpnam + 1] = {0}; + +void test_setup(void) { + strncpy(ZIPNAME, "z-XXXXXX\0", L_tmpnam); + strncpy(WFILE, "w-XXXXXX\0", L_tmpnam); + + MKTEMP(ZIPNAME); + MKTEMP(WFILE); +} + +void test_teardown(void) { + UNLINK(WFILE); + UNLINK(ZIPNAME); +} + +#define CRC32DATA1 2220805626 +#define TESTDATA1 "Some test data 1...\0" + +MU_TEST(test_write) { + struct zip_t *zip = zip_open(ZIPNAME, ZIP_DEFAULT_COMPRESSION_LEVEL, 'w'); + mu_check(zip != NULL); + + mu_assert_int_eq(0, zip_entry_open(zip, "test/test-1.txt")); + mu_assert_int_eq(0, zip_entry_write(zip, TESTDATA1, strlen(TESTDATA1))); + mu_assert_int_eq(0, strcmp(zip_entry_name(zip), "test/test-1.txt")); + mu_assert_int_eq(0, zip_entry_index(zip)); + mu_assert_int_eq(strlen(TESTDATA1), zip_entry_size(zip)); + mu_check(CRC32DATA1 == zip_entry_crc32(zip)); + mu_assert_int_eq(0, zip_entry_close(zip)); + + mu_assert_int_eq(1, zip_is64(zip)); + + zip_close(zip); +} + +MU_TEST(test_write_utf) { + struct zip_t *zip = zip_open(ZIPNAME, ZIP_DEFAULT_COMPRESSION_LEVEL, 'w'); + mu_check(zip != NULL); + + mu_assert_int_eq(0, zip_entry_open(zip, "тест/Если-б-не-было-войны.txt")); + mu_assert_int_eq(0, zip_entry_write(zip, TESTDATA1, strlen(TESTDATA1))); + mu_assert_int_eq( + 0, strcmp(zip_entry_name(zip), "тест/Если-б-не-было-войны.txt")); + mu_assert_int_eq(0, zip_entry_index(zip)); + mu_assert_int_eq(strlen(TESTDATA1), zip_entry_size(zip)); + mu_check(CRC32DATA1 == zip_entry_crc32(zip)); + mu_assert_int_eq(0, zip_entry_close(zip)); + + mu_assert_int_eq(1, zip_is64(zip)); + + zip_close(zip); +} + +MU_TEST(test_fwrite) { + const char *filename = WFILE; + FILE *stream = NULL; + struct zip_t *zip = NULL; +#if defined(_MSC_VER) + if (0 != fopen_s(&stream, filename, "w+")) +#else + if (!(stream = fopen(filename, "w+"))) +#endif + { + // Cannot open filename + mu_fail("Cannot open filename\n"); + } + fwrite(TESTDATA1, sizeof(char), strlen(TESTDATA1), stream); + mu_assert_int_eq(0, fclose(stream)); + + zip = zip_open(ZIPNAME, 9, 'w'); + mu_check(zip != NULL); + mu_assert_int_eq(0, zip_entry_open(zip, WFILE)); + mu_assert_int_eq(0, zip_entry_fwrite(zip, WFILE)); + mu_assert_int_eq(0, zip_entry_close(zip)); + mu_assert_int_eq(1, zip_is64(zip)); + + zip_close(zip); +} + +MU_TEST_SUITE(test_write_suite) { + MU_SUITE_CONFIGURE(&test_setup, &test_teardown); + + MU_RUN_TEST(test_write); + MU_RUN_TEST(test_write_utf); + MU_RUN_TEST(test_fwrite); +} + +#define UNUSED(x) (void)x + +int main(int argc, char *argv[]) { + UNUSED(argc); + UNUSED(argv); + + MU_RUN_SUITE(test_write_suite); + MU_REPORT(); + return MU_EXIT_CODE; +}
\ No newline at end of file |
