Add tests for getfields and gettokens

This commit is contained in:
Nils O. Selåsdal
2016-03-09 00:06:59 +01:00
parent fae2a60203
commit c3c9f25dc6
2 changed files with 201 additions and 1 deletions
+3 -1
View File
@@ -34,6 +34,7 @@ extern Suite *ticket_lock_suite(void);
extern Suite *restart_counter_suite(void); extern Suite *restart_counter_suite(void);
extern Suite *iomux_suite(void); extern Suite *iomux_suite(void);
extern Suite *iomux_signal_suite(void); extern Suite *iomux_signal_suite(void);
extern Suite *string_suite(void);
static suite_func suites[] = { static suite_func suites[] = {
bitvec_suite, bitvec_suite,
@@ -62,7 +63,8 @@ static suite_func suites[] = {
ticket_lock_suite, ticket_lock_suite,
restart_counter_suite, restart_counter_suite,
iomux_suite, iomux_suite,
iomux_signal_suite iomux_signal_suite,
string_suite
}; };
+198
View File
@@ -0,0 +1,198 @@
#include <check.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include "ucore/string.h"
#include "ucore/utils.h"
START_TEST (test_getfields)
char str[] = "a;b;c";
char *letters[5] = {NULL};
int rc = getfields(str, letters, 5, 0, ";");
ck_assert_int_eq(rc, 3);
ck_assert_str_eq("a", letters[0]);
ck_assert_str_eq("b", letters[1]);
ck_assert_str_eq("c", letters[2]);
END_TEST
START_TEST (test_getfields_consecutive)
char str[] = "a;;b;c;;;";
char *letters[7] = {NULL};
int rc = getfields(str, letters, 5, 0, ";");
ck_assert_int_eq(rc, 5);
// This result is rather silly, but it's
// how getfields works with mflag=0
ck_assert_str_eq("a", letters[0]);
ck_assert_str_eq("", letters[1]);
ck_assert_str_eq("b", letters[2]);
ck_assert_str_eq("c", letters[3]);
ck_assert_str_eq(";;", letters[4]);
END_TEST
START_TEST (test_getfields_mflag)
char str[] = "a;b;c";
char *letters[5] = {NULL};
int rc = getfields(str, letters, 5, 1, ";");
ck_assert_int_eq(rc, 3);
ck_assert_str_eq("a", letters[0]);
ck_assert_str_eq("b", letters[1]);
ck_assert_str_eq("c", letters[2]);
END_TEST
START_TEST (test_getfields_consecutive_mflag)
char str[] = "a;;b;c;;;";
char *letters[7] = {NULL};
int rc = getfields(str, letters, 7, 1, ";");
ck_assert_int_eq(rc, 3);
// This result is rather silly, but it's
// how getfields works with mflag=0
ck_assert_str_eq("a", letters[0]);
ck_assert_str_eq("b", letters[1]);
ck_assert_str_eq("c", letters[2]);
END_TEST
START_TEST (test_getfields_too_many)
char str[] = "a\r\nb\r\nc\r\nd\r\ne";
char *letters[4] = {NULL};
int rc = getfields(str, letters, 4, 0, "\r\n");
ck_assert_int_eq(rc, 4);
// This result is rather silly, but it's
// how getfields works with mflag=0
ck_assert_str_eq("a", letters[0]);
ck_assert_str_eq("", letters[1]);
ck_assert_str_eq("b", letters[2]);
ck_assert_str_eq("\nc\r\nd\r\ne", letters[3]);
END_TEST
START_TEST (test_getfields_too_many_mflag)
char str[] = "a\r\nb\r\nc\r\nd\r\ne";
char *letters[4] = {NULL};
int rc = getfields(str, letters, 4, 1, "\r\n");
ck_assert_int_eq(rc, 4);
ck_assert_str_eq("a", letters[0]);
ck_assert_str_eq("b", letters[1]);
ck_assert_str_eq("c", letters[2]);
ck_assert_str_eq("d\r\ne", letters[3]);
END_TEST
START_TEST (test_getfields_empty)
char str[] = "";
char *letters[4] = {NULL};
int rc = getfields(str, letters, 4, 0, ";\r\n");
ck_assert_int_eq(rc, 1);
ck_assert_str_eq("", letters[0]);
rc = getfields(str, letters, 4, 1, ";\r\n");
ck_assert_int_eq(rc, 0);
END_TEST
START_TEST (test_gettokens)
char str[] = "a;b;c";
char *letters[5] = {NULL};
int rc = gettokens(str, letters, 5,";");
ck_assert_int_eq(rc, 3);
ck_assert_str_eq("a", letters[0]);
ck_assert_str_eq("b", letters[1]);
ck_assert_str_eq("c", letters[2]);
END_TEST
START_TEST (test_gettokens_consecutive)
char str[] = "a;;;b;;c;";
char *letters[5] = {NULL};
int rc = gettokens(str, letters, 5,";");
ck_assert_int_eq(rc, 3);
ck_assert_str_eq("a", letters[0]);
ck_assert_str_eq("b", letters[1]);
ck_assert_str_eq("c", letters[2]);
END_TEST
START_TEST (test_gettokens_empty)
char str[] = "";
char *letters[5] = {NULL};
int rc = gettokens(str, letters, 5,";");
ck_assert_int_eq(rc, 0);
END_TEST
START_TEST (test_gettokens_quotes)
char str[] = "\"abc\";d;\"e \"";
char *letters[5] = {NULL};
int rc = gettokens(str, letters, 5,";");
ck_assert_int_eq(rc, 3);
ck_assert_str_eq("abc", letters[0]);
ck_assert_str_eq("d", letters[1]);
ck_assert_str_eq("e ", letters[2]);
END_TEST
Suite *string_suite(void)
{
Suite *s = suite_create("string");
TCase *tc = tcase_create("string");
tcase_add_test(tc, test_getfields);
tcase_add_test(tc, test_getfields_consecutive);
tcase_add_test(tc, test_getfields_mflag);
tcase_add_test(tc, test_getfields_consecutive_mflag);
tcase_add_test(tc, test_getfields_too_many);
tcase_add_test(tc, test_getfields_too_many_mflag);
tcase_add_test(tc, test_getfields_empty);
tcase_add_test(tc, test_gettokens);
tcase_add_test(tc, test_gettokens_consecutive);
tcase_add_test(tc, test_gettokens_empty);
tcase_add_test(tc, test_gettokens_quotes);
suite_add_tcase(s, tc);
return s;
}