| | #include "../../unity/unity.h" |
| | #include <stdlib.h> |
| | #include <string.h> |
| | #include <stdio.h> |
| |
|
| | void setUp(void) { |
| | |
| | } |
| |
|
| | void tearDown(void) { |
| | |
| | } |
| |
|
| | |
| | static struct line* alloc_zeroed_line(void) { |
| | struct line* l = (struct line*)malloc(sizeof(struct line)); |
| | TEST_ASSERT_NOT_NULL(l); |
| | memset(l, 0, sizeof(*l)); |
| | return l; |
| | } |
| |
|
| | void test_freeline_null_pointer_ok(void) { |
| | |
| | freeline(NULL); |
| | |
| | TEST_ASSERT_TRUE(1); |
| | } |
| |
|
| | void test_freeline_frees_and_nulls_members(void) { |
| | struct line* l = alloc_zeroed_line(); |
| |
|
| | |
| | l->nfields = 3; |
| | l->nfields_allocated = 3; |
| | l->fields = (struct field*)malloc(sizeof(struct field) * 3); |
| | TEST_ASSERT_NOT_NULL(l->fields); |
| |
|
| | |
| | for (int i = 0; i < 3; i++) { |
| | l->fields[i].beg = NULL; |
| | l->fields[i].len = 0; |
| | } |
| |
|
| | l->buf.buffer = (char*)malloc(16); |
| | TEST_ASSERT_NOT_NULL(l->buf.buffer); |
| | memset(l->buf.buffer, 'X', 16); |
| | l->buf.length = 16; |
| |
|
| | freeline(l); |
| |
|
| | |
| | TEST_ASSERT_NULL(l->fields); |
| | TEST_ASSERT_NULL(l->buf.buffer); |
| | TEST_ASSERT_EQUAL_INT(3, (int)l->nfields); |
| | TEST_ASSERT_EQUAL_INT(3, (int)l->nfields_allocated); |
| | TEST_ASSERT_EQUAL_INT(16, (int)l->buf.length); |
| |
|
| | free(l); |
| | } |
| |
|
| | void test_freeline_idempotent_on_same_line(void) { |
| | struct line* l = alloc_zeroed_line(); |
| |
|
| | l->fields = (struct field*)malloc(sizeof(struct field)); |
| | TEST_ASSERT_NOT_NULL(l->fields); |
| | l->nfields = 1; |
| | l->nfields_allocated = 1; |
| |
|
| | l->buf.buffer = (char*)malloc(8); |
| | TEST_ASSERT_NOT_NULL(l->buf.buffer); |
| | memset(l->buf.buffer, 'Y', 8); |
| | l->buf.length = 8; |
| |
|
| | |
| | freeline(l); |
| | TEST_ASSERT_NULL(l->fields); |
| | TEST_ASSERT_NULL(l->buf.buffer); |
| |
|
| | |
| | freeline(l); |
| | TEST_ASSERT_NULL(l->fields); |
| | TEST_ASSERT_NULL(l->buf.buffer); |
| |
|
| | free(l); |
| | } |
| |
|
| | void test_freeline_only_fields_allocated(void) { |
| | struct line* l = alloc_zeroed_line(); |
| |
|
| | l->fields = (struct field*)malloc(sizeof(struct field) * 2); |
| | TEST_ASSERT_NOT_NULL(l->fields); |
| | l->nfields = 2; |
| | l->nfields_allocated = 2; |
| |
|
| | |
| | l->buf.buffer = NULL; |
| | l->buf.length = 5; |
| |
|
| | freeline(l); |
| |
|
| | TEST_ASSERT_NULL(l->fields); |
| | TEST_ASSERT_NULL(l->buf.buffer); |
| | TEST_ASSERT_EQUAL_INT(2, (int)l->nfields); |
| | TEST_ASSERT_EQUAL_INT(2, (int)l->nfields_allocated); |
| | TEST_ASSERT_EQUAL_INT(5, (int)l->buf.length); |
| |
|
| | free(l); |
| | } |
| |
|
| | void test_freeline_only_buffer_allocated(void) { |
| | struct line* l = alloc_zeroed_line(); |
| |
|
| | l->fields = NULL; |
| | l->nfields = 0; |
| | l->nfields_allocated = 0; |
| |
|
| | l->buf.buffer = (char*)malloc(32); |
| | TEST_ASSERT_NOT_NULL(l->buf.buffer); |
| | memset(l->buf.buffer, 'Z', 32); |
| | l->buf.length = 32; |
| |
|
| | freeline(l); |
| |
|
| | TEST_ASSERT_NULL(l->fields); |
| | TEST_ASSERT_NULL(l->buf.buffer); |
| | TEST_ASSERT_EQUAL_INT(0, (int)l->nfields); |
| | TEST_ASSERT_EQUAL_INT(0, (int)l->nfields_allocated); |
| | TEST_ASSERT_EQUAL_INT(32, (int)l->buf.length); |
| |
|
| | free(l); |
| | } |
| |
|
| | int main(void) { |
| | UNITY_BEGIN(); |
| |
|
| | RUN_TEST(test_freeline_null_pointer_ok); |
| | RUN_TEST(test_freeline_frees_and_nulls_members); |
| | RUN_TEST(test_freeline_idempotent_on_same_line); |
| | RUN_TEST(test_freeline_only_fields_allocated); |
| | RUN_TEST(test_freeline_only_buffer_allocated); |
| |
|
| | return UNITY_END(); |
| | } |