test_write.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <zip.h>
  4. #include "minunit.h"
  5. #if defined(_WIN32) || defined(_WIN64)
  6. #define MKTEMP _mktemp
  7. #define UNLINK _unlink
  8. #else
  9. #define MKTEMP mkstemp
  10. #define UNLINK unlink
  11. #endif
  12. static char ZIPNAME[L_tmpnam + 1] = {0};
  13. static char WFILE[L_tmpnam + 1] = {0};
  14. void test_setup(void) {
  15. strncpy(ZIPNAME, "z-XXXXXX\0", L_tmpnam);
  16. strncpy(WFILE, "w-XXXXXX\0", L_tmpnam);
  17. MKTEMP(ZIPNAME);
  18. MKTEMP(WFILE);
  19. }
  20. void test_teardown(void) {
  21. UNLINK(WFILE);
  22. UNLINK(ZIPNAME);
  23. }
  24. #define CRC32DATA1 2220805626
  25. #define TESTDATA1 "Some test data 1...\0"
  26. MU_TEST(test_write) {
  27. struct zip_t *zip = zip_open(ZIPNAME, ZIP_DEFAULT_COMPRESSION_LEVEL, 'w');
  28. mu_check(zip != NULL);
  29. mu_assert_int_eq(0, zip_entry_open(zip, "test/test-1.txt"));
  30. mu_assert_int_eq(0, zip_entry_write(zip, TESTDATA1, strlen(TESTDATA1)));
  31. mu_assert_int_eq(0, strcmp(zip_entry_name(zip), "test/test-1.txt"));
  32. mu_assert_int_eq(0, zip_entry_index(zip));
  33. mu_assert_int_eq(strlen(TESTDATA1), zip_entry_size(zip));
  34. mu_check(CRC32DATA1 == zip_entry_crc32(zip));
  35. mu_assert_int_eq(0, zip_entry_close(zip));
  36. mu_assert_int_eq(1, zip_is64(zip));
  37. zip_close(zip);
  38. }
  39. MU_TEST(test_write_utf) {
  40. struct zip_t *zip = zip_open(ZIPNAME, ZIP_DEFAULT_COMPRESSION_LEVEL, 'w');
  41. mu_check(zip != NULL);
  42. mu_assert_int_eq(0, zip_entry_open(zip, "тест/Если-б-не-было-войны.txt"));
  43. mu_assert_int_eq(0, zip_entry_write(zip, TESTDATA1, strlen(TESTDATA1)));
  44. mu_assert_int_eq(
  45. 0, strcmp(zip_entry_name(zip), "тест/Если-б-не-было-войны.txt"));
  46. mu_assert_int_eq(0, zip_entry_index(zip));
  47. mu_assert_int_eq(strlen(TESTDATA1), zip_entry_size(zip));
  48. mu_check(CRC32DATA1 == zip_entry_crc32(zip));
  49. mu_assert_int_eq(0, zip_entry_close(zip));
  50. mu_assert_int_eq(1, zip_is64(zip));
  51. zip_close(zip);
  52. }
  53. MU_TEST(test_fwrite) {
  54. const char *filename = WFILE;
  55. FILE *stream = NULL;
  56. struct zip_t *zip = NULL;
  57. #if defined(_MSC_VER)
  58. if (0 != fopen_s(&stream, filename, "w+"))
  59. #else
  60. if (!(stream = fopen(filename, "w+")))
  61. #endif
  62. {
  63. // Cannot open filename
  64. mu_fail("Cannot open filename\n");
  65. }
  66. fwrite(TESTDATA1, sizeof(char), strlen(TESTDATA1), stream);
  67. mu_assert_int_eq(0, fclose(stream));
  68. zip = zip_open(ZIPNAME, 9, 'w');
  69. mu_check(zip != NULL);
  70. mu_assert_int_eq(0, zip_entry_open(zip, WFILE));
  71. mu_assert_int_eq(0, zip_entry_fwrite(zip, WFILE));
  72. mu_assert_int_eq(0, zip_entry_close(zip));
  73. mu_assert_int_eq(1, zip_is64(zip));
  74. zip_close(zip);
  75. }
  76. MU_TEST_SUITE(test_write_suite) {
  77. MU_SUITE_CONFIGURE(&test_setup, &test_teardown);
  78. MU_RUN_TEST(test_write);
  79. MU_RUN_TEST(test_write_utf);
  80. MU_RUN_TEST(test_fwrite);
  81. }
  82. #define UNUSED(x) (void)x
  83. int main(int argc, char *argv[]) {
  84. UNUSED(argc);
  85. UNUSED(argv);
  86. MU_RUN_SUITE(test_write_suite);
  87. MU_REPORT();
  88. return MU_EXIT_CODE;
  89. }