|
|
#include "unity/unity.h" |
|
|
#include "zlib.h" |
|
|
|
|
|
#include <stdio.h> |
|
|
#include <stdlib.h> |
|
|
#include <string.h> |
|
|
#include <errno.h> |
|
|
|
|
|
#ifdef _WIN32 |
|
|
# include <io.h> |
|
|
# include <fcntl.h> |
|
|
# define CLOSE _close |
|
|
#else |
|
|
# include <unistd.h> |
|
|
# include <fcntl.h> |
|
|
# include <sys/types.h> |
|
|
# include <sys/stat.h> |
|
|
# define CLOSE close |
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static int make_temp_fd(void) { |
|
|
#ifdef _WIN32 |
|
|
FILE *fp = tmpfile(); |
|
|
TEST_ASSERT_NOT_NULL_MESSAGE(fp, "tmpfile() failed"); |
|
|
int fd = _dup(_fileno(fp)); |
|
|
|
|
|
fclose(fp); |
|
|
TEST_ASSERT_TRUE_MESSAGE(fd >= 0, "_dup() failed to duplicate file descriptor"); |
|
|
return fd; |
|
|
#else |
|
|
char templ[] = "gzdopen_test_XXXXXX"; |
|
|
int fd = mkstemp(templ); |
|
|
TEST_ASSERT_TRUE_MESSAGE(fd >= 0, "mkstemp() failed to create temporary file"); |
|
|
|
|
|
unlink(templ); |
|
|
return fd; |
|
|
#endif |
|
|
} |
|
|
|
|
|
void setUp(void) { |
|
|
|
|
|
} |
|
|
|
|
|
void tearDown(void) { |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
void test_gzdopen_fd_invalid_returns_null(void) { |
|
|
gzFile gz = gzdopen(-1, "rb"); |
|
|
TEST_ASSERT_NULL(gz); |
|
|
} |
|
|
|
|
|
|
|
|
void test_gzdopen_mode_missing_rwab_returns_null(void) { |
|
|
int fd = make_temp_fd(); |
|
|
gzFile gz = gzdopen(fd, "b"); |
|
|
TEST_ASSERT_NULL(gz); |
|
|
|
|
|
CLOSE(fd); |
|
|
} |
|
|
|
|
|
|
|
|
void test_gzdopen_mode_with_plus_returns_null(void) { |
|
|
int fd = make_temp_fd(); |
|
|
gzFile gz = gzdopen(fd, "w+"); |
|
|
TEST_ASSERT_NULL(gz); |
|
|
CLOSE(fd); |
|
|
} |
|
|
|
|
|
|
|
|
void test_gzdopen_read_mode_returns_valid_handle(void) { |
|
|
int fd = make_temp_fd(); |
|
|
gzFile gz = gzdopen(fd, "rb"); |
|
|
TEST_ASSERT_NOT_NULL(gz); |
|
|
|
|
|
int rc = gzclose(gz); |
|
|
TEST_ASSERT_EQUAL_INT(0, rc); |
|
|
} |
|
|
|
|
|
|
|
|
void test_gzdopen_append_mode_returns_valid_handle(void) { |
|
|
int fd = make_temp_fd(); |
|
|
gzFile gz = gzdopen(fd, "ab"); |
|
|
TEST_ASSERT_NOT_NULL(gz); |
|
|
int rc = gzclose(gz); |
|
|
TEST_ASSERT_EQUAL_INT(0, rc); |
|
|
} |
|
|
|
|
|
|
|
|
void test_gzdopen_read_mode_with_T_returns_null(void) { |
|
|
int fd = make_temp_fd(); |
|
|
gzFile gz = gzdopen(fd, "rbT"); |
|
|
TEST_ASSERT_NULL(gz); |
|
|
CLOSE(fd); |
|
|
} |
|
|
|
|
|
|
|
|
void test_gzdopen_write_mode_with_options_returns_valid_handle(void) { |
|
|
int fd = make_temp_fd(); |
|
|
|
|
|
gzFile gz = gzdopen(fd, "wb9h"); |
|
|
TEST_ASSERT_NOT_NULL(gz); |
|
|
int rc = gzclose(gz); |
|
|
TEST_ASSERT_EQUAL_INT(0, rc); |
|
|
} |
|
|
|
|
|
int main(void) { |
|
|
UNITY_BEGIN(); |
|
|
|
|
|
RUN_TEST(test_gzdopen_fd_invalid_returns_null); |
|
|
RUN_TEST(test_gzdopen_mode_missing_rwab_returns_null); |
|
|
RUN_TEST(test_gzdopen_mode_with_plus_returns_null); |
|
|
RUN_TEST(test_gzdopen_read_mode_returns_valid_handle); |
|
|
RUN_TEST(test_gzdopen_append_mode_returns_valid_handle); |
|
|
RUN_TEST(test_gzdopen_read_mode_with_T_returns_null); |
|
|
RUN_TEST(test_gzdopen_write_mode_with_options_returns_valid_handle); |
|
|
|
|
|
return UNITY_END(); |
|
|
} |