X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=t%2Futils%2Fstrbuf_test.c;h=0acb1de0521849d6533a347fd8a8858a106ce72b;hp=9e96b984a2a764d5d322fc60e1065e2ee9cb2b6b;hb=edba65afec8c547fb6c02346eda68595ce9a5839;hpb=17e0c267962be6f91ca0847e9f5feefc8b2d4907 diff --git a/t/utils/strbuf_test.c b/t/utils/strbuf_test.c index 9e96b98..0acb1de 100644 --- a/t/utils/strbuf_test.c +++ b/t/utils/strbuf_test.c @@ -55,15 +55,17 @@ teardown(void) * tests */ -START_TEST(test_empty) +START_TEST(test_null) { sdb_strbuf_t *b = NULL; va_list ap; /* check that methods don't crash */ sdb_strbuf_destroy(b); - sdb_strbuf_skip(b, 0); - sdb_strbuf_skip(b, 10); + sdb_strbuf_skip(b, 0, 0); + sdb_strbuf_skip(b, 0, 10); + sdb_strbuf_skip(b, 10, 10); + sdb_strbuf_clear(b); /* check that methods return an error */ fail_unless(sdb_strbuf_vappend(b, "test", ap) < 0, @@ -85,6 +87,28 @@ START_TEST(test_empty) } END_TEST +START_TEST(test_empty) +{ + sdb_strbuf_t *b = sdb_strbuf_create(0); + const char *data; + size_t len; + + /* check that methods don't crash */ + sdb_strbuf_skip(b, 1, 1); + sdb_strbuf_clear(b); + sdb_strbuf_chomp(b); + + data = sdb_strbuf_string(b); + fail_unless(data && (*data == '\0'), + "sdb_strbuf_string() = '%s'; expected: ''", data); + len = sdb_strbuf_len(b); + fail_unless(len == 0, + "sdb_strbuf_len() = %zu; expected: 0", len); + + sdb_strbuf_destroy(b); +} +END_TEST + START_TEST(test_sdb_strbuf_create) { sdb_strbuf_t *s; @@ -207,6 +231,36 @@ START_TEST(test_sdb_strbuf_sprintf) } END_TEST +START_TEST(test_incremental) +{ + ssize_t n; + size_t i; + + sdb_strbuf_destroy(buf); + buf = sdb_strbuf_create(1024); + + /* fill buffer one by one; leave room for nul-byte */ + for (i = 0; i < 1023; ++i) { + n = sdb_strbuf_append(buf, "."); + fail_unless(n == 1, "sdb_strbuf_append() = %zi; expected: 1", n); + } + + /* write another byte; this has to trigger a resize */ + n = sdb_strbuf_append(buf, "."); + fail_unless(n == 1, "sdb_strbuf_append() = %zi; expected: 1", n); + + /* write more bytes; this should trigger at least one more resize but + * that's an implementation detail */ + for (i = 0; i < 1024; ++i) { + n = sdb_strbuf_append(buf, "."); + fail_unless(n == 1, "sdb_strbuf_append() = %zi; expected: 1", n); + } + + n = (ssize_t)sdb_strbuf_len(buf); + fail_unless(n == 2048, "sdb_strbuf_len() = %zi; expectd: 2048", n); +} +END_TEST + static struct { const char *input; size_t size; @@ -336,17 +390,28 @@ END_TEST /* input is "1234567890" */ static struct { + size_t offset; size_t n; const char *expected; size_t expected_len; } skip_golden_data[] = { - { 0, "1234567890", 10 }, - { 1, "234567890", 9 }, - { 2, "34567890", 8 }, - { 9, "0", 1 }, - { 10, "", 0 }, - { 11, "", 0 }, - { 100, "", 0 }, + { 0, 0, "1234567890", 10 }, + { 0, 1, "234567890", 9 }, + { 0, 2, "34567890", 8 }, + { 0, 9, "0", 1 }, + { 0, 10, "", 0 }, + { 0, 11, "", 0 }, + { 0, 100, "", 0 }, + { 1, 0, "1234567890", 10 }, + { 1, 1, "134567890", 9 }, + { 1, 2, "14567890", 8 }, + { 8, 1, "123456780", 9 }, + { 8, 2, "12345678", 8 }, + { 8, 3, "12345678", 8 }, + { 9, 1, "123456789", 9 }, + { 9, 2, "123456789", 9 }, + { 10, 1, "1234567890", 10 }, + { 10, 2, "1234567890", 10 }, }; START_TEST(test_sdb_strbuf_skip) @@ -359,7 +424,8 @@ START_TEST(test_sdb_strbuf_skip) size_t n; sdb_strbuf_sprintf(buf, input); - sdb_strbuf_skip(buf, skip_golden_data[i].n); + sdb_strbuf_skip(buf, skip_golden_data[i].offset, + skip_golden_data[i].n); n = sdb_strbuf_len(buf); fail_unless(n == skip_golden_data[i].expected_len, @@ -381,6 +447,27 @@ START_TEST(test_sdb_strbuf_skip) } END_TEST +START_TEST(test_sdb_strbuf_clear) +{ + const char *data; + size_t len; + + sdb_strbuf_append(buf, "abc"); + len = sdb_strbuf_len(buf); + fail_unless(len != 0, + "sdb_strbuf_len() = %zu; expected: != 0", len); + + sdb_strbuf_clear(buf); + len = sdb_strbuf_len(buf); + fail_unless(len == 0, + "sdb_strbuf_len() = %zu (after clear); expected: 0", len); + + data = sdb_strbuf_string(buf); + fail_unless(*data == '\0', + "sdb_strbuf_string() = '%s' (after clear); expected: ''", data); +} +END_TEST + static struct { const char *input; const char *expected; @@ -440,6 +527,7 @@ util_strbuf_suite(void) TCase *tc; tc = tcase_create("empty"); + tcase_add_test(tc, test_null); tcase_add_test(tc, test_empty); suite_add_tcase(s, tc); @@ -448,10 +536,12 @@ util_strbuf_suite(void) tcase_add_test(tc, test_sdb_strbuf_create); tcase_add_test(tc, test_sdb_strbuf_append); tcase_add_test(tc, test_sdb_strbuf_sprintf); + tcase_add_test(tc, test_incremental); tcase_add_test(tc, test_sdb_strbuf_memcpy); tcase_add_test(tc, test_sdb_strbuf_memappend); tcase_add_test(tc, test_sdb_strbuf_chomp); tcase_add_test(tc, test_sdb_strbuf_skip); + tcase_add_test(tc, test_sdb_strbuf_clear); tcase_add_test(tc, test_sdb_strbuf_string); tcase_add_test(tc, test_sdb_strbuf_len); suite_add_tcase(s, tc);