| | #include "unity/unity.h" |
| | #include "zlib.h" |
| | #include "gzguts.h" |
| |
|
| | #include <stdlib.h> |
| | #include <string.h> |
| |
|
| | |
| | extern void test_gz_reset(gz_statep state); |
| |
|
| | void setUp(void) { |
| | |
| | } |
| |
|
| | void tearDown(void) { |
| | |
| | } |
| |
|
| | |
| | static char *dup_cstr(const char *s) { |
| | size_t len = strlen(s) + 1; |
| | char *p = (char *)malloc(len); |
| | if (p) memcpy(p, s, len); |
| | return p; |
| | } |
| |
|
| | void test_gz_reset_write_mode_resets_general_fields(void) { |
| | gz_state state; |
| | memset(&state, 0, sizeof(state)); |
| |
|
| | |
| | state.mode = GZ_WRITE; |
| | state.x.have = 17; |
| | state.seek = 1; |
| | state.x.pos = 12345; |
| | state.strm.avail_in = 42; |
| | state.err = Z_STREAM_ERROR; |
| | state.msg = dup_cstr("old msg"); |
| | state.reset = 99; |
| | state.want = 777; |
| | state.level = 3; |
| | state.strategy = Z_RLE; |
| | state.direct = 0; |
| | char *saved_path = dup_cstr("dummy/path"); |
| | state.path = saved_path; |
| |
|
| | test_gz_reset(&state); |
| |
|
| | |
| | TEST_ASSERT_EQUAL(0u, state.x.have); |
| | TEST_ASSERT_EQUAL_INT(0, state.seek); |
| | TEST_ASSERT_EQUAL_UINT64(0, state.x.pos); |
| | TEST_ASSERT_EQUAL_UINT(0u, state.strm.avail_in); |
| | TEST_ASSERT_EQUAL_INT(Z_OK, state.err); |
| | TEST_ASSERT_NULL(state.msg); |
| |
|
| | |
| | TEST_ASSERT_EQUAL_INT(0, state.reset); |
| |
|
| | |
| | TEST_ASSERT_EQUAL_INT(GZ_WRITE, state.mode); |
| | TEST_ASSERT_EQUAL_UINT(777u, state.want); |
| | TEST_ASSERT_EQUAL_INT(3, state.level); |
| | TEST_ASSERT_EQUAL_INT(Z_RLE, state.strategy); |
| | TEST_ASSERT_EQUAL_INT(0, state.direct); |
| | TEST_ASSERT_TRUE(state.path == saved_path); |
| |
|
| | |
| | free(saved_path); |
| | } |
| |
|
| | void test_gz_reset_read_mode_resets_read_fields(void) { |
| | gz_state state; |
| | memset(&state, 0, sizeof(state)); |
| |
|
| | |
| | state.mode = GZ_READ; |
| | state.eof = 1; |
| | state.past = 1; |
| | state.how = COPY; |
| | state.direct = 1; |
| | state.x.have = 5; |
| | state.seek = 1; |
| | state.x.pos = 999; |
| | state.strm.avail_in = 7; |
| | state.err = Z_BUF_ERROR; |
| | state.msg = NULL; |
| | state.want = 2048; |
| | char *saved_path = dup_cstr("read/path"); |
| | state.path = saved_path; |
| |
|
| | test_gz_reset(&state); |
| |
|
| | |
| | TEST_ASSERT_EQUAL_INT(0, state.eof); |
| | TEST_ASSERT_EQUAL_INT(0, state.past); |
| | TEST_ASSERT_EQUAL_INT(LOOK, state.how); |
| |
|
| | |
| | TEST_ASSERT_EQUAL(0u, state.x.have); |
| | TEST_ASSERT_EQUAL_INT(0, state.seek); |
| | TEST_ASSERT_EQUAL_UINT64(0, state.x.pos); |
| | TEST_ASSERT_EQUAL_UINT(0u, state.strm.avail_in); |
| | TEST_ASSERT_EQUAL_INT(Z_OK, state.err); |
| | TEST_ASSERT_NULL(state.msg); |
| |
|
| | |
| | TEST_ASSERT_EQUAL_INT(GZ_READ, state.mode); |
| | TEST_ASSERT_EQUAL_INT(1, state.direct); |
| | TEST_ASSERT_EQUAL_UINT(2048u, state.want); |
| | TEST_ASSERT_TRUE(state.path == saved_path); |
| |
|
| | |
| | free(saved_path); |
| | } |
| |
|
| | void test_gz_reset_clears_mem_error_without_free(void) { |
| | gz_state state; |
| | memset(&state, 0, sizeof(state)); |
| |
|
| | state.mode = GZ_WRITE; |
| | state.err = Z_MEM_ERROR; |
| | |
| | |
| | state.msg = (char *)"no-free"; |
| | state.x.have = 3; |
| | state.seek = 1; |
| | state.x.pos = 55; |
| | state.strm.avail_in = 11; |
| |
|
| | test_gz_reset(&state); |
| |
|
| | |
| | TEST_ASSERT_EQUAL_INT(Z_OK, state.err); |
| | TEST_ASSERT_NULL(state.msg); |
| |
|
| | |
| | TEST_ASSERT_EQUAL(0u, state.x.have); |
| | TEST_ASSERT_EQUAL_INT(0, state.seek); |
| | TEST_ASSERT_EQUAL_UINT64(0, state.x.pos); |
| | TEST_ASSERT_EQUAL_UINT(0u, state.strm.avail_in); |
| | } |
| |
|
| | int main(void) { |
| | UNITY_BEGIN(); |
| | RUN_TEST(test_gz_reset_write_mode_resets_general_fields); |
| | RUN_TEST(test_gz_reset_read_mode_resets_read_fields); |
| | RUN_TEST(test_gz_reset_clears_mem_error_without_free); |
| | return UNITY_END(); |
| | } |